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この注文を印刷するオプションはありません(マニュアル)、また、これを行うためのデータベースやライブラリへのよく知られたインターフェースもありません。したがって、解決策は yumyumパッケージの追加依存関係の完全なリストを印刷するように要求することはいつでもできますが、その情報は、注文パッケージをインストールする必要がある場所。 と尋ねる方が簡単ですrpm

原理的には、次の出力を使用するスクリプトを書くことができます。

rpm -qpR package-file

それぞれパッケージファイル依存関係を取得し、ステップごとに順序付けます。例:

  • 他のパッケージに依存しないパッケージの場合、
  • 前述のパッケージの1つ以上(および場合によっては他のパッケージ)に依存するパッケージこれグループ)、および
  • 残りのパッケージがなくなるまで、これを繰り返します

(私は逆のことをしました - パッケージを探して取り除く、複雑ではあるが実行可能です。

関連情報