web-dev-qa-db-ja.com

ArchLinuxでパッケージの依存関係を再帰的にリストします

新しくインストールしたシステム(インターネット接続がない)にインストールするためにAURのドライバーをダウンロードしようとしていますが、入力すると

makepkg -s

他のパッケージをインストールする必要があります。このシステムにはインターネットがないので、インターネットに接続している別のPCからこれらのパッケージ(およびそのすべての依存関係)をダウンロードし、後で新しいシステムにインストールしたいと思います。パッケージをオフラインでインストールすることについてのチュートリアルをarchlinuxのWebサイトで見つけました。使用する

pacman -Sp <package_name> > /myPackages.list

package_nameで指定したすべてのパッケージのリストを作成します。ただし、すべての依存関係も必要です。だから私は知りたい:

  1. これを行う簡単な方法はありますか?
  2. 必要なすべての依存関係パッケージのコマンドを手動で入力する必要がありますか?
  3. これを実現するためにシェルスクリプトを作成できますか?はいの場合、どうすればよいですか?
3
Vince

回答

pacman パッケージと一緒にインストールされる pactree というプログラムがあります。
指定されたパッケージの依存関係ツリーを表示するために使用されます。

次のように使用できます。

pactree -u <package_name>

ただし、pacman -Sp <package_name>とは異なり、 pactree は1つのパッケージ名のみを受け入れます。

1つの解決策

この問題を回避する方法はいくつかありますが、あなたの質問から判断すると、シェルスクリプトに精通しているとは思えないので(間違えたら申し訳ありません)、1つの解決策について詳しく説明します。

echo "package_name1 package_name2 ..." | xargs -n 1 pactree -u | sort -u | xargs -n 1 pacman -Sp > /myPackages.list

echo-シェル組み込みコマンド:引数をstdoutに出力します(新しい行が追加されます)。

|-パイプ:stdoutを左側のコマンドから右側のコマンドのstdinにリダイレクトします。

xargs-外部コマンド:stdinを取得し、指定されたコマンドの引数リストに追加します。
-n 1 --xargsオプション:stdinからの引数ごとに指定されたコマンドを1回実行します。

pactree-外部コマンド:指定されたパッケージの依存関係ツリーを表示します。
-u --pactreeオプション:グラフの代わりに、各依存関係パッケージを別々の行に出力します。

sort-外部コマンド:テキストをstdinから並べ替えて、stdoutに書き込みます。
-u --sortオプション:ソートされたstdinから重複を削除します。
(一部のパッケージには同じ依存関係がある可能性があるため、これが必要です。)

あなたは残りの行に精通しています。

注意

pacman -Spは、AURからパッケージを提供すると、エラーを報告します。

2018年9月17日編集

JdeBP で指摘されているように、pactreeは現在 pacman-contrib パッケージに入っています。

2
Iskustvo