Tor*_*xed 10 arch-linux pacman dependencies software-installation
我在什么地方发生了这种奇怪的事情,
pacman -S -w awesome xorg-xinit xorg-server xorg-server-utils
Run Code Online (Sandbox Code Playgroud)
pacman不会下载所有必需的依赖项。
下载包的原因是因为我正在创建一个本地存储库,其中只包含我需要的特定包。(而不是下载整个 repo,因为 Arch 社区由于带宽限制不希望您这样做,这是尊重)
现在,上面定义的包可以很好地下载,它会下载xorg-server等等,并-w确保它们不会被安装。但-S也应该下载它不出于任何原因的所有依赖项。
稍后尝试使用本地存储库安装上述软件包时的输出结果为:
warning: cannot resolve "xorg-xset", a dependency of "xorg-server-utils"
warning: cannot resolve "xorg-xauth", a dependency of "xorg-xinit"
Run Code Online (Sandbox Code Playgroud)
并且列表还在继续......检查回购肯定包丢失并且从未在任何地方下载过。
为什么会这样?我错过了什么吗?逻辑上还是参数明智?
Tor*_*xed 10
正如指出的认真和demonicmaniac3超过#archlinux IRC频道,这是因为pacman 不会再下载任何东西,如果它已经在本地安装。但是它会下载你特别指示它下载的任何东西,这让你想到它就很有意义。
这意味着如果您尝试下载用于自定义/本地存储库的软件包,则需要确保您要下载的软件包未在本地安装,或者执行以下选项之一:
pacman -y --dbpath /tmp ...
Run Code Online (Sandbox Code Playgroud)
这会产生一种错觉,即本地没有安装任何东西,并且下载了所需的每个包。这也要求您这样做,-y因为您创建的数据库中没有主软件包列表。
pacman -Syuw ...
Run Code Online (Sandbox Code Playgroud)
这应该重新安装/升级任何已安装或尚未安装的软件包。
注意:未验证(我对 pacman 的逻辑知之甚少,正忙于测试)
正如评论中所指出的,您很可能希望将下载的文件放在一个单独的目录中,以便您可以使用它们,这是通过以下方式完成的--cachedir:
pacman --cachedir /tmp/somewhere ...
Run Code Online (Sandbox Code Playgroud)
sudo pacman -Syw --cachedir /tmp/somewhere --dbpath /tmp/pacmandb base base-devel linux linux-firmware
Run Code Online (Sandbox Code Playgroud)
然后你很可能想使用repo-add通过发出如下命令将它添加到镜像中:
repo-add /tmp/somewhere/my_mirror.db.tar.gz /tmp/somewhere/{*.pkg.tar.xz,*.pkg.tar.zst}
Run Code Online (Sandbox Code Playgroud)
expac -S '%E' -l '\n' base base-devel linux linux-firmware | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
调用expac上<package string> (您要下载的所有包)会给你需要运行包的列表不管它是你正在下载。您可以使用此列表来获取/添加到已安排安装的现有包字符串中。
expac 默认情况下将每个单独的依赖项分隔为一行,但在包之间拆分它们,因此我们将每个一行字符串转换为多个新行,然后使用 tr 将换行符转换为空格。
我更喜欢这个expac版本,因为它以编程方式支持并且可以在许多脚本中使用,但快速和“肮脏”的版本只是简单地重定向 pacman 检查的数据库。
| 归档时间: |
|
| 查看次数: |
6245 次 |
| 最近记录: |