この奇妙なことがどこで起こったのか、
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"
リストが続きます...リポジトリを検査すると、パッケージが欠落していて、どこにもダウンロードされたことはありません。
これがなぜであるかについてのアイデアはありますか?私は何かを見逃しましたか?論理的またはパラメータ的に賢いですか?
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 -S '%E' -l '\n' base base-devel linux linux-firmware | tr '\n' ' '
<package string>
(ダウンロードしようとしているすべてのパッケージ)でexpac
を呼び出すと、実行しているパッケージのリストが表示されますダウンロードしています。このリストを使用して、インストールがスケジュールされている既存のパッケージ文字列を取得/追加できます。
expacは、デフォルトで1つのライナーの各依存関係を分離しますが、パッケージ間で分割するため、各1つのライナーの文字列を複数の新しい行に変換し、次にtrを使用して新しい行をスペースに変換します。
私はexpac
バージョンを好みます。それは、プログラムで保持され、多くのスクリプトで使用できるためですが、迅速で「ダーティー」なバージョンは、pacmanがチェックするデータベースを単にリダイレクトすることです。