「Pacman/ヒントとテクニック」の版間の差分
(→他のアプリケーション: saldlを追加) |
|||
(4人の利用者による、間の48版が非表示) | |||
1行目: | 1行目: | ||
+ | {{Lowercase title}} |
||
− | [[Category:パッケージ管理]] |
||
+ | [[Category:パッケージマネージャー]] |
||
− | [[en:Pacman/Tips and tricks]] |
||
+ | [[de:Pacman-Tipps]] |
||
+ | [[en:pacman/Tips and tricks]] |
||
[[es:Pacman (Español)/Tips and tricks]] |
[[es:Pacman (Español)/Tips and tricks]] |
||
− | [[ |
+ | [[fr:Pacman (Français)/Tips and tricks]] |
− | [[fr:Pacman/Trucs et Astuces]] |
||
− | [[it:Pacman (Italiano)/Tips and tricks]] |
||
[[pt:Pacman (Português)/Tips and tricks]] |
[[pt:Pacman (Português)/Tips and tricks]] |
||
[[ru:Pacman (Русский)/Tips and tricks]] |
[[ru:Pacman (Русский)/Tips and tricks]] |
||
− | [[zh-hans:Pacman |
+ | [[zh-hans:Pacman/Tips and tricks]] |
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related|pacman}} |
||
{{Related|ミラー}} |
{{Related|ミラー}} |
||
{{Related|パッケージの作成}} |
{{Related|パッケージの作成}} |
||
15行目: | 14行目: | ||
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。 |
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。 |
||
+ | == メンテナンス == |
||
− | == 外観と利便性の向上 == |
||
+ | {{Note|以下のセクションで使われている ''comm'' コマンド (入力が ''sort'' でソートされている必要があります) の代わりに、{{ic|grep -Fxf}} や {{ic|grep -Fxvf}} を使うこともできます。}} |
||
− | === グラフィカルフロントエンド === |
||
+ | [[システムメンテナンス]]も参照。 |
||
− | {{Warning|PackageKit は既定でシステムのパーミッションを {{ic|wheel}} グループに開放するので、一般的な用途ではおすすめできません。{{Bug|50459}} および {{Bug|57943}} を参照してください。}} |
||
+ | === パッケージをリストアップ === |
||
− | * {{App|Apper|PackageKit を使用し C++ で書かれた Qt 5 アプリケーションパッケージマネージャ。[https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream metadata] をサポート。|https://userbase.kde.org/Apper|{{Pkg|apper}}}} |
||
− | * {{App|Discover|KDE のパッケージ管理ツールのコレクション。PackageKit を使用。[https://www.freedesktop.org/wiki/Distributions/AppStream/ AppStream metadata]、[[Flatpak]] および [[Fwupd]] をサポート。|https://userbase.kde.org/Discover|{{Pkg|discover}}}} |
||
− | * {{App|GNOME packagekit|GTK ベースのパッケージ管理ツール。|https://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'' を使ってパッケージデータベースを操作できるソフトウェア。|https://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|{{Pkg|lostfiles}}}} |
||
− | * {{App|[[Arch Linux の安定化#pacmatic の使用|Pacmatic]]|アップグレードの前に Arch ニュースをチェックして、設定ファイルの変更を警告する pacman ラッパ。|http://kmkeen.com/pacmatic|{{Pkg|pacmatic}}}} |
||
− | * {{App|pacutils|libalpm ベースのプログラムのヘルパーライブラリ。|https://github.com/andrewgregory/pacutils|{{AUR|pacutils-git}}}} |
||
− | * {{App|[[pkgfile]]|あるファイルを使っているパッケージが何かを見つけるツール。|https://github.com/falconindy/pkgfile|{{Pkg|pkgfile}}}} |
||
− | * {{App|[[pkgtools]]|Arch Linux パッケージ用のスクリプトコレクション。|https://github.com/Daenyth/pkgtools|{{AUR|pkgtools}}}} |
||
− | * {{App|[[Powerpill]]|[[aria2]] や [[Reflector]] を通じて並列分割ダウンロードを行い pacman のダウンロード処理を高速化。|https://xyne.archlinux.ca/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}}}} |
||
+ | バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。 |
||
− | == メンテナンス == |
||
+ | * 明示的にインストールしたパッケージを全てリストアップ: {{ic|pacman -Qe}} |
||
− | {{Note|このセクションで使われている ''comm'' (''sort'' でソートして入力する必要があります) の代わりに、{{ic|grep -Fxf}} や {{ic|grep -Fxvf}} を使うこともできます。}} |
||
+ | * {{ic|''group''}} [[パッケージグループ]]に含まれるパッケージを全てリストアップ: {{ic|pacman -Sg ''group''}} |
||
+ | * 外部パッケージを全てリストアップ (典型的には、手動でダウンロードしてインストールしたパッケージや、リポジトリから削除されたパッケージです): {{ic|pacman -Qm}} |
||
+ | * ネイティブなパッケージ (同期データベースからインストールしたパッケージ) をリストアップ: {{ic|pacman -Qn}} |
||
+ | * 依存パッケージでも任意の依存パッケージでもない、明示的にインストールしたネイティブパッケージ (同期データベースにあるパッケージ) をリストアップ: {{ic|pacman -Qent}} |
||
+ | * 正規表現にマッチするパッケージをリストアップ: {{ic|pacman -Qs ''regex''}}。 |
||
+ | * 正規表現にマッチするパッケージを、カスタムの出力フォーマットでリストアップ ({{Pkg|expac}} が必要です): {{ic|expac -s "%-30n %v" ''regex''}} |
||
+ | ==== サイズも表示 ==== |
||
− | [[システムメンテナンス]]も参照。 |
||
+ | ハードドライブの容量を空けたい場合に、どのパッケージが最も大きいかを調べられると便利です。方法としては、個々のパッケージのサイズを調べる方法と、パッケージとその依存パッケージのサイズを調べる方法の2つがあります。 |
||
− | === パッケージをリストアップ === |
||
+ | ===== 個々のパッケージ ===== |
||
− | バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。 |
||
− | + | 次のコマンドは、インストール済みのパッケージをそのサイズとともに表示します: |
|
− | * ''group'' グループに含まれるパッケージを全てリストアップ: {{ic|pacman -Sq group}}。 |
||
− | * 依存パッケージではない、明示的にインストールしたネイティブのパッケージ (同期データベースに存在するパッケージ) を全てリストアップ: {{ic|pacman -Qent}}。 |
||
− | * 外部からインストールしたパッケージ (手動でダウンロード・インストールしたパッケージ) をリストアップ: {{ic|pacman -Qm}}。 |
||
− | * ネイティブなパッケージ (同期データベースからインストールしたパッケージ) をリストアップ: {{ic|pacman -Qn}}。 |
||
− | * 正規表現でパッケージをリストアップ: {{ic|pacman -Qs ''regex''}}。 |
||
− | * 正規表現でカスタム出力形式を使ってパッケージをリストアップ: {{ic|expac -s "%-30n %v" ''regex''}} ({{Pkg|expac}} が必要です)。 |
||
+ | $ 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つあります: |
||
− | ===== パッケージ単独 ===== |
||
+ | * {{Pkg|expac}} をインストールして、次のように実行する: {{ic|expac -H M '%m\t%n' {{!}} sort -h}} |
||
− | 次のコマンドで、インストールされたパッケージ全てとそれぞれの容量をリストアップします: |
||
+ | * {{AUR|pacgraph}} で {{ic|-c}} オプションを使う。 |
||
− | $ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h |
||
+ | 複数のパッケージのダウンロードサイズをリストアップするには (全パッケージをリストアップするには {{ic|''packages''}} に何も入力しないでください): |
||
− | ===== パッケージとその依存関係 ===== |
||
+ | $ expac -S -H M '%k\t%n' ''packages'' |
||
− | パッケージとその依存関係の合計容量を表示するのは、次の方法があります。 |
||
− | * {{Pkg|expac}} をインストールして {{ic|<nowiki>expac -H M '%m\t%n' | sort -h</nowiki>}} を実行。 |
||
− | * {{ic|-c}} オプションを付けて {{Pkg|pacgraph}} を実行。 |
||
+ | {{Pkg|base}} [[メタパッケージ]]にも {{Grp|xorg}} [[パッケージグループ]]にも属さない、明示的にインストールされたパッケージをサイズと説明とともにリストアップするには: |
||
− | 複数のパッケージのダウンロード容量をリストアップするには ({{ic|''packages''}} を空にすると全てのパッケージの情報が出力されます): |
||
+ | $ 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' ''packages'' |
||
+ | |||
+ | バージョンが古いくなっているパッケージをダウンロードサイズともに表示するには: |
||
+ | $ expac -S -H M '%k\t%n' $(pacman -Qqu) | sort -sh |
||
− | {{Pkg|base}} や {{Grp|base-devel}} に存在しない明示的にインストールしたパッケージの容量と説明をリストアップするには: |
||
+ | 任意の依存パッケージのみを表示するには: |
||
− | $ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <(pacman -Qqg base base-devel | sort)) | sort -n |
||
+ | $ expac -S "%o" ''package'' |
||
− | アップグレード対象のパッケージとそのダウンロード容量をリストアップするには: |
||
− | $ pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh |
||
− | ==== 日付 |
+ | ==== 日付でソート ==== |
− | + | 最も最後にインストールされた20個のパッケージを {{Pkg|expac}} でリストアップするには: |
|
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20 |
$ 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 |
$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20 |
||
− | ==== 指定したグループ |
+ | ==== 指定したグループ、リポジトリ、メタパッケージに含まれないパッケージ ==== |
− | {{Note|依存パッケージとしてインストールされたが、既にどのパッケージからも必要とされていないパッケージを確認したい場合は[[#使用していないパッケージ |
+ | {{Note|依存パッケージとしてインストールされたが、既にどのパッケージからも必要とされていないパッケージを確認したい場合は [[#使用していないパッケージ (孤立したパッケージ) の削除]] 章を参照。}} |
− | + | 明示的にインストールしたパッケージの中で {{Pkg|base}} [[メタパッケージ]]に含まれないものを一覧表示するには: |
|
− | $ comm -23 <(pacman - |
+ | $ comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort) |
− | {{Pkg|base}} |
+ | 明示的にインストールしたパッケージの中で {{Pkg|base}} メタパッケージにも {{Grp|xorg}} [[パッケージグループ]]にも含まれていないものを一覧表示するには: |
− | $ comm -23 <(pacman - |
+ | $ comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg xorg; expac -l '\n' '%E' base; } | sort -u) |
+ | インストールしたパッケージの中で、他のどのパッケージからも必要とされておらず、かつ {{Pkg|base}} メタパッケージにも {{Grp|xorg}} パッケージグループにも含まれていないものを一覧表示するには: |
||
− | 上記と同じで、説明を付けてリストアップ: |
||
− | $ |
+ | $ comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u) |
+ | 先と同じですが、説明も付けて一覧表示するには: |
||
− | 指定したリポジトリ ''repo_name'' に存在しないインストール済みパッケージをリストアップ: |
||
− | $ comm -23 <(pacman - |
+ | $ expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg xorg; echo base; } | sort -u)) |
− | ''repo_name'' リポジトリに含まれてい |
+ | インストールしたパッケージの中で、''repo_name'' という名前のリポジトリに含まれて''いない''ものを一覧表示するには: |
− | $ comm - |
+ | $ comm -23 <(pacman -Qq | sort) <(pacman -Sql ''repo_name'' | sort) |
− | + | インストールしたパッケージの中で、''repo_name'' という名前のリポジトリに含まれているものを一覧表示するには: |
|
+ | |||
− | $ comm -23 <(curl https://git.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64) <(pacman -Qqg base | sort) |
||
+ | $ comm -12 <(pacman -Qq | sort) <(pacman -Sql ''repo_name'' | sort) |
||
+ | |||
+ | Arch Linux ISO にインストールされているパッケージの中で、{{Pkg|base}} メタパッケージに含まれていないものを一覧表示するには: |
||
+ | |||
+ | <nowiki>$ comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)</nowiki> |
||
+ | |||
+ | {{Tip|別の方法として、{{ic|comm}} よりも簡単に覚えられる構文を持つ {{Pkg|moreutils}} パッケージの {{ic|combine}} を使うこともできます。詳細は {{man|1|combine}} を参照。}} |
||
==== 開発版パッケージ ==== |
==== 開発版パッケージ ==== |
||
− | 開発版や不安定版のパッケージを |
+ | 開発版や不安定版のパッケージを一覧表示するには: |
+ | |||
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$' |
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$' |
||
− | === パッケージ |
+ | ==== パッケージの依存パッケージ ==== |
− | + | あるパッケージの依存パッケージの一覧を入手したい場合、最も簡単な方法は以下のコマンドの出力を見ることです: |
|
+ | |||
+ | $ pacman -Qi ''package'' |
||
+ | |||
+ | 自動化させるには、pacman の出力をパースするというエラーの発生しやすい方法を取るのではなく、{{Pkg|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}' |
||
+ | |||
+ | あるいは、{{Pkg|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)' |
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)' |
||
− | + | このコマンドは、パッケージの一覧を左のペインに、パッケージの情報を右のペインにそれぞれ表示させるために [[fzf]] を使用しています。 |
|
− | パッケージ |
+ | 表示するパッケージを絞るには文字を入力してください。矢印キーで (または {{ic|Ctrl-j}}/{{ic|Ctrl-k}}) で移動し、{{ic|Enter}} でパッケージの情報を ''less'' で表示します。 |
+ | ''pacman'' のデータベースに載っているパッケージ (インストールされているものとされていないもの両方) を同じような方法 (fzf) でブラウズするには: |
||
− | === パッケージに含まれているファイルを容量を付けてリストアップ === |
||
+ | $ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse |
||
− | 特定のパッケージが異常な容量を消費していて、どのファイルが容量を食っているのか調べたいときに便利なコマンドです。 |
||
+ | カーソルの移動方法は同じです。しかし、{{ic|Enter}} キーは先程と同じようには動きません。 |
||
− | $ pacman -Qlq ''package'' | grep -v '/$' | xargs du -h | sort -h |
||
− | === |
+ | === パッケージが所有しているファイルとそのサイズを一覧表示 === |
+ | このコマンドは、特定のパッケージが多くの容量を使用していることが分かっていて、そのパッケージのどのファイルが最も大きいかを確認したい場合に便利かもしれません。 |
||
− | どのパッケージにも所有されていない謎のファイルが存在する場合 ([[Arch Linux の安定化#パッケージマネージャを使ってソフトウェアをインストールする|パッケージマネージャを使わずにソフトウェアをインストール]]した場合など)、ファイルを見つけ出して消去すると良いでしょう。以下の手順で見つけ出せます: |
||
+ | $ pacman -Qlq ''package'' | grep -v '/$' | xargs -r du -h | sort -h |
||
− | # 所有者を確認したいファイルのソート済みリストを作成: {{bc|<nowiki>$ find /etc /opt /usr | sort > all_files.txt</nowiki>}} |
||
− | # pacman によって追跡されているファイルのソート済みリストを作成 (そしてディレクトリの末尾のスラッシュを削除): {{bc|<nowiki>$ pacman -Qlq | sed 's|/$||' | sort > owned_files.txt</nowiki>}} |
||
− | # 後者のファイルには存在しない行を確認: {{bc|$ comm -23 all_files.txt owned_files.txt}} |
||
− | どのパッケージにも |
+ | === どのパッケージにも所有されていないファイルを特定する === |
+ | どのパッケージにも所有されていないファイルがある場合 ([[システムメンテナンス#パッケージマネージャーを使用してソフトウェアをインストールする|ソフトウェアのインストールにパッケージマネージャを使用]]しなかった場合に起こりえます)、そのようなファイルをクリーンアップするために特定する必要があることがあります。 |
||
− | {{Tip|{{Pkg|lostfiles}} スクリプトは上記と同じようなことを実行しますが、出力から偽陽性のファイルを取り除くための包括的なブラックリストを使用します。}} |
||
+ | 1つ目の方法は、{{Pkg|pacutils}} パッケージの {{ic|pacreport --unowned-files}} コマンドを root として実行することです。これは、詳細と共に未所有のファイルを一覧表示します。 |
||
− | === 使用していないパッケージの削除 (孤立したパッケージ) === |
||
+ | もう一つの方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを ''pacman'' で調べる方法です: |
||
− | ''再帰的に''孤立したパッケージ(とその設定ファイル)を削除するには: |
||
+ | # find /etc /usr /opt | LC_ALL=C.UTF-8 pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5- |
||
− | # pacman -Rns $(pacman -Qtdq) |
||
+ | {{Tip|{{Pkg|lostfiles}} スクリプトも同じようなことをしますが、一般的に偽陽性とされるファイルを出力から取り除くための拡張可能なブラックリストが含まれています。}} |
||
− | 孤立したパッケージが見つからなかった場合、pacman は {{ic|error: no targets specified}} を出力します。{{ic|pacman -Rns}} に何も引数が指定されていないとこうなります。 |
||
+ | === パッケージによって作成された未所有のファイルを追跡する === |
||
− | {{Note|{{Pkg|pacman}} 4.2.0 現在、{{ic|-Qt}} は本当に孤立しているパッケージしかリストアップしません。他のパッケージによって任意で必要とされているパッケージを含めたい場合、{{ic|-t}} フラグを2回指定してください ({{ic|-Qtt}})。}} |
||
+ | ほとんどのシステムでは、通常の運用でも状態ファイル、ログ、インデックスなどといった[http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html#S3-RPM-INSIDE-FLIST-GHOST-DIRECTIVE ゴースト]ファイルがゆっくりと蓄積していきます。 |
||
− | {{ic|-Rns}} (や {{ic|-Rnc}}) オプションは直接依存しているパッケージだけを削除し、明示的にインストールされた任意の依存パッケージは削除しません ({{ic|--asdeps}} オプションを使用しなかった場合)。 |
||
+ | {{Pkg|pacutils}} パッケージの {{ic|pacreport}} を使えば、{{ic|/etc/pacreport.conf}} の設定を使用して、そのようなファイルとそれらと関連するパッケージを追跡できます ({{man|1|pacreport|FILES}} を参照)。 |
||
− | 必須ではありませんが、任意の依存パッケージをインストールする際に {{ic| --asdeps}} オプションを使用してインストールすることでシステムメンテナンスが楽になります。実行時やインストール時には何も変化はありませんが、{{ic|--asdeps}} オプションを使用してインストールしておけば、孤立したパッケージを削除するときに一緒に削除されるようになります。任意の依存パッケージをインストールするときは、以下のコマンドを使うようにしましょう: |
||
+ | 設定ファイルの例としては以下のようなものがあるでしょう (要約): |
||
− | # pacman -S --asdeps <packages that are optional dependencies> |
||
+ | {{hc|/etc/pacreport.conf|2= |
||
− | === base グループ以外の全てのパッケージを削除する === |
||
+ | [Options] |
||
+ | IgnoreUnowned = usr/share/applications/mimeinfo.cache |
||
+ | [PkgIgnoreUnowned] |
||
− | base グループを除く全てのパッケージを削除する必要がある場合は、以下のワンライナーを試して下さい: |
||
+ | 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 ユーザーとして実行すれば、関連するパッケージがすでにアンインストールされている場合 (または、新しいファイルが作成された場合)、それに対応する未所有のファイルが一覧表示されます。 |
||
− | # pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u)) |
||
+ | |||
+ | 加えて、[https://github.com/CyberShadow/aconfmgr aconfmgr] ({{AUR|aconfmgr-git}}) は、設定スクリプトを使用して、変更されたファイルや孤立したファイルを追跡できます。 |
||
+ | |||
+ | === 使用していないパッケージ (孤立したパッケージ) の削除 === |
||
+ | |||
+ | 孤立したパッケージ (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| |
||
+ | * 他のパッケージも削除されないようにしたい場合は、上記のコマンドに加えてください。完全に機能するベースシステムに必要となりうる他のパッケージについては [[インストールガイド#必須パッケージのインストール]] を参照してください。 |
||
+ | * 上記のコマンドではブートローダーのパッケージも削除対象になります。削除してもシステム自体は起動可能なままであるはずですが、パッケージがないとブートパラメータを変更できないかもしれません。 |
||
+ | }} |
||
+ | 最後に、[[#使用していないパッケージ (孤立したパッケージ) の削除]] の手順に従って "依存関係としてインストール" に指定されたパッケージを削除してください。 |
||
− | 上記のワンライナーは [https://bbs.archlinux.org/viewtopic.php?id=130176 こちらのスレッド] に書かれたものが元になっています。 |
||
=== 複数のパッケージの依存パッケージリストを取得 === |
=== 複数のパッケージの依存パッケージリストを取得 === |
||
− | 依存パッケージはアルファベット順 |
+ | 依存パッケージはアルファベット順にソートされ、重複するパッケージは1つにまとめられます。 |
− | {{Note|ローカルにインストール |
+ | {{Note|ローカルにインストールされたパッケージのみの依存関係ツリーを表示するには、({{ic|pacman -Si}} の部分で) {{ic|pacman -Qi}} コマンドを代わりに使用してください。}} |
− | $ pacman -Si ''packages'' | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u |
+ | $ 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 |
$ expac -l '\n' %E -S ''packages'' | sort -u |
||
195行目: | 270行目: | ||
=== 変更されたバックアップファイルをリストアップ === |
=== 変更されたバックアップファイルをリストアップ === |
||
+ | [[pacman/Pacnew と Pacsave#パッケージのバックアップファイル|ユーザーによって変更される可能性のある]]ファイル (つまり、[[PKGBUILD#backup|PKGBUILD の backup 配列]]に含まれているファイル) として ''pacman'' に追跡されていて、かつユーザーによって変更が加えられた設定ファイルを一覧表示するには: |
||
− | システムの設定ファイルをバックアップしたい場合は {{ic|/etc/}} にある全てのファイルをコピーすれば良いですが、普通は変更を加えたファイルだけをバックアップすればそれで足ります。変更が加えられた[[Pacnew と Pacsave ファイル#パッケージのバックアップファイル|バックアップファイル]]は次のコマンドで閲覧できます: |
||
− | # pacman -Qii | awk '/ |
+ | # pacman -Qii | awk '/\[modified\]/ {print $(NF - 1)}' |
− | + | このコマンドを root 権限で実行することで、root ユーザーからしか読み取れないファイル {{ic|/etc/sudoers}} など) も出力に含まれるようになります。 |
|
+ | このコマンドは、システムのバックアップを選択的に行いたい時や、システムの設定をマシンからマシンへ複製する際に使うことができます。 |
||
− | {{Tip|バックアップファイルだけでなく、pacman が認識している全ての変更済みファイルをリストアップしたい場合は[[#パッケージから変更された全てのファイルをリストアップ|パッケージから変更された全てのファイルをリストアップ]]を見てください。}} |
||
+ | |||
+ | {{Tip| |
||
+ | * ''pacman'' のデータベースに載っているファイルのうち変更されたもの (バックアップファイル以外も含む) を一覧表示する方法は [[#パッケージから変更された全てのファイルをリストアップ]] を見てください。 |
||
+ | * ''pacman'' によって追跡されていないファイルを一覧表示する方法は [[#どのパッケージにも所有されていないファイルを特定する]] を見てください。 |
||
+ | }} |
||
=== pacman データベースをバックアップ === |
=== pacman データベースをバックアップ === |
||
− | 次のコマンドでローカルの pacman データベースをバックアップできます: |
+ | 次のコマンドでローカルの ''pacman'' データベースをバックアップできます: |
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local |
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local |
||
− | バックアップした pacman データベースファイルは USB スティックや外付けハードドライブ、CD-R などのオフラインメディアに保存してください。 |
+ | バックアップした ''pacman'' データベースファイルは USB スティックや外付けハードドライブ、CD-R など、一つ以上のオフラインメディアに保存してください。 |
{{ic|pacman_database.tar.bz2}} ファイルを {{ic|/}} ディレクトリに移動して以下のコマンドを実行することでデータベースを復元できます: |
{{ic|pacman_database.tar.bz2}} ファイルを {{ic|/}} ディレクトリに移動して以下のコマンドを実行することでデータベースを復元できます: |
||
215行目: | 295行目: | ||
# tar -xjvf pacman_database.tar.bz2 |
# tar -xjvf pacman_database.tar.bz2 |
||
− | {{Note|pacman データベースファイルが破損していて、バックアップファイルが存在しない場合でも、pacman データベースを再構築できる望みはあります。[[# |
+ | {{Note|''pacman'' データベースファイルが破損していて、バックアップファイルが存在しない場合でも、''pacman'' データベースを再構築できる望みはあります。[[#pacman のローカルデータベースを復元する]] を見てください。}} |
{{Tip|{{AUR|pakbak-git}} パッケージには上記の作業を自動的に行うスクリプトと [[systemd]] サービスが入っています。{{ic|/etc/pakbak.conf}} で設定が可能です。}} |
{{Tip|{{AUR|pakbak-git}} パッケージには上記の作業を自動的に行うスクリプトと [[systemd]] サービスが入っています。{{ic|/etc/pakbak.conf}} で設定が可能です。}} |
||
221行目: | 301行目: | ||
=== 変更履歴を簡単に確認 === |
=== 変更履歴を簡単に確認 === |
||
− | メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。{{AUR|pacolog}} をインストールすることでコマンドラインからコミットメッセージを確認することができます。{{ic|pacolog |
+ | メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。{{AUR|pacolog}} をインストールすることでコマンドラインからコミットメッセージを素早く確認することができます。{{ic|pacolog ''package''}} を実行すると、公式リポジトリのパッケージまたは AUR のパッケージの最近のコミットメッセージの一覧を表示します。 |
== インストールとリカバリ == |
== インストールとリカバリ == |
||
232行目: | 312行目: | ||
# cd ~/Packages |
# cd ~/Packages |
||
− | # pacman -Syw base base-devel grub-bios xorg gimp |
+ | # pacman -Syw --cachedir . base base-devel grub-bios xorg gimp |
− | # repo-add ./custom.db.tar. |
+ | # 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 などに保存してください。 |
||
インストールするには: |
インストールするには: |
||
241行目: | 327行目: | ||
'''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 など) の''前に''リポジトリを追加してください。この手順は重要です。これで標準のリポジトリに優先して 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 -Syu |
# pacman -Syu |
||
258行目: | 349行目: | ||
=== カスタムローカルリポジトリ === |
=== カスタムローカルリポジトリ === |
||
− | pacman |
+ | ''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.gz /path/to/package-1.0-1-x86_64.pkg.tar.zst'' |
||
+ | |||
+ | ''repo-add'' を使用する際は、データベースとパッケージが同一のディレクトリ内に存在している必要はありません。ただし、そのデータベースを ''pacman'' で使用する際は、データベースとパッケージが一緒に存在している必要があるので注意してください。また、リポジトリに含めるビルド済みパッケージをすべて1つのディレクトリに入れておけば、シェルのグロブ拡張を使って複数のパッケージを一度に追加/更新することができます: |
||
+ | |||
+ | $ repo-add ''/path/to/repo.db.tar.gz /path/to/*.pkg.tar.zst'' |
||
+ | |||
+ | {{Warning|''repo-add'' は、コマンドラインで渡された順番でエントリをデータベースに追加します。同じパッケージの複数のバージョンが渡された場合、正しいバージョンが最後に追加されるよう注意しなければなりません。特に、シェルによって使用される辞書順はロケール依存であり、''pacman'' によって使用される {{man|8|vercmp}} の順序とは異なるので注意してください。}} |
||
+ | |||
+ | 複数のアーキテクチャをサポートしようと考えている場合、エラーが起こらないように注意する必要があります。各アーキテクチャに独自のディレクトリツリーが存在している必要があります: |
||
+ | |||
+ | {{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/''arch''/g"| |
||
+ | /home/archie/customrepo/ |
||
+ | └── ''arch'' |
||
+ | ├── customrepo.db -> customrepo.db.tar.xz |
||
+ | ├── customrepo.db.tar.xz |
||
+ | ├── customrepo.files -> customrepo.files.tar.xz |
||
+ | ├── customrepo.files.tar.xz |
||
+ | └── personal-website-git-b99cce0-1-''arch''.pkg.tar.zst |
||
+ | |||
+ | 1 directory, 5 files |
||
+ | }} |
||
+ | ''repo-add'' 実行ファイルは、パッケージが適切であるかどうかをチェックします。パッケージが適切でない場合、以下のようなエラーメッセージが出力されます: |
||
− | {{ic|repo-add}} を使う際、データベースとパッケージは同じディレクトリにある必要はないので注意してください。ただしそのデータベースで pacman を使うときには、揃っていないといけません。 |
||
+ | ==> ERROR: '/home/archie/customrepo/''arch''/foo-''arch''.pkg.tar.zst' does not have a valid database archive extension. |
||
− | 新しいパッケージを追加する(そして古いパッケージが存在していたら削除する)には、次を実行してください: |
||
+ | ''repo-remove'' はパッケージデータベースからパッケージを削除するために使用されます。パッケージの名前のみをコマンドラインで指定します。 |
||
− | $ repo-add /path/to/repo.db.tar.gz /path/to/packagetoadd-1.0-1-i686.pkg.tar.xz |
||
+ | $ repo-remove ''/path/to/repo.db.tar.gz pkgname'' |
||
− | {{Note|リポジトリからパッケージを削除する必要がある場合、{{Ic|repo-remove}} を使ってください。}} |
||
− | ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。{{ic| |
+ | ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。カスタムリポジトリの例は {{ic|pacman.conf}} 内にあります。リポジトリ名は、データベースのファイル名からファイル拡張子を除いたものになります。上記の例では、リポジトリ名は単に ''repo'' となります。リポジトリの場所を参照するには、{{ic|file://}} URL を使うか、{{ic|<nowiki>http://localhost/path/to/directory</nowiki>}} を使って HTTP 経由で行ってください。 |
− | カスタムリポジトリを[[非公式ユーザーリポジトリ]]に追加 |
+ | もし良ければ、カスタムリポジトリを[[非公式ユーザーリポジトリ|非公式ユーザリポジトリのリスト]]に追加して、コミュニティがその恩恵を受けられるようにしましょう。 |
=== pacman のキャッシュをネットワークで共有する === |
=== pacman のキャッシュをネットワークで共有する === |
||
282行目: | 395行目: | ||
==== 読み取り専用キャッシュ ==== |
==== 読み取り専用キャッシュ ==== |
||
+ | {{Note|1=pacman がサーバーから 3 つのパッケージをダウンロードできない場合、代わりに別のミラーが使用されます。https://bbs.archlinux.org/viewtopic.php?id=268066 を参照してください。}} |
||
− | 簡単な方法として、他のコンピュータからミラーとして使用できるスタンドアロンのウェブサーバーを実行するという方法があります: {{ic|darkhttpd /var/cache/pacman/pkg}}。サーバーをミラーリストの一番上に追加してください。キャッシュが存在しない場合、404エラーが大量に出てしまいますが、その場合 pacman はリストの次のミラーを使用します。 |
||
+ | |||
+ | 迅速な解決策を探している場合は、他のコンピューターが最初のミラーとして使用できる [https://gist.github.com/willurd/5720255 基本的な一時 Web サーバー] を実行するだけです。 |
||
+ | |||
+ | まず最初に、提供するディレクトリで 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/ |
||
+ | |||
+ | {{Tip|デフォルトでは、Python {{ic|http.server}} は任意のインターフェイスのポート {{ic|8000}} を待受します。別のポートを使用するか、特定のアドレスにのみバインドするには、パラメータと引数を追加するだけです: |
||
+ | |||
+ | $ python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080 |
||
+ | }} |
||
+ | |||
+ | 次に、各クライアントマシンで {{ic|/etc/pacman.d/mirrorlist}} を [[ヘルプ:読み方|追加, 追記, 作成, 編集|編集]] して、このサーバーを最上位のエントリとして追加します。 |
||
+ | |||
+ | {{hc|/etc/pacman.d/mirrorlist|2= |
||
+ | Server = http://''server-ip'':''port'' |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | {{Warning|この階層は存在しないため、クエリは失敗します、他のエントリの場合と同様に、このカスタムサーバーに {{ic|/repos/$repo/os/$arch}} を追加しないでください。}} |
||
+ | |||
+ | よりスタンドアロンのソリューションをお探しの場合は、{{Pkg|darkhttpd}} が非常に最小限の Web サーバーを提供します。前の {{ic|python}} コマンドを次のように置き換えます。 |
||
+ | |||
+ | $ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id |
||
+ | |||
+ | 便宜上、darkhttpd を ''systemd'' サービスとして実行することもできます。[[systemd#ユニットファイル]] を参照してください。 |
||
+ | |||
+ | Rust で書かれた小規模な Web サーバーである {{Pkg|miniserve}} も使用できます。 |
||
+ | |||
+ | $ miniserve /var/cache/pacman/pkg |
||
+ | |||
+ | 次に、 miniserve が利用可能な最初の URL を使用して、上記のように {{ic|/etc/pacman.d/mirrorlist}} を編集します。 |
||
+ | |||
+ | すでに他の目的で Web サーバーを実行している場合は、代わりにそれをローカルリポジトリサーバーとして再利用できます。たとえば、すでに [[nginx]] でサイトを提供している場合は、ポート 8080 で待受する ''nginx'' サーバーブロックを追加できます。 |
||
+ | |||
+ | {{hc|/etc/nginx/nginx.conf| |
||
+ | server { |
||
+ | listen 8080; |
||
+ | root /var/cache/pacman/pkg; |
||
+ | server_name myarchrepo.localdomain; |
||
+ | try_files $uri $uri/; |
||
+ | } |
||
+ | }} |
||
+ | |||
+ | この変更を加えた後は、必ず {{ic|nginx.service}} の [[再起動]] を行ってください。 |
||
+ | |||
+ | {{Tip|どの Web サーバーを使用する場合でも、ファイアウォール設定 (存在する場合) で、設定されたポートへの目的のトラフィックの到達が許可され、不要なトラフィックが許可されていないことを確認してください。[[セキュリティ#ネットワークとファイアウォール]]を参照してください。}} |
||
+ | |||
+ | ==== 読み取り専用キャッシュのオーバーレイマウント ==== |
||
+ | |||
+ | ローカルネットワーク上の1台のマシンを{{ic|/var/cache/pacman/pkg}} ディレクトリの [[Overlayfs|overlay mount]] 読み取り専用パッケージキャッシュとして使うことができます。このような設定は、このサーバーに他のマシンでも使われる最新のパッケージが適度に包括的にインストールされている場合に有利です。これは低帯域幅のアップストリーム接続の端にある多くのマシンを管理するのに便利です。 |
||
+ | |||
+ | 例として、このメソッドを使用するには: |
||
+ | |||
+ | # 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 |
||
+ | |||
+ | {{Note|作業ディレクトリは、上位ディレクトリと同じマウントされたデバイス上の空のディレクトリである必要があります。[[Overlayfs#使用方法]] を参照してください。}} |
||
+ | |||
+ | {{Tip|1={{ic|/tmp/pacman_pkg}} オーバーレイディレクトリをリストすると、"Stale file handle" などのエラーが発生する場合は、オプション {{ic|1=-o redirect_dir=off -oindex=off}} を使用してオーバーレイマウントを試してください。}} |
||
+ | |||
+ | この後、オプション {{ic|--cachedir /tmp/pacman_pkg}} を使用して ''pacman'' を実行します。例: |
||
+ | |||
+ | # 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] がありましたが、現在はメンテナンスされていません。 |
||
==== 読み書き可能キャッシュ ==== |
==== 読み書き可能キャッシュ ==== |
||
353行目: | 540行目: | ||
Flexo はデフォルトではポート 7878 で動作します。 {{ic|/etc/pacman.d/mirrorlist}} の先頭に {{ic|1=Server = http://''myserver'':7878/$repo/os/$arch}} と入力し、pacman が Flexo を介してパッケージをダウンロードできるようにします。 |
Flexo はデフォルトではポート 7878 で動作します。 {{ic|/etc/pacman.d/mirrorlist}} の先頭に {{ic|1=Server = http://''myserver'':7878/$repo/os/$arch}} と入力し、pacman が Flexo を介してパッケージをダウンロードできるようにします。 |
||
− | ==== |
+ | ==== 同期プログラムを使用して pacman パッケージ キャッシュを同期する ==== |
+ | [[Syncthing]] または [[Resilio Sync]] を使用して、''pacman'' キャッシュディレクトリ (つまり、{{ic|/var/cache/pacman/pkg}}) を同期します。 |
||
− | [[BitTorrent Sync]] はネットワークを介してフォルダを同期する新方法です (LAN でもインターネットでも動作します)。ピアツーピアなのでサーバーを設定する必要はありません: 詳しくはリンクを参照してください。 |
||
− | BitTorrent Sync を使って pacman のキャッシュを共有する方法: |
||
− | * まず同期したいマシンに AUR から {{AUR|btsync}}{{Broken package link|パッケージが存在しません}} パッケージをインストール。 |
||
− | * [[BitTorrent Sync]] の wiki ページや AUR パッケージのインストール手順に従う。 |
||
− | ** root アカウントで動作するように BitTorrent Sync を設定。pacman パッケージキャッシュの読み書き権限が必要です。 |
||
− | ** btsync のウェブ UI でパスワードを設定。 |
||
− | ** btsync の systemd デーモンを起動。 |
||
− | ** btsync のウェブ GUI から最初のマシンに新しい同期フォルダを追加して Secret を生成。フォルダは {{ic|/var/cache/pacman/pkg}} を指定。 |
||
− | ** 同じ Secret を使って他のマシンにもフォルダを追加してシステム間でキャッシュされたパッケージを共有。もしくは、最初のシステムをマスター、他のシステムをスレーブとして、Read Only Secret を使用。{{ic|/var/cache/pacman/pkg}} を指定。 |
||
+ | ==== 不要なキャッシュパージの防止 ==== |
||
− | マシンを接続したらキャッシュの同期が開始されます。Pacman は同期中でも問題なく動作します。同期は完全に自動です。 |
||
+ | デフォルトでは、{{ic|pacman -Sc}} は、コマンドが発行されたマシンにインストールされていないパッケージに対応するパッケージ tarball をキャッシュから削除します。''pacman'' は、キャッシュを共有するすべてのマシンにどのようなパッケージがインストールされるかを予測できないため、削除すべきではないファイルを削除してしまうことになります。 |
||
− | {{Note|BitTorrent Sync のフリーの代替として [[Syncthing]] が存在し、同じように使うことができます。}} |
||
+ | ''古い'' tarball のみが削除されるようにキャッシュをクリーンアップするには: |
||
− | ==== 同期プログラムを使用して pacman のパッケージキャッシュを同期します ==== |
||
+ | {{hc|/etc/pacman.conf|2= |
||
− | [[Syncthing]] または [[Resilio Sync]] を使用して、''pacman'' キャッシュフォルダ (つまり、{{ic|/var/cache/pacman/pkg}}) を同期します。 |
||
+ | [options] |
||
− | |||
+ | CleanMethod = KeepCurrent |
||
− | ==== 要らなくなったキャッシュが消えないようにする ==== |
||
+ | }} |
||
− | |||
− | デフォルトでは、{{Ic|pacman -Sc}} はコマンドの実行時にマシンにインストールされていないパッケージのキャッシュを削除します。pacman はキャッシュを共有している全てのマシンにインストールされているパッケージを推測することができないため、削除してはいけないファイルまで削除してしまいます。 |
||
− | |||
− | キャッシュを削除するときは古い tarball だけを削除するように、{{ic|/etc/pacman.conf}} の {{ic|[options]}} セクションに以下のエントリを追加してください: |
||
− | |||
− | CleanMethod = KeepCurrent |
||
=== ファイルシステムからパッケージを再作成 === |
=== ファイルシステムからパッケージを再作成 === |
||
401行目: | 575行目: | ||
* {{ic|pacman -Qqem> Foreignpkglist.txt}} を使用して、明示的にインストールされた AUR およびその他の外部パッケージのリストを作成します。}} |
* {{ic|pacman -Qqem> Foreignpkglist.txt}} を使用して、明示的にインストールされた AUR およびその他の外部パッケージのリストを作成します。}} |
||
− | 明示的にインストールされたパッケージの最新リストを保持するために(たとえば、バージョン管理された {{ic|/etc/}} と組み合わせて)、[[Pacman# |
+ | 明示的にインストールされたパッケージの最新リストを保持するために(たとえば、バージョン管理された {{ic|/etc/}} と組み合わせて)、[[Pacman#フック|hook]] を設定できます。 例: |
[Trigger] |
[Trigger] |
||
505行目: | 679行目: | ||
}} |
}} |
||
− | == パ |
+ | === 接続状況が悪い場合でもパッケージをインストールする === |
+ | 悪い接続状況 (携帯電話を使用する電車など) からパッケージをインストールしようとする場合は、{{ic|--disable-download-timeout}} オプションを使用して、次のようなエラーが発生する可能性を減らします。 |
||
− | === データベースのアクセス速度を向上させる === |
||
+ | error: failed retrieving file [...] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds |
||
− | Pacman はパッケージの全ての情報を、パッケージごとの小さなファイルに保存しています。データベースのアクセス速度を向上させればデータベースを使う処理 (例: パッケージの検索・パッケージの依存関係の解決) にかかる時間が短くなります。一番安全で簡単な方法は root で次を実行することです: |
||
+ | もしくは、 |
||
− | # pacman-optimize |
||
+ | error: failed retrieving file [...] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received |
||
− | 小さなファイルをハードディスクのひとつの (物理的な) 場所にまとめて置くことでパッケージにアクセスするときにハードディスクのヘッドがあまり動かなくてもいいようにします。この方法は安全ですが、フールプルーフではありません。ファイルシステムによっては、ディスク上の使用している領域と空の領域がフラグメンテーションを起こすことがあります。さらにアグレッシブな方法として、データベースを最適化する前にインストールされていないパッケージをキャッシュから削除し使われていないリポジトリを削除するという方法があります: |
||
+ | == パフォーマンス == |
||
− | # pacman -Sc && pacman-optimize |
||
+ | {{Out of date|このページは、pacman が並列ダウンロードをネイティブにサポートする前に書かれました。v6 以降、複数のパッケージを同時にダウンロードするオプションは以下だけではありません。}} |
||
− | === ダウンロード速度を向上させる === |
||
+ | === ダウンロード速度 === |
||
− | {{Note|ダウンロード速度が極端に遅い場合、使っている[[ミラー]]が ftp.archlinux.org ではないことを確認してください。[https://www.archlinux.org/news/302/ 2007年の3月からこのサーバーには速度制限がかかっています]。}} |
||
パッケージをダウンロードするとき pacman は {{ic|/etc/pacman.d/mirrorlist}} に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法は[[ミラー]]を見てください。 |
パッケージをダウンロードするとき pacman は {{ic|/etc/pacman.d/mirrorlist}} に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法は[[ミラー]]を見てください。 |
||
− | Pacman に |
+ | Pacman のダウンロード速度は、[[pacman#並列ダウンロードを有効にする|並列ダウンロードの有効化]]や、パッケージのダウンロードに ''pacman'' 内蔵のファイルダウンローダー以外のアプリケーションを使うことでも改善することができます。 |
− | + | いずれの場合でも、変更を行う前に最新の ''pacman'' を使っていることを確認してください: |
|
# pacman -Syu |
# pacman -Syu |
||
531行目: | 705行目: | ||
==== Powerpill ==== |
==== Powerpill ==== |
||
− | Powerpill は |
+ | [[Powerpill]] は ''pacman'' のラッパーで、並列で分割ダウンロードを行うことによって ''pacman'' のダウンロード速度の向上を図ります。 |
− | |||
− | [[Powerpill|Powerpill の wiki ページ]]に基本的な設定・使用方法と、パッケージと上流のリンクがあります。 |
||
==== wget ==== |
==== wget ==== |
||
− | pacman に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手 |
+ | ''pacman'' に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手の良い選択肢です。 |
− | {{ic|wget}} を使うには、まず {{ |
+ | {{ic|wget}} を使うには、まず {{Pkg|wget}} を[[インストール]]し、{{ic|/etc/pacman.conf}} ファイルの {{ic|[options]}} セクションにある以下の行をアンコメントしてください: |
− | XferCommand = /usr/bin/wget - |
+ | 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}})。 |
{{ic|/etc/pacman.conf}} に {{ic|wget}} パラメータを記述する代わりに、{{ic|wget}} の設定ファイルを直接修正することも可能です (システム全体のファイルは {{ic|/etc/wgetrc}}、ユーザー別のファイルは {{ic|$HOME/.wgetrc}})。 |
||
547行目: | 719行目: | ||
==== aria2 ==== |
==== aria2 ==== |
||
− | [[aria2]] はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。 |
+ | [[aria2]] はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。aria2 を使えば、Arch ミラーに対して複数の HTTP/HTTPS/FTP 接続を同時に確立することができ、ファイルやパッケージのダウンロード速度が向上するはずです。 |
− | {{Note| |
+ | {{Note|''pacman'' の XferCommand で aria2c を使っても複数パッケージの同時ダウンロードは'''行われません'''。Pacman はひとつのパッケージごとに XferCommand を呼び出し、それが完了してから次を呼び出すからです。同時に複数のパッケージをダウンロードするには、[[Powerpill]] を見て下さい。}} |
− | {{Pkg|aria2}} をインストールして |
+ | {{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 |
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= |
+ | {{Tip|1=[https://bbs.archlinux.org/viewtopic.php?pid=1491879#p1491879 このページで示されている、aria2 を pacman で使用する設定]は、設定を簡単にし、より多くの設定オプションを追加します。}} |
− | + | 使用されている aria2c のオプションについては {{man|1|aria2c|OPTIONS}} を見てください。 |
|
− | * {{ic|-d, --dir}}: |
+ | * {{ic|-d, --dir}}: ダウンロードしたファイルを保存するディレクトリ。 |
* {{ic|-o, --out}}: ダウンロードしたファイルの出力ファイル名。 |
* {{ic|-o, --out}}: ダウンロードしたファイルの出力ファイル名。 |
||
− | * {{ic|%o}}: pacman によって指定されるローカルのファイル名を表す変数。 |
+ | * {{ic|%o}}: ''pacman'' によって指定されるローカルのファイル名を表す変数。 |
− | *{{ic|%u}}: pacman によって指定されるダウンロード URL を表す変数。 |
+ | * {{ic|%u}}: ''pacman'' によって指定されるダウンロード URL を表す変数。 |
==== 他のアプリケーション ==== |
==== 他のアプリケーション ==== |
||
− | + | ''pacman'' で利用できるダウンローダーは他にもあります。以下はそのダウンローダーと、利用するための XferCommand 設定を挙げています: |
|
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}} |
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}} |
||
* {{ic|lftp}}: {{ic|1=XferCommand = /usr/bin/lftp -c pget %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|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}} (詳細 |
+ | * {{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}} (詳細 |
+ | * {{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|pkgtools|Arch Linux パッケージ用のスクリプトコレクション。|https://github.com/Daenyth/pkgtools|{{AUR|pkgtools}}}} |
||
+ | * {{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}}}} |
2024年7月19日 (金) 19:58時点における版
以下のヒントや 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 -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つ目の方法は、pacutils パッケージの pacreport --unowned-files
コマンドを root として実行することです。これは、詳細と共に未所有のファイルを一覧表示します。
もう一つの方法は、確認しておきたいファイルのリストから、それらが所有されているかどうかを pacman で調べる方法です:
# find /etc /usr /opt | LC_ALL=C.UTF-8 pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-
パッケージによって作成された未所有のファイルを追跡する
ほとんどのシステムでは、通常の運用でも状態ファイル、ログ、インデックスなどといったゴーストファイルがゆっくりと蓄積していきます。
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.gz /path/to/package-1.0-1-x86_64.pkg.tar.zst
repo-add を使用する際は、データベースとパッケージが同一のディレクトリ内に存在している必要はありません。ただし、そのデータベースを pacman で使用する際は、データベースとパッケージが一緒に存在している必要があるので注意してください。また、リポジトリに含めるビルド済みパッケージをすべて1つのディレクトリに入れておけば、シェルのグロブ拡張を使って複数のパッケージを一度に追加/更新することができます:
$ repo-add /path/to/repo.db.tar.gz /path/to/*.pkg.tar.zst
複数のアーキテクチャをサポートしようと考えている場合、エラーが起こらないように注意する必要があります。各アーキテクチャに独自のディレクトリツリーが存在している必要があります:
$ tree ~/customrepo/ | sed "s/$(uname -m)/arch/g"
/home/archie/customrepo/ └── arch ├── customrepo.db -> customrepo.db.tar.xz ├── customrepo.db.tar.xz ├── customrepo.files -> customrepo.files.tar.xz ├── customrepo.files.tar.xz └── 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.gz pkgname
ローカルリポジトリを作成できたら、リポジトリを pacman.conf
に追加してください。カスタムリポジトリの例は pacman.conf
内にあります。リポジトリ名は、データベースのファイル名からファイル拡張子を除いたものになります。上記の例では、リポジトリ名は単に repo となります。リポジトリの場所を参照するには、file://
URL を使うか、http://localhost/path/to/directory
を使って HTTP 経由で行ってください。
もし良ければ、カスタムリポジトリを非公式ユーザリポジトリのリストに追加して、コミュニティがその恩恵を受けられるようにしましょう。
pacman のキャッシュをネットワークで共有する
LAN 上で複数の Arch マシンを使っている場合、パッケージを共有することでダウンロード回数を劇的に減らすことができます。使用しているアーキテクチャが異なるマシン (i686 と x86_64) でキャッシュを共有してはいけません。問題が発生します。
読み取り専用キャッシュ
迅速な解決策を探している場合は、他のコンピューターが最初のミラーとして使用できる 基本的な一時 Web サーバー を実行するだけです。
まず最初に、提供するディレクトリで pacman データベースを利用できるようにします。
# ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg/
次に、このディレクトリの提供を開始します。たとえば、Python http.server モジュールの場合:
$ python -m http.server -d /var/cache/pacman/pkg/
次に、各クライアントマシンで /etc/pacman.d/mirrorlist
を 追加, 追記, 作成, 編集|編集 して、このサーバーを最上位のエントリとして追加します。
/etc/pacman.d/mirrorlist
Server = http://server-ip:port ...
よりスタンドアロンのソリューションをお探しの場合は、darkhttpd が非常に最小限の Web サーバーを提供します。前の python
コマンドを次のように置き換えます。
$ sudo -u 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
の 再起動 を行ってください。
読み取り専用キャッシュのオーバーレイマウント
ローカルネットワーク上の1台のマシンを/var/cache/pacman/pkg
ディレクトリの overlay mount 読み取り専用パッケージキャッシュとして使うことができます。このような設定は、このサーバーに他のマシンでも使われる最新のパッケージが適度に包括的にインストールされている場合に有利です。これは低帯域幅のアップストリーム接続の端にある多くのマシンを管理するのに便利です。
例として、このメソッドを使用するには:
# 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/
を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。
まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば sshfs, shfs, ftpfs, smbfs, nfs など。
それから、サーバーの /var/cache/pacman/pkg
をクライアントマシンの /var/cache/pacman/pkg
にマウントすることでパッケージを共有できます。
rsync で同期
ローカル環境でのもう1つのアプローチは、 rsync です。 キャッシュするサーバーを選択し、 rsync デーモン を有効にします。 クライアントでは、rsync プロトコルを介してこの共有と双方向で同期します。 コロンを含むファイル名は、 rsync プロトコルでは問題ありません。
クライアントのドラフトの例では、共有名に uname-m
と入力し使用することで、アーキテクチャに依存する同期が保証されます。
# rsync rsync://server/share_$(uname -m)/ /var/cache/pacman/pkg/ ... # pacman ... # paccache ... # rsync /var/cache/pacman/pkg/ rsync://server/share_$(uname -m)/ ...
nginx を使用する動的なリバースプロキシキャッシュ
nginx を使って公式の上流ミラーへのリクエストをプロキシして結果をローカルディスクにキャッシュすることができます。その後、ファイルへのリクエストは全てローカルのキャッシュから供給されるようになり、大量のサーバーを更新するときでもインターネットのトラフィックを簡単に最小限に抑えることができます。
この例では、キャッシュサーバーを http://cache.domain.local:8080/
で実行してパッケージを /srv/http/pacman-cache/
に保存します。
キャッシュのディレクトリを作成して nginx からファイルが書き込めるようにパーティションを設定:
# mkdir /srv/http/pacman-cache # chown http:http /srv/http/pacman-cache
次に、nginx を 動的キャッシュ として設定 (コマンドについてはコメントを読んでください)。
最後に、他の Arch Linux サーバーを更新して mirrorlist
ファイルに以下の行を追加して新しいキャッシュを使うように設定:
/etc/pacman.d/mirrorlist
Server = http://cache.domain.local:8080/archlinux/$repo/os/$arch ...
Pacoloco プロキシキャッシュサーバー
Pacoloco は、 pacman リポジトリ用の使いやすいプロキシキャッシュサーバです。 pacoloco-gitAUR としてインストールできます。構成ファイルを開き、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 は AUR で利用できます:flexo-gitAUR インストールしたら、 systemd で flexo.service
サービスを スタートします。
Flexo はデフォルトではポート 7878 で動作します。 /etc/pacman.d/mirrorlist
の先頭に Server = http://myserver:7878/$repo/os/$arch
と入力し、pacman が Flexo を介してパッケージをダウンロードできるようにします。
同期プログラムを使用して pacman パッケージ キャッシュを同期する
Syncthing または Resilio Sync を使用して、pacman キャッシュディレクトリ (つまり、/var/cache/pacman/pkg
) を同期します。
不要なキャッシュパージの防止
デフォルトでは、pacman -Sc
は、コマンドが発行されたマシンにインストールされていないパッケージに対応するパッケージ tarball をキャッシュから削除します。pacman は、キャッシュを共有するすべてのマシンにどのようなパッケージがインストールされるかを予測できないため、削除すべきではないファイルを削除してしまうことになります。
古い tarball のみが削除されるようにキャッシュをクリーンアップするには:
/etc/pacman.conf
[options] CleanMethod = KeepCurrent
ファイルシステムからパッケージを再作成
ファイルシステムからパッケージを再作成するには、(pacman に含まれている) bacman を使います。システム上のファイルがそのまま使われるため、作成されるパッケージにはファイルへの変更も一緒に含まれてしまいます。再作成したパッケージの配布は非推奨です。ABS や Arch Rollback Machine を見てください。
別のツールとして fakepkgAUR も存在します。並列化をサポートしており複数のパッケージを入力することができます。bacman ではどちらもサポートされていません。
インストール済みパッケージのリスト
明示的にインストールされたすべてのパッケージのリストを保持しておくと、たとえばシステムをバックアップしたり、新しいシステムへのインストールを高速化したりするのに役立ちます:
$ pacman -Qqe > pkglist.txt
明示的にインストールされたパッケージの最新リストを保持するために(たとえば、バージョン管理された /etc/
と組み合わせて)、hook を設定できます。 例:
[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 --md5sum --quiet
データベースのリカバリについては pacman のローカルデータベースを復元するを参照。mtree
ファイルも該当するパッケージファイルから .MTREE
として抽出できます。
全てのパッケージの再インストール
全てのネイティブのパッケージを再インストールするには、次を使って下さい:
# pacman -Qnq | pacman -S -
外部の (AUR) パッケージは別に再インストールする必要があります。外部のパッケージは pacman -Qmq
で一覧できます。
デフォルトで Pacman はインストールの理由(明示的にインストールしたか、依存でインストールしたか)を維持します。
pacman のローカルデータベースを復元する
pacman/ローカルデータベースの復元を見てください。
既存のインストールから USB キーを復元する
USB キーに Arch をインストールしていて壊してしまった場合 (例: ファイルの書き込み中に取り出してしまった場合など)、全てのパッケージを再インストールして元に戻せる可能性があります (USB キーが /newarch
にマウントされている場合):
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
.pkg ファイルに含まれているファイルを閲覧する
例えば、systemd パッケージに含まれている /etc/systemd/logind.conf
の中身をみたい場合:
$ tar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf
もしくは vim を使って圧縮ファイルを閲覧することもできます:
$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz
古いパッケージのライブラリを使っているアプリケーションを探す
パッケージをインストールしても、(デーモンやサーバーなど) ずっと実行し続けているプログラムが古いパッケージのライブラリのコードを使用している可能性があります。古いライブラリにセキュリティのバグが存在する場合、プログラムを実行し続けるのは得策ではありません。
以下のコマンドで古いパッケージのコードを使用しているプログラムを全て見つけることができます:
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u
実行中のプログラムの名前と削除あるいは置換された古いライブラリが出力されます。
必要な言語のコンテンツのみをインストールする
多くのパッケージは、ドキュメントと翻訳をいくつかの言語でインストールしようとします。 一部のプログラムは、 localepurgeAUR などの不要なファイルを削除するように設計されています。これは、パッケージがインストールされた後に実行され、不要なロケールファイルを削除します。 より直接的なアプローチは、 pacman.conf
の NoExtract
ディレクティブを介して提供され、これらのファイルがインストールされないようにします。
次の例では、英語 (US) ファイルをインストールするか、または何もインストールしません。:
/etc/pacman.conf
NoExtract = usr/share/help/* !usr/share/help/C/* NoExtract = usr/share/gtk-doc/html/* NoExtract = usr/share/locale/* usr/share/X11/locale/*/* usr/share/i18n/locales/* opt/google/chrome/locales/* !usr/share/X11/locale/C/* 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 NoExtract = !usr/share/*locales/trans* NoExtract = usr/share/man/* !usr/share/man/man* NoExtract = usr/share/vim/vim*/lang/* NoExtract = usr/lib/libreoffice/help/en-US/* NoExtract = usr/share/kbd/locale/* NoExtract = usr/share/*/translations/*.qm usr/share/qt/translations/*.pak !*/en-US.pak # Qt apps NoExtract = usr/share/*/locales/*.pak opt/*/locales/*.pak usr/lib/*/locales/*.pak !*/en-US.pak # Electron apps NoExtract = opt/onlyoffice/desktopeditors/dictionaries/* !opt/onlyoffice/desktopeditors/dictionaries/en_US/* 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 — あるファイルを使っているパッケージが何かを見つけるツール。
- pkgtools — Arch Linux パッケージ用のスクリプトコレクション。
- 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 ラッパー。