如何让 apt 识别已安装的 tar 包?

如何让 apt 识别已安装的 tar 包?

我已经安装了 Oracle Java。我希望能够删除 OpenJDK,但在尝试这样做时apt想要安装另一个版本的 Java。

我如何配置apt才能知道我已经安装了第三方 Java,以便我可以删除这些 OpenJDK 软件包?

答案1

创建一个虚拟包使用当量。简而言之:

  1. 为虚拟包创建控制文件。该程序equiv-controls创建一个模板。给它一个文件名。

    equivs-control oracle-jre.control
    
  2. 编辑控制文件。至少将该Package:行设置为sun-java6-jre(已失效的 Sun/Oracle Java 包的名称)。你还应该写一个有意义的Description:,设置节为java。声明该包Provides: java-6-runtime和其他版本(这是其他程序所依赖的虚拟包,可以通过检查openjdk-6-jre提供了什么以及各个程序需要什么来找到它)。该文件可能如下所示:

    Section: java
    Priority: optional
    Standards-version: 3.9.2
    Package: sun-6-jre
    Provides: java6-runtime, java-runtime
    Description: dummy package when Oracle Java is installed
    
  3. 使用您创建的控制文件创建 Debian 软件包。该软件包仅用于依赖项,不安装任何文件。

    equivs-build oracle-jre.control
    
  4. 安装生成的 deb 包。

    sudo dpkg -i sun-6-jre_1.0_all.deb
    

答案2

我不相信有一种方法可以做到这一点。您可以代替使用为您提供.debJava 包的PPA 存储库这个脚本尝试一下,它将滚动您自己的 Java 安装的 .deb 包。

这个脚本叫做OAB-Java, 具体来说oab-java.sh

例子

下载脚本:

cd ~/
wget https://github.com/flexiondotorg/oab-java6/raw/0.2.8/oab-java.sh -O oab-java.sh
chmod +x oab-java.sh
sudo ./oab-java.sh

该脚本采用以下开关:

  • -7:构建 oracle-java7 软件包而不是 sun-java6
  • -c:从 中删除预先存在的软件包/var/local/oab/deb和源/var/local/oab/src
  • -k:使用指定的现有密钥而不是生成一个
  • -s:如果包已经存在则跳过构建
  • -t:指定要从上游 Debian 打包脚本使用的 Java 版本标记。
  • -h: 这个有帮助

要准备并安装 Oracle 6.deb文件:

$ sudo ./oab-java.sh
$ sudo apt-get install sun-java6-jre

要准备并安装 Oracle 7.deb文件:

$ sudo ./oab-java.sh -7
$ sudo apt-get install oracle-java7-jre

答案3

@Gilles 给出的上述答案在一段时间内对我来说非常有效。但对于 Java 8 和更新版本的 Ubuntu,它不起作用。以下是oracle-jre.control我现在使用的文件。

Section: java
Priority: optional
Standards-version: 3.9.2
Package: sun-8-jre
Provides: default-jre, openjdk-8-jre, openjfx
Description: Dummy package when Oracle Java is installed

答案4

您可以使用 apt-mark 保留某个包。

抓住:

sudo apt-mark hold package_name

取消按住:

sudo apt-mark unhold package_name

这将防止 apt 触摸它。

相关内容