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

Bha*_*ali 29 debian dependencies package

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

假设我需要安装包a.deb,它取决于包b.deb,并且包b.deb再次取决于包c.deb.

我需要下载所有递归依赖包,以便它们可以安装在其他机器上,无需任何Internet访问.

谢谢.

Yan*_* Vo 49

由于某些原因,apt-rdepends对我来说不起作用(当搜索'docker-engine'包时,它错过了libltdl7引入的依赖关系docker-engine 1.11.1-0).

所以我提出了以下命令套件.

递归列出依赖项

$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u
Run Code Online (Sandbox Code Playgroud)

(你显然必须apt-rdepends在你想要分析的包的最后一行改变)

这里的关键是<your-package-here>选项.不幸的是,你无法指定你想要的内容(或者我没有找到方法)所以你需要关闭所有不需要的依赖项以保持"依赖".它有点冗长,难以记住!

从apt-cache手册页:

默认情况下,depends和rdepends打印所有依赖项

下载这些依赖项

因此,为了下载这些依赖项,请运行以下命令,将它们下载到当前工作目录中:

$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u)
Run Code Online (Sandbox Code Playgroud)

(可选)安装这些依赖项

这略微延伸了问题,但似乎与问题的意图相符.

您需要构建刚刚下载的包的索引.这是从所有.deb下载的文件夹中完成的:

$ dpkg-scanpackages . | gzip -9c > Packages.gz
Run Code Online (Sandbox Code Playgroud)

然后只需将该文件夹(所有.deb + Packages.gz文件)复制到无法访问Internet的目标系统,并将该文件夹添加到APT源列表中.

$ echo "deb file:<your folder here> ./" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

Etvoilà

在没有Internet访问的系统上,我可以安装一个包(在我的例子中是Docker)及其依赖项:

$ sudo apt-get install docker-engine
Run Code Online (Sandbox Code Playgroud)

  • 这很棒!非常感谢!我想补充一点,我必须进行以下更改才能使安装在我的 Ubuntu 18.04 全新安装上运行: echo "deb [allow-insecure=yes] file:&lt;您的文件夹&gt; ./" | sudo tee -a /etc/apt/sources.list 和 sudo apt-get install --allow-unauthenticated docker-engine (2认同)
  • 为什么使用`--no-pre-depends`?我认为需要安装 pre-depends。 (2认同)

Meh*_*des 7

您可以使用apt-rdepends递归获取包的所有依赖项.通过将结果传递给grep,您只能拥有包名称并省略不需要的信息.

示例:

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用apt-get download $package它们下载这些软件包并在您的计算机上脱机安装