我正在尝试安装一个不带其依赖项的 apt 包(具体来说,不带 Perl 的 git 可以减少 Docker 镜像大小 >50MB)。
我能想到两个选择:
- 安装没有此特定依赖项的软件包
- 安装包含所有依赖项的软件包,然后删除依赖项
我调查了这两种方法,但都没有奏效。所以我的问题是:有没有一种干净的方法可以做到这一点?
以下是我迄今为止尝试过的。
1. 安装没有特定依赖项的软件包
最多建议推荐
apt download git
dpkg --ignore-depends=perl -i git*.deb
不幸的是,这并没有安装其他依赖项,因此git clone
由于缺少而失败libcurl
。
因此,为了解决这个问题,一些其他建议建议使用
apt-get -f install
之后,但是这个命令尝试安装 Perl,这正是我想要避免的。
好的,所以我告诉你不要用以下方法接触 Perl:
apt-mark hold perl
但随后apt-get -f install
尝试删除 git。
好的,所以我告诉你不要管 git:
apt-mark hold git
但随后就apt-get -f install
放弃了,因为它无法安装 Perl,也无法卸载 git。故事结束了。
2. 安装软件包及其所有依赖项,然后删除依赖项
我使用 Perl 安装了 git:
apt install -y git
然后删除 Perl
dpkg -P --force-depends perl
但这不会删除 Perl 带来的其他依赖项,例如 perl-modules。因此尝试失败。
答案1
您可以尝试使用equivs
构建的包,使其看起来依赖项已安装。
链接
- https://debian-handbook.info/browse/en-US/stable/sect.building-first-package.html
- https://wiki.debian.org/Packaging/HackingDependencies
- https://grayson.sh/blogs/faking-dependencies-with-the-equivs-package
- https://sleeplessbeastie.eu/2018/11/05/how-to-create-artificial-package-to-circumvent-dependency-checking/
- https://shallowsky.com/blog/linux/install/blocking-deb-dependencies.html