使用 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 包的依赖项:
- 解压 deb:(
ar x golden-linux.deb
将会创建三个文件:debian-binary control.tar.gz data.tar.gz) - 解压控制档案:(
tar xzf control.tar.gz
将创建:postinst postrm preinst prerm md5sums 控制) - 修复控制中的依赖关系(使用文本编辑器)
- 重新打包 control.tar.gz:
tar c {post,pre}{inst,rm} md5sums control | gzip -c > control.tar.gz
- 重新打包 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
更多信息:
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 种方法:
- 解压 deb:(
ar x some-package-ver.deb
将创建文件,例如:debian-binary control.tar.gz data.tar.gz)。您可以使用以下方式获取存档apt-get download some-package
- 解压控制档案:(
FILES=$(tar xzvf control.tar.gz | egrep -v '^./$)
将创建:postinst postrm preinst prerm control 等,但排除./
可能在某些档案中列出的内容) - 修复控件中的依赖关系(例如删除
Pre-Depends
行 -sed -r -i '/^Pre-Depends:.+/d control
) - 重新打包 control.tar.gz:
tar zcf control.tar.gz $FILES
- 重新打包 deb:
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
- 无需安装
Pre-Depends
:dpkg -i newpackage.deb
。 - 如果您想从包中解析常规依赖项,则可以在之后使用 apt-get 解析并安装这些依赖项:
apt-get install -f
如果您提供了跳过这些依赖项的选项。
我发现将 Java 依赖项从 移动到Pre-Depends
允许Depends
我使用 dpkg 安装包ignore-depends
,但如果我在此之后运行apt-get install
,依赖项仍会在稍后阶段得到解析和安装。