回答

回答

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

makepkg -s

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

pacman -Sp <package_name> > /myPackages.list

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

  1. 有没有简单的方法可以做到这一点?
  2. 我是否必须为每个需要的依赖包手动输入命令?
  3. 可以编写一个 shell 脚本来实现这一点吗?如果可以,我该怎么做?

答案1

回答

有一个程序叫协议树与安装一起吃豆人包。
用于显示指定包的依赖关系树。

你可以像这样使用它:

pactree -u <package_name>

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 内置命令:打印参数stdout(附加新行)。

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

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

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

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

您熟悉该线路的其余部分。

笔记

pacman -Sp如果你从 AUR 中获取包,将会报告错误。

编辑 2018.09.17

正如杰德BPpactree现在在pacman-contrib包裹。

相关内容