我正在尝试下载 AUR 驱动程序以安装在新安装的系统上(没有互联网连接),但是当我输入
makepkg -s
它需要安装其他软件包。由于此系统没有互联网,我想从另一台有互联网连接的 PC 下载这些软件包(及其所有依赖项),然后安装在新系统上。我在 archlinux 网站上找到了有关离线安装软件包的教程。使用
pacman -Sp <package_name> > /myPackages.list
将创建我在 中指定的所有包的列表package_name
。但是我也需要它们的所有依赖项。所以我想知道:
- 有没有简单的方法可以做到这一点?
- 我是否必须为每个需要的依赖包手动输入命令?
- 可以编写一个 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
正如杰德BP,pactree
现在在pacman-contrib包裹。