apt/aptitude - パッケージコレクション全体のパッケージ依存関係ツリーを表示するには?

apt/aptitude - パッケージコレクション全体のパッケージ依存関係ツリーを表示するには?

パッケージに問題がありましたがapt解決しました。問題と解決策についてはここで説明します。 適性は、多くのパッケージを削除する必要があると言います...?

ところで、この質問について話し合っていたところ、私が答えを探したい付随的な質問があることに気づいたので、今回の質問を投稿することになりましたapt

誤って1,400を超える「自動」パッケージが孤児になって「もはや使用されていない」と表示されることをしましたaptitude。 - 誤って削除されたパッケージ。

この場合、aptパッケージリストを入力として使用し、パッケージセット全体の依存関係ツリーを生成するために使用できるユーティリティまたはプロシージャはありますか?その場合は、このツリーの上部から誤って削除したパッケージを特定してから、そのパッケージを再インストールして問題を解決できます。

つまり、パッケージリストを入力として使用し、同様のものを出力として生成するプロシージャまたはユーティリティを探しています。

top-package
|--package-000
|-+package-001
| |--package-002
|-+package-003
| |--package-004
| |--package-005
| |-+package-006
| | |--package-007
| |--package-008
|--package-009
... etc. ...

...package-NNN入力パッケージのリストとそれらが依存し、依存関係ツリーのルートとなる他のtop-packageパッケージのリストはどこにありますか?問題が上位レベルのメタパッケージを誤って削除したために発生したと仮定すると、削除されたtop-packageパッケージが識別されます。その後、再インストールしてtop-package問題を解決できます。

明らかに、私は私の特定の問題を別の方法で解決したことを繰り返したいと思います(引用された議論を参照)。私はこの特定の問題を解決するためにここに尋ねるのではなく、将来起こる可能性のある問題を診断して修正するのに役立つ、上記のような依存関係ツリーリストツールの一種が欲しいからです。

どんな参考やアドバイスでもいただきありがとうございます。

答え1

あなたはそれを使用することができます:

apt depends <package>
apt-cache depends <package>   

または扇子の木:

sudo apt install debtree
debtree <package>

男の借金:

指定されたパッケージの依存関係グラフ(「ドット」構文)を生成します。

デフォルトでは、依存関係グラフには、(事前の)依存関係、推奨パッケージ、バージョンなしの競合、および要求されたパッケージによって提供される仮想パッケージが表示されます。オプションで、提案されたパッケージとバージョンの競合を含めることもできます。

パッケージのリストをファイルに入れたら、次の手順を実行します。

cat file |xargs -n 1 apt-cache depends
cat file |xargs -n 1 debtree

答え2

上記の提案を試しましたが、目的の結果が得られませんでした。私は次のことをしました。

no-longer-in-use.txt私は1,400を超えるパッケージ名のリストを1行に1つずつパッケージ名というファイルに入れました。

その後、次のコマンドを実行しました。

% xargs -n 1 debtree <no-longer-in-use.txt | dot -Tjpg >depgraph.jpg

2〜3時間実行され、結果depgraph.jpgファイルは3.4GB以上のディスク容量を占めました。

このファイルを表示しようとすると、4つの項目を含む小さなチャートのみが表示されます。私はこのコマンドが最終的に1,400を超える別々のチャートを生成し、それを出力に1つずつ追加したと思います。これは、私の画像ビューアが最初の画像だけを見ることができることを意味します。

とにかく、複数の個別のチャートではなく単一のチャートにマージしたいと思います。私はこれを達成するためにdebtree(またはapt-cache dependsその問題のために)依存関係ツリーを含むように統合されたすべての個々のパッケージの依存関係を示すために出力を前処理する必要があると思います。

そしてそれを通して食べられるのですdot

ただし、これはまだ巨大なイメージファイルになる可能性があるため、そのビューは必要ありません。

このアプローチを取る代わりに、次のことを試してみましょう。

各パッケージに対して実行し、次のようにapt-cache depends各行にパッケージ名とデータを含むCSVファイルとして出力形式を指定します。Depends:たとえば、ftpパッケージを使用すると、次のようになります。

apt-cache depends ftp出力:

ftp
  Depends: libc6
  Depends: libreadline8
  Depends: netbase
  Replaces: <netstd>

処理されたCSV出力:

ftp,libc6
ftp,libreadline8
ftp,netbase

1,400を超えるすべてのパッケージに対してこれを行い、個々のCSV出力を1つの大きなCSVファイルにリンクします。

この大きなCSVファイルは、依存関係ツリーを生成するプログラムへの入力として使用されます。実際、これにより複数のツリーが生成される可能性があります。各ツリーのルートは私が興味のある値です。

私は今後数日間、レジャーでこのプログラムを作業する予定です。完了したら公開します。

関連情報