Dependencies 如何列出/下载debian包的递归依赖项?

Dependencies 如何列出/下载debian包的递归依赖项?,dependencies,package,debian,Dependencies,Package,Debian,我需要列出/下载debian包的所有递归依赖项 假设我需要安装包a.deb,它依赖于包b.deb,包b.deb又依赖于包c.deb 我需要下载所有依赖递归的包,这样它们就可以安装在其他机器上,而无需任何internet访问 谢谢。您可以使用apt rdepends递归获取包的所有依赖项。通过将结果管道化到grep,您可以只获得包名,而忽略不需要的信息 示例: $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]' cowsay perl libbz2-1

我需要列出/下载debian包的所有递归依赖项

假设我需要安装包a.deb,它依赖于包b.deb,包b.deb又依赖于包c.deb

我需要下载所有依赖递归的包,这样它们就可以安装在其他机器上,而无需任何internet访问


谢谢。

您可以使用
apt rdepends
递归获取包的所有依赖项。通过将结果管道化到grep,您可以只获得包名,而忽略不需要的信息

示例

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'
cowsay
perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
perl-base
perl-modules
输出

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'
cowsay
perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
perl-base
perl-modules
然后,您可以使用
apt get download$package
下载这些软件包,并在您的机器上脱机安装它们

默认情况下,
apt
安装建议,因此您可能希望像这样运行
apt rdepends

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends cowsay
由于默认情况下,
apt rdepends
遵循并仅显示依赖项,因此预先部署。

如前所述-安装apt rdepends软件包,然后运行此程序

$ apt-rdepends gcc | awk '$1 ~ /^Depends:/{print $2}' | xargs apt-get download
这一行将递归地获取所有依赖项,并查看第二个管道,将按名称从stdio下载所有包,这一行-


awk$1~/^取决于:/{print$2}
。打印出包的名称。如果您另外运行这些命令,您就会明白我的意思。

由于某种原因,
apt rdepends
对我不起作用(在搜索“docker engine”包时,它错过了对
libltdl7
的依赖,后者是在
docker engine 1.11.1-0
中引入的)UPD可能是因为默认情况下,
apt rdepends
不遵循并且不列出建议。并且不遵循虚拟包

因此,我提出了以下命令套件

递归地列出依赖项 (可选)安装这些依赖项 这稍微延伸了问题的范围,但似乎符合问题的意图

您需要为刚下载的软件包建立索引。这是从下载所有.deb的同一文件夹中完成的:

$ dpkg-scanpackages . | gzip -9c > Packages.gz
然后只需将该文件夹(all.deb+Packages.gz文件)复制到无法访问Internet的目标系统,并将该文件夹添加到APT源代码列表中

$ echo "deb file:<your folder here> ./" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update

一旦你知道了你需要的依赖项,你可以编辑/etc/apt/sources.list并添加/etc/apt/preferences.d/somename.pref,如果离线的机器有一个更新的Ubuntu版本(我试过了,它对旧版本不起作用)。请看:medium.com/@george.shuklin/…这太棒了!非常感谢!我想补充一点,为了在我的Ubuntu18.04新安装上运行,我必须对安装进行以下更改:echo“deb[allow unsecure=yes]file:./”| sudo tee-a/etc/apt/sources.list和sudo apt get install--allow unauthenticated docker engine您还可以使用“deb[trusted=yes]file:/your/folder/path/here/”因此,我不需要在apt命令中使用“-allow unauthenticated”(允许未经验证)。为什么要使用
——不使用pre-dependents
?我认为需要安装pre Dependes。@Steelywhing you's right:我相应地编辑了答案。谢谢相关的:
$ sudo apt-get install docker-engine