「Pacman/ヒントとテクニック」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(冒頭に pacman のリンクを追加)
 
(9人の利用者による、間の103版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
[[Category:パッケージ管理]]
 
  +
[[Category:パッケージマネージャー]]
[[en:Pacman/Tips and tricks]]
 
[[es:Pacman/Tips and tricks]]
+
[[de:Pacman-Tipps]]
[[fr:Astuces Pacman]]
+
[[en:pacman/Tips and tricks]]
[[it:Pacman/Tips and tricks]]
+
[[es:Pacman (Español)/Tips and tricks]]
[[ru:Pacman/Tips and tricks]]
+
[[fr:Pacman (Français)/Tips and tricks]]
[[tr:Pacman ipuçları]]
+
[[pt:Pacman (Português)/Tips and tricks]]
[[zh-cn:Pacman/Tips and tricks]]
+
[[ru:Pacman (Русский)/Tips and tricks]]
  +
[[zh-hans:Pacman/Tips and tricks]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|pacman}}
 
 
{{Related|ミラー}}
 
{{Related|ミラー}}
 
{{Related|パッケージの作成}}
 
{{Related|パッケージの作成}}
 
{{Related articles end}}
 
{{Related articles end}}
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。
+
以下のヒントや [[pacman]] 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。
   
  +
== メンテナンス ==
== 外観と利便性の向上 ==
 
   
  +
{{Note|以下のセクションで使われている ''comm'' コマンド (入力が ''sort'' でソートされている必要があります) の代わりに、{{ic|grep -Fxf}} や {{ic|grep -Fxvf}} を使うこともできます。}}
=== グラフィカルフロントエンド ===
 
   
  +
[[システムメンテナンス]]も参照。
* {{App|Discover|KDE のパッケージ管理ツールのコレクション。PackageKit を使用。|https://projects.kde.org/projects/kde/workspace/discover|{{Pkg|discover}}}}
 
* {{App|GNOME packagekit|GTK ベースのパッケージ管理ツール。|http://www.freedesktop.org/software/PackageKit/|{{Pkg|gnome-packagekit}}}}
 
* {{App|GNOME Software|Gnome ソフトウェアアプリ (GNOME の精選ソフトウェアコレクション)。|https://wiki.gnome.org/Apps/Software|{{pkg|gnome-software}}}}
 
* {{App|pcurses|curses フロントエンドのパッケージ管理ツール。|https://github.com/schuay/pcurses|{{Pkg|pcurses}}}}
 
* {{App|tkPacman|Tcl/Tk と X11 にしか依存せず、CLI の ''pacman'' を使ってパッケージデータベースを操作できるソフトウェア。|http://sourceforge.net/projects/tkpacman|{{AUR|tkpacman}}}}
 
   
=== ティティ ===
+
=== パッケジをストアップ ===
* {{App|Arch-Update|Gnome-Shell のアップデートインジケータ。|https://github.com/RaphaelRochet/arch-update|{{AUR|gnome-shell-extension-arch-update}}}}
 
* {{App|Lostfiles|孤立したファイルを検知するスクリプト。|https://github.com/graysky2/lostfiles|{{AUR|lostfiles}}}}
 
* {{App|[[Arch Linux の安定化#pacmatic の使用|Pacmatic]]|アップグレードの前に Arch ニュースをチェックして、設定ファイルの変更を警告する pacman ラッパ。|http://kmkeen.com/pacmatic|{{Pkg|pacmatic}}}}
 
* {{App|Pactoys|リポジトリマネージャ・上流リリースの確認ツール・PKGBUILD の品質チェッカなどが含まれたユーティリティセット。|https://github.com/renatosilva/pactoys}}
 
* {{App|pacutils|libalpm ベースのプログラムのヘルパーライブラリ。|https://github.com/andrewgregory/pacutils|{{AUR|pacutils-git}}}}
 
* {{App|[[pkgfile]]|あるファイルを使っているパッケージが何かを見つけるツール。|http://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}}
 
* {{App|[[pkgtools]]|Arch Linux パッケージ用のスクリプトコレクション。|https://github.com/Daenyth/pkgtools|{{AUR|pkgtools}}}}
 
* {{App|repoctl|ローカルリポジトリの管理を補助するツール。|https://github.com/cassava/repoctl|{{AUR|repoctl}}}}
 
* {{App|repose|Arch Linux リポジトリ作成ツール。|https://github.com/vodik/repose|{{AUR|repose}}}}
 
* {{App|srcpac|ソースからのパッケージのリビルドを自動化するシンプルなツール。|https://projects.archlinux.org/srcpac.git|{{Pkg|srcpac}}}}
 
* {{App|[[Snapper#pacman のトランザクションをスナップショットで記録|snap-pac]]|openSUSE の YaST のように pacman で自動的に snapper のスナップショットを作成するツール。|https://github.com/wesbarnett/snap-pac|{{aur|snap-pac}}}}
 
   
  +
==== 未使用のリポジトリで ====
== メンテナンス ==
 
   
  +
デフォルトでは、{{ic|pacman.conf}} に載っているリポジトリが同期、検索、インストール、アップグレードに使用されます。しかし、リポジトリの使用用途は自由に変更できます。例えば、一部のリポジトリは検索のみに使用するには[http://allanmcrae.com/2014/12/pacman-4-2-released/]:
[[The Arch Way]] に従ってシステムを清潔に保つための管理業務。
 
   
  +
{{hc|/etc/pacman.conf|2=
[[システムメンテナンス]]も参照。
 
  +
...
  +
[multilib]
  +
Usage = Sync Search
  +
...
  +
}}
   
  +
{{man|5|pacman.conf|REPOSITORY SECTIONS}} を参照。
=== 最後にインストールしたパッケージを表示 ===
 
   
  +
==== バージョンも表示 ====
{{Pkg|expac}} をインストールして {{ic|<nowiki>expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -20</nowiki>}} または {{ic|<nowiki>expac --timefmt=%s '%l\t%n' | sort -n | tail -20</nowiki>}} を実行してください。
 
   
=== インストールしたパッケージを容量と一緒ストプ ===
+
バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパケージとそのバージョンのリストを貼り付けると便利です。
   
  +
* 明示的にインストールしたパッケージを全てリストアップ: {{ic|pacman -Qe}}
容量でソートしたインストール済みパッケージの一覧を見ることができます、これはハードドライブの空き容量を増やしたいときに役立ちます。
 
  +
* {{ic|''group''}} [[パッケージグループ]]に含まれるパッケージを全てリストアップ: {{ic|pacman -Sg ''group''}}
* {{Pkg|expac}} をインストールして {{ic|<nowiki>expac -s "%-30n %m" | sort -hk 2 | awk '{printf "%s %.0f MiB\n", $1, $2/1024/1024}' | column -t</nowiki>}} を実行する。
 
* pacgraph -c オプショを付けて実行することで全インストールしたパッケージと容量のを作成きま{{Pkg|pacgraph}} は [community] からインストールできます。
+
* 外部パッケージを全てリストアップ (典型的は、手動でダウロードしてインストールしたパッケージや、ポジリから削除されたパッケージです): {{ic|pacman -Qm}}
* base や base-devel に含まれていない明示的にインストールしたパッケージを容量や説明と共に一覧する: {{ic|<nowiki>expac -HM "%011m\t%-20n\t%10d" $( comm -23 <(pacman -Qqen|sort) <(pacman -Qqg base base-devel|sort) ) | sort -n</nowiki>}}
+
* ネイティブなパッケージ (同期データベースからインストールしたパッケージ) リストアップ: {{ic|pacman -Qn}}
  +
* 依存パッケージでも任意の依存パッケージでもない、明示的にインストールしたネイティブパッケージ (同期データベースにあるパッケージ) をリストアップ: {{ic|pacman -Qent}}
  +
* 正規表現にマッチするパッケージをリストアップ: {{ic|pacman -Qs ''regex''}}。
  +
* 正規表現にマッチするパッケージを、カスタムの出力フォーマットでリストアップ ({{Pkg|expac}} が必要です): {{ic|expac -s "%-30n %v" ''regex''}}
   
  +
==== サイズも表示 ====
=== インストールしたパッケージをバージョンと一緒にリストアップ ===
 
   
バグ報告したりインストールしたパッケージにつて議論するときに、インストールパッケージのリストをパッケージのージョンと一緒に取得す良いでしょう
+
ハードドライブの容量空けい場合に、どのパッケージが最も大きかを調べられると便利です。方法とては、個々のパッケージのサイズ調べる方法と、パッケージとそ依存パッケージのサイズを調べ方法の2つがあります
* 明示的にインストールしたパッケージを全て一覧する: {{ic| pacman -Qe }}。
 
* 外部からインストールしたパッケージを一覧する (通常は手動でダウンロード・インストールしたパッケージ): {{ic| pacman -Qm }}。
 
* 全てのネイティブなパッケージを一覧する (同期データベースからインストールしたパッケージ): {{ic| pacman -Qn }}.
 
* 正規表現でパッケージを一覧する: {{ic| <nowiki>pacman -Qs <regex> | awk 'BEGIN { RS="\n" ; FS="/" } { print $2 }' | awk '{ if(NF > 0) print $1, $2 }'</nowiki>}}
 
* {{Pkg|expac}} をインストールして {{ic| expac -s "%-30n %v"}} を実行する
 
   
=== プデトを確認する ===
+
===== 個々のパ =====
   
  +
次のコマンドは、インストール済みのパッケージをそのサイズとともに表示します:
Pacman には {{ic|checkupdates}} というスクリプトが付属しています。実行するのに root 権限は必要ありません。
 
   
  +
$ LC_ALL=C.UTF-8 pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | LC_ALL=C.UTF-8 sort -h
=== ファイルがどのパッケージにも所有されていないことを確認 ===
 
   
  +
===== パッケージと依存パッケージ =====
pacman データベースの外のファイルを定期的にチェックすることを推奨します。これらのファイルは通例の方法を使って (例: {{ic|./configure && make && make install}}) でインストールしたサードパーティのアプリケーションであることが度々です。こうしたファイル(もしくはシンボリックリンク)をファイルシステムから検索するにはシンプルなスクリプトを使います:
 
   
  +
パッケージのサイズを依存パッケージとともに表示する方法は2つあります:
{{hc|pacman-disowned|<nowiki>
 
#!/bin/sh
 
   
  +
* {{Pkg|expac}} をインストールして、次のように実行する: {{ic|expac -H M '%m\t%n' {{!}} sort -h}}
tmp=${TMPDIR-/tmp}/pacman-disowned-$UID-$$
 
  +
* {{AUR|pacgraph}} で {{ic|-c}} オプションを使う。
db=$tmp/db
 
fs=$tmp/fs
 
   
  +
複数のパッケージのダウンロードサイズをリストアップするには (全パッケージをリストアップするには {{ic|''packages''}} に何も入力しないでください):
mkdir "$tmp"
 
trap 'rm -rf "$tmp"' EXIT
 
   
  +
$ expac -S -H M '%k\t%n' ''packages''
pacman -Qlq | sort -u > "$db"
 
   
  +
{{Pkg|base}} [[メタパッケージ]]にも {{Grp|xorg}} [[パッケージグループ]]にも属さない、明示的にインストールされたパッケージをサイズと説明とともにリストアップするには:
find /etc /opt /usr ! -name lost+found \( -type d -printf '%p/\n' -o -print \) | sort > "$fs"
 
   
  +
$ 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
comm -23 "$fs" "$db"</nowiki>}}
 
   
  +
バージョンが古いくなっているパッケージをダウンロードサイズともに表示するには:
リストを生成するには:
 
   
$ pacman-disowned > non-db.txt
+
$ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh
   
  +
任意の依存パッケージのみを表示するには:
各エントリを確認しないで {{ic|non-db.txt}} に載っているファイルを全て削除するのは'''よくありません'''。様々な設定ファイルやログなどがあるかもしれないので、{{Ic|grep}} を使って相互参照を広く確実に検索した後でこのリストを使うようにしてください。
 
   
  +
$ expac -S "%o" ''package''
以下は役に立つワンライナーのスクリプトです。
 
   
  +
==== 日付でソート ====
どのパッケージにも属していないディレクトリを表示:
 
   
  +
最も最後にインストールされた20個のパッケージを {{Pkg|expac}} でリストアップするには:
alias pacman-disowned-dirs="comm -23 <(sudo find / \( -path '/dev' -o -path '/sys' -o -path '/run' -o -path '/tmp' -o -path '/mnt' -o -path '/srv' -o -path '/proc' -o -path '/boot' -o -path '/home' -o -path '/root' -o -path '/media' -o -path '/var/lib/pacman' -o -path '/var/cache/pacman' \) -prune -o -type d -print | sed 's/\([^/]\)$/\1\//' | sort -u) <(pacman -Qlq | sort -u)"
 
   
  +
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20
どのパッケージにも属していないファイルを表示:
 
   
  +
あるいは、エポック秒 (1970-01-01 UTC) を表示するには:
alias pacman-disowned-files="comm -23 <(sudo find / \( -path '/dev' -o -path '/sys' -o -path '/run' -o -path '/tmp' -o -path '/mnt' -o -path '/srv' -o -path '/proc' -o -path '/boot' -o -path '/home' -o -path '/root' -o -path '/media' -o -path '/var/lib/pacman' -o -path '/var/cache/pacman' \) -prune -o -type f -print | sort -u) <(pacman -Qlq | sort -u)"
 
   
  +
$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20
=== 孤立したパッケージの削除 ===
 
   
  +
==== 指定したグループ、リポジトリ、メタパッケージに含まれないパッケージ ====
''再帰的に''孤立したパッケージ(とその設定ファイル)を削除するには:
 
   
  +
{{Note|依存パッケージとしてインストールされたが、既にどのパッケージからも必要とされていないパッケージを確認したい場合は [[#使用していないパッケージ (孤立したパッケージ) の削除]] 章を参照。}}
# pacman -Rns $(pacman -Qtdq)
 
   
  +
明示的にインストールしたパッケージの中で {{Pkg|base}} [[メタパッケージ]]に含まれないものを一覧表示するには:
孤立したパッケージが見つからなかった場合、pacman は {{ic|error: no targets specified}} を出力します。{{ic|pacman -Rns}} に何も引数が指定されていないとこうなります。
 
   
  +
$ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)
以下の関数を {{ic|~/.bashrc}} に挿入することで孤立したパッケージを簡単に削除できます:
 
   
  +
明示的にインストールしたパッケージの中で {{Pkg|base}} メタパッケージにも {{Grp|xorg}} [[パッケージグループ]]にも含まれていないものを一覧表示するには:
{{hc|~/.bashrc|<nowiki>
 
orphans() {
 
if [[ ! -n $(pacman -Qdt) ]]; then
 
echo "No orphans to remove."
 
else
 
sudo pacman -Rns $(pacman -Qdtq)
 
fi
 
}</nowiki>}}
 
   
  +
$ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u)
{{Note|上記のスクリプトやコマンドは本当は孤立していないパッケージを表示する可能性があるため、実は孤立パッケージでないパッケージを削除する危険性があります。本当に孤立しているパッケージだけを削除するようにしたい場合、{{AUR|pkg_scripts}} パッケージの [http://xyne.archlinux.ca/projects/pkg_scripts/#help-message-pkg-list_true_orphans pkg-list_true_orphans] を使って下さい。}}
 
   
  +
インストールしたパッケージの中で、他のどのパッケージからも必要とされておらず、かつ {{Pkg|base}} メタパッケージにも {{Grp|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))
$ pacman -Qen
 
   
公式リポジトリに含まれていないパッケージで明示的にインストールしたパッケージを表示するには:
+
インストールしたパッケージの中で、''repo_name'' という名前のリポジトリに含まれて''いない''もの一覧表示するには:
   
  +
$ comm -23 <(pacman -Qq | sort) <(pacman -Sql ''repo_name'' | sort)
$ pacman -Qem
 
   
  +
インストールしたパッケージの中で、''repo_name'' という名前のリポジトリに含まれているものを一覧表示するには:
=== base グループ以外の全てのパッケージを削除する ===
 
   
  +
$ comm -12 <(pacman -Qq | sort) <(pacman -Sql ''repo_name'' | sort)
base グループを除く全てのパッケージを削除する必要がある場合は、このワンライナーを試して下さい:
 
   
  +
Arch Linux ISO にインストールされているパッケージの中で、{{Pkg|base}} メタパッケージに含まれていないものを一覧表示するには:
# pacman -R $(comm -23 <(pacman -Qq|sort) <((for i in $(pacman -Qqg base); do pactree -ul $i; done)|sort -u|cut -d ' ' -f 1))
 
   
  +
<nowiki>$ comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)</nowiki>
ソース: [https://bbs.archlinux.org/viewtopic.php?id=130176 Look at discussion here]
 
   
  +
{{Tip|別の方法として、{{ic|comm}} よりも簡単に覚えられる構文を持つ {{Pkg|moreutils}} パッケージの {{ic|combine}} を使うこともできます。詳細は {{man|1|combine}} を参照。}}
ノート:
 
   
  +
==== 開発版パッケージ ====
# {{ic|comm}} requires sorted input otherwise you get e.g. {{ic|comm: file 1 is not in sorted order}}.
 
# {{ic|pactree}} prints the package name followed by what it provides. For example:
 
   
  +
開発版や不安定版のパッケージを一覧表示するには:
{{hc|$ pactree -lu logrotate|
 
logrotate
 
popt
 
glibc
 
linux-api-headers
 
tzdata
 
dcron cron
 
bash
 
readline
 
ncurses
 
gzip}}
 
   
  +
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'
The {{ic|dcron cron}} line seems to cause problems, that is why {{ic|cut -d ' ' -f 1}} is needed - to keep just the package name.
 
   
=== 公式にインストールされたパッケージのみを一覧する ===
+
==== パッケージの依存パッケージ ====
   
  +
あるパッケージの依存パッケージの一覧を入手したい場合、最も簡単な方法は以下のコマンドの出力を見ることです:
$ pacman -Qqn
 
   
  +
$ pacman -Qi ''package''
同期データベースに存在するパッケージを一覧します。非公式のリポジトリを設定している場合は、そのリポジトリからインストールしたパッケージも表示されます。
 
   
  +
自動化させるには、pacman の出力をパースするというエラーの発生しやすい方法を取るのではなく、{{Pkg|expac}} を使ってください:
=== 複数のパッケージの依存パッケージ一覧を取得 ===
 
   
  +
$ expac -S '%D' ''package''
Dependencies are alphabetically sorted and doubles are removed.
 
Note that you can use {{ic|pacman -Qi}} to improve response time a little. But
 
you will not be able to query as many packages. Unfound packages are simply skipped
 
(hence the {{ic|2>/dev/null}}).
 
You can get dependencies of AUR packages as well if you use {{ic|yaourt -Si}},
 
but it will slow down the queries.
 
   
  +
==== 任意の依存パッケージも表示 ====
$ pacman -Si $@ 2>/dev/null | awk -F ": " -v filter="^Depends" \ '$0 ~ filter {gsub(/[>=<][^ ]*/,"",$2) ; gsub(/ +/,"\n",$2) ; print $2}' | sort -u
 
   
  +
明示的にインストールしたパッケージを、その任意の依存パッケージも一緒に一覧表示するには:
もしくは、{{ic|expac}} を使うことも可能です: {{ic|expac -l '\n' %E -S $@ &#124; sort -u}}。
 
   
  +
$ 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}'
=== 複数のパッケージの容量を取得 ===
 
   
  +
あるいは、{{Pkg|expac}} を使って:
以下のシェル関数を使うことができます:
 
   
  +
$ expac -d '\n\n' -l '\n\t' -Q '%n\n\t%O' $(pacman -Qeq)
{{hc|~/.bashrc|<nowiki>
 
pacman-size()
 
{
 
CMD="pacman -Si"
 
SEP=": "
 
TOTAL_SIZE=0
 
 
RESULT=$(eval "${CMD} $@ 2>/dev/null" | awk -F "$SEP" -v filter="Size" -v pkg="^Name" \
 
'$0 ~ pkg {pkgname=$2} $0 ~ filter {gsub(/\..*/,"") ; printf("%6s KiB %s\n", $2, pkgname)}' | sort -u -k3)
 
 
echo "$RESULT"
 
 
## Print total size.
 
echo "$RESULT" | awk '{TOTAL=$1+TOTAL} END {printf("Total : %d KiB\n",TOTAL)}'
 
}</nowiki>}}
 
   
  +
先とほぼ同じですが、既にインストール済みの任意の依存パッケージを出力から除くには:
依存関係リストと同じように {{ic|pacman -Qi}} を代わりに使うこともできますが、AUR の PKGBUILD にサイズ情報は含まれていないので [[yaourt]] では出来ません。
 
   
  +
$ 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 -Si "$@" 2>/dev/null | awk -F ": " -v filter="Size" -v pkg="Name" '$0 ~ pkg {pkgname=$2} $0 ~ filter {gsub(/\..*/,"") ; printf("%6s KiB %s\n", $2, pkgname)}' | sort -u -k3 | tee >(awk '{TOTAL=$1+TOTAL} END {printf("Total : %d KiB\n",TOTAL)}')
 
   
  +
インストール済みのパッケージを、プレビューウィンドウを表示してブラウズするには:
You should replace "$@" with packages, or put this line in a shell function.
 
   
  +
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
=== 変更された設定ファイルを一覧する ===
 
If you want to backup your system configuration files you could copy all files in {{ic|/etc/}}, but usually you're only interested in the files that you have changed. In this case you want to list those changed configuration files, we can do this with the following command:
 
# pacman -Qii | awk '/^MODIFIED/ {print $2}'
 
The following script does the same. You need to run it as root or with sudo.
 
{{hc|changed-files.sh|<nowiki>
 
#!/bin/bash
 
for package in /var/lib/pacman/local/*; do
 
sed '/^%BACKUP%$/,/^%/!d' $package/files | tail -n+2 | grep -v '^$' | while read file hash; do
 
[ "$(md5sum /$file | (read hash file; echo $hash))" != "$hash" ] && echo $(basename $package) /$file
 
done
 
done
 
</nowiki>}}
 
   
  +
このコマンドは、パッケージの一覧を左のペインに、パッケージの情報を右のペインにそれぞれ表示させるために [[fzf]] を使用しています。
=== 依存されていないパッケージを全て表示する ===
 
   
  +
表示するパッケージを絞るには文字を入力してください。矢印キーで (または {{ic|Ctrl-j}}/{{ic|Ctrl-k}}) で移動し、{{ic|Enter}} でパッケージの情報を ''less'' で表示します。
インストールしたパッケージの中で、どのパッケージにも依存されていないパッケージのリストを生成したい場合、以下のスクリプトを使うことができます。ハードドライブの容量を増やそうとしていて、覚えがない大量のパッケージがインストールされている場合、このスクリプトはとても役に立ちます。出力を見ることで必要なくなったパッケージを見つけることができます。
 
   
{{Note|こスクリプトは明示的にインストルしたパッケジも含めて、どのパッケージも依存されていない全てのパッケージを表示します。依存パッケージとしてインストールされていながら、どパッケージにも必要とされていないパッケージ表示するには、[[#孤立したパッケージの削除]] を見て下さい。}}
+
''pacman'' タベ載っていパッケージ (インストールされているものとされていないもの両方) 同じような方法 (fzf) でブラウズするには:
   
  +
$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse
{{hc|clean|<nowiki>
 
#!/bin/bash
 
   
  +
カーソルの移動方法は同じです。しかし、{{ic|Enter}} キーは先程と同じようには動きません。
# This script is designed to help you clean your computer from unneeded
 
# packages. The script will find all packages that no other installed package
 
# depends on. It will output this list of packages excluding any you have
 
# placed in the ignore list. You may browse through the script's output and
 
# remove any packages you do not need.
 
   
  +
=== パッケージが所有しているファイルとそのサイズを一覧表示 ===
# Enter groups and packages here which you know you wish to keep. They will
 
# not be included in the list of unrequired packages later.
 
ignoregrp="base base-devel"
 
ignorepkg=""
 
   
  +
このコマンドは、特定のパッケージが多くの容量を使用していることが分かっていて、そのパッケージのどのファイルが最も大きいかを確認したい場合に便利かもしれません。
comm -23 <(pacman -Qqt | sort) <(echo $ignorepkg | tr ' ' '\n' | cat <(pacman -Sqg $ignoregrp) - | sort -u)
 
</nowiki>}}
 
   
  +
$ pacman -Qlq ''package'' | grep -v '/$' | xargs -r du -h | sort -h
パッケージの説明も見るには:
 
   
  +
=== どのパッケージにも所有されていないファイルを特定する ===
{{bc|<nowiki>
 
expac -HM "%-20n\t%10d" $( comm -23 <(pacman -Qqt|sort) <(pacman -Qqg base base-devel|sort) )
 
</nowiki>}}
 
   
  +
どのパッケージにも所有されていないファイルがある場合 ([[システムメンテナンス#パッケージマネージャーを使用してソフトウェアをインストールする|ソフトウェアのインストールにパッケージマネージャを使用]]しなかった場合に起こりえます)、そのようなファイルをクリーンアップするために特定する必要があることがあります。
=== Systemd を使ってローカルデータベースをバックアップ ===
 
   
  +
1つ目の方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを ''pacman'' で調べる方法です:
[[systemd]] は 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))
{{Note|AUR にもっと細かく設定できるバージョンがあります: {{AUR|pakbak-git}}。}}
 
   
  +
{{Tip|{{Pkg|lostfiles}} スクリプトも同じようなことをしますが、一般的に偽陽性とされるファイルを出力から取り除くための拡張可能なブラックリストが含まれています。}}
以下のスクリプトを使って下さい ({{ic|$pakbak}} の値はバックアップ先に置き換えて下さい)。{{ic|pakbak.service}} を[[有効化]]することで起動時に自動的に実行させることができます:
 
   
  +
=== パッケージによって作成された未所有のファイルを追跡する ===
{{hc|/usr/lib/systemd/scripts/pakbak_script|2=
 
#!/bin/bash
 
   
  +
ほとんどのシステムでは、通常の運用でも状態ファイル、ログ、インデックスなどといった[http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html#S3-RPM-INSIDE-FLIST-GHOST-DIRECTIVE ゴースト]ファイルがゆっくりと蓄積していきます。
declare -r pakbak=''"/pakbak.tar.xz"''; ## set backup location
 
  +
tar -cJf "$pakbak" "/var/lib/pacman/local"; ## compress & store pacman local database in $pakbak
 
  +
{{Pkg|pacutils}} パッケージの {{ic|pacreport}} を使えば、{{ic|/etc/pacreport.conf}} の設定を使用して、そのようなファイルとそれらと関連するパッケージを追跡できます ({{man|1|pacreport|FILES}} を参照)。
  +
  +
設定ファイルの例としては以下のようなものがあるでしょう (要約):
  +
  +
{{hc|/etc/pacreport.conf|2=
  +
[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
 
}}
 
}}
   
  +
設定ファイルを作成したら、{{ic|pacreport --unowned-files}} を root ユーザーとして実行すれば、関連するパッケージがすでにアンインストールされている場合 (または、新しいファイルが作成された場合)、それに対応する未所有のファイルが一覧表示されます。
{{hc|/usr/lib/systemd/system/pakbak.service|2=
 
  +
[Unit]
 
  +
加えて、[https://github.com/CyberShadow/aconfmgr aconfmgr] ({{AUR|aconfmgr-git}}) は、設定スクリプトを使用して、変更されたファイルや孤立したファイルを追跡できます。
Description=Back up pacman database
 
  +
  +
=== 使用していないパッケージ (孤立したパッケージ) の削除 ===
  +
  +
孤立したパッケージ (orphan) とは、依存パッケージとしてインストールされたが、もはやどのパッケージからも必要とされていないパッケージのことです。
  +
  +
パッケージのアンインストール時に {{ic|pacman -Rs ''package''}} ではなく {{ic|pacman -R ''package''}} を使ったことや、[[makedepends]] として設定されているパッケージをインストールしたこと、パッケージの新しいバージョンで依存関係が解消したことが原因で、このようなパッケージは時間と共にシステムに蓄積していく可能性があります。
  +
  +
孤立したパッケージとその設定ファイルを再帰的に削除するには:
  +
  +
# pacman -Qdtq | pacman -Rns -
  +
  +
孤立したパッケージが見つからなかった場合、このコマンドの出力は {{ic|error: argument '-' specified with empty stdin}} ({{ic|エラー: 引数 '-' が指定されましたが標準入力が空です}}) となります。これは、{{ic|pacman -Rns}} に引数が渡されなかった場合の想定通りの動作です。このエラーは、2つ目のコマンドの前に {{Pkg|moreutils}} パッケージの {{man|1|ifne}} を加えれば出なくなります。
  +
  +
削除したくないパッケージが先のコマンドの出力に載っていた場合は、そのパッケージを明示的にインストールしたものとして登録することで、孤立したパッケージのリストから外すことができます:
  +
  +
# pacman -D --asexplicit ''package''
  +
  +
{{Note|{{ic|-Qt}} 引数は、本当にどのパッケージからも一切必要とされていないパッケージしか出力しません。任意の依存パッケージとして必要とされているパッケージも含めるには、{{ic|-t}} フラグを2つ渡してください (つまり、{{ic|-Qtt}})。}}
  +
  +
{{Tip|{{ic|pacman -Qdt}} コマンドを ''pacman'' のトランザクション後の[[pacman#フック|フック]]に追加すると、トランザクションによって必要とされなくなったパッケージが発生した場合に知らせてくれます。こうすると、パッケージがリポジトリから削除された際にしらせてくれるので便利です (パッケージがリポジトリから削除されると、ローカルにインストールされている同じパッケージは、明示的にインストールされていない場合、自動的に孤立したパッケージになるためです)。孤立したパッケージが見つからなかった場合に "failed to execute command" ("コマンドの実行に失敗しました") エラーにならないようにするには、フックの {{ic|Exec}} オプションに次のコマンドを指定してください:
  +
  +
{{ic|<nowiki>/usr/bin/bash -c "/usr/bin/pacman -Qdt || /usr/bin/echo '=> None found.'"</nowiki>}}
  +
  +
{{AUR|pacman-log-orphans-hook}} パッケージも同じようなフックを提供しますが、孤立したパッケージが見つかった際により詳細な指示を出してくれます。}}
  +
  +
=== より多くの不要なパッケージを検出する ===
  +
  +
上記の方法では、必要とされないパッケージが検出されないことがあります。例えば、依存関係のサイクル ("循環依存" とも呼ばれる)、過剰な依存 (複数回、依存関係が発生する)、明示的ではない任意の依存などの場合です。
  +
  +
そのようなパッケージを検出するには:
  +
  +
$ pacman -Qqd | pacman -Rsu --print -
  +
  +
先のコマンドで出力されたパッケージを一度に全て削除したい場合は、{{ic|--print}} フラグ無しでコマンドを実行してください。
  +
  +
=== 必須パッケージ以外の全てのパッケージを削除する ===
  +
  +
必須パッケージを除いて全てのパッケージを削除する必要がある場合、1つの方法は、必須でないパッケージのインストール理由を「依存パッケージ」と設定してから、不要な依存パッケージを全て削除することです。
  +
  +
まず、"明示的にインストール" されたパッケージのインストール理由を "依存関係としてインストール" に変更します:
  +
  +
# pacman -D --asdeps $(pacman -Qqe)
  +
  +
次に、必須パッケージ (つまり、'''削除したくない'''パッケージ) が削除対象にならないようにするために、それらのインストール理由を "明示的にインストール" に変更します:
  +
  +
# pacman -D --asexplicit base linux linux-firmware
   
  +
{{Note|
[Service]
 
  +
* 他のパッケージも削除されないようにしたい場合は、上記のコマンドに加えてください。完全に機能するベースシステムに必要となりうる他のパッケージについては [[インストールガイド#必須パッケージのインストール]] を参照してください。
Type=oneshot
 
  +
* 上記のコマンドではブートローダーのパッケージも削除対象になります。削除してもシステム自体は起動可能なままであるはずですが、パッケージがないとブートパラメータを変更できないかもしれません。
ExecStart=/bin/bash /usr/lib/systemd/scripts/pakbak_script
 
RemainAfterExit=no
 
 
}}
 
}}
   
  +
最後に、[[#使用していないパッケージ (孤立したパッケージ) の削除]] の手順に従って "依存関係としてインストール" に指定されたパッケージを削除してください。
{{hc|/usr/lib/systemd/system/pakbak.path|2=
 
[Unit]
 
Description=Back up pacman database
 
   
  +
=== 複数のパッケージの依存パッケージリストを取得 ===
[Path]
 
PathChanged=/var/lib/pacman/local
 
Unit=pakbak.service
 
   
  +
依存パッケージはアルファベット順にソートされ、重複するパッケージは1つにまとめられます。
[Install]
 
  +
WantedBy=multi-user.target
 
  +
{{Note|ローカルにインストールされたパッケージのみの依存関係ツリーを表示するには、({{ic|pacman -Si}} の部分で) {{ic|pacman -Qi}} コマンドを代わりに使用してください。}}
  +
  +
$ LC_ALL=C.UTF-8 pacman -Si ''packages'' | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
  +
  +
あるいは、{{Pkg|expac}} を使って:
  +
  +
$ expac -l '\n' %E -S ''packages'' | sort -u
  +
  +
=== 変更されたバックアップファイルをリストアップ ===
  +
  +
[[pacman/Pacnew と Pacsave#パッケージのバックアップファイル|ユーザーによって変更される可能性のある]]ファイル (つまり、[[PKGBUILD#backup|PKGBUILD の backup 配列]]に含まれているファイル) として ''pacman'' に追跡されていて、かつユーザーによって変更が加えられた設定ファイルを一覧表示するには:
  +
  +
# pacman -Qii | awk '/\[modified\]/ {print $(NF - 1)}'
  +
  +
このコマンドを root 権限で実行することで、root ユーザーからしか読み取れないファイル {{ic|/etc/sudoers}} など) も出力に含まれるようになります。
  +
  +
このコマンドは、システムのバックアップを選択的に行いたい時や、システムの設定をマシンからマシンへ複製する際に使うことができます。
  +
  +
{{Tip|
  +
* ''pacman'' のデータベースに載っているファイルのうち変更されたもの (バックアップファイル以外も含む) を一覧表示する方法は [[#パッケージから変更された全てのファイルをリストアップ]] を見てください。
  +
* ''pacman'' によって追跡されていないファイルを一覧表示する方法は [[#どのパッケージにも所有されていないファイルを特定する]] を見てください。
 
}}
 
}}
   
  +
=== pacman データベースをバックアップ ===
== インストールとリカバリー ==
 
   
  +
次のコマンドでローカルの ''pacman'' データベースをバックアップできます:
パッケージを取得・復活させる他の方法。
 
  +
  +
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local
  +
  +
バックアップした ''pacman'' データベースファイルは USB スティックや外付けハードドライブ、CD-R など、一つ以上のオフラインメディアに保存してください。
  +
  +
{{ic|pacman_database.tar.bz2}} ファイルを {{ic|/}} ディレクトリに移動して以下のコマンドを実行することでデータベースを復元できます:
  +
  +
# tar -xjvf pacman_database.tar.bz2
  +
  +
{{Note|''pacman'' データベースファイルが破損していて、バックアップファイルが存在しない場合でも、''pacman'' データベースを再構築できる望みはあります。[[#pacman のローカルデータベースを復元する]] を見てください。}}
  +
  +
{{Tip|{{AUR|pakbak-git}} パッケージには上記の作業を自動的に行うスクリプトと [[systemd]] サービスが入っています。{{ic|/etc/pakbak.conf}} で設定が可能です。}}
  +
  +
=== 変更履歴を簡単に確認 ===
  +
  +
メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。{{AUR|pacolog}} をインストールすることでコマンドラインからコミットメッセージを素早く確認することができます。{{ic|pacolog ''package''}} を実行すると、公式リポジトリのパッケージまたは AUR のパッケージの最近のコミットメッセージの一覧を表示します。
  +
  +
== インストールとリカバリ ==
  +
  +
パッケージを取得・復活させる別の方法。
   
 
=== パッケージを CD/DVD や USB スティックからインストールする ===
 
=== パッケージを CD/DVD や USB スティックからインストールする ===
   
パッケージやパッケージグループをダウンロードするには:
+
パッケージやパッケージグループをダウンロードするには:
   
 
# cd ~/Packages
 
# cd ~/Packages
# pacman -Syw base base-devel grub-bios xorg gimp --cachedir .
+
# pacman -Syw --cachedir . base base-devel grub-bios xorg gimp
# repo-add ./custom.db.tar.gz ./*
+
# repo-add ./custom.db.tar.zst ./*.pkg.tar.zst
   
  +
Pacman はデフォルトでホストのインストール環境を参照するため、既存の依存関係を適切に解決したり、ダウンロードしたりすることができません。すべてのパッケージと依存関係が必要である場合は、一時的な空のデータベースを作成し、そのデータベースを {{ic|--dbpath}} オプションで参照すると良いでしょう:
ダウンロードしたら "Packages" フォルダを CD/DVD に焼くか USB スティック、外部 HDD などにコピーしてください。
 
  +
  +
# 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 などに保存してください。
   
 
インストールするには:
 
インストールするには:
307行目: 338行目:
 
'''1.''' メディアをマウントする:
 
'''1.''' メディアをマウントする:
   
  +
光学ディスクドライブの場合は:
# mkdir /mnt/repo
 
# mount /dev/sr0 /mnt/repo # CD/DVD の場合
 
# mount /dev/sdxY /mnt/repo # USB スティックの場合。
 
   
  +
# mount --mkdir /dev/sr0 /mnt/repo
'''2.''' {{ic|pacman.conf}} を編集して他のリポジトリ (例: extra, core, etc.) の''前に''リポジトリを追加してください。この手順は重要です。これで標準のリポジトリに優先して CD/DVD/USB のファイルがインストールされるようになります:
 
   
  +
USB ドライブやハードディスクドライブなどの場合は:
{{hc|# nano /etc/pacman.conf|2=
 
  +
  +
# mount --mkdir /dev/sd''xY'' /mnt/repo
  +
  +
'''2.''' マウントしたリポジトリを {{ic|pacman.conf}} に追加してください。ただし、他のリポジトリより''前に''置いてください。リポジトリの順番が重要です。{{ic|pacman.conf}} の一番下にある、コメントアウトされているリポジトリをアンコメントするだけではいけません。他のリポジトリより前に置くことで、CD/DVD/USB にあるファイルを標準のリポジトリ上にあるものよりも優先させます:
  +
  +
{{hc|/etc/pacman.conf|2=
 
[custom]
 
[custom]
 
SigLevel = PackageRequired
 
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages}}
+
Server = file:///mnt/repo/Packages
  +
}}
   
'''3.''' 最後に、pacman データベースを同期し新しいリポジトリを使えるようにしてください:
+
'''3.''' 最後に、''pacman'' データベースを同期し、追加した新しいリポジトリを利用できるようにします:
   
# pacman -Sy
+
# pacman -Syu
   
 
=== カスタムローカルリポジトリ ===
 
=== カスタムローカルリポジトリ ===
   
pacman 3個人的なリポジトリのデータベースの作成より簡単にするため {{ic|repo-add}} いう名前の新しいスクリプト導入されした。詳しい使い方は {{ic|repo-add --help}} を実行して見て下さい。
+
''pacman'' に含まれる ''repo-add'' スクリプトを使うこと個人用のリポジトリのデータベースを生成するとができ。詳しい使い方は {{ic|repo-add --help}} を実行して見て下さい。
   
  +
パッケージデータベースは tar ファイルです (任意で圧縮できます)。有効な拡張子は、''.db'' か ''.files'' の後に、アーカイブ拡張子 ''.tar''、''.tar.gz''、''.tar.bz2''、''.tar.xz''、''.tar.zst''、''.tar.Z'' のうちどれかを付け加えたものになります。(''repo-add'' を使用する際に) このファイルが存在している必要はありませんが、親ディレクトリはすべて存在していなければなりません。
リポジトリに含むパッケージを全て一つのディレクトリに保存して、次のコマンドを実行してください (''repo'' はカスタムリポジトリの名前に置き換えてください):
 
   
  +
新しいパッケージをデータベースに追加する、あるいはデータベース内にすでにある古いバージョンのパッケージを置き換えるには、以下を実行してください:
$ repo-add /path/to/repo.db.tar.gz /path/to/*.pkg.tar.xz
 
   
  +
$ repo-add ''/path/to/repo.db.tar.zst /path/to/package-1.0-1-x86_64.pkg.tar.zst''
{{ic|repo-add}} を使う際、データベースとパッケージは同じディレクトリにある必要はないので注意してください。ただしそのデータベースで pacman を使うときには、揃っていないといけません。
 
   
  +
''repo-add'' を使用する際は、データベースとパッケージが同一のディレクトリ内に存在している必要はありません。ただし、そのデータベースを ''pacman'' で使用する際は、データベースとパッケージが一緒に存在している必要があるので注意してください。また、リポジトリに含めるビルド済みパッケージをすべて1つのディレクトリに入れておけば、シェルのグロブ拡張を使って複数のパッケージを一度に追加/更新することができます:
新しいパッケージを追加する(そして古いパッケージが存在していたら削除する)には、次を実行してください:
 
   
$ repo-add /path/to/repo.db.tar.gz /path/to/packagetoadd-1.0-1-i686.pkg.tar.xz
+
$ repo-add ''/path/to/repo.db.tar.zst /path/to/*.pkg.tar.zst''
   
  +
{{Warning|''repo-add'' は、コマンドラインで渡された順番でエントリをデータベースに追加します。同じパッケージの複数のバージョンが渡された場合、正しいバージョンが最後に追加されるよう注意しなければなりません。特に、シェルによって使用される辞書順はロケール依存であり、''pacman'' によって使用される {{man|8|vercmp}} の順序とは異なるので注意してください。}}
{{Note|If there is a package that needs to be removed from the repository, read up on {{Ic|repo-remove}}.}}
 
   
  +
複数のアーキテクチャをサポートしようと考えている場合、エラーが起こらないように注意する必要があります。各アーキテクチャに独自のディレクトリツリーが存在している必要があります:
ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。{{ic|db.tar.gz}} ファイルの名前がリポジトリの名前です。{{ic|file://}} url を使って直接参照するか、{{ic|ftp://localhost/path/to/directory}} を使って FTP でアクセスしてください。
 
   
  +
{{hc|$ 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''
  +
  +
ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。カスタムリポジトリの例は {{ic|pacman.conf}} 内にあります。リポジトリ名は、データベースのファイル名からファイル拡張子を除いたものになります。上記の例では、リポジトリ名は単に ''repo'' となります。リポジトリの場所を参照するには、{{ic|file://}} URL を使うか、{{ic|<nowiki>http://localhost/path/to/directory</nowiki>}} を使って HTTP 経由で行ってください。
  +
  +
もし良ければ、カスタムリポジトリを[[非公式ユーザーリポジトリ|非公式ユーザリポジトリのリスト]]に追加して、コミュニティがその恩恵を受けられるようにしましょう。
   
 
=== pacman のキャッシュをネットワークで共有する ===
 
=== pacman のキャッシュをネットワークで共有する ===
  +
  +
LAN 上で複数の Arch マシンを使っている場合、パッケージを共有することでダウンロード回数を劇的に減らすことができます。使用しているアーキテクチャが異なるマシン (i686 と x86_64) でキャッシュを共有してはいけません。問題が発生します。
   
 
==== 読み取り専用キャッシュ ====
 
==== 読み取り専用キャッシュ ====
   
  +
Pacman 6.1.0 はキャッシュサーバーを直接サポートしています。キャッシュサーバーは、キャッシュでないサーバーよりも前に試行されます。また、キャッシュサーバーはダウンロード時に HTTP 404 エラーが発生してもサーバープールから削除されず、データベースファイルとしては使用されません。
If you're looking for a quick and dirty solution, you can simply run a standalone webserver which other computers can use as a first mirror: {{ic|darkhttpd /var/cache/pacman/pkg}}. Just add this server at the top of your mirror list. Be aware that you might get a lot of 404 errors, due to cache misses, depending on what you do, but pacman will try the next (real) mirrors when that happens.
 
   
  +
手っ取り早い解決策を探している場合は、他のコンピュータからキャッシュサーバーとしてアクセスできる[https://gist.github.com/willurd/5720255 一時的なシンプルなウェブサーバー]を走らせることができます。
==== 読み書き可能キャッシュ ====
 
   
  +
Pacman のキャッシュディレクトリを共有してみましょう。例えば、[[Python]] の [https://docs.python.org/3/library/http.server.html#http-server-cli http.server] モジュールを使う場合は:
{{Tip|See [[pacserve]] for an alternative (and probably simpler) solution than what follows.}}
 
   
  +
$ python -m http.server -d /var/cache/pacman/pkg/
複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。
 
   
  +
{{Tip|デフォルトでは、Python の {{ic|http.server}} は任意のインターフェイスの {{ic|8000}} 番ポートをリッスンします。別のポートを使いたい場合や、特定のアドレスにのみバインドしたい場合は、パラメータを追加してください:
まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば [[sshfs]], [[shfs]], ftpfs, [[Samba|smbfs]], [[NFS|nfs]] など。
 
   
  +
$ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080
{{Tip|sshfs や shfs を使う場合、[[SSH 鍵]]を読んで下さい。}}
 
  +
}}
   
  +
次に、各クライアントマシンでキャッシュサーバーを追加するように {{ic|/etc/pacman.d/mirrorlist}} を[[テキスト編集|編集]]してください:
Then, to share the actual packages, mount {{ic|/var/cache/pacman/pkg}} from the server to {{ic|/var/cache/pacman/pkg}} on every client machine.
 
   
  +
{{hc|/etc/pacman.d/mirrorlist|2=
==== BitTorrent Sync を使って pacman のパッケージキャッシュを同期する ====
 
  +
CacheServer = http://''server-ip'':''port''
  +
}}
   
  +
{{Warning|他のサーバーエントリと違って、このカスタムサーバーのオプションには {{ic|/repos/$repo/os/$arch}} を付けてはいけません。このキャッシュサーバーにはこのディレクトリ階層が存在しないため、クエリが失敗してしまうからです。}}
[[BitTorrent Sync]] はネットワークを介してフォルダを同期する新方法です (LAN でもインターネットでも動作します)。ピアツーピアなのでサーバーを設定する必要はありません: 詳しくはリンクを参照してください。
 
BitTorrent Sync を使って pacman のキャッシュを共有する方法:
 
* まず同期したいマシンに AUR から {{AUR|btsync}} パッケージをインストール。
 
* [[BitTorrent Sync]] の wiki ページや AUR パッケージのインストール手順に従う。
 
** set up BitTorrent Sync to work for the root account. This process requires read/write to the pacman package cache.
 
** make sure to set a good password on btsync's web UI
 
** btsync の systemd デーモンを起動。
 
** in the btsync Web GUI add a new synchronized folder on the first machine and generate a new Secret. Point the folder to {{ic|/var/cache/pacman/pkg}}
 
** Add the folder on all the other machines using the same Secret to share the cached packages between all systems. Or, to set the first system as a master and the others as slaves, use the Read Only Secret. Be sure to point it to {{ic|/var/cache/pacman/pkg}}
 
   
  +
スタンドアローンな方法としては {{Pkg|darkhttpd}} で最小限のウェブサーバーを立てられます。先の {{ic|python}} コマンドを例えば以下のように置き換えてください:
Now the machines should connect and start synchronizing their cache. Pacman works as expected even during synchronization. The process of syncing is entirely automatic.
 
   
  +
[http]$ darkhttpd /var/cache/pacman/pkg --no-server-id
==== 要らなくなったキャッシュが消えないようにする ====
 
   
  +
利便性のために darkhttpd を ''systemd'' サービスとして走らせることもできます。[[Systemd#ユニットファイル]] を参照してください。
By default, {{Ic|pacman -Sc}} removes package tarballs from the cache that correspond to packages that are not installed on the machine the command was issued on. Because pacman cannot predict what packages are installed on all machines that share the cache, it will end up deleting files that should not be.
 
   
  +
Rust で書かれた小規模な Web サーバーである {{Pkg|miniserve}} も使用できます:
To clean up the cache so that only ''outdated'' tarballs are deleted, add this entry in the {{ic|[options]}} section of {{ic|/etc/pacman.conf}}:
 
   
  +
$ miniserve /var/cache/pacman/pkg
CleanMethod = KeepCurrent
 
   
  +
次に、miniserve へアクセスできる最初の URL を使って、上記のように {{ic|/etc/pacman.d/mirrorlist}} を編集してください。
=== インストールしたパッケージのリストのバックアップと復旧 ===
 
   
  +
すでに他の目的で Web サーバーを実行している場合は、代わりにそれをローカルリポジトリサーバーとして再利用できます。たとえば、すでに [[nginx]] でサイトを提供している場合は、8080 番ポートで待受する ''nginx'' サーバーブロックを追加できます:
pacman によってインストールしたパッケージのバックアップを定期的に行うのはグッドプラクティスです。何らかの理由でリカバリーできないシステムクラッシュが発生した時、pacman を使って全く同じパッケージを簡単に新しい環境に再インストールすることができるようになります。
 
   
  +
{{hc|/etc/nginx/nginx.conf|
* まず、ローカルにない現在のパッケージの一覧をバックアップしてください: {{ic|$ pacman -Qqen > pkglist.txt}}
 
  +
server {
  +
listen 8080;
  +
root /var/cache/pacman/pkg;
  +
server_name myarchrepo.localdomain;
  +
try_files $uri $uri/;
  +
}
  +
}}
   
  +
この変更を加えた後は、必ず {{ic|nginx.service}} の[[再起動]]を行ってください。
* {{ic|pkglist.txt}} を USB キーやその他メディア gist.github.com, Evernote, Dropbox などに保存してください。
 
   
  +
{{Tip|どの Web サーバーを使用する場合でも、ファイアウォール設定 (存在する場合) で、設定されたポートへの目的のトラフィックの到達が許可され、不要なトラフィックが許可されていないことを確認してください。[[セキュリティ#ネットワークとファイアウォール]]を参照してください。}}
* {{ic|pkglist.txt}} ファイルを新しいインストールにコピーして、ファイルが含まれているディレクトリにまで移動してください。
 
   
  +
==== 読み取り専用キャッシュのオーバーレイマウント ====
* 次のコマンドを実行することでバックアップリストからインストールを行います: {{ic|# pacman -S $(< pkglist.txt)}}
 
   
  +
ローカルネットワーク上にあるマシンの {{ic|/var/cache/pacman/pkg}} ディレクトリを[[Overlayfs|オーバーレイマウント]]することで、読み取り専用のパッケージキャッシュとして使うことができます。キャッシュサーバーに他のマシンでも使われている最新のパッケージがある程度包括的にインストールされている場合、このような構成は効果的です。低帯域幅のアップストリーム接続の終端に一定数のマシンが存在する場合、この方法が便利です。
上記のようにリストが生成されない場合、おそらく foreign パッケージ (設定したリポジトリに存在しないパッケージ、もしくは AUR のパッケージ) が存在します。
 
   
  +
例:
そのような場合でも、リストから利用可能なパッケージを全てインストールすることができます:
 
   
  +
# mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg
# pacman -S --needed $(comm -12 <(pacman -Slq|sort) <(sort badpkdlist) )
 
  +
# 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
   
  +
{{Note|作業ディレクトリは、上位ディレクトリと同じマウント済みデバイス上の空のディレクトリである必要があります。[[Overlayfs#使用方法]] を参照してください。}}
説明:
 
   
  +
{{Tip|1={{ic|/tmp/pacman_pkg}} オーバーレイディレクトリ内のファイルを一覧表示しようとすると "Stale file handle" などのエラーが発生する場合、オーバーレイマウントのオプションに {{ic|1=-o redirect_dir=off -o index=off}} を使ってみてください。}}
* {{ic|pacman -Slq}} lists all available softwares, but the list is sorted by repository first, hence the {{ic|sort}} command.
 
* {{ic|comm}} コマンドを動作させるにはファイルをソートする必要があります。
 
* {{ic|-12}} パラメータは両方のエントリで共通する行を表示します。
 
* {{ic|--needed}} スイッチを使うことで既にインストールされているパッケージはスキップされます。
 
   
  +
これで、オプション {{ic|--cachedir /tmp/pacman_pkg}} を使用して ''pacman'' を実行できます。例:
[[yaourt]] を使うことで AUR からリポジトリにないパッケージを全てインストールするのを試行することもできます (何がおこるかわかってない場合は推奨しません):
 
   
  +
# pacman -Syu --cachedir /tmp/pacman_pkg
$ yaourt -S --needed $(comm -13 <(pacman -Slq|sort) <(sort badpkdlist) )
 
   
  +
==== 読み取り専用の分散キャッシュ ====
最後に、リストに記されていない全てのパッケージをシステム上から削除することができます:
 
   
  +
パッケージキャッシュを提供しているネットワーク上の他のコンピューターを自動的に検出するための Arch 固有のツールがあります。{{Pkg|pacredir}}、[[pacserve]]、{{AUR|pkgdistcache}}、または {{AUR|paclan}} を試してください。pkgdistcache は、プレーンな UDP ではなく Avahi を使用します。これは、WiFi とイーサネット間のブリッジではなくルーティングを行う特定のホームネットワークでより適切に機能する可能性があります。
{{Warning|このコマンドは注意して使って下さい、pacman の出力をよくチェックしましょう。}}
 
   
  +
歴史的には、[https://bbs.archlinux.org/viewtopic.php?id=64391 PkgD] と [https://github.com/toofishes/multipkg multipkg] がありましたが、現在はメンテナンスされていません。
# pacman -Rsu $(comm -23 <(pacman -Qq|sort) <(sort pkglist))
 
   
  +
==== 読み書き可能キャッシュ ====
=== base や base-devel に存在しないダウンロード済みパッケージを一覧 ===
 
   
  +
ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有すれば、複数のコンピュータ間でパッケージを共有することができます。このセクションでは、[[SSHFS]] を使って、同じローカルネットワーク上にある複数のコンピュータ間でパッケージのキャッシュ及び関連するライブラリディレクトリを共有する方法を説明します。ただし、ネットワーク経由で共有されたキャッシュは、ファイルシステムの選択などの要因によって遅くなる可能性があることを留意しておいてください。
次のコマンドは {{Grp|base}} や {{Grp|base-devel}} に存在しない、ユーザーが手動でインストールしたパッケージを全て表示します:
 
   
  +
まず、ネットワーク共有をサポートするファイルシステムのパッケージ ({{Pkg|sshfs}} や {{Pkg|curlftpfs}}、{{Pkg|samba}}、{{Pkg|nfs-utils}} のうち一つ) をインストールしてください。
$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)
 
   
  +
{{Tip|
インストールしたパッケージの中で特定のリポジトリに存在しないパッケージを表示するには (例えば {{ic|''repo_name''}}):
 
  +
* ''sshfs'' を使う場合、[[SSH 鍵]] の記事を読むことを検討してください。
  +
* デフォルトでは、''smbfs'' はコロンを含むファイル名をサポートしていないため、クライアント側はそのような問題のあるパッケージをいちいちインターネットからダウンロードしてしまいます。これを防ぐには、クライアント側で {{ic|mapchars}} マウントオプションを使用してください。
  +
}}
   
  +
次に、サーバ上の {{ic|/var/cache/pacman/pkg}} をすべてのクライアントマシン上の {{ic|/var/cache/pacman/pkg}} にマウントすることで実際のパッケージを共有できます。
$ comm -23 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
 
   
  +
{{Warning|{{ic|/var/cache/pacman/pkg}} とその上位のディレクトリ ({{ic|/var}} など) はシンボリックリンクにしてはいけません。Pacman はこれらがディレクトリであると期待するからです。''pacman'' が自身を再インストールまたはアップグレードする時、そのようなシンボリックリンクは削除され、空のディレクトリが代わりに作成されます。しかし、トランザクション中、''pacman'' は一部のファイルがそのディレクトリ内に存在することを期待するため、アップデートのプロセスに問題が発生してしまいます。詳細は {{Bug|50298}} を参照してください。}}
インストールしたパッケージの中で {{ic|''repo_name''}} リポジトリに存在するパッケージを表示するには:
 
   
  +
==== rsync や FTP で双方向同期 ====
$ comm -12 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
 
   
  +
ローカル環境でのもう一つの方法は [[rsync]] です。キャッシュを提供するサーバーを選択し、[[rsync#デーモンとして|rsync デーモン]]を有効化してください。クライアント側では、rsync プロトコルを介すことでこの共有ディレクトリと双方向で同期します。Rsync プロトコルにおいては、ファイル名にコロンが含まれていても問題ありません。
=== 全てのパッケージの再インストール ===
 
   
  +
以下はクライアント側での例です。共有ディレクトリの名前に {{ic|uname -m}} を使うことで、システムのアーキテクチャと同じキャッシュを同期できるようにします:
全てのネイティブのパッケージを再インストールするには、次を使って下さい:
 
   
  +
# rsync ... rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/
# pacman -Qenq | pacman -S -
 
  +
# pacman -Syu
  +
# paccache --remove --keep 3
  +
# rsync --delete ... /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/
   
  +
暗号化されていない [[rsync#デーモンとして|rsync デーモン]]よりもセキュアな方法として rsync over ssh があります。これについては [[Rsync#SSH を使った自動バックアップ]] で概説されています。
外部の (AUR) パッケージは別に再インストールする必要があります。外部のパッケージは {{ic|pacman -Qemq}} で一覧できます。
 
   
  +
Rsync がローカル環境で利用できない場合は、シンプルな ftp サービスを双方向同期に使用するのも良いでしょう。{{Pkg|lftp}} は、ローカルをリモートストレージと同期するためのオプション {{ic|--mirror}} と {{ic|--delete}} を提供しています。
デフォルトで Pacman はインストールの理由(明示的にインストールしたか、依存でインストールしたか)を維持します。
 
   
  +
==== nginx で動的リバースプロキシキャッシュ ====
=== pacman のローカルデータベースを復元する ===
 
   
  +
[[nginx]] を使えば、パッケージのリクエストを公式の上流ミラーにプロキシして、ダウンロードしたファイルをローカルのディスクにキャッシュしておくことができます。その後、同じパッケージに対するリクエストはすべてローカルのキャッシュから直接提供されるようになるため、多くのコンピュータが存在する場合に必要になるインターネットトラフィックの量を最小化できます。
ローカルデータベースの復元が必要だと pacman が示す場合:
 
   
  +
この例では、キャッシュサーバーを {{ic|<nowiki>http://cache.domain.example:8080/</nowiki>}} で実行し、パッケージを {{ic|/srv/http/pacman-cache/}} に保存します。
* {{ic|pacman -Q}} で何も出力がされず、{{Ic|pacman -Syu}} でシステムが最新だと表示されるとき。
 
* {{ic|pacman -S package}} を使ってパッケージをインストールしようとすると、既にインストールされている依存パッケージのリストが出力される。
 
* ({{Pkg|pacman}} に含まれている) {{ic|testdb}} でデータベースが壊れていると表示される。
 
   
  +
キャッシュを提供するコンピュータに [[nginx]] をインストールしてください。キャッシュ用のディレクトリを作成し、nginx がそのディレクトリへファイルを書き込みできるようにパーミッションの設定を行ってください:
以上の場合、十中八九、インストールしたソフトウェアの pacman データベースである {{ic|/var/lib/pacman/local}} が破損していたり削除されています。これは深刻な問題ですが、以下の手順に従うことで復元することができます。
 
   
  +
# mkdir /srv/http/pacman-cache
まず、pacman のログファイルが存在するか確認します:
 
  +
# 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 を開始し、有効化してください]]。
$ ls /var/log/pacman.log
 
   
  +
キャッシュを使うには、各 Arch Linux コンピュータ (キャッシュをホストするコンピュータも含む) の {{ic|mirrorlist}} ファイルの一番最初に以下の行を追加する必要があります:
ログファイルが存在しない場合は、この方法で続行することは不可能です。[https://bbs.archlinux.org/viewtopic.php?pid=670876 Xyne のパッケージ検出スクリプト] を使ってデータベースを再作成してみてください。それができない場合、解決方法としてはシステム全体を再インストールするしかありません。
 
   
  +
{{hc|/etc/pacman.d/mirrorlist|<nowiki>
==== ログフィルタースクリプト ====
 
  +
Server = http://cache.domain.example:8080/$repo/os/$arch
{{hc|pacrecover|<nowiki>
 
  +
...
#!/bin/bash -e
 
  +
</nowiki>}}
   
  +
{{Note|時間ともにキャッシュディレクトリの容量は増加するために、古いパッケージキャッシュをクリーンアップするようにしておく必要があります。{{ic|paccache}} ({{Pkg|pacman-contrib}} でインストールできます) は、保持するパッケージキャッシュを決める条件を使うことでクリーンアップを自動化できます。例えば、次のコマンドはキャッシュディレクトリ内のパッケージのうち最新の2つのバージョンのみを保持します (残りは削除されます): {{ic|find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \;}}。}}
. /etc/makepkg.conf
 
   
  +
==== Pacoloco プロキシキャッシュサーバー ====
PKGCACHE=$((grep -m 1 '^CacheDir' /etc/pacman.conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir = //')
 
   
  +
[https://github.com/anatol/pacoloco Pacoloco] は、''pacman'' リポジトリ用の使いやすいプロキシキャッシュサーバーです。キャッシュ済みのパッケージの[https://github.com/anatol/pacoloco/commit/048b09956b0d8ef71c0ed1f804fd332d9ab5e3c8 自動プリフェッチ]も可能です。
pkgdirs=("$@" "$PKGDEST" "$PKGCACHE")
 
   
  +
{{Pkg|pacoloco}} パッケージでインストールできます。Pacoloco の設定ファイルを開き、''pacman'' ミラーを追加してください:
while read -r -a parampart; do
 
  +
pkgname="${parampart[0]}-${parampart[1]}-*.pkg.tar.xz"
 
  +
{{hc|/etc/pacoloco.yaml|<nowiki>
for pkgdir in ${pkgdirs[@]}; do
 
  +
port: 9129
pkgpath="$pkgdir"/$pkgname
 
  +
repos:
[ -f $pkgpath ] && { echo $pkgpath; break; };
 
  +
mycopy:
done || echo ${parampart[0]} 1>&2
 
  +
urls:
done
 
  +
- http://mirror.lty.me/archlinux
  +
- http://mirrors.kernel.org/archlinux
 
</nowiki>}}
 
</nowiki>}}
 
スクリプトを実行可能にしてください:
 
   
  +
{{ic|pacoloco.service}} を[[再起動]]すると、プロキシリポジトリが {{ic|http://''myserver'':9129/repo/mycopy}} で利用できるようになります。
$ chmod +x pacrecover
 
   
  +
==== Flexo プロキシキャッシュサーバー ====
==== パッケージの復旧リストを生成する ====
 
   
  +
[https://github.com/nroi/flexo Flexo] は、''pacman'' リポジトリ用のさらに別のプロキシキャッシュサーバーです。Flexo は {{AUR|flexo-git}} でインストールできます。インストールしたら、{{ic|flexo.service}} ユニットを[[起動]]してください。
{{Warning|If for some reason your [[pacman]] cache or [[makepkg]] package destination contain packages for other architectures, remove them before continuation.}}
 
   
  +
Flexo はデフォルトでは {{ic|7878}} 番ポートで動作します。''pacman'' に Flexo 経由でパッケージをダウンロードさせるには、{{ic|/etc/pacman.d/mirrorlist}} の一番最初に {{ic|1=Server = http://''myserver'':7878/$repo/os/$arch}} を記述してくだしあ。
スクリプトを実行してください (任意でパッケージが含まれている追加のディレクトリをパラメータで渡して下さい):
 
   
  +
==== 同期プログラムを使用して pacman パッケージキャッシュを同期する ====
$ paclog-pkglist /var/log/pacman.log | ./pacrecover >files.list 2>pkglist.orig
 
   
  +
[[Syncthing]] または [[Resilio Sync]] を使用して、''pacman'' キャッシュディレクトリ (つまり、{{ic|/var/cache/pacman/pkg}}) を同期します。
このコマンドで2つのファイルが作成されます: マシンに存在するパッケージファイルが載った {{Ic|files.list}} と、ダウンロードするべきパッケージが載った {{Ic|pkglist.orig}} です。後者ではマシンに存在する、古いバージョンのパッケージのファイルと、新しいバージョンのファイルでミスマッチが発生することがあります。ミスマッチは手動で修正する必要があります。
 
   
  +
==== 望まないキャッシュ削除を防ぐ ====
Here is a way to automatically restrict second list to packages available in a repository:
 
   
  +
デフォルトでは、{{ic|pacman -Sc}} は、キャッシュにあるパッケージ tarball のうち、同マシン上にインストールされていないパッケージに対応するものを削除します。''pacman'' は、キャッシュを共有するすべてのマシンにどのようなパッケージがインストールされているかを予測できないため、削除すべきでないファイルを削除してしまうことになります。
$ { cat pkglist.orig; pacman -Slq; } | sort | uniq -d > pkglist
 
   
  +
キャッシュのクリーンアップ時に ''古くなった'' tarball のみを削除するには:
重要な ''base'' パッケージが欠けていないか確認して、リストに加えます:
 
   
  +
{{hc|/etc/pacman.conf|2=
$ comm -23 <(pacman -Sgq base) pkglist.orig >> pkglist
 
  +
[options]
  +
CleanMethod = KeepCurrent
  +
}}
   
  +
=== ファイルシステムからパッケージを再構成する ===
Proceed once the contents of both lists are satisfactory, since they will be used to restore pacman's installed package database; {{ic|/var/lib/pacman/local/}}.
 
   
  +
ファイルシステム上のインストール済みファイルからパッケージを再構築するには、{{AUR|fakepkg}} を使用してください。システム上のファイルはそのままパッケージ化されるため、ファイルシステムに加えた変更はすべてパッケージにも受け継がれます。そのため、再構成したパッケージを配布することは推奨されません。代替方法は [[ABS]] と [[Arch Linux Archive]] を参照してください。
==== リカバリを実行する ====
 
   
  +
=== インストール済みパッケージのリスト ===
リカバリのための bash エイリアスを定義してください:
 
   
  +
明示的にインストールされたすべてのパッケージのリストを保持しておくと、たとえばシステムをバックアップしたり、新しいシステムへのインストールを高速化したりするのに役立ちます:
# recovery-pacman() {
 
pacman "$@" \
 
--log /dev/null \
 
--noscriptlet \
 
--dbonly \
 
--force \
 
--nodeps \
 
--needed \
 
#
 
}
 
   
  +
$ pacman -Qqe > pkglist.txt
{{ic|--log /dev/null}} allows to avoid needless pollution of pacman log, {{Ic|--needed}} will save some time by skipping packages, already present in database, {{Ic|--nodeps}} will allow installation of cached packages, even if packages being installed depend on newer versions. Rest of options will allow '''pacman''' to operate without reading/writing filesystem.
 
   
  +
{{Note|
同期データベースを作成:
 
  +
* オプション {{ic|-t}} を使用すると、他の明示的にインストールされたパッケージによって必要とされているパッケージは列挙されません。作成したリストから再インストールすると、これらのパッケージはインストールされますが、インストール理由は単なる依存関係となります。
  +
* オプション {{ic|-n}} を使用すると、外部パッケージ ([[AUR]] など) がリストから省略されます。
  +
* {{ic|comm -13 <(pacman -Qqdt {{!}} sort) <(pacman -Qqdtt {{!}} sort) > optdeplist.txt}} を使えば、インストール済みの任意の依存関係のリストも作成できます。任意の依存関係は {{ic|--asdeps}} フラグで再インストールできます。
  +
* {{ic|pacman -Qqem > foreignpkglist.txt}} を使えば、明示的にインストールされた AUR およびその他の外部パッケージのリストを作成できます。
  +
}}
   
  +
明示的にインストールされたパッケージの最新リストを保持するために (たとえば、バージョン管理された {{ic|/etc/}} と組み合わせて)、[[Pacman#フック|フック]]を設定できます。例:
# pacman -Sy
 
   
  +
[Trigger]
{{ic|files.list}} からローカルで利用可能なパッケージファイルをインストールしてデータベースの生成を開始:
 
  +
Operation = Install
  +
Operation = Remove
  +
Type = Package
  +
Target = *
  +
  +
[Action]
  +
When = PostTransaction
  +
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /etc/pkglist.txt'
   
  +
=== リストからパッケージをインストールする ===
# recovery-pacman -U $(< files.list)
 
   
  +
既にインストール済みの最新のパッケージを再インストールせずに、以前保存したパッケージリストからパッケージをインストールするには、以下を実行してください:
{{ic|pkglist}} から残りをインストール:
 
   
# recovery-pacman -S $(< pkglist)
+
# pacman -S --needed - < pkglist.txt
   
  +
しかし、リストに AUR 由来の外部パッケージやローカルにインストールされた外部パッケージなどが載っていることもあります。リストから外部パッケージを除くには、先のコマンドを以下のように拡張することで可能です:
Update the local database so that packages that are not required by any other package are marked as explicitly installed and the other as dependences. You will need be extra careful in the future when removing packages, but with the original database lost is the best we can do.
 
   
# pacman -D --asdeps $(pacman -Qq)
+
# pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))
# pacman -D --asexplicit $(pacman -Qtq)
 
   
  +
最後に、システムにインストールされているパッケージがリストと一致していることを確認し、リストに記載されていないパッケージはすべて削除してください:
Optionally check all installed packages for corruption:
 
   
  +
# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
# pacman -Qk
 
   
  +
{{Tip|これらのタスクは自動化できます。例としては {{AUR|bacpac}}、{{AUR|packup}}、{{AUR|pacmanity}}、{{AUR|pug}} を参照してください。}}
任意で[[#ファイルがどのパッケージにも所有されていないことを確認|ファイルがどのパッケージにも所有されていないことを確認]]してください。
 
   
全てのパッケージをアップデート:
+
=== パッケージの元の状態から変更された全てのファイルリストアップ ===
   
  +
(ソフトウェア/アードウェアの障害によって) ファイルが破損していることが疑われるが、本当に破損しているかどうかはわからない場合は、パッケージ内のファイルのハッシュ値と比較したほうが良いかもしれません。{{Pkg|pacutils}} で比較することができます:
# pacman -Su
 
   
  +
# paccheck --sha256sum --quiet
=== 既存のインストールから USB キーを回復させる ===
 
   
  +
データベースの復元方法については、[[#Pacman のローカルデータベースを復元する]] を見てください。{{ic|mtree}} ファイルは[[#.pkg ファイル内の特定のファイルの内容を見る|それぞれのパッケージファイルから {{ic|.MTREE}} として抽出する]]こともできます。
If you have Arch installed on a USB key and manage to mess it up (e.g. removing it while it is still being written to), then it is possible to re-install all the packages and hopefully get it back up and working again (assuming USB key is mounted in /newarch)
 
   
  +
{{Note|悪意のある変更が疑われる場合は、この方法をそのまま'''使うべきではありません'''。そのような場合、ライブメディアを使用して、ハッシュ値参照用のソースを別途用意するなどといったセキュリティ上の予防措置を取ることが推奨されます。}}
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
 
   
  +
=== 全てのパッケージの再インストール ===
=== .pkg ファイルの中身を展開する ===
 
   
  +
すべてのネイティブなパッケージを再インストールするには、以下のコマンドを使用してください:
{{ic|.xz}} で終わっている {{ic|.pkg}} ファイルは tar で固められた圧縮ファイルであり、次のコマンドで解凍できます:
 
   
  +
# pacman -Qqn | pacman -S -
$ tar xvf package.tar.xz
 
   
  +
外部 (AUR) パッケージはまた別に再インストールする必要があります。そのようなパッケージは {{ic|pacman -Qqm}} でリストアップできます。
ファイルを {{ic|.pkg}} から展開したい場合、この方法を使うことができます。
 
   
  +
デフォルトでは、Pacman は[[インストール理由]]を保持します。
=== .pkg ファイルに含まれているファイルを回覧する ===
 
   
  +
{{Warning|すべてのパッケージの上書きを強制するには、{{ic|1=--overwrite=*}} を使用してください。とはいえ、これは最後の手段とするべきです。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照。}}
例えば、{{Pkg|systemd}} パッケージに入っている {{ic|/etc/systemd/logind.conf}} の中身を見たいのならば:
 
   
  +
=== Pacman のローカルデータベースを復元する ===
$ tar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf
 
   
  +
[[pacman/ローカルデータベースの復元]]を見てください。
もしくは {{pkg|vim}} を使ってアーカイブをブラウズすることもできます:
 
  +
$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz
 
  +
=== 既存のインストールから USB キーを復元する ===
  +
  +
Arch を USB キーにインストールしたが、内部のデータが壊れてしまった場合 (例えば、書き込み途中に USB を抜いてしまった場合など)、すべてのパッケージを再インストールして、再び動かせるようにできる可能性があります (USB キーが {{ic|/newarch}} にマウントされている場合):
  +
  +
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
  +
  +
=== .pkg ファイル内の特定のファイルの内容を見る ===
  +
  +
例えば、{{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-250.4-2-x86_64.pkg.tar.zst
   
 
=== 古いパッケージのライブラリを使っているアプリケーションを探す ===
 
=== 古いパッケージのライブラリを使っているアプリケーションを探す ===
   
  +
既に実行中のプロセスには、システムの更新による変更が自動的に適用されません。その結果、実行中のプロセスは古いライブラリを使い続けます。脆弱性やその他のバグ、あるいはバージョン間での非互換性に関連する問題が発生する可能性があることから、このようなことは望ましくない場合があります。
Even if you installed a package the existing long-running programs (like daemons and servers) still keep using code from old package libraries. And it is a bad idea to let these programs running if the old library contains a security bug.
 
   
  +
更新されたライブラリに依存しているプロセスは {{Pkg|htop}} (影響を受けるプログラムの名前をハイライトします) や {{Pkg|lsof}} (これはライブラリの名前も出力します) ベースのスニペットを使って見つけることができます:
Here is a way how to find all the programs that use old packages code:
 
   
 
# 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
  +
It will print running program name and old library that was removed or replaced with newer content.
 
  +
この方法では、実行中のプロセスによって開かれたままになっているファイルのみを検出します。そのようなファイルは基本的に共有ライブラリ ({{ic|.so}} ファイル) だけです。これは、Java や Python アプリケーションのライブラリといった一部の依存関係を見逃してしまうことがあります。
  +
  +
=== 必要な言語のコンテンツのみをインストールする ===
  +
  +
多くのパッケージは、複数の言語のドキュメントと翻訳をインストールします。中にはそのような不必要のファイルを削除するように設計されたプログラムもあります。例えば、{{AUR|localepurge}} はパッケージのインストール後に実行され、不必要なロケールファイルを削除します。より直接的なアプローチは {{ic|pacman.conf}} の {{ic|NoExtract}} ディレクティブで、これはそのようなファイルをそもそもインストールしないようにできます。
  +
  +
{{Note|[[pacman#インストールさせないファイルを設定]] で説明されている通り、"後ろのルールは前のルールを上書きします。また、{{ic|!}} を前に付けることでルールを無効化できます。"}}
  +
  +
ヘルプファイルの翻訳を C ロケールを除いてすべてインストールしないようにするには、以下のディレクティブを追加してください:
  +
  +
NoExtract = usr/share/help/* !usr/share/help/C/*
  +
  +
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/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*
  +
  +
{{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/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 […] 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
  +
  +
== パフォーマンス ==
  +
  +
{{Out of date|このページは、pacman が並列ダウンロードをネイティブにサポートする前に書かれました。v6 以降、複数のパッケージを同時にダウンロードするオプションは以下だけではありません。}}
  +
  +
=== ダウンロード速度 ===
  +
  +
パッケージをダウンロードするとき pacman は {{ic|/etc/pacman.d/mirrorlist}} に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法は[[ミラー]]を見てください。
  +
  +
Pacman のダウンロード速度は、[[pacman#並列ダウンロードを有効にする|並列ダウンロードの有効化]]や、パッケージのダウンロードに ''pacman'' 内蔵のファイルダウンローダー以外のアプリケーションを使うことでも改善することができます。
  +
  +
いずれの場合でも、変更を行う前に最新の ''pacman'' を使っていることを確認してください:
  +
  +
# pacman -Syu
  +
  +
==== Powerpill ====
  +
  +
[[Powerpill]] は ''pacman'' のラッパーで、並列で分割ダウンロードを行うことによって ''pacman'' のダウンロード速度の向上を図ります。
  +
  +
==== wget ====
  +
  +
''pacman'' に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手の良い選択肢です。
  +
  +
{{ic|wget}} を使うには、まず {{Pkg|wget}} を[[インストール]]し、{{ic|/etc/pacman.conf}} ファイルの {{ic|[options]}} セクションにある以下の行をアンコメントしてください:
  +
  +
XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u
  +
  +
{{ic|/etc/pacman.conf}} に {{ic|wget}} パラメータを記述する代わりに、{{ic|wget}} の設定ファイルを直接修正することも可能です (システム全体のファイルは {{ic|/etc/wgetrc}}、ユーザー別のファイルは {{ic|$HOME/.wgetrc}})。
  +
  +
==== aria2 ====
  +
  +
[[aria2]] はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。aria2 を使えば、Arch ミラーに対して複数の HTTP/HTTPS/FTP 接続を同時に確立することができ、ファイルやパッケージのダウンロード速度が向上するはずです。
  +
  +
{{Note|''pacman'' の XferCommand で aria2c を使っても複数パッケージの同時ダウンロードは'''行われません'''。Pacman はひとつのパッケージごとに XferCommand を呼び出し、それが完了してから次を呼び出すからです。同時に複数のパッケージをダウンロードするには、[[Powerpill]] を見て下さい。}}
  +
  +
{{Pkg|aria2}} をインストールして、{{ic|/etc/pacman.conf}} の {{ic|[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
  +
  +
{{Tip|1=[https://bbs.archlinux.org/viewtopic.php?pid=1491879#p1491879 このページで示されている、aria2 を pacman で使用する設定]は、設定を簡単にし、より多くの設定オプションを追加します。}}
  +
  +
使用されている aria2c のオプションについては {{man|1|aria2c|OPTIONS}} を見てください。
  +
  +
* {{ic|-d, --dir}}: ダウンロードしたファイルを保存するディレクトリ。
  +
* {{ic|-o, --out}}: ダウンロードしたファイルの出力ファイル名。
  +
* {{ic|%o}}: ''pacman'' によって指定されるローカルのファイル名を表す変数。
  +
* {{ic|%u}}: ''pacman'' によって指定されるダウンロード URL を表す変数。
  +
  +
==== 他のアプリケーション ====
  +
  +
''pacman'' で利用できるダウンローダーは他にもあります。以下はそのダウンローダーと、利用するための XferCommand 設定を挙げています:
  +
  +
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}}
  +
* {{ic|lftp}}: {{ic|1=XferCommand = /usr/bin/lftp -c pget %u}}
  +
* {{ic|axel}}: {{ic|1=XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u}}
  +
* {{ic|hget}}: {{ic|1=XferCommand = /usr/bin/hget %u -n 2 -skip-tls false}} (詳細は [https://github.com/huydx/hget Github のプロジェクトページのドキュメント]を読んでください)
  +
* {{ic|saldl}}: {{ic|1=XferCommand = /usr/bin/saldl -c6 -l4 -s2m -o %o %u}} (詳細は [https://saldl.github.io プロジェクトページのドキュメント]を読んでください)
  +
  +
== ユーティリティ ==
  +
  +
* {{App|isfree|フリーでないパッケージを一覧表示する Bash スクリプト。Parabola のブラックリストをベースとしています。|https://github.com/leo-arch/isfree|{{AUR|isfree}}}}
  +
* {{App|Lostfiles|孤立したファイルを検知するスクリプト。|https://github.com/graysky2/lostfiles|{{Pkg|lostfiles}}}}
  +
* {{App|pacutils|libalpm ベースのプログラム用のヘルパーライブラリ。|https://github.com/andrewgregory/pacutils|{{Pkg|pacutils}}}}
  +
* {{App|[[pkgfile]]|あるファイルを使っているパッケージが何かを見つけるツール。|https://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}}
  +
* {{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|repoctl|ローカルリポジトリの管理を補助するツール。|https://github.com/cassava/repoctl|{{AUR|repoctl}}}}
  +
* {{App|repose|Arch Linux リポジトリ作成ツール。|https://github.com/vodik/repose|{{Pkg|repose}}}}
  +
* {{App|[[Snapper#pacman のトランザクションをスナップショットで記録|snap-pac]]|openSUSE の YaST のように ''pacman'' で自動的に snapper のスナップショットを作成するツール。|https://github.com/wesbarnett/snap-pac|{{Pkg|snap-pac}}}}
  +
* {{App|vrms-arch|フリーでないパッケージがインストールされているかどうかを教えてくれるバーチャル Richard M. Stallman。|https://github.com/orospakr/vrms-arch|{{AUR|vrms-arch-git}}}}
  +
  +
=== グラフィカル ===
  +
  +
{{Warning|PackageKit は既定でシステムのパーミッションを {{ic|wheel}} グループに開放するので、一般的な用途では[https://github.com/archlinux/archinstall/issues/1321#issuecomment-1151343223 おすすめできません]。{{Bug|50459}} および {{Bug|57943}} を参照してください。}}
  +
  +
* {{App|Deepin App Store|DTK で構築された Deepin デスクトップ環境用のサードパーティアプリストア。PackageKit を使用しています。[https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream メタデータ] をサポートしています。.|https://github.com/dekzi/dde-store|{{Pkg|deepin-store}}}}
  +
* {{App|Discover|C++/QML で書かれた、PackageKit を使用する Qt 5 アプリケーションマネージャ。[https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream メタデータ]、[[Flatpak]]、[[fwupd|ファームウェアの更新]]をサポートしています。{{Grp|plasma}} に含まれています。|https://apps.kde.org/discover/|{{Pkg|discover}}}}
  +
* {{App|GNOME PackageKit|C で書かれた、PackageKit を使用する GTK 3 パッケージマネージャ。|https://freedesktop.org/software/PackageKit/|{{Pkg|gnome-packagekit}}}}
  +
* {{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}}}}
  +
  +
{{TranslationStatus|pacman/Tips and tricks|2024-08-24|814725}}

2024年8月24日 (土) 15:36時点における最新版

関連記事

以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、Core UtilitiesBash を見てください。

目次

メンテナンス

ノート: 以下のセクションで使われている comm コマンド (入力が sort でソートされている必要があります) の代わりに、grep -Fxfgrep -Fxvf を使うこともできます。

システムメンテナンスも参照。

パッケージをリストアップ

未使用のリポジトリで

デフォルトでは、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つあります:

  • expac をインストールして、次のように実行する: expac -H M '%m\t%n' | sort -h
  • pacgraphAUR-c オプションを使う。

複数のパッケージのダウンロードサイズをリストアップするには (全パッケージをリストアップするには 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)
ヒント: 別の方法として、comm よりも簡単に覚えられる構文を持つ moreutils パッケージの combine を使うこともできます。詳細は combine(1) を参照。

開発版パッケージ

開発版や不安定版のパッケージを一覧表示するには:

$ 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))
ヒント: lostfiles スクリプトも同じようなことをしますが、一般的に偽陽性とされるファイルを出力から取り除くための拡張可能なブラックリストが含まれています。

パッケージによって作成された未所有のファイルを追跡する

ほとんどのシステムでは、通常の運用でも状態ファイル、ログ、インデックスなどといったゴーストファイルがゆっくりと蓄積していきます。

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
ノート: -Qt 引数は、本当にどのパッケージからも一切必要とされていないパッケージしか出力しません。任意の依存パッケージとして必要とされているパッケージも含めるには、-t フラグを2つ渡してください (つまり、-Qtt)。
ヒント: pacman -Qdt コマンドを pacman のトランザクション後のフックに追加すると、トランザクションによって必要とされなくなったパッケージが発生した場合に知らせてくれます。こうすると、パッケージがリポジトリから削除された際にしらせてくれるので便利です (パッケージがリポジトリから削除されると、ローカルにインストールされている同じパッケージは、明示的にインストールされていない場合、自動的に孤立したパッケージになるためです)。孤立したパッケージが見つからなかった場合に "failed to execute command" ("コマンドの実行に失敗しました") エラーにならないようにするには、フックの Exec オプションに次のコマンドを指定してください:

/usr/bin/bash -c "/usr/bin/pacman -Qdt || /usr/bin/echo '=> None found.'"

pacman-log-orphans-hookAUR パッケージも同じようなフックを提供しますが、孤立したパッケージが見つかった際により詳細な指示を出してくれます。

より多くの不要なパッケージを検出する

上記の方法では、必要とされないパッケージが検出されないことがあります。例えば、依存関係のサイクル ("循環依存" とも呼ばれる)、過剰な依存 (複数回、依存関係が発生する)、明示的ではない任意の依存などの場合です。

そのようなパッケージを検出するには:

$ pacman -Qqd | pacman -Rsu --print -

先のコマンドで出力されたパッケージを一度に全て削除したい場合は、--print フラグ無しでコマンドを実行してください。

必須パッケージ以外の全てのパッケージを削除する

必須パッケージを除いて全てのパッケージを削除する必要がある場合、1つの方法は、必須でないパッケージのインストール理由を「依存パッケージ」と設定してから、不要な依存パッケージを全て削除することです。

まず、"明示的にインストール" されたパッケージのインストール理由を "依存関係としてインストール" に変更します:

# pacman -D --asdeps $(pacman -Qqe)

次に、必須パッケージ (つまり、削除したくないパッケージ) が削除対象にならないようにするために、それらのインストール理由を "明示的にインストール" に変更します:

# pacman -D --asexplicit base linux linux-firmware
ノート:
  • 他のパッケージも削除されないようにしたい場合は、上記のコマンドに加えてください。完全に機能するベースシステムに必要となりうる他のパッケージについては インストールガイド#必須パッケージのインストール を参照してください。
  • 上記のコマンドではブートローダーのパッケージも削除対象になります。削除してもシステム自体は起動可能なままであるはずですが、パッケージがないとブートパラメータを変更できないかもしれません。

最後に、#使用していないパッケージ (孤立したパッケージ) の削除 の手順に従って "依存関係としてインストール" に指定されたパッケージを削除してください。

複数のパッケージの依存パッケージリストを取得

依存パッケージはアルファベット順にソートされ、重複するパッケージは1つにまとめられます。

ノート: ローカルにインストールされたパッケージのみの依存関係ツリーを表示するには、(pacman -Si の部分で) pacman -Qi コマンドを代わりに使用してください。
$ 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
ノート: pacman データベースファイルが破損していて、バックアップファイルが存在しない場合でも、pacman データベースを再構築できる望みはあります。#pacman のローカルデータベースを復元する を見てください。
ヒント: pakbak-gitAUR パッケージには上記の作業を自動的に行うスクリプトと systemd サービスが入っています。/etc/pakbak.conf で設定が可能です。

変更履歴を簡単に確認

メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。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
警告: repo-add は、コマンドラインで渡された順番でエントリをデータベースに追加します。同じパッケージの複数のバージョンが渡された場合、正しいバージョンが最後に追加されるよう注意しなければなりません。特に、シェルによって使用される辞書順はロケール依存であり、pacman によって使用される vercmp(8) の順序とは異なるので注意してください。

複数のアーキテクチャをサポートしようと考えている場合、エラーが起こらないように注意する必要があります。各アーキテクチャに独自のディレクトリツリーが存在している必要があります:

$ 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 のキャッシュディレクトリを共有してみましょう。例えば、Pythonhttp.server モジュールを使う場合は:

$ python -m http.server -d /var/cache/pacman/pkg/
ヒント: デフォルトでは、Python の http.server は任意のインターフェイスの 8000 番ポートをリッスンします。別のポートを使いたい場合や、特定のアドレスにのみバインドしたい場合は、パラメータを追加してください:
$ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080

次に、各クライアントマシンでキャッシュサーバーを追加するように /etc/pacman.d/mirrorlist編集してください:

/etc/pacman.d/mirrorlist
CacheServer = http://server-ip:port
警告: 他のサーバーエントリと違って、このカスタムサーバーのオプションには /repos/$repo/os/$arch を付けてはいけません。このキャッシュサーバーにはこのディレクトリ階層が存在しないため、クエリが失敗してしまうからです。

スタンドアローンな方法としては 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再起動を行ってください。

ヒント: どの Web サーバーを使用する場合でも、ファイアウォール設定 (存在する場合) で、設定されたポートへの目的のトラフィックの到達が許可され、不要なトラフィックが許可されていないことを確認してください。セキュリティ#ネットワークとファイアウォールを参照してください。

読み取り専用キャッシュのオーバーレイマウント

ローカルネットワーク上にあるマシンの /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
ノート: 作業ディレクトリは、上位ディレクトリと同じマウント済みデバイス上の空のディレクトリである必要があります。Overlayfs#使用方法 を参照してください。
ヒント: /tmp/pacman_pkg オーバーレイディレクトリ内のファイルを一覧表示しようとすると "Stale file handle" などのエラーが発生する場合、オーバーレイマウントのオプションに -o redirect_dir=off -o index=off を使ってみてください。

これで、オプション --cachedir /tmp/pacman_pkg を使用して pacman を実行できます。例:

# pacman -Syu --cachedir /tmp/pacman_pkg

読み取り専用の分散キャッシュ

パッケージキャッシュを提供しているネットワーク上の他のコンピューターを自動的に検出するための Arch 固有のツールがあります。pacredirpacservepkgdistcacheAUR、または paclanAUR を試してください。pkgdistcache は、プレーンな UDP ではなく Avahi を使用します。これは、WiFi とイーサネット間のブリッジではなくルーティングを行う特定のホームネットワークでより適切に機能する可能性があります。

歴史的には、PkgDmultipkg がありましたが、現在はメンテナンスされていません。

読み書き可能キャッシュ

ネットワークベースのマウントプロトコルを使って /var/cache/pacman/ を共有すれば、複数のコンピュータ間でパッケージを共有することができます。このセクションでは、SSHFS を使って、同じローカルネットワーク上にある複数のコンピュータ間でパッケージのキャッシュ及び関連するライブラリディレクトリを共有する方法を説明します。ただし、ネットワーク経由で共有されたキャッシュは、ファイルシステムの選択などの要因によって遅くなる可能性があることを留意しておいてください。

まず、ネットワーク共有をサポートするファイルシステムのパッケージ (sshfscurlftpfssambanfs-utils のうち一つ) をインストールしてください。

ヒント:
  • sshfs を使う場合、SSH 鍵 の記事を読むことを検討してください。
  • デフォルトでは、smbfs はコロンを含むファイル名をサポートしていないため、クライアント側はそのような問題のあるパッケージをいちいちインターネットからダウンロードしてしまいます。これを防ぐには、クライアント側で mapchars マウントオプションを使用してください。

次に、サーバ上の /var/cache/pacman/pkg をすべてのクライアントマシン上の /var/cache/pacman/pkg にマウントすることで実際のパッケージを共有できます。

警告: /var/cache/pacman/pkg とその上位のディレクトリ (/var など) はシンボリックリンクにしてはいけません。Pacman はこれらがディレクトリであると期待するからです。pacman が自身を再インストールまたはアップグレードする時、そのようなシンボリックリンクは削除され、空のディレクトリが代わりに作成されます。しかし、トランザクション中、pacman は一部のファイルがそのディレクトリ内に存在することを期待するため、アップデートのプロセスに問題が発生してしまいます。詳細は FS#50298 を参照してください。

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
...
ノート: 時間ともにキャッシュディレクトリの容量は増加するために、古いパッケージキャッシュをクリーンアップするようにしておく必要があります。paccache (pacman-contrib でインストールできます) は、保持するパッケージキャッシュを決める条件を使うことでクリーンアップを自動化できます。例えば、次のコマンドはキャッシュディレクトリ内のパッケージのうち最新の2つのバージョンのみを保持します (残りは削除されます): find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \;

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 を使用してください。システム上のファイルはそのままパッケージ化されるため、ファイルシステムに加えた変更はすべてパッケージにも受け継がれます。そのため、再構成したパッケージを配布することは推奨されません。代替方法は ABSArch Linux Archive を参照してください。

インストール済みパッケージのリスト

明示的にインストールされたすべてのパッケージのリストを保持しておくと、たとえばシステムをバックアップしたり、新しいシステムへのインストールを高速化したりするのに役立ちます:

$ pacman -Qqe > pkglist.txt
ノート:
  • オプション -t を使用すると、他の明示的にインストールされたパッケージによって必要とされているパッケージは列挙されません。作成したリストから再インストールすると、これらのパッケージはインストールされますが、インストール理由は単なる依存関係となります。
  • オプション -n を使用すると、外部パッケージ (AUR など) がリストから省略されます。
  • comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt を使えば、インストール済みの任意の依存関係のリストも作成できます。任意の依存関係は --asdeps フラグで再インストールできます。
  • pacman -Qqem > foreignpkglist.txt を使えば、明示的にインストールされた AUR およびその他の外部パッケージのリストを作成できます。

明示的にインストールされたパッケージの最新リストを保持するために (たとえば、バージョン管理された /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))
ヒント: これらのタスクは自動化できます。例としては bacpacAURpackupAURpacmanityAURpugAUR を参照してください。

パッケージの元の状態から変更された全てのファイルをリストアップ

(ソフトウェア/アードウェアの障害によって) ファイルが破損していることが疑われるが、本当に破損しているかどうかはわからない場合は、パッケージ内のファイルのハッシュ値と比較したほうが良いかもしれません。pacutils で比較することができます:

# paccheck --sha256sum --quiet

データベースの復元方法については、#Pacman のローカルデータベースを復元する を見てください。mtree ファイルはそれぞれのパッケージファイルから .MTREE として抽出することもできます。

ノート: 悪意のある変更が疑われる場合は、この方法をそのまま使うべきではありません。そのような場合、ライブメディアを使用して、ハッシュ値参照用のソースを別途用意するなどといったセキュリティ上の予防措置を取ることが推奨されます。

全てのパッケージの再インストール

すべてのネイティブなパッケージを再インストールするには、以下のコマンドを使用してください:

# pacman -Qqn | pacman -S -

外部 (AUR) パッケージはまた別に再インストールする必要があります。そのようなパッケージは pacman -Qqm でリストアップできます。

デフォルトでは、Pacman はインストール理由を保持します。

警告: すべてのパッケージの上書きを強制するには、--overwrite=* を使用してください。とはいえ、これは最後の手段とするべきです。システムメンテナンス#特定の 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.confNoExtract ディレクティブで、これはそのようなファイルをそもそもインストールしないようにできます。

ノート: pacman#インストールさせないファイルを設定 で説明されている通り、"後ろのルールは前のルールを上書きします。また、! を前に付けることでルールを無効化できます。"

ヘルプファイルの翻訳を C ロケールを除いてすべてインストールしないようにするには、以下のディレクティブを追加してください:

NoExtract = usr/share/help/* !usr/share/help/C/*

HTML ドキュメントをすべてインストールしないようにするには、以下を追加してください:

NoExtract = usr/share/gtk-doc/html/*
NoExtract = usr/share/doc/HTML/*
警告: すべてのロケールを削除すると dmenuSteam、さらには Xorg で意図しない結果が起きたと一部のユーザーが報告しています。以下の例では、英語 (米国) 用のファイルと必須の 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 = !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 が並列ダウンロードをネイティブにサポートする前に書かれました。v6 以降、複数のパッケージを同時にダウンロードするオプションは以下だけではありません。 (Discuss)

ダウンロード速度

パッケージをダウンロードするとき pacman は /etc/pacman.d/mirrorlist に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法はミラーを見てください。

Pacman のダウンロード速度は、並列ダウンロードの有効化や、パッケージのダウンロードに pacman 内蔵のファイルダウンローダー以外のアプリケーションを使うことでも改善することができます。

いずれの場合でも、変更を行う前に最新の pacman を使っていることを確認してください:

# pacman -Syu

Powerpill

Powerpillpacman のラッパーで、並列で分割ダウンロードを行うことによって pacman のダウンロード速度の向上を図ります。

wget

pacman に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手の良い選択肢です。

wget を使うには、まず wgetインストールし、/etc/pacman.conf ファイルの [options] セクションにある以下の行をアンコメントしてください:

XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u

/etc/pacman.confwget パラメータを記述する代わりに、wget の設定ファイルを直接修正することも可能です (システム全体のファイルは /etc/wgetrc、ユーザー別のファイルは $HOME/.wgetrc)。

aria2

aria2 はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。aria2 を使えば、Arch ミラーに対して複数の HTTP/HTTPS/FTP 接続を同時に確立することができ、ファイルやパッケージのダウンロード速度が向上するはずです。

ノート: pacman の XferCommand で aria2c を使っても複数パッケージの同時ダウンロードは行われません。Pacman はひとつのパッケージごとに XferCommand を呼び出し、それが完了してから次を呼び出すからです。同時に複数のパッケージをダウンロードするには、Powerpill を見て下さい。

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
ヒント: このページで示されている、aria2 を pacman で使用する設定は、設定を簡単にし、より多くの設定オプションを追加します。

使用されている aria2c のオプションについては aria2c(1) § OPTIONS を見てください。

  • -d, --dir: ダウンロードしたファイルを保存するディレクトリ。
  • -o, --out: ダウンロードしたファイルの出力ファイル名。
  • %o: pacman によって指定されるローカルのファイル名を表す変数。
  • %u: pacman によって指定されるダウンロード URL を表す変数。

他のアプリケーション

pacman で利用できるダウンローダーは他にもあります。以下はそのダウンローダーと、利用するための XferCommand 設定を挙げています:

ユーティリティ

  • isfree — フリーでないパッケージを一覧表示する Bash スクリプト。Parabola のブラックリストをベースとしています。
https://github.com/leo-arch/isfree || isfreeAUR
  • Lostfiles — 孤立したファイルを検知するスクリプト。
https://github.com/graysky2/lostfiles || lostfiles
  • pacutils — libalpm ベースのプログラム用のヘルパーライブラリ。
https://github.com/andrewgregory/pacutils || pacutils
  • pkgfile — あるファイルを使っているパッケージが何かを見つけるツール。
https://github.com/falconindy/pkgfile || pkgfile
  • pkgtop — GNU/Linux 用に開発されたインタラクティブなパッケージマネージャ兼リソースモニター。
https://github.com/orhun/pkgtop || pkgtop-gitAUR
  • Powerpillaria2Reflector を通じて並列分割ダウンロードを行い pacman のダウンロード処理を高速化。
https://xyne.dev/projects/powerpill/ || powerpillAUR
  • repoctl — ローカルリポジトリの管理を補助するツール。
https://github.com/cassava/repoctl || repoctlAUR
  • repose — Arch Linux リポジトリ作成ツール。
https://github.com/vodik/repose || repose
  • snap-pac — openSUSE の YaST のように pacman で自動的に snapper のスナップショットを作成するツール。
https://github.com/wesbarnett/snap-pac || snap-pac
  • vrms-arch — フリーでないパッケージがインストールされているかどうかを教えてくれるバーチャル Richard M. Stallman。
https://github.com/orospakr/vrms-arch || vrms-arch-gitAUR

グラフィカル

警告: PackageKit は既定でシステムのパーミッションを wheel グループに開放するので、一般的な用途ではおすすめできませんFS#50459 および FS#57943 を参照してください。
  • Deepin App Store — DTK で構築された Deepin デスクトップ環境用のサードパーティアプリストア。PackageKit を使用しています。AppStream メタデータ をサポートしています。.
https://github.com/dekzi/dde-store || deepin-store
https://apps.kde.org/discover/ || discover
  • GNOME PackageKit — C で書かれた、PackageKit を使用する GTK 3 パッケージマネージャ。
https://freedesktop.org/software/PackageKit/ || gnome-packagekit
  • pcurses — C++ で書かれた、Curses TUI の pacman ラッパー。
https://github.com/schuay/pcurses || pcursesAUR
  • tkPacman — Tcl で書かれた、Tk の pacman ラッパー。
https://sourceforge.net/projects/tkpacman || tkpacmanAUR
翻訳ステータス: このページは en:pacman/Tips and tricks の翻訳バージョンです。最後の翻訳日は 2024-08-24 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。