如何取得 rpm 安裝一組新軟體包的順序?

如何取得 rpm 安裝一組新軟體包的順序?

我有一套rpm包。我將立即安裝所有這些,但在安裝之前我想了解它們的安裝順序。我知道如果我以隨機順序將它們全部提供給套件管理器,管理器將確定它們之間的依賴關係並以正確的順序安裝它們。我怎麼才能得到這個訂單?

答案1

您可以透過選項 --test 使用 rpm 的偵錯輸出。這意味著不會安裝任何軟體包,但 stderr 輸出將包含內部順序,如下所示:

D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D:     0    0    2    1   +cla-v1-r45.0.0.x86_64
D:     1    0   11    2   +ace-6.5.15-1.x86_64
D:     2    0    1    3       +ace-kokyu-6.5.15-1.x86_64
D:     3    0    1    3       +ace-xml-6.5.15-1.x86_64
D:     4    0    7    4       +tao-2.5.15-1.x86_64
D:     5    0    0    5       +tao-cosconcurrency-2.5.15-1.x86_64
D:     6    0    0    5       +tao-cosevent-2.5.15-1.x86_64
D:     7    0    0    5       +tao-cosnaming-2.5.15-1.x86_64
D:     8    0    0    5       +tao-cosnotification-2.5.15-1.x86_64
D:     9    0    0    5       +tao-costrading-2.5.15-1.x86_64
D:    10    0    0    5       +tao-rtevent-2.5.15-1.x86_64
D:    11    0    0    5       +tao-utils-2.5.15-1.x86_64
D:    12    0    0    3     +ace-gperf-6.5.15-1.x86_64
D:    13    0    0    1   +mpc-6.5.15-1.x86_64
D:    14    0    0    1   +PCMX-6.0A90-02.x86_64
D: installing binary packages

然後使用一些過濾器來解析它,例如 awk

rpm -Uvv --test *.rpm 2>&1 | awk 'BEGIN { FS = "+" }; /D: ========== tsorting packages/,/D: installing binary packages/ { printf "%s ",$2 }'

答案2

yum沒有列印此訂單的選項(請參閱手動的),也沒有一個眾所周知的資料庫和函式庫介面可以做到這一點。所以解決方案必須是外部 yum。您始終可以要求yum列印套件的附加依賴項的完整列表,但該資訊對於獲取套件的附加依賴項並不是很有用。命令必須安裝其中的軟體包。問起來比較簡單rpm

原則上,可以編寫一個使用以下輸出的腳本

rpm -qpR package-file

對於每個包檔案,取得依賴項並按步驟對它們進行排序,例如,

  • 不依賴任何其他包的包,那麼
  • 依賴前述一項或多項的軟體包(也可能依賴其他軟體包)組),以及
  • 依此類推,直到沒有剩餘的包裹

(我做了相反的事情 - 尋找軟體包消除,雖然很複雜,但可行)。

相關內容