Arch-Linux

pacman 不使用 -S 和 -w 下載依賴項?

  • December 15, 2020

我得到了這個奇怪的事情發生在哪裡,

pacman -S -w awesome xorg-xinit xorg-server xorg-server-utils

pacman不會下載所有必需的依賴項。

下載這些包的原因是因為我正在創建一個本地儲存庫,其中只有我需要的特定包。(而不是下載整個 repo,因為 Arch 社區由於頻寬限制不希望你這樣做,這是尊重)

現在,上面定義的包可以很好地下載,它確實會下載xorg-server等等,並-w確保它們不會被安裝。但-S也應該下載它不出於任何原因的所有依賴項。

稍後嘗試使用本地 repo 安裝上述軟體包時的輸出會導致:

warning: cannot resolve "xorg-xset", a dependency of "xorg-server-utils"
warning: cannot resolve "xorg-xauth", a dependency of "xorg-xinit"

清單還在繼續……檢查 repo 確定包失去並且從未在任何地方下載過。

為什麼會這樣?我錯過了什麼嗎?邏輯上還是參數上?

正如Earnestlydemonicmaniac3在**#archlinux** irc 頻道中指出的那樣,這是因為pacman 如果它已經在本地安裝,則不會重新下載任何東西。但它會下載你特別指示它的任何內容,這很有意義。

這意味著如果您嘗試下載用於自定義/本地儲存庫的軟體包,則需要確保您要下載的軟體包未在本地安裝或執行以下選項之一:

臨時/本地使用空包數據庫

pacman -y --dbpath /tmp ...

這將產生一種錯覺,即本地沒有安裝任何東西,並且下載了所需的每個包。這也需要您這樣做,-y因為您的數據庫中沒有主包列表。

執行系統升級

pacman -Syuw ...

這應該重新安裝/升級任何已安裝或尚未安裝的軟體包。

**注意:未驗證(我對 pacman 的邏輯知之甚少,有時間來測試它)

隔離下載的文件

正如評論中所指出的,您很可能希望將下載的文件放在單獨的目錄中,以便您可以使用它們,這是通過以下方式完成的--cachedir

pacman --cachedir /tmp/somewhere ...

最後一個例子

sudo pacman -Syw --cachedir /tmp/somewhere --dbpath /tmp/pacmandb base base-devel linux linux-firmware

然後您很可能希望使用repo-add將其添加到鏡像中,方法是發出以下內容:

repo-add /tmp/somewhere/my_mirror.db.tar.gz /tmp/somewhere/{*.pkg.tar.xz,*.pkg.tar.zst}

使用expac生成依賴列表

expac -S '%E' -l '\n' base base-devel linux linux-firmware | tr '\n' ' '

呼叫(您將要下載expac<package string> *所有軟體包)*將為您提供執行正在下載的任何軟體包所需的軟體包列表。您可以使用此列表來獲取/添加到您已經存在的計劃安裝的軟體包字元串。

expac預設情況下將每個單獨的依賴項分隔在單行中,但在包之間拆分它們,因此我們將每個單行字元串轉換為多個新行,然後使用 tr 將換行符轉換為空格。


我更喜歡這個expac版本,因為它以程式方式支持並且可以在許多腳本中使用,但是快速和“骯髒”的版本是簡單地重定向 pacman 檢查的數據庫。

引用自:https://unix.stackexchange.com/questions/265552