web-dev-qa-db-ja.com

pacmanは-Sと-wで依存関係をダウンロードしませんか?

この奇妙なことがどこで起こったのか、

pacman -S -w awesome xorg-xinit xorg-server xorg-server-utils

pacman は必要なすべての依存関係をダウンロードしません。

パッケージをダウンロードする理由は、必要に応じて特定のパッケージのみを含むローカルリポジトリを作成しているためです。 (Archコミュニティは帯域幅の制限のため、これを行うことを望まないため、リポジトリ全体をダウンロードする代わりに、尊重しています)

これで、上記で定義されたパッケージがうまくダウンロードされ、ダウンロードされますxorg-serverなど、-wインストールされないようにします。だが -Sは、何らかの理由でダウンロードできない依存関係もすべてダウンロードする必要があります。

後でローカルリポジトリを使用して上記のパッケージをインストールしようとすると、出力は次のようになります。

warning: cannot resolve "xorg-xset", a dependency of "xorg-server-utils"
warning: cannot resolve "xorg-xauth", a dependency of "xorg-xinit"

リストが続きます...リポジトリを検査すると、パッケージが欠落していて、どこにもダウンロードされたことはありません。

これがなぜであるかについてのアイデアはありますか?私は何かを見逃しましたか?論理的またはパラメータ的に賢いですか?

6
Torxed

Earnestlyおよびdemonicmaniac3で指摘されているように、#archlinuxircチャネル。これは、pacmanがすでにローカルにインストールされている場合、何も再ダウンロードしないためです。しかし、あなたが具体的に指示しているものは何でもダウンロードします

つまり、カスタム/ローカルリポジトリ用のパッケージをダウンロードする場合は、ダウンロードしようとしているパッケージがローカルにインストールされていないことを確認するか、次のいずれかのオプションを実行する必要があります。

空のパッケージデータベースを一時的またはローカルに使用する

pacman -y --dbpath /tmp ...

これにより、ローカルには何もインストールされず、必要なすべてのパッケージがダウンロードされるという幻想が生まれます。作成したデータベースにはマスターパッケージリストがないため、これも-yを実行する必要があります。

システムアップグレードを実行する

pacman -Syuw ...

これにより、インストールされているかどうかに関係なく、すべてのパッケージが再インストール/アップグレードされます。
注:検証されていません(私はパックマンのロジックについてほとんど知らないので、テストする時間になりましたそれ)

ダウンロードしたファイルを分離する

コメントで指摘されているように、ダウンロードしたファイルを別のディレクトリに配置して使用できるようにするのが最も一般的です。これは--cachedirで行います。

pacman --cachedir /tmp/somewhere ...

最後の例

Sudo pacman -Syw --cachedir /tmp/somewhere --dbpath /tmp/pacmandb base base-devel linux linux-firmware

そして、あなたはおそらく repo-add を使ってそれをミラーに追加したいでしょう:

repo-add /tmp/somewhere/my_mirror.db.tar.gz /tmp/somewhere/{*.pkg.tar.xz,*.pkg.tar.zst}

expac を使用して依存関係リストを生成します

expac -S '%E' -l '\n' base base-devel linux linux-firmware | tr '\n' ' '

<package string>(ダウンロードしようとしているすべてのパッケージ)expacを呼び出すと、実行しているパッケージのリストが表示されますダウンロードしています。このリストを使用して、インストールがスケジュールされている既存のパッケージ文字列を取得/追加できます。

expacは、デフォルトで1つのライナーの各依存関係を分離しますが、パッケージ間で分割するため、各1つのライナーの文字列を複数の新しい行に変換し、次にtrを使用して新しい行をスペースに変換します。


私はexpacバージョンを好みます。それは、プログラムで保持され、多くのスクリプトで使用できるためですが、迅速で「ダーティー」なバージョンは、pacmanがチェックするデータベースを単にリダイレクトすることです。

7
Torxed