从 apt-get 传递的 ignore-depends 选项未按预期运行

从 apt-get 传递的 ignore-depends 选项未按预期运行

使用 apt-get 安装的包对 java 有依赖关系,我想忽略它。

$ apt-cache depends some-package
some-package
  PreDepends: <java7-runtime-headless>
    default-jre-headless
    openjdk-7-jre-headless
  PreDepends: unzip
  ...

$ sudo apt-get install some-package -o Dpkg::Options::='--ignore-depends=default-jre-headless,openjdk-7-jre-headless,java7-runtime-headless'

The following extra packages will be installed:
ca-certificates-java fontconfig-config fonts-dejavu-core java-common
libasyncns0 libcups2 libflac8 libfontconfig1 libjpeg-turbo8 libjpeg8
liblcms2-2 libnspr4 libnss3 libnss3-nssdb libogg0 libpulse0 libsctp1
libsndfile1 libvorbis0a libvorbisenc2 lksctp-tools openjdk-7-jre-headless
tzdata-java

我采用了散弹枪式的方法ignore-depends来尝试覆盖参数上的各种包,但openjdk-7-jre-headless似乎总是被拉进来。还尝试过添加 PreDepends 来排除。

我怎样才能阻止安装 openjdk?

编辑似乎安装是由以下操作触发的predepends

依赖和预依赖有什么区别?

Pre-Depends

This field is like Depends, except that it also forces dpkg to 
complete installation of the packages named before even starting the
installation of the package which declares the pre-dependency

https://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies讨论解决这个问题的方法:

你可以像这样更改 deb 包的依赖项:

  1. 解压 deb:(ar x golden-linux.deb将会创建三个文件:debian-binary control.tar.gz data.tar.gz)
  2. 解压控制档案:(tar xzf control.tar.gz将创建:postinst postrm preinst prerm md5sums 控制)
  3. 修复控制中的依赖关系(使用文本编辑器)
  4. 重新打包 control.tar.gz:tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz
  5. 重新打包 deb:ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz

所以我假设这是我需要做的事情才能让它发挥作用......

答案1

简短的回答是,大卫·福斯特的评论 -It's not possible to install a package without its pre-dependencies because they're required to install the package. In contrast, regular dependencies are required to use the package

更多信息:

Debian 软件包中的二进制依赖项

Pre-Depends

This field is like Depends, except that it also forces dpkg to 
complete installation of the packages named before even starting the
installation of the package which declares the pre-dependency

解决方法Pre-Depends通过修改deb 包讨论 1 种方法:

  1. 解压 deb:(ar x some-package-ver.deb将创建文件,例如:debian-binary control.tar.gz data.tar.gz)。您可以使用以下方式获取存档apt-get download some-package
  2. 解压控制档案:(FILES=$(tar xzvf control.tar.gz | egrep -v '^./$)将创建:postinst postrm preinst prerm control 等,但排除./可能在某些档案中列出的内容)
  3. 修复控件中的依赖关系(例如删除Pre-Depends行 - sed -r -i '/^Pre-Depends:.+/d control
  4. 重新打包 control.tar.gz:tar zcf control.tar.gz $FILES
  5. 重新打包 deb:ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
  6. 无需安装Pre-Dependsdpkg -i newpackage.deb
  7. 如果您想从包中解析常规依赖项,则可以在之后使用 apt-get 解析并安装这些依赖项:apt-get install -f如果您提供了跳过这些依赖项的选项。

我发现将 Java 依赖项从 移动到Pre-Depends允许Depends我使用 dpkg 安装包ignore-depends,但如果我在此之后运行apt-get install,依赖项仍会在稍后阶段得到解析和安装。

相关内容