递归列出arch linux中包的依赖关系


3

我正在尝试下载AUR的驱动程序以安装在新安装的系统上(没有互联网连接),但是当我输入时

makepkg -s

它需要安装其他软件包。由于这个系统没有互联网,我想从另一台具有互联网连接的PC下载这些软件包(及其所有依赖项),然后在新系统上安装。我在archlinux网站上找到了一个关于离线安装软件包的教程。运用

pacman -Sp <package_name> > /myPackages.list

将创建我指定的所有包的列表package_name。但是我也需要他们所有的依赖。所以我想知道:

  1. 有一个简单的方法吗?
  2. 我是否必须为每个所需的依赖包手动输入命令?
  3. 可以编写shell脚本来完成此任务吗?如果是的话,我该怎么做?

Answers:


2

回答

有一个名为pactree的程序与pacman软件包一起安装。
它用于显示指定包的依赖关系树。

你可以像这样使用它:

pactree -u <package_name>

但是,与pactree不同pacman -Sp <package_name>,它只接受一个包名。

一个解决方案

有几种方法可以解决这个问题,但从你的问题判断,我不觉得你熟悉shell脚本(对不起,如果我弄错了)所以我将详细解释一个解决方案:

echo "package_name1 package_name2 ..." | xargs -n 1 pactree -u | sort -u | xargs -n 1 pacman -Sp > /myPackages.list

echo- Shell builtin命令:将参数打印到stdout(附加新行)。

|- 管道:将stdout左侧命令重定向到stdin右侧命令。

xargs- 外部命令:获取stdin并将其附加到给定命令的参数列表中。
-n 1- xargsoption:对每个参数执行一次给定的命令stdin

pactree - 外部命令:显示给定包的依赖关系树。
-u- pactree选项:而不是图形,在单独的行中打印每个依赖包。

sort- 外部命令:对文本进行排序stdin并将其写入stdout
-u- sort选项:从排序中删除重复项stdin
(这是必需的,因为某些包可能具有相同的依赖关系。)

您熟悉其余部分。

注意

pacman -Sp 如果您从AUR提供包裹,将报告错误。

编辑17.09.2018

正如JdeBP所指出的,pactree现在是在pacman-contrib包中。


1
这个答案已经过时了。 unix.stackexchange.com/questions/469545
JdeBP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.