「Pacman/ヒントとテクニック」の版間の差分
細 (→pacman のローカルデータベースを復元する: セクション名を修正) |
(冒頭に pacman のリンクを追加) |
||
(同じ利用者による、間の18版が非表示) | |||
12行目: | 12行目: | ||
{{Related|パッケージの作成}} |
{{Related|パッケージの作成}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | 以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。 |
+ | 以下のヒントや [[pacman]] 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。 |
== メンテナンス == |
== メンテナンス == |
||
21行目: | 21行目: | ||
=== パッケージをリストアップ === |
=== パッケージをリストアップ === |
||
+ | |||
+ | ==== 未使用のリポジトリで ==== |
||
+ | |||
+ | デフォルトでは、{{ic|pacman.conf}} に載っているリポジトリが同期、検索、インストール、アップグレードに使用されます。しかし、リポジトリの使用用途は自由に変更できます。例えば、一部のリポジトリは検索のみに使用するには[http://allanmcrae.com/2014/12/pacman-4-2-released/]: |
||
+ | |||
+ | {{hc|/etc/pacman.conf|2= |
||
+ | ... |
||
+ | [multilib] |
||
+ | Usage = Sync Search |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | {{man|5|pacman.conf|REPOSITORY SECTIONS}} を参照。 |
||
==== バージョンも表示 ==== |
==== バージョンも表示 ==== |
||
167行目: | 180行目: | ||
どのパッケージにも所有されていないファイルがある場合 ([[システムメンテナンス#パッケージマネージャーを使用してソフトウェアをインストールする|ソフトウェアのインストールにパッケージマネージャを使用]]しなかった場合に起こりえます)、そのようなファイルをクリーンアップするために特定する必要があることがあります。 |
どのパッケージにも所有されていないファイルがある場合 ([[システムメンテナンス#パッケージマネージャーを使用してソフトウェアをインストールする|ソフトウェアのインストールにパッケージマネージャを使用]]しなかった場合に起こりえます)、そのようなファイルをクリーンアップするために特定する必要があることがあります。 |
||
+ | 1つ目の方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを ''pacman'' で調べる方法です: |
||
− | 1つ目の方法は、{{Pkg|pacutils}} パッケージの {{ic|pacreport --unowned-files}} コマンドを root として実行することです。これは、詳細と共に未所有のファイルを一覧表示します。 |
||
+ | # (export LC_ALL=C.UTF-8; comm -13 <(pacman -Qlq | sed 's,/$,,' | sort) <(find /etc /usr /opt -path /usr/lib/modules -prune -o -print | sort)) |
||
− | もう一つの方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを ''pacman'' で調べる方法です: |
||
− | |||
− | # find /etc /usr /opt | LC_ALL=C.UTF-8 pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5- |
||
{{Tip|{{Pkg|lostfiles}} スクリプトも同じようなことをしますが、一般的に偽陽性とされるファイルを出力から取り除くための拡張可能なブラックリストが含まれています。}} |
{{Tip|{{Pkg|lostfiles}} スクリプトも同じようなことをしますが、一般的に偽陽性とされるファイルを出力から取り除くための拡張可能なブラックリストが含まれています。}} |
||
395行目: | 406行目: | ||
==== 読み取り専用キャッシュ ==== |
==== 読み取り専用キャッシュ ==== |
||
+ | Pacman 6.1.0 はキャッシュサーバーを直接サポートしています。キャッシュサーバーは、キャッシュでないサーバーよりも前に試行されます。また、キャッシュサーバーはダウンロード時に HTTP 404 エラーが発生してもサーバープールから削除されず、データベースファイルとしては使用されません。 |
||
− | {{Note|1=pacman がサーバーから 3 つのパッケージをダウンロードできない場合、代わりに別のミラーが使用されます。https://bbs.archlinux.org/viewtopic.php?id=268066 を参照してください。}} |
||
− | + | 手っ取り早い解決策を探している場合は、他のコンピュータからキャッシュサーバーとしてアクセスできる[https://gist.github.com/willurd/5720255 一時的なシンプルなウェブサーバー]を走らせることができます。 |
|
+ | Pacman のキャッシュディレクトリを共有してみましょう。例えば、[[Python]] の [https://docs.python.org/3/library/http.server.html#http-server-cli http.server] モジュールを使う場合は: |
||
− | まず最初に、提供するディレクトリで pacman データベースを利用できるようにします。 |
||
− | # ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg/ |
||
− | |||
− | 次に、このディレクトリの提供を開始します。たとえば、[[Python]] [https://docs.python.org/3/library/http.server.html#http-server-cli http.server] モジュールの場合: |
||
$ python -m http.server -d /var/cache/pacman/pkg/ |
$ python -m http.server -d /var/cache/pacman/pkg/ |
||
− | {{Tip|デフォルトでは、Python {{ic|http.server}} は任意のインターフェイスの |
+ | {{Tip|デフォルトでは、Python の {{ic|http.server}} は任意のインターフェイスの {{ic|8000}} 番ポートをリッスンします。別のポートを使いたい場合や、特定のアドレスにのみバインドしたい場合は、パラメータを追加してください: |
$ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080 |
$ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080 |
||
}} |
}} |
||
− | 次に、各クライアントマシンで {{ic|/etc/pacman.d/mirrorlist}} を |
+ | 次に、各クライアントマシンでキャッシュサーバーを追加するように {{ic|/etc/pacman.d/mirrorlist}} を[[テキスト編集|編集]]してください: |
{{hc|/etc/pacman.d/mirrorlist|2= |
{{hc|/etc/pacman.d/mirrorlist|2= |
||
− | + | CacheServer = http://''server-ip'':''port'' |
|
− | ... |
||
}} |
}} |
||
− | {{Warning| |
+ | {{Warning|他のサーバーエントリと違って、このカスタムサーバーのオプションには {{ic|/repos/$repo/os/$arch}} を付けてはいけません。このキャッシュサーバーにはこのディレクトリ階層が存在しないため、クエリが失敗してしまうからです。}} |
− | + | スタンドアローンな方法としては {{Pkg|darkhttpd}} で最小限のウェブサーバーを立てられます。先の {{ic|python}} コマンドを例えば以下のように置き換えてください: |
|
− | + | [http]$ darkhttpd /var/cache/pacman/pkg --no-server-id |
|
− | 便 |
+ | 利便性のために darkhttpd を ''systemd'' サービスとして走らせることもできます。[[Systemd#ユニットファイル]] を参照してください。 |
− | Rust で書かれた小規模な Web サーバーである {{Pkg|miniserve}} も使用できます |
+ | Rust で書かれた小規模な Web サーバーである {{Pkg|miniserve}} も使用できます: |
$ miniserve /var/cache/pacman/pkg |
$ miniserve /var/cache/pacman/pkg |
||
− | 次に、 |
+ | 次に、miniserve へアクセスできる最初の URL を使って、上記のように {{ic|/etc/pacman.d/mirrorlist}} を編集してください。 |
− | すでに他の目的で Web サーバーを実行している場合は、代わりにそれをローカルリポジトリサーバーとして再利用できます。たとえば、すでに [[nginx]] でサイトを提供している場合は、ポート |
+ | すでに他の目的で Web サーバーを実行している場合は、代わりにそれをローカルリポジトリサーバーとして再利用できます。たとえば、すでに [[nginx]] でサイトを提供している場合は、8080 番ポートで待受する ''nginx'' サーバーブロックを追加できます: |
{{hc|/etc/nginx/nginx.conf| |
{{hc|/etc/nginx/nginx.conf| |
||
443行目: | 450行目: | ||
}} |
}} |
||
− | この変更を加えた後は、必ず {{ic|nginx.service}} の |
+ | この変更を加えた後は、必ず {{ic|nginx.service}} の[[再起動]]を行ってください。 |
{{Tip|どの Web サーバーを使用する場合でも、ファイアウォール設定 (存在する場合) で、設定されたポートへの目的のトラフィックの到達が許可され、不要なトラフィックが許可されていないことを確認してください。[[セキュリティ#ネットワークとファイアウォール]]を参照してください。}} |
{{Tip|どの Web サーバーを使用する場合でも、ファイアウォール設定 (存在する場合) で、設定されたポートへの目的のトラフィックの到達が許可され、不要なトラフィックが許可されていないことを確認してください。[[セキュリティ#ネットワークとファイアウォール]]を参照してください。}} |
||
449行目: | 456行目: | ||
==== 読み取り専用キャッシュのオーバーレイマウント ==== |
==== 読み取り専用キャッシュのオーバーレイマウント ==== |
||
− | ローカルネットワーク上 |
+ | ローカルネットワーク上にあるマシンの {{ic|/var/cache/pacman/pkg}} ディレクトリを[[Overlayfs|オーバーレイマウント]]することで、読み取り専用のパッケージキャッシュとして使うことができます。キャッシュサーバーに他のマシンでも使われている最新のパッケージがある程度包括的にインストールされている場合、このような構成は効果的です。低帯域幅のアップストリーム接続の終端に一定数のマシンが存在する場合、この方法が便利です。 |
+ | 例: |
||
− | 例として、このメソッドを使用するには: |
||
# mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg |
# mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg |
||
457行目: | 464行目: | ||
# mount -t overlay overlay -o lowerdir=/tmp/remote_pkg,upperdir=/var/cache/pacman/pkg,workdir=/mnt/workdir_pkg /tmp/pacman_pkg |
# mount -t overlay overlay -o lowerdir=/tmp/remote_pkg,upperdir=/var/cache/pacman/pkg,workdir=/mnt/workdir_pkg /tmp/pacman_pkg |
||
− | {{Note|作業ディレクトリは、上位ディレクトリと同じマウント |
+ | {{Note|作業ディレクトリは、上位ディレクトリと同じマウント済みデバイス上の空のディレクトリである必要があります。[[Overlayfs#使用方法]] を参照してください。}} |
− | {{Tip|1={{ic|/tmp/pacman_pkg}} オーバーレイディレクトリを |
+ | {{Tip|1={{ic|/tmp/pacman_pkg}} オーバーレイディレクトリ内のファイルを一覧表示しようとすると "Stale file handle" などのエラーが発生する場合、オーバーレイマウントのオプションに {{ic|1=-o redirect_dir=off -o index=off}} を使ってみてください。}} |
− | こ |
+ | これで、オプション {{ic|--cachedir /tmp/pacman_pkg}} を使用して ''pacman'' を実行できます。例: |
# pacman -Syu --cachedir /tmp/pacman_pkg |
# pacman -Syu --cachedir /tmp/pacman_pkg |
||
− | ==== |
+ | ==== 読み取り専用の分散キャッシュ ==== |
− | パッケージキャッシュを提供 |
+ | パッケージキャッシュを提供しているネットワーク上の他のコンピューターを自動的に検出するための Arch 固有のツールがあります。{{Pkg|pacredir}}、[[pacserve]]、{{AUR|pkgdistcache}}、または {{AUR|paclan}} を試してください。pkgdistcache は、プレーンな UDP ではなく Avahi を使用します。これは、WiFi とイーサネット間のブリッジではなくルーティングを行う特定のホームネットワークでより適切に機能する可能性があります。 |
歴史的には、[https://bbs.archlinux.org/viewtopic.php?id=64391 PkgD] と [https://github.com/toofishes/multipkg multipkg] がありましたが、現在はメンテナンスされていません。 |
歴史的には、[https://bbs.archlinux.org/viewtopic.php?id=64391 PkgD] と [https://github.com/toofishes/multipkg multipkg] がありましたが、現在はメンテナンスされていません。 |
||
473行目: | 480行目: | ||
==== 読み書き可能キャッシュ ==== |
==== 読み書き可能キャッシュ ==== |
||
+ | ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有すれば、複数のコンピュータ間でパッケージを共有することができます。このセクションでは、[[SSHFS]] を使って、同じローカルネットワーク上にある複数のコンピュータ間でパッケージのキャッシュ及び関連するライブラリディレクトリを共有する方法を説明します。ただし、ネットワーク経由で共有されたキャッシュは、ファイルシステムの選択などの要因によって遅くなる可能性があることを留意しておいてください。 |
||
− | {{Tip|[[pacserve]] を使うことで以下の方法をもっと簡単に実現できます。}} |
||
+ | まず、ネットワーク共有をサポートするファイルシステムのパッケージ ({{Pkg|sshfs}} や {{Pkg|curlftpfs}}、{{Pkg|samba}}、{{Pkg|nfs-utils}} のうち一つ) をインストールしてください。 |
||
− | 複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。 |
||
− | |||
− | まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば [[sshfs]], [[shfs]], ftpfs, [[Samba|smbfs]], [[NFS|nfs]] など。 |
||
{{Tip| |
{{Tip| |
||
− | * sshfs |
+ | * ''sshfs'' を使う場合、[[SSH 鍵]] の記事を読むことを検討してください。 |
− | * デフォルトでは、smbfs はファイル名 |
+ | * デフォルトでは、''smbfs'' はコロンを含むファイル名をサポートしていないため、クライアント側はそのような問題のあるパッケージをいちいちインターネットからダウンロードしてしまいます。これを防ぐには、クライアント側で {{ic|mapchars}} マウントオプションを使用してください。 |
+ | }} |
||
− | + | 次に、サーバ上の {{ic|/var/cache/pacman/pkg}} をすべてのクライアントマシン上の {{ic|/var/cache/pacman/pkg}} にマウントすることで実際のパッケージを共有できます。 |
|
+ | {{Warning|{{ic|/var/cache/pacman/pkg}} とその上位のディレクトリ ({{ic|/var}} など) はシンボリックリンクにしてはいけません。Pacman はこれらがディレクトリであると期待するからです。''pacman'' が自身を再インストールまたはアップグレードする時、そのようなシンボリックリンクは削除され、空のディレクトリが代わりに作成されます。しかし、トランザクション中、''pacman'' は一部のファイルがそのディレクトリ内に存在することを期待するため、アップデートのプロセスに問題が発生してしまいます。詳細は {{Bug|50298}} を参照してください。}} |
||
− | ==== rsync で同期 ==== |
||
+ | ==== rsync や FTP で双方向同期 ==== |
||
− | ローカル環境でのもう1つのアプローチは、 [[rsync]] です。 キャッシュするサーバーを選択し、 [[Rsync#rsync デーモン|rsync デーモン]] を有効にします。 クライアントでは、rsync プロトコルを介してこの共有と双方向で同期します。 コロンを含むファイル名は、 rsync プロトコルでは問題ありません。 |
||
+ | ローカル環境でのもう一つの方法は [[rsync]] です。キャッシュを提供するサーバーを選択し、[[rsync#デーモンとして|rsync デーモン]]を有効化してください。クライアント側では、rsync プロトコルを介すことでこの共有ディレクトリと双方向で同期します。Rsync プロトコルにおいては、ファイル名にコロンが含まれていても問題ありません。 |
||
− | クライアントのドラフトの例では、共有名に {{ic|uname-m}} と入力し使用することで、アーキテクチャに依存する同期が保証されます。 |
||
− | # rsync rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ ... |
||
− | # pacman ... |
||
− | # paccache ... |
||
− | # rsync /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/ ... |
||
+ | 以下はクライアント側での例です。共有ディレクトリの名前に {{ic|uname -m}} を使うことで、システムのアーキテクチャと同じキャッシュを同期できるようにします: |
||
− | ==== nginx を使用する動的なリバースプロキシキャッシュ ==== |
||
+ | # rsync ... rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ |
||
− | [[nginx]] を使って公式の上流ミラーへのリクエストをプロキシして結果をローカルディスクにキャッシュすることができます。その後、ファイルへのリクエストは全てローカルのキャッシュから供給されるようになり、大量のサーバーを更新するときでもインターネットのトラフィックを簡単に最小限に抑えることができます。 |
||
+ | # pacman -Syu |
||
+ | # paccache --remove --keep 3 |
||
+ | # rsync --delete ... /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/ |
||
+ | 暗号化されていない [[rsync#デーモンとして|rsync デーモン]]よりもセキュアな方法として rsync over ssh があります。これについては [[Rsync#SSH を使った自動バックアップ]] で概説されています。 |
||
− | {{Warning|この方法には欠点があります。パッケージファイルの相対パスが同じミラーを使う必要があり同じパスを使うようにキャッシュを設定しなければなりません。この例では、相対パスが {{ic|/archlinux/$repo/os/$arch}} のミラーを使用して {{ic|mirrorlist}} のキャッシュの {{ic|Server}} 設定も同じ相対パスとします。}} |
||
+ | Rsync がローカル環境で利用できない場合は、シンプルな ftp サービスを双方向同期に使用するのも良いでしょう。{{Pkg|lftp}} は、ローカルをリモートストレージと同期するためのオプション {{ic|--mirror}} と {{ic|--delete}} を提供しています。 |
||
− | この例では、キャッシュサーバーを {{ic|<nowiki>http://cache.domain.local:8080/</nowiki>}} で実行してパッケージを {{ic|/srv/http/pacman-cache/}} に保存します。 |
||
+ | ==== nginx で動的リバースプロキシキャッシュ ==== |
||
− | キャッシュのディレクトリを作成して nginx からファイルが書き込めるようにパーティションを設定: |
||
+ | [[nginx]] を使えば、パッケージのリクエストを公式の上流ミラーにプロキシして、ダウンロードしたファイルをローカルのディスクにキャッシュしておくことができます。その後、同じパッケージに対するリクエストはすべてローカルのキャッシュから直接提供されるようになるため、多くのコンピュータが存在する場合に必要になるインターネットトラフィックの量を最小化できます。 |
||
− | # mkdir /srv/http/pacman-cache |
||
− | # chown http:http /srv/http/pacman-cache |
||
+ | この例では、キャッシュサーバーを {{ic|<nowiki>http://cache.domain.example:8080/</nowiki>}} で実行し、パッケージを {{ic|/srv/http/pacman-cache/}} に保存します。 |
||
− | 次に、nginx を [https://gist.github.com/anonymous/97ec4148f643de925e433bed3dc7ee7d 動的キャッシュ] として設定 (コマンドについてはコメントを読んでください)。 |
||
+ | キャッシュを提供するコンピュータに [[nginx]] をインストールしてください。キャッシュ用のディレクトリを作成し、nginx がそのディレクトリへファイルを書き込みできるようにパーミッションの設定を行ってください: |
||
− | 最後に、他の Arch Linux サーバーを更新して {{ic|mirrorlist}} ファイルに以下の行を追加して新しいキャッシュを使うように設定: |
||
+ | |||
+ | # mkdir /srv/http/pacman-cache |
||
+ | # chown http:http /srv/http/pacman-cache |
||
+ | |||
+ | この [https://github.com/nastasie-octavian/nginx_pacman_cache_config/blob/c54eca4776ff162ab492117b80be4df95880d0e2/nginx.conf pacman キャッシュ用の nginx 設定]を {{ic|/etc/nginx/nginx.conf}} の開始点として使います。{{ic|resolver}} ディレクティブの設定はこれでよいかどうかを確認してください。上流のサーバーブロックでは、{{ic|proxy_pass}} ディレクティブを公式ミラーのアドレスに設定してください。オプションの形式は先の設定ファイルを参考にしてください。設定ファイルが完成したら、[[nginx#サービスの開始|nginx を開始し、有効化してください]]。 |
||
+ | |||
+ | キャッシュを使うには、各 Arch Linux コンピュータ (キャッシュをホストするコンピュータも含む) の {{ic|mirrorlist}} ファイルの一番最初に以下の行を追加する必要があります: |
||
{{hc|/etc/pacman.d/mirrorlist|<nowiki> |
{{hc|/etc/pacman.d/mirrorlist|<nowiki> |
||
− | Server = http://cache.domain. |
+ | Server = http://cache.domain.example:8080/$repo/os/$arch |
... |
... |
||
</nowiki>}} |
</nowiki>}} |
||
− | {{Note|時間と |
+ | {{Note|時間ともにキャッシュディレクトリの容量は増加するために、古いパッケージキャッシュをクリーンアップするようにしておく必要があります。{{ic|paccache}} ({{Pkg|pacman-contrib}} でインストールできます) は、保持するパッケージキャッシュを決める条件を使うことでクリーンアップを自動化できます。例えば、次のコマンドはキャッシュディレクトリ内のパッケージのうち最新の2つのバージョンのみを保持します (残りは削除されます): {{ic|find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \;}}。}} |
==== Pacoloco プロキシキャッシュサーバー ==== |
==== Pacoloco プロキシキャッシュサーバー ==== |
||
− | [https://github.com/anatol/pacoloco Pacoloco] は、 |
+ | [https://github.com/anatol/pacoloco Pacoloco] は、''pacman'' リポジトリ用の使いやすいプロキシキャッシュサーバーです。キャッシュ済みのパッケージの[https://github.com/anatol/pacoloco/commit/048b09956b0d8ef71c0ed1f804fd332d9ab5e3c8 自動プリフェッチ]も可能です。 |
+ | |||
+ | {{Pkg|pacoloco}} パッケージでインストールできます。Pacoloco の設定ファイルを開き、''pacman'' ミラーを追加してください: |
||
{{hc|/etc/pacoloco.yaml|<nowiki> |
{{hc|/etc/pacoloco.yaml|<nowiki> |
||
532行目: | 545行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | {{ic|pacoloco.service}} を |
+ | {{ic|pacoloco.service}} を[[再起動]]すると、プロキシリポジトリが {{ic|http://''myserver'':9129/repo/mycopy}} で利用できるようになります。 |
==== Flexo プロキシキャッシュサーバー ==== |
==== Flexo プロキシキャッシュサーバー ==== |
||
− | [https://github.com/nroi/flexo Flexo] pacman リポジトリ用のさらに別のプロキシキャッシュサーバーです。 |
+ | [https://github.com/nroi/flexo Flexo] は、''pacman'' リポジトリ用のさらに別のプロキシキャッシュサーバーです。Flexo は {{AUR|flexo-git}} でインストールできます。インストールしたら、{{ic|flexo.service}} ユニットを[[起動]]してください。 |
− | Flexo はデフォルトでは |
+ | Flexo はデフォルトでは {{ic|7878}} 番ポートで動作します。''pacman'' に Flexo 経由でパッケージをダウンロードさせるには、{{ic|/etc/pacman.d/mirrorlist}} の一番最初に {{ic|1=Server = http://''myserver'':7878/$repo/os/$arch}} を記述してくだしあ。 |
− | ==== 同期プログラムを使用して pacman パッケージ |
+ | ==== 同期プログラムを使用して pacman パッケージキャッシュを同期する ==== |
[[Syncthing]] または [[Resilio Sync]] を使用して、''pacman'' キャッシュディレクトリ (つまり、{{ic|/var/cache/pacman/pkg}}) を同期します。 |
[[Syncthing]] または [[Resilio Sync]] を使用して、''pacman'' キャッシュディレクトリ (つまり、{{ic|/var/cache/pacman/pkg}}) を同期します。 |
||
− | ==== |
+ | ==== 望まないキャッシュ削除を防ぐ ==== |
− | デフォルトでは、{{ic|pacman -Sc}} は、 |
+ | デフォルトでは、{{ic|pacman -Sc}} は、キャッシュにあるパッケージ tarball のうち、同マシン上にインストールされていないパッケージに対応するものを削除します。''pacman'' は、キャッシュを共有するすべてのマシンにどのようなパッケージがインストールされているかを予測できないため、削除すべきでないファイルを削除してしまうことになります。 |
− | + | キャッシュのクリーンアップ時に ''古くなった'' tarball のみを削除するには: |
|
{{hc|/etc/pacman.conf|2= |
{{hc|/etc/pacman.conf|2= |
||
606行目: | 619行目: | ||
# paccheck --sha256sum --quiet |
# paccheck --sha256sum --quiet |
||
− | データベースの復元方法については、[[#Pacman のローカルデータベースを復元する]] を見てください。{{ic|mtree}} ファイルは[[#.pkg ファイル内の特定のファイルを見る|それぞれのパッケージファイルから {{ic|.MTREE}} として抽出する]]こともできます。 |
+ | データベースの復元方法については、[[#Pacman のローカルデータベースを復元する]] を見てください。{{ic|mtree}} ファイルは[[#.pkg ファイル内の特定のファイルの内容を見る|それぞれのパッケージファイルから {{ic|.MTREE}} として抽出する]]こともできます。 |
{{Note|悪意のある変更が疑われる場合は、この方法をそのまま'''使うべきではありません'''。そのような場合、ライブメディアを使用して、ハッシュ値参照用のソースを別途用意するなどといったセキュリティ上の予防措置を取ることが推奨されます。}} |
{{Note|悪意のある変更が疑われる場合は、この方法をそのまま'''使うべきではありません'''。そのような場合、ライブメディアを使用して、ハッシュ値参照用のソースを別途用意するなどといったセキュリティ上の予防措置を取ることが推奨されます。}} |
||
628行目: | 641行目: | ||
=== 既存のインストールから USB キーを復元する === |
=== 既存のインストールから USB キーを復元する === |
||
− | USB キーに |
+ | Arch を USB キーにインストールしたが、内部のデータが壊れてしまった場合 (例えば、書き込み途中に USB を抜いてしまった場合など)、すべてのパッケージを再インストールして、再び動かせるようにできる可能性があります (USB キーが {{ic|/newarch}} にマウントされている場合): |
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman |
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman |
||
− | === .pkg ファイル |
+ | === .pkg ファイル内の特定のファイルの内容を見る === |
− | 例えば、{{Pkg|systemd}} パッケージ |
+ | 例えば、{{Pkg|systemd}} パッケージ内の {{ic|/etc/systemd/logind.conf}} の内容を見たい場合: |
− | $ |
+ | $ bsdtar -xOf /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst etc/systemd/logind.conf |
− | + | あるいは、アーカイブのブラウズに {{Pkg|vim}} を使うこともできます: |
|
− | $ vim /var/cache/pacman/pkg/systemd- |
+ | $ vim /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst |
=== 古いパッケージのライブラリを使っているアプリケーションを探す === |
=== 古いパッケージのライブラリを使っているアプリケーションを探す === |
||
+ | 既に実行中のプロセスには、システムの更新による変更が自動的に適用されません。その結果、実行中のプロセスは古いライブラリを使い続けます。脆弱性やその他のバグ、あるいはバージョン間での非互換性に関連する問題が発生する可能性があることから、このようなことは望ましくない場合があります。 |
||
− | パッケージをインストールしても、(デーモンやサーバーなど) ずっと実行し続けているプログラムが古いパッケージのライブラリのコードを使用している可能性があります。古いライブラリにセキュリティのバグが存在する場合、プログラムを実行し続けるのは得策ではありません。 |
||
− | + | 更新されたライブラリに依存しているプロセスは {{Pkg|htop}} (影響を受けるプログラムの名前をハイライトします) や {{Pkg|lsof}} (これはライブラリの名前も出力します) ベースのスニペットを使って見つけることができます: |
|
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u |
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u |
||
+ | この方法では、実行中のプロセスによって開かれたままになっているファイルのみを検出します。そのようなファイルは基本的に共有ライブラリ ({{ic|.so}} ファイル) だけです。これは、Java や Python アプリケーションのライブラリといった一部の依存関係を見逃してしまうことがあります。 |
||
− | 実行中のプログラムの名前と削除あるいは置換された古いライブラリが出力されます。 |
||
− | === 必要な言語のコンテンツのみをインストールする |
+ | === 必要な言語のコンテンツのみをインストールする === |
− | 多くのパッケージは、ドキュメントと翻訳を |
+ | 多くのパッケージは、複数の言語のドキュメントと翻訳をインストールします。中にはそのような不必要のファイルを削除するように設計されたプログラムもあります。例えば、{{AUR|localepurge}} はパッケージのインストール後に実行され、不必要なロケールファイルを削除します。より直接的なアプローチは {{ic|pacman.conf}} の {{ic|NoExtract}} ディレクティブで、これはそのようなファイルをそもそもインストールしないようにできます。 |
+ | {{Note|[[pacman#インストールさせないファイルを設定]] で説明されている通り、"後ろのルールは前のルールを上書きします。また、{{ic|!}} を前に付けることでルールを無効化できます。"}} |
||
− | {{Warning|1=一部のユーザーは、[https://bbs.archlinux.org/viewtopic.php?id=250846 Xorg] の下でも、ロケールを削除すると [[Special:Permalink/460285#Dangerous NoExtract example|意図しない結果]] が発生したと指摘しました。}} |
||
− | + | ヘルプファイルの翻訳を C ロケールを除いてすべてインストールしないようにするには、以下のディレクティブを追加してください: |
|
+ | NoExtract = usr/share/help/* !usr/share/help/C/* |
||
− | {{hc|/etc/pacman.conf|2= |
||
+ | |||
− | NoExtract = usr/share/help/* !usr/share/help/C/* |
||
+ | HTML ドキュメントをすべてインストールしないようにするには、以下を追加してください: |
||
− | NoExtract = usr/share/gtk-doc/html/* |
||
+ | |||
+ | NoExtract = usr/share/gtk-doc/html/* |
||
+ | NoExtract = usr/share/doc/HTML/* |
||
+ | |||
+ | {{Warning|1='''すべての'''ロケールを削除すると [[Special:Permalink/460285#Dangerous NoExtract example|dmenu]]、[[Special:Permalink/767628#Languages: NoExtract usr/share/X11/locale/*|Steam]]、さらには [https://bbs.archlinux.org/viewtopic.php?id=250846 Xorg] で意図しない結果が起きたと一部のユーザーが報告しています。以下の例では、英語 (米国) 用のファイルと必須の C ロケールのみをインストールすることで、そのような問題を回避するように調整されています。}} |
||
+ | |||
+ | 必要なものを除いて様々な[[ロケール]]をインストールしないようにするには: |
||
+ | |||
+ | {{bc|1= |
||
NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* |
NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* |
||
+ | NoExtract = !usr/share/X11/locale/compose.dir !usr/share/X11/locale/iso8859-1/* |
||
NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.* |
NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.* |
||
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso* |
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso* |
||
− | NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz |
+ | NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/i18n/charmaps/ANSI_X3.4-1968.gz |
NoExtract = !usr/share/*locales/trans* |
NoExtract = !usr/share/*locales/trans* |
||
− | NoExtract = usr/share |
+ | NoExtract = !usr/share/*locales/C !usr/share/*locales/POSIX |
+ | }} |
||
− | NoExtract = usr/share/vim/vim*/lang/* |
||
+ | |||
− | NoExtract = usr/lib/libreoffice/help/en-US/* |
||
+ | 翻訳された [[man ページ]]をインストールしないようにするには、以下を追加してください: |
||
− | NoExtract = usr/share/kbd/locale/* |
||
+ | |||
− | NoExtract = usr/share/*/translations/*.qm usr/share/qt/translations/*.pak !*/en-US.pak # Qt apps |
||
− | NoExtract = usr/share/ |
+ | NoExtract = usr/share/man/* !usr/share/man/man* |
+ | |||
+ | {{Pkg|vim-runtime}} に含まれている言語ファイルをインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | NoExtract = usr/share/vim/vim*/lang/* |
||
+ | |||
+ | [[Qt]] アプリケーションの英語コンテンツ以外をインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | NoExtract = usr/share/*/translations/*.qm usr/share/*/nls/*.qm usr/share/qt/phrasebooks/*.qph usr/share/qt/translations/*.pak !*/en-US.pak |
||
+ | |||
+ | [[Electron]] アプリケーションの英語コンテンツ以外をインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak |
||
+ | |||
+ | [[LibreOffice]] の英語のヘルプファイルをインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | NoExtract = usr/lib/libreoffice/help/en-US/* |
||
+ | |||
+ | [[アプリケーション一覧/ドキュメント#Office suites|OnlyOffice]] の英語コンテンツ以外をインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | {{bc|1= |
||
NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/* |
NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/* |
||
− | NoExtract = |
+ | NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/locale/* !*/en.json |
+ | NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/help/*/* !*/help/en/* |
||
+ | NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/symboltable/* !*/en.json |
||
+ | NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/documenteditor/forms/locale/* !*/en.json |
||
+ | NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/spreadsheeteditor/main/resources/formula-lang/* !*/en.json !*/en_desc.json |
||
+ | NoExtract = opt/onlyoffice/desktopeditors/converter/empty/*/* !opt/onlyoffice/desktopeditors/converter/empty/en-US/* |
||
}} |
}} |
||
+ | |||
+ | 英語の [[iBus]] 絵文字辞書以外をインストールしないようにするには、以下を追加してください: |
||
+ | |||
+ | NoExtract = usr/share/ibus/dicts/emoji-*.dict !usr/share/ibus/dicts/emoji-en.dict |
||
=== 接続状況が悪い場合でもパッケージをインストールする === |
=== 接続状況が悪い場合でもパッケージをインストールする === |
||
− | 悪い |
+ | 接続環境が悪い場所でパッケージをインストールする際 (電車で携帯電話を使う場合など)、{{ic|--disable-download-timeout}} オプションを使えば以下のようなエラーが発生する可能性を減らすことができます: |
− | error: failed retrieving file [ |
+ | error: failed retrieving file […] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds |
もしくは、 |
もしくは、 |
||
− | error: failed retrieving file [ |
+ | error: failed retrieving file […] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received |
== パフォーマンス == |
== パフォーマンス == |
||
751行目: | 803行目: | ||
* {{App|pacutils|libalpm ベースのプログラム用のヘルパーライブラリ。|https://github.com/andrewgregory/pacutils|{{Pkg|pacutils}}}} |
* {{App|pacutils|libalpm ベースのプログラム用のヘルパーライブラリ。|https://github.com/andrewgregory/pacutils|{{Pkg|pacutils}}}} |
||
* {{App|[[pkgfile]]|あるファイルを使っているパッケージが何かを見つけるツール。|https://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}} |
* {{App|[[pkgfile]]|あるファイルを使っているパッケージが何かを見つけるツール。|https://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}} |
||
− | * {{App|pkgtools|Arch Linux パッケージ用のスクリプトコレクション。|https://github.com/Daenyth/pkgtools|{{AUR|pkgtools}}}} |
||
* {{App|pkgtop|GNU/Linux 用に開発されたインタラクティブなパッケージマネージャ兼リソースモニター。|https://github.com/orhun/pkgtop|{{AUR|pkgtop-git}}}} |
* {{App|pkgtop|GNU/Linux 用に開発されたインタラクティブなパッケージマネージャ兼リソースモニター。|https://github.com/orhun/pkgtop|{{AUR|pkgtop-git}}}} |
||
* {{App|[[Powerpill]]|[[aria2]] や [[Reflector]] を通じて並列分割ダウンロードを行い ''pacman'' のダウンロード処理を高速化。|https://xyne.dev/projects/powerpill/|{{AUR|powerpill}}}} |
* {{App|[[Powerpill]]|[[aria2]] や [[Reflector]] を通じて並列分割ダウンロードを行い ''pacman'' のダウンロード処理を高速化。|https://xyne.dev/projects/powerpill/|{{AUR|powerpill}}}} |
||
768行目: | 819行目: | ||
* {{App|pcurses|C++ で書かれた、Curses TUI の ''pacman'' ラッパー。|https://github.com/schuay/pcurses|{{AUR|pcurses}}}} |
* {{App|pcurses|C++ で書かれた、Curses TUI の ''pacman'' ラッパー。|https://github.com/schuay/pcurses|{{AUR|pcurses}}}} |
||
* {{App|tkPacman|Tcl で書かれた、Tk の pacman ラッパー。|https://sourceforge.net/projects/tkpacman|{{AUR|tkpacman}}}} |
* {{App|tkPacman|Tcl で書かれた、Tk の pacman ラッパー。|https://sourceforge.net/projects/tkpacman|{{AUR|tkpacman}}}} |
||
+ | |||
+ | {{TranslationStatus|pacman/Tips and tricks|2024-08-24|814725}} |
2024年8月24日 (土) 15:36時点における最新版
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、Core Utilities や Bash を見てください。
目次
- 1 メンテナンス
- 1.1 パッケージをリストアップ
- 1.2 パッケージの閲覧
- 1.3 パッケージが所有しているファイルとそのサイズを一覧表示
- 1.4 どのパッケージにも所有されていないファイルを特定する
- 1.5 パッケージによって作成された未所有のファイルを追跡する
- 1.6 使用していないパッケージ (孤立したパッケージ) の削除
- 1.7 より多くの不要なパッケージを検出する
- 1.8 必須パッケージ以外の全てのパッケージを削除する
- 1.9 複数のパッケージの依存パッケージリストを取得
- 1.10 変更されたバックアップファイルをリストアップ
- 1.11 pacman データベースをバックアップ
- 1.12 変更履歴を簡単に確認
- 2 インストールとリカバリ
- 2.1 パッケージを CD/DVD や USB スティックからインストールする
- 2.2 カスタムローカルリポジトリ
- 2.3 pacman のキャッシュをネットワークで共有する
- 2.4 ファイルシステムからパッケージを再構成する
- 2.5 インストール済みパッケージのリスト
- 2.6 リストからパッケージをインストールする
- 2.7 パッケージの元の状態から変更された全てのファイルをリストアップ
- 2.8 全てのパッケージの再インストール
- 2.9 Pacman のローカルデータベースを復元する
- 2.10 既存のインストールから USB キーを復元する
- 2.11 .pkg ファイル内の特定のファイルの内容を見る
- 2.12 古いパッケージのライブラリを使っているアプリケーションを探す
- 2.13 必要な言語のコンテンツのみをインストールする
- 2.14 接続状況が悪い場合でもパッケージをインストールする
- 3 パフォーマンス
- 4 ユーティリティ
メンテナンス
システムメンテナンスも参照。
パッケージをリストアップ
未使用のリポジトリで
デフォルトでは、pacman.conf
に載っているリポジトリが同期、検索、インストール、アップグレードに使用されます。しかし、リポジトリの使用用途は自由に変更できます。例えば、一部のリポジトリは検索のみに使用するには[1]:
/etc/pacman.conf
... [multilib] Usage = Sync Search ...
pacman.conf(5) § REPOSITORY SECTIONS を参照。
バージョンも表示
バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。
- 明示的にインストールしたパッケージを全てリストアップ:
pacman -Qe
group
パッケージグループに含まれるパッケージを全てリストアップ:pacman -Sg group
- 外部パッケージを全てリストアップ (典型的には、手動でダウンロードしてインストールしたパッケージや、リポジトリから削除されたパッケージです):
pacman -Qm
- ネイティブなパッケージ (同期データベースからインストールしたパッケージ) をリストアップ:
pacman -Qn
- 依存パッケージでも任意の依存パッケージでもない、明示的にインストールしたネイティブパッケージ (同期データベースにあるパッケージ) をリストアップ:
pacman -Qent
- 正規表現にマッチするパッケージをリストアップ:
pacman -Qs regex
。 - 正規表現にマッチするパッケージを、カスタムの出力フォーマットでリストアップ (expac が必要です):
expac -s "%-30n %v" regex
サイズも表示
ハードドライブの容量を空けたい場合に、どのパッケージが最も大きいかを調べられると便利です。方法としては、個々のパッケージのサイズを調べる方法と、パッケージとその依存パッケージのサイズを調べる方法の2つがあります。
個々のパッケージ
次のコマンドは、インストール済みのパッケージをそのサイズとともに表示します:
$ LC_ALL=C.UTF-8 pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | LC_ALL=C.UTF-8 sort -h
パッケージと依存パッケージ
パッケージのサイズを依存パッケージとともに表示する方法は2つあります:
複数のパッケージのダウンロードサイズをリストアップするには (全パッケージをリストアップするには packages
に何も入力しないでください):
$ expac -S -H M '%k\t%n' packages
base メタパッケージにも xorg パッケージグループにも属さない、明示的にインストールされたパッケージをサイズと説明とともにリストアップするには:
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)) | sort -n
バージョンが古いくなっているパッケージをダウンロードサイズともに表示するには:
$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh
任意の依存パッケージのみを表示するには:
$ expac -S "%o" package
日付でソート
最も最後にインストールされた20個のパッケージを expac でリストアップするには:
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20
あるいは、エポック秒 (1970-01-01 UTC) を表示するには:
$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20
指定したグループ、リポジトリ、メタパッケージに含まれないパッケージ
明示的にインストールしたパッケージの中で base メタパッケージに含まれないものを一覧表示するには:
$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)
明示的にインストールしたパッケージの中で base メタパッケージにも xorg パッケージグループにも含まれていないものを一覧表示するには:
$ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)
インストールしたパッケージの中で、他のどのパッケージからも必要とされておらず、かつ base メタパッケージにも xorg パッケージグループにも含まれていないものを一覧表示するには:
$ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u)
先と同じですが、説明も付けて一覧表示するには:
$ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u))
インストールしたパッケージの中で、repo_name という名前のリポジトリに含まれていないものを一覧表示するには:
$ comm -23 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
インストールしたパッケージの中で、repo_name という名前のリポジトリに含まれているものを一覧表示するには:
$ comm -12 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
Arch Linux ISO にインストールされているパッケージの中で、base メタパッケージに含まれていないものを一覧表示するには:
$ comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)
開発版パッケージ
開発版や不安定版のパッケージを一覧表示するには:
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'
パッケージの依存パッケージ
あるパッケージの依存パッケージの一覧を入手したい場合、最も簡単な方法は以下のコマンドの出力を見ることです:
$ pacman -Qi package
自動化させるには、pacman の出力をパースするというエラーの発生しやすい方法を取るのではなく、expac を使ってください:
$ expac -S '%D' package
任意の依存パッケージも表示
明示的にインストールしたパッケージを、その任意の依存パッケージも一緒に一覧表示するには:
$ LC_ALL=C.UTF-8 pacman -Qei | sed '/^[^NO ]/d;/None$/d' | awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n\\S"} /Optional Deps/ {print $1"\nO"$2}'
あるいは、expac を使って:
$ expac -d '\n\n' -l '\n\t' -Q '%n\n\t%O' $(pacman -Qeq)
先とほぼ同じですが、既にインストール済みの任意の依存パッケージを出力から除くには:
$ LC_ALL=C.UTF-8 pacman -Qei | sed '/^[^NO ]/d;/None$/d' | awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n\\S"} /Optional Deps/ {print $1"\nO"$2}' | sed 's/^Optional Deps ://;/\[installed\]$/d;s/\s\+/ /'
パッケージの閲覧
インストール済みのパッケージを、プレビューウィンドウを表示してブラウズするには:
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
このコマンドは、パッケージの一覧を左のペインに、パッケージの情報を右のペインにそれぞれ表示させるために fzf を使用しています。
表示するパッケージを絞るには文字を入力してください。矢印キーで (または Ctrl-j
/Ctrl-k
) で移動し、Enter
でパッケージの情報を less で表示します。
pacman のデータベースに載っているパッケージ (インストールされているものとされていないもの両方) を同じような方法 (fzf) でブラウズするには:
$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse
カーソルの移動方法は同じです。しかし、Enter
キーは先程と同じようには動きません。
パッケージが所有しているファイルとそのサイズを一覧表示
このコマンドは、特定のパッケージが多くの容量を使用していることが分かっていて、そのパッケージのどのファイルが最も大きいかを確認したい場合に便利かもしれません。
$ pacman -Qlq package | grep -v '/$' | xargs -r du -h | sort -h
どのパッケージにも所有されていないファイルを特定する
どのパッケージにも所有されていないファイルがある場合 (ソフトウェアのインストールにパッケージマネージャを使用しなかった場合に起こりえます)、そのようなファイルをクリーンアップするために特定する必要があることがあります。
1つ目の方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを pacman で調べる方法です:
# (export LC_ALL=C.UTF-8; comm -13 <(pacman -Qlq | sed 's,/$,,' | sort) <(find /etc /usr /opt -path /usr/lib/modules -prune -o -print | sort))
パッケージによって作成された未所有のファイルを追跡する
ほとんどのシステムでは、通常の運用でも状態ファイル、ログ、インデックスなどといったゴーストファイルがゆっくりと蓄積していきます。
pacutils パッケージの pacreport
を使えば、/etc/pacreport.conf
の設定を使用して、そのようなファイルとそれらと関連するパッケージを追跡できます (pacreport(1) § FILES を参照)。
設定ファイルの例としては以下のようなものがあるでしょう (要約):
/etc/pacreport.conf
[Options] IgnoreUnowned = usr/share/applications/mimeinfo.cache [PkgIgnoreUnowned] alsa-utils = var/lib/alsa/asound.state bluez = var/lib/bluetooth ca-certificates = etc/ca-certificates/trust-source/* dbus = var/lib/dbus/machine-id glibc = etc/ld.so.cache grub = boot/grub/* linux = boot/initramfs-linux.img pacman = var/lib/pacman/local update-mime-database = usr/share/mime/magic
設定ファイルを作成したら、pacreport --unowned-files
を root ユーザーとして実行すれば、関連するパッケージがすでにアンインストールされている場合 (または、新しいファイルが作成された場合)、それに対応する未所有のファイルが一覧表示されます。
加えて、aconfmgr (aconfmgr-gitAUR) は、設定スクリプトを使用して、変更されたファイルや孤立したファイルを追跡できます。
使用していないパッケージ (孤立したパッケージ) の削除
孤立したパッケージ (orphan) とは、依存パッケージとしてインストールされたが、もはやどのパッケージからも必要とされていないパッケージのことです。
パッケージのアンインストール時に pacman -Rs package
ではなく pacman -R package
を使ったことや、makedepends として設定されているパッケージをインストールしたこと、パッケージの新しいバージョンで依存関係が解消したことが原因で、このようなパッケージは時間と共にシステムに蓄積していく可能性があります。
孤立したパッケージとその設定ファイルを再帰的に削除するには:
# pacman -Qdtq | pacman -Rns -
孤立したパッケージが見つからなかった場合、このコマンドの出力は error: argument '-' specified with empty stdin
(エラー: 引数 '-' が指定されましたが標準入力が空です
) となります。これは、pacman -Rns
に引数が渡されなかった場合の想定通りの動作です。このエラーは、2つ目のコマンドの前に moreutils パッケージの ifne(1) を加えれば出なくなります。
削除したくないパッケージが先のコマンドの出力に載っていた場合は、そのパッケージを明示的にインストールしたものとして登録することで、孤立したパッケージのリストから外すことができます:
# pacman -D --asexplicit package
より多くの不要なパッケージを検出する
上記の方法では、必要とされないパッケージが検出されないことがあります。例えば、依存関係のサイクル ("循環依存" とも呼ばれる)、過剰な依存 (複数回、依存関係が発生する)、明示的ではない任意の依存などの場合です。
そのようなパッケージを検出するには:
$ pacman -Qqd | pacman -Rsu --print -
先のコマンドで出力されたパッケージを一度に全て削除したい場合は、--print
フラグ無しでコマンドを実行してください。
必須パッケージ以外の全てのパッケージを削除する
必須パッケージを除いて全てのパッケージを削除する必要がある場合、1つの方法は、必須でないパッケージのインストール理由を「依存パッケージ」と設定してから、不要な依存パッケージを全て削除することです。
まず、"明示的にインストール" されたパッケージのインストール理由を "依存関係としてインストール" に変更します:
# pacman -D --asdeps $(pacman -Qqe)
次に、必須パッケージ (つまり、削除したくないパッケージ) が削除対象にならないようにするために、それらのインストール理由を "明示的にインストール" に変更します:
# pacman -D --asexplicit base linux linux-firmware
最後に、#使用していないパッケージ (孤立したパッケージ) の削除 の手順に従って "依存関係としてインストール" に指定されたパッケージを削除してください。
複数のパッケージの依存パッケージリストを取得
依存パッケージはアルファベット順にソートされ、重複するパッケージは1つにまとめられます。
$ LC_ALL=C.UTF-8 pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
あるいは、expac を使って:
$ expac -l '\n' %E -S packages | sort -u
変更されたバックアップファイルをリストアップ
ユーザーによって変更される可能性のあるファイル (つまり、PKGBUILD の backup 配列に含まれているファイル) として pacman に追跡されていて、かつユーザーによって変更が加えられた設定ファイルを一覧表示するには:
# pacman -Qii | awk '/\[modified\]/ {print $(NF - 1)}'
このコマンドを root 権限で実行することで、root ユーザーからしか読み取れないファイル /etc/sudoers
など) も出力に含まれるようになります。
このコマンドは、システムのバックアップを選択的に行いたい時や、システムの設定をマシンからマシンへ複製する際に使うことができます。
pacman データベースをバックアップ
次のコマンドでローカルの pacman データベースをバックアップできます:
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local
バックアップした pacman データベースファイルは USB スティックや外付けハードドライブ、CD-R など、一つ以上のオフラインメディアに保存してください。
pacman_database.tar.bz2
ファイルを /
ディレクトリに移動して以下のコマンドを実行することでデータベースを復元できます:
# tar -xjvf pacman_database.tar.bz2
変更履歴を簡単に確認
メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。pacologAUR をインストールすることでコマンドラインからコミットメッセージを素早く確認することができます。pacolog package
を実行すると、公式リポジトリのパッケージまたは AUR のパッケージの最近のコミットメッセージの一覧を表示します。
インストールとリカバリ
パッケージを取得・復活させる別の方法。
パッケージを CD/DVD や USB スティックからインストールする
パッケージやパッケージグループをダウンロードするには:
# cd ~/Packages # pacman -Syw --cachedir . base base-devel grub-bios xorg gimp # repo-add ./custom.db.tar.zst ./*.pkg.tar.zst
Pacman はデフォルトでホストのインストール環境を参照するため、既存の依存関係を適切に解決したり、ダウンロードしたりすることができません。すべてのパッケージと依存関係が必要である場合は、一時的な空のデータベースを作成し、そのデータベースを --dbpath
オプションで参照すると良いでしょう:
# mkdir /tmp/blankdb # pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel grub-bios xorg gimp # repo-add ./custom.db.tar.zst ./*.pkg.tar.zst
次に、先の "Packages" ディレクトリを光学ディスク (CD や DVD など) に焼くか、USB ドライブや外部 HDD などに保存してください。
インストールするには:
1. メディアをマウントする:
光学ディスクドライブの場合は:
# mount --mkdir /dev/sr0 /mnt/repo
USB ドライブやハードディスクドライブなどの場合は:
# mount --mkdir /dev/sdxY /mnt/repo
2. マウントしたリポジトリを pacman.conf
に追加してください。ただし、他のリポジトリより前に置いてください。リポジトリの順番が重要です。pacman.conf
の一番下にある、コメントアウトされているリポジトリをアンコメントするだけではいけません。他のリポジトリより前に置くことで、CD/DVD/USB にあるファイルを標準のリポジトリ上にあるものよりも優先させます:
/etc/pacman.conf
[custom] SigLevel = PackageRequired Server = file:///mnt/repo/Packages
3. 最後に、pacman データベースを同期し、追加した新しいリポジトリを利用できるようにします:
# pacman -Syu
カスタムローカルリポジトリ
pacman に含まれる repo-add スクリプトを使うことで、個人用のリポジトリのデータベースを生成することができます。詳しい使い方は repo-add --help
を実行して見て下さい。
パッケージデータベースは tar ファイルです (任意で圧縮できます)。有効な拡張子は、.db か .files の後に、アーカイブ拡張子 .tar、.tar.gz、.tar.bz2、.tar.xz、.tar.zst、.tar.Z のうちどれかを付け加えたものになります。(repo-add を使用する際に) このファイルが存在している必要はありませんが、親ディレクトリはすべて存在していなければなりません。
新しいパッケージをデータベースに追加する、あるいはデータベース内にすでにある古いバージョンのパッケージを置き換えるには、以下を実行してください:
$ repo-add /path/to/repo.db.tar.zst /path/to/package-1.0-1-x86_64.pkg.tar.zst
repo-add を使用する際は、データベースとパッケージが同一のディレクトリ内に存在している必要はありません。ただし、そのデータベースを pacman で使用する際は、データベースとパッケージが一緒に存在している必要があるので注意してください。また、リポジトリに含めるビルド済みパッケージをすべて1つのディレクトリに入れておけば、シェルのグロブ拡張を使って複数のパッケージを一度に追加/更新することができます:
$ repo-add /path/to/repo.db.tar.zst /path/to/*.pkg.tar.zst
複数のアーキテクチャをサポートしようと考えている場合、エラーが起こらないように注意する必要があります。各アーキテクチャに独自のディレクトリツリーが存在している必要があります:
$ tree ~/customrepo/ | sed "s/$(uname -m)/arch/g"
/home/archie/customrepo/ └── arch ├── customrepo.db -> customrepo.db.tar.zst ├── customrepo.db.tar.zst ├── customrepo.files -> customrepo.files.tar.zst ├── customrepo.files.tar.zst └── personal-website-git-b99cce0-1-arch.pkg.tar.zst 1 directory, 5 files
repo-add 実行ファイルは、パッケージが適切であるかどうかをチェックします。パッケージが適切でない場合、以下のようなエラーメッセージが出力されます:
==> ERROR: '/home/archie/customrepo/arch/foo-arch.pkg.tar.zst' does not have a valid database archive extension.
repo-remove はパッケージデータベースからパッケージを削除するために使用されます。パッケージの名前のみをコマンドラインで指定します。
$ repo-remove /path/to/repo.db.tar.zst pkgname
ローカルリポジトリを作成できたら、リポジトリを pacman.conf
に追加してください。カスタムリポジトリの例は pacman.conf
内にあります。リポジトリ名は、データベースのファイル名からファイル拡張子を除いたものになります。上記の例では、リポジトリ名は単に repo となります。リポジトリの場所を参照するには、file://
URL を使うか、http://localhost/path/to/directory
を使って HTTP 経由で行ってください。
もし良ければ、カスタムリポジトリを非公式ユーザリポジトリのリストに追加して、コミュニティがその恩恵を受けられるようにしましょう。
pacman のキャッシュをネットワークで共有する
LAN 上で複数の Arch マシンを使っている場合、パッケージを共有することでダウンロード回数を劇的に減らすことができます。使用しているアーキテクチャが異なるマシン (i686 と x86_64) でキャッシュを共有してはいけません。問題が発生します。
読み取り専用キャッシュ
Pacman 6.1.0 はキャッシュサーバーを直接サポートしています。キャッシュサーバーは、キャッシュでないサーバーよりも前に試行されます。また、キャッシュサーバーはダウンロード時に HTTP 404 エラーが発生してもサーバープールから削除されず、データベースファイルとしては使用されません。
手っ取り早い解決策を探している場合は、他のコンピュータからキャッシュサーバーとしてアクセスできる一時的なシンプルなウェブサーバーを走らせることができます。
Pacman のキャッシュディレクトリを共有してみましょう。例えば、Python の http.server モジュールを使う場合は:
$ python -m http.server -d /var/cache/pacman/pkg/
次に、各クライアントマシンでキャッシュサーバーを追加するように /etc/pacman.d/mirrorlist
を編集してください:
/etc/pacman.d/mirrorlist
CacheServer = http://server-ip:port
スタンドアローンな方法としては darkhttpd で最小限のウェブサーバーを立てられます。先の python
コマンドを例えば以下のように置き換えてください:
[http]$ darkhttpd /var/cache/pacman/pkg --no-server-id
利便性のために darkhttpd を systemd サービスとして走らせることもできます。Systemd#ユニットファイル を参照してください。
Rust で書かれた小規模な Web サーバーである miniserve も使用できます:
$ miniserve /var/cache/pacman/pkg
次に、miniserve へアクセスできる最初の URL を使って、上記のように /etc/pacman.d/mirrorlist
を編集してください。
すでに他の目的で Web サーバーを実行している場合は、代わりにそれをローカルリポジトリサーバーとして再利用できます。たとえば、すでに nginx でサイトを提供している場合は、8080 番ポートで待受する nginx サーバーブロックを追加できます:
/etc/nginx/nginx.conf
server { listen 8080; root /var/cache/pacman/pkg; server_name myarchrepo.localdomain; try_files $uri $uri/; }
この変更を加えた後は、必ず nginx.service
の再起動を行ってください。
読み取り専用キャッシュのオーバーレイマウント
ローカルネットワーク上にあるマシンの /var/cache/pacman/pkg
ディレクトリをオーバーレイマウントすることで、読み取り専用のパッケージキャッシュとして使うことができます。キャッシュサーバーに他のマシンでも使われている最新のパッケージがある程度包括的にインストールされている場合、このような構成は効果的です。低帯域幅のアップストリーム接続の終端に一定数のマシンが存在する場合、この方法が便利です。
例:
# mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg # sshfs remote_username@remote_pkgcache_addr:/var/cache/pacman/pkg /tmp/remote_pkg -C # mount -t overlay overlay -o lowerdir=/tmp/remote_pkg,upperdir=/var/cache/pacman/pkg,workdir=/mnt/workdir_pkg /tmp/pacman_pkg
これで、オプション --cachedir /tmp/pacman_pkg
を使用して pacman を実行できます。例:
# pacman -Syu --cachedir /tmp/pacman_pkg
読み取り専用の分散キャッシュ
パッケージキャッシュを提供しているネットワーク上の他のコンピューターを自動的に検出するための Arch 固有のツールがあります。pacredir、pacserve、pkgdistcacheAUR、または paclanAUR を試してください。pkgdistcache は、プレーンな UDP ではなく Avahi を使用します。これは、WiFi とイーサネット間のブリッジではなくルーティングを行う特定のホームネットワークでより適切に機能する可能性があります。
歴史的には、PkgD と multipkg がありましたが、現在はメンテナンスされていません。
読み書き可能キャッシュ
ネットワークベースのマウントプロトコルを使って /var/cache/pacman/
を共有すれば、複数のコンピュータ間でパッケージを共有することができます。このセクションでは、SSHFS を使って、同じローカルネットワーク上にある複数のコンピュータ間でパッケージのキャッシュ及び関連するライブラリディレクトリを共有する方法を説明します。ただし、ネットワーク経由で共有されたキャッシュは、ファイルシステムの選択などの要因によって遅くなる可能性があることを留意しておいてください。
まず、ネットワーク共有をサポートするファイルシステムのパッケージ (sshfs や curlftpfs、samba、nfs-utils のうち一つ) をインストールしてください。
次に、サーバ上の /var/cache/pacman/pkg
をすべてのクライアントマシン上の /var/cache/pacman/pkg
にマウントすることで実際のパッケージを共有できます。
rsync や FTP で双方向同期
ローカル環境でのもう一つの方法は rsync です。キャッシュを提供するサーバーを選択し、rsync デーモンを有効化してください。クライアント側では、rsync プロトコルを介すことでこの共有ディレクトリと双方向で同期します。Rsync プロトコルにおいては、ファイル名にコロンが含まれていても問題ありません。
以下はクライアント側での例です。共有ディレクトリの名前に uname -m
を使うことで、システムのアーキテクチャと同じキャッシュを同期できるようにします:
# rsync ... rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ # pacman -Syu # paccache --remove --keep 3 # rsync --delete ... /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/
暗号化されていない rsync デーモンよりもセキュアな方法として rsync over ssh があります。これについては Rsync#SSH を使った自動バックアップ で概説されています。
Rsync がローカル環境で利用できない場合は、シンプルな ftp サービスを双方向同期に使用するのも良いでしょう。lftp は、ローカルをリモートストレージと同期するためのオプション --mirror
と --delete
を提供しています。
nginx で動的リバースプロキシキャッシュ
nginx を使えば、パッケージのリクエストを公式の上流ミラーにプロキシして、ダウンロードしたファイルをローカルのディスクにキャッシュしておくことができます。その後、同じパッケージに対するリクエストはすべてローカルのキャッシュから直接提供されるようになるため、多くのコンピュータが存在する場合に必要になるインターネットトラフィックの量を最小化できます。
この例では、キャッシュサーバーを http://cache.domain.example:8080/
で実行し、パッケージを /srv/http/pacman-cache/
に保存します。
キャッシュを提供するコンピュータに nginx をインストールしてください。キャッシュ用のディレクトリを作成し、nginx がそのディレクトリへファイルを書き込みできるようにパーミッションの設定を行ってください:
# mkdir /srv/http/pacman-cache # chown http:http /srv/http/pacman-cache
この pacman キャッシュ用の nginx 設定を /etc/nginx/nginx.conf
の開始点として使います。resolver
ディレクティブの設定はこれでよいかどうかを確認してください。上流のサーバーブロックでは、proxy_pass
ディレクティブを公式ミラーのアドレスに設定してください。オプションの形式は先の設定ファイルを参考にしてください。設定ファイルが完成したら、nginx を開始し、有効化してください。
キャッシュを使うには、各 Arch Linux コンピュータ (キャッシュをホストするコンピュータも含む) の mirrorlist
ファイルの一番最初に以下の行を追加する必要があります:
/etc/pacman.d/mirrorlist
Server = http://cache.domain.example:8080/$repo/os/$arch ...
Pacoloco プロキシキャッシュサーバー
Pacoloco は、pacman リポジトリ用の使いやすいプロキシキャッシュサーバーです。キャッシュ済みのパッケージの自動プリフェッチも可能です。
pacoloco パッケージでインストールできます。Pacoloco の設定ファイルを開き、pacman ミラーを追加してください:
/etc/pacoloco.yaml
port: 9129 repos: mycopy: urls: - http://mirror.lty.me/archlinux - http://mirrors.kernel.org/archlinux
pacoloco.service
を再起動すると、プロキシリポジトリが http://myserver:9129/repo/mycopy
で利用できるようになります。
Flexo プロキシキャッシュサーバー
Flexo は、pacman リポジトリ用のさらに別のプロキシキャッシュサーバーです。Flexo は flexo-gitAUR でインストールできます。インストールしたら、flexo.service
ユニットを起動してください。
Flexo はデフォルトでは 7878
番ポートで動作します。pacman に Flexo 経由でパッケージをダウンロードさせるには、/etc/pacman.d/mirrorlist
の一番最初に Server = http://myserver:7878/$repo/os/$arch
を記述してくだしあ。
同期プログラムを使用して pacman パッケージキャッシュを同期する
Syncthing または Resilio Sync を使用して、pacman キャッシュディレクトリ (つまり、/var/cache/pacman/pkg
) を同期します。
望まないキャッシュ削除を防ぐ
デフォルトでは、pacman -Sc
は、キャッシュにあるパッケージ tarball のうち、同マシン上にインストールされていないパッケージに対応するものを削除します。pacman は、キャッシュを共有するすべてのマシンにどのようなパッケージがインストールされているかを予測できないため、削除すべきでないファイルを削除してしまうことになります。
キャッシュのクリーンアップ時に 古くなった tarball のみを削除するには:
/etc/pacman.conf
[options] CleanMethod = KeepCurrent
ファイルシステムからパッケージを再構成する
ファイルシステム上のインストール済みファイルからパッケージを再構築するには、fakepkgAUR を使用してください。システム上のファイルはそのままパッケージ化されるため、ファイルシステムに加えた変更はすべてパッケージにも受け継がれます。そのため、再構成したパッケージを配布することは推奨されません。代替方法は ABS と Arch Linux Archive を参照してください。
インストール済みパッケージのリスト
明示的にインストールされたすべてのパッケージのリストを保持しておくと、たとえばシステムをバックアップしたり、新しいシステムへのインストールを高速化したりするのに役立ちます:
$ pacman -Qqe > pkglist.txt
明示的にインストールされたパッケージの最新リストを保持するために (たとえば、バージョン管理された /etc/
と組み合わせて)、フックを設定できます。例:
[Trigger] Operation = Install Operation = Remove Type = Package Target = * [Action] When = PostTransaction Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'
リストからパッケージをインストールする
既にインストール済みの最新のパッケージを再インストールせずに、以前保存したパッケージリストからパッケージをインストールするには、以下を実行してください:
# pacman -S --needed - < pkglist.txt
しかし、リストに AUR 由来の外部パッケージやローカルにインストールされた外部パッケージなどが載っていることもあります。リストから外部パッケージを除くには、先のコマンドを以下のように拡張することで可能です:
# pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))
最後に、システムにインストールされているパッケージがリストと一致していることを確認し、リストに記載されていないパッケージはすべて削除してください:
# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
パッケージの元の状態から変更された全てのファイルをリストアップ
(ソフトウェア/アードウェアの障害によって) ファイルが破損していることが疑われるが、本当に破損しているかどうかはわからない場合は、パッケージ内のファイルのハッシュ値と比較したほうが良いかもしれません。pacutils で比較することができます:
# paccheck --sha256sum --quiet
データベースの復元方法については、#Pacman のローカルデータベースを復元する を見てください。mtree
ファイルはそれぞれのパッケージファイルから .MTREE
として抽出することもできます。
全てのパッケージの再インストール
すべてのネイティブなパッケージを再インストールするには、以下のコマンドを使用してください:
# pacman -Qqn | pacman -S -
外部 (AUR) パッケージはまた別に再インストールする必要があります。そのようなパッケージは pacman -Qqm
でリストアップできます。
デフォルトでは、Pacman はインストール理由を保持します。
Pacman のローカルデータベースを復元する
pacman/ローカルデータベースの復元を見てください。
既存のインストールから USB キーを復元する
Arch を USB キーにインストールしたが、内部のデータが壊れてしまった場合 (例えば、書き込み途中に USB を抜いてしまった場合など)、すべてのパッケージを再インストールして、再び動かせるようにできる可能性があります (USB キーが /newarch
にマウントされている場合):
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
.pkg ファイル内の特定のファイルの内容を見る
例えば、systemd パッケージ内の /etc/systemd/logind.conf
の内容を見たい場合:
$ bsdtar -xOf /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst etc/systemd/logind.conf
あるいは、アーカイブのブラウズに vim を使うこともできます:
$ vim /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst
古いパッケージのライブラリを使っているアプリケーションを探す
既に実行中のプロセスには、システムの更新による変更が自動的に適用されません。その結果、実行中のプロセスは古いライブラリを使い続けます。脆弱性やその他のバグ、あるいはバージョン間での非互換性に関連する問題が発生する可能性があることから、このようなことは望ましくない場合があります。
更新されたライブラリに依存しているプロセスは htop (影響を受けるプログラムの名前をハイライトします) や lsof (これはライブラリの名前も出力します) ベースのスニペットを使って見つけることができます:
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u
この方法では、実行中のプロセスによって開かれたままになっているファイルのみを検出します。そのようなファイルは基本的に共有ライブラリ (.so
ファイル) だけです。これは、Java や Python アプリケーションのライブラリといった一部の依存関係を見逃してしまうことがあります。
必要な言語のコンテンツのみをインストールする
多くのパッケージは、複数の言語のドキュメントと翻訳をインストールします。中にはそのような不必要のファイルを削除するように設計されたプログラムもあります。例えば、localepurgeAUR はパッケージのインストール後に実行され、不必要なロケールファイルを削除します。より直接的なアプローチは pacman.conf
の NoExtract
ディレクティブで、これはそのようなファイルをそもそもインストールしないようにできます。
ヘルプファイルの翻訳を C ロケールを除いてすべてインストールしないようにするには、以下のディレクティブを追加してください:
NoExtract = usr/share/help/* !usr/share/help/C/*
HTML ドキュメントをすべてインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/gtk-doc/html/* NoExtract = usr/share/doc/HTML/*
必要なものを除いて様々なロケールをインストールしないようにするには:
NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* NoExtract = !usr/share/X11/locale/compose.dir !usr/share/X11/locale/iso8859-1/* NoExtract = !*locale*/en*/* !usr/share/*locale*/locale.* NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso* NoExtract = usr/share/i18n/charmaps/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/i18n/charmaps/ANSI_X3.4-1968.gz NoExtract = !usr/share/*locales/trans* NoExtract = !usr/share/*locales/C !usr/share/*locales/POSIX
翻訳された man ページをインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/man/* !usr/share/man/man*
vim-runtime に含まれている言語ファイルをインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/vim/vim*/lang/*
Qt アプリケーションの英語コンテンツ以外をインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/*/translations/*.qm usr/share/*/nls/*.qm usr/share/qt/phrasebooks/*.qph usr/share/qt/translations/*.pak !*/en-US.pak
Electron アプリケーションの英語コンテンツ以外をインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak
LibreOffice の英語のヘルプファイルをインストールしないようにするには、以下を追加してください:
NoExtract = usr/lib/libreoffice/help/en-US/*
OnlyOffice の英語コンテンツ以外をインストールしないようにするには、以下を追加してください:
NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/* NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/locale/* !*/en.json NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/help/*/* !*/help/en/* NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/*/main/resources/symboltable/* !*/en.json NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/documenteditor/forms/locale/* !*/en.json NoExtract = opt/onlyoffice/desktopeditors/editors/web-apps/apps/spreadsheeteditor/main/resources/formula-lang/* !*/en.json !*/en_desc.json NoExtract = opt/onlyoffice/desktopeditors/converter/empty/*/* !opt/onlyoffice/desktopeditors/converter/empty/en-US/*
英語の iBus 絵文字辞書以外をインストールしないようにするには、以下を追加してください:
NoExtract = usr/share/ibus/dicts/emoji-*.dict !usr/share/ibus/dicts/emoji-en.dict
接続状況が悪い場合でもパッケージをインストールする
接続環境が悪い場所でパッケージをインストールする際 (電車で携帯電話を使う場合など)、--disable-download-timeout
オプションを使えば以下のようなエラーが発生する可能性を減らすことができます:
error: failed retrieving file […] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
もしくは、
error: failed retrieving file […] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received
パフォーマンス
ダウンロード速度
パッケージをダウンロードするとき pacman は /etc/pacman.d/mirrorlist
に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法はミラーを見てください。
Pacman のダウンロード速度は、並列ダウンロードの有効化や、パッケージのダウンロードに pacman 内蔵のファイルダウンローダー以外のアプリケーションを使うことでも改善することができます。
いずれの場合でも、変更を行う前に最新の pacman を使っていることを確認してください:
# pacman -Syu
Powerpill
Powerpill は pacman のラッパーで、並列で分割ダウンロードを行うことによって pacman のダウンロード速度の向上を図ります。
wget
pacman に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手の良い選択肢です。
wget
を使うには、まず wget をインストールし、/etc/pacman.conf
ファイルの [options]
セクションにある以下の行をアンコメントしてください:
XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u
/etc/pacman.conf
に wget
パラメータを記述する代わりに、wget
の設定ファイルを直接修正することも可能です (システム全体のファイルは /etc/wgetrc
、ユーザー別のファイルは $HOME/.wgetrc
)。
aria2
aria2 はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。aria2 を使えば、Arch ミラーに対して複数の HTTP/HTTPS/FTP 接続を同時に確立することができ、ファイルやパッケージのダウンロード速度が向上するはずです。
aria2 をインストールして、/etc/pacman.conf
の [options]
セクションに以下の行を追加してください:
XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u
使用されている aria2c のオプションについては aria2c(1) § OPTIONS を見てください。
-d, --dir
: ダウンロードしたファイルを保存するディレクトリ。-o, --out
: ダウンロードしたファイルの出力ファイル名。%o
: pacman によって指定されるローカルのファイル名を表す変数。%u
: pacman によって指定されるダウンロード URL を表す変数。
他のアプリケーション
pacman で利用できるダウンローダーは他にもあります。以下はそのダウンローダーと、利用するための XferCommand 設定を挙げています:
snarf
:XferCommand = /usr/bin/snarf -N %u
lftp
:XferCommand = /usr/bin/lftp -c pget %u
axel
:XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u
hget
:XferCommand = /usr/bin/hget %u -n 2 -skip-tls false
(詳細は Github のプロジェクトページのドキュメントを読んでください)saldl
:XferCommand = /usr/bin/saldl -c6 -l4 -s2m -o %o %u
(詳細は プロジェクトページのドキュメントを読んでください)
ユーティリティ
- isfree — フリーでないパッケージを一覧表示する Bash スクリプト。Parabola のブラックリストをベースとしています。
- Lostfiles — 孤立したファイルを検知するスクリプト。
- pacutils — libalpm ベースのプログラム用のヘルパーライブラリ。
- pkgfile — あるファイルを使っているパッケージが何かを見つけるツール。
- pkgtop — GNU/Linux 用に開発されたインタラクティブなパッケージマネージャ兼リソースモニター。
- repoctl — ローカルリポジトリの管理を補助するツール。
- repose — Arch Linux リポジトリ作成ツール。
- snap-pac — openSUSE の YaST のように pacman で自動的に snapper のスナップショットを作成するツール。
- vrms-arch — フリーでないパッケージがインストールされているかどうかを教えてくれるバーチャル Richard M. Stallman。
グラフィカル
- Deepin App Store — DTK で構築された Deepin デスクトップ環境用のサードパーティアプリストア。PackageKit を使用しています。AppStream メタデータ をサポートしています。.
- Discover — C++/QML で書かれた、PackageKit を使用する Qt 5 アプリケーションマネージャ。AppStream メタデータ、Flatpak、ファームウェアの更新をサポートしています。plasma に含まれています。
- GNOME PackageKit — C で書かれた、PackageKit を使用する GTK 3 パッケージマネージャ。
- pcurses — C++ で書かれた、Curses TUI の pacman ラッパー。
- tkPacman — Tcl で書かれた、Tk の pacman ラッパー。