
我有一套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
對於每個包檔案,取得依賴項並按步驟對它們進行排序,例如,
- 不依賴任何其他包的包,那麼
- 依賴前述一項或多項的軟體包(也可能依賴其他軟體包)這組),以及
- 依此類推,直到沒有剩餘的包裹
(我做了相反的事情 - 尋找軟體包消除,雖然很複雜,但可行)。