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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(4人の利用者による、間の18版が非表示)
1行目: 1行目:
 
[[Category:パッケージ管理]]
 
[[Category:パッケージ管理]]
[[en:Pacman Tips]]
+
[[en:Pacman/Tips and tricks]]
[[es:Pacman Tips]]
+
[[es:Pacman/Tips and tricks]]
 
[[fr:Astuces Pacman]]
 
[[fr:Astuces Pacman]]
[[it:Pacman Tips]]
+
[[it:Pacman/Tips and tricks]]
[[ru:Pacman Tips]]
+
[[ru:Pacman/Tips and tricks]]
[[tr:Pacman_ipuçları]]
+
[[tr:Pacman ipuçları]]
[[zh-CN:Pacman Tips]]
+
[[zh-hans:Pacman/Tips and tricks]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|pacman}}
 
{{Related|pacman}}
12行目: 12行目:
 
{{Related|パッケージの作成}}
 
{{Related|パッケージの作成}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、[[Core Utilities]] や [[Bash]] を見てください。
[[pacman]] を新しく使い始めた人向けのヒント集。
 
   
 
== 外観と利便性の向上 ==
 
== 外観と利便性の向上 ==
   
=== ー出力 ===
+
=== フィカルフロントエンド ===
   
  +
{{Warning|PackageKit は既定でシステムのパーミッションを {{ic|wheel}} グループに開放するので、一般的な用途ではおすすめできません。{{Bug|50459}} および {{Bug|57943}} を参照してください。}}
バージョン 4.1 から Pacman にはカラーオプションが付きました。{{ic|pacman.conf}} の中の "Color" という行をアンコメントしてください。
 
   
  +
* {{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}}}}
   
  +
=== ユーティリティ ===
以下では、よく使われる pacman コマンドの入力の手間を省くスクリプトエイリアスを説明しています。
 
  +
* {{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}}}}
   
==== シェルの設定 ====
+
== メンテナンス ==
   
  +
{{Note|このセクションで使われている ''comm'' (''sort'' でソートして入力する必要があります) の代わりに、{{ic|grep -Fxf}} や {{ic|grep -Fxvf}} を使うこともできます。}}
以下の例を追加して下さい、[[Bash]] と [[Zsh|Zsh]] のどちらでも動作します:
 
{{bc|<nowiki># Pacman alias examples
 
alias pacupg='sudo pacman -Syu' # Synchronize with repositories and then upgrade packages that are out of date on the local system.
 
alias pacin='sudo pacman -S' # Install specific package(s) from the repositories
 
alias pacins='sudo pacman -U' # Install specific package not from the repositories but from a file
 
alias pacre='sudo pacman -R' # Remove the specified package(s), retaining its configuration(s) and required dependencies
 
alias pacrem='sudo pacman -Rns' # Remove the specified package(s), its configuration(s) and unneeded dependencies
 
alias pacrep='pacman -Si' # Display information about a given package in the repositories
 
alias pacreps='pacman -Ss' # Search for package(s) in the repositories
 
alias pacloc='pacman -Qi' # Display information about a given package in the local database
 
alias paclocs='pacman -Qs' # Search for package(s) in the local database
 
alias paclo="pacman -Qdt" # List all packages which are orphaned
 
alias pacc="sudo pacman -Scc" # Clean cache - delete all not currently installed package files
 
alias paclf="pacman -Ql" # List all files installed by a given package
 
alias pacexpl="pacman -D --asexp" # Mark one or more installed packages as explicitly installed
 
alias pacimpl="pacman -D --asdep" # Mark one or more installed packages as non explicitly installed
 
   
  +
[[システムメンテナンス]]も参照。
# '[r]emove [o]rphans' - recursively remove ALL orphaned packages
 
alias pacro="pacman -Qtdq > /dev/null && sudo pacman -Rns \$(pacman -Qtdq | sed -e ':a;N;$!ba;s/\n/ /g')"
 
   
  +
=== パッケージをリストアップ ===
# Additional pacman alias examples
 
alias pacupd='sudo pacman -Sy && sudo abs' # Update and refresh the local package and ABS databases against repositories
 
alias pacinsd='sudo pacman -S --asdeps' # Install given package(s) as dependencies
 
alias pacmir='sudo pacman -Syy' # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist
 
</nowiki>}}
 
   
  +
バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。
以下のコマンドも便利ですが、危険でもあります。使用する時は、何が起こるのか完全に理解するようにしてください:
 
   
  +
* 明示的にインストールしたパッケージを全てリストアップ: {{ic|pacman -Qe}}。
{{bc|<nowiki>
 
  +
* ''group'' グループに含まれるパッケージを全てリストアップ: {{ic|pacman -Sq group}}。
# dealing with the following message from pacman:
 
  +
* 依存パッケージではない、明示的にインストールしたネイティブのパッケージ (同期データベースに存在するパッケージ) を全てリストアップ: {{ic|pacman -Qent}}。
#
 
  +
* 外部からインストールしたパッケージ (手動でダウンロード・インストールしたパッケージ) をリストアップ: {{ic|pacman -Qm}}。
# error: couldnt lock database: file exists
 
  +
* ネイティブなパッケージ (同期データベースからインストールしたパッケージ) をリストアップ: {{ic|pacman -Qn}}。
# if you are sure a package manager is not already running, you can remove /var/lib/pacman/db.lck
 
  +
* 正規表現でパッケージをリストアップ: {{ic|pacman -Qs ''regex''}}。
  +
* 正規表現でカスタム出力形式を使ってパッケージをリストアップ: {{ic|expac -s "%-30n %v" ''regex''}} ({{Pkg|expac}} が必要です)。
   
  +
==== 容量でソート ====
alias pacunlock="sudo rm /var/lib/pacman/db.lck" # Delete the lock file /var/lib/pacman/db.lck
 
alias paclock="sudo touch /var/lib/pacman/db.lck" # Create the lock file /var/lib/pacman/db.lck
 
</nowiki>}}
 
   
  +
インストールしたパッケージのリストを容量で並び替えたい場合 (
==== 使用方法 ====
 
  +
どのパッケージが最大かを把握するのは、ハードドライブの空き容量を増やしたいときに有用です。
  +
各パッケージ単独の容量を取得するか、パッケージとその依存関係の容量を取得するかの二つのオプションがあります。
   
  +
===== パッケージ単独 =====
エイリアスの名前を入力するだけでそれぞれのコマンドが実行できます。例えば、リポジトリを同期して古くなっているパッケージをアップグレードするには:
 
$ pacupg
 
リポジトリからパッケージをインストール:
 
$ pacin <package1> <package2> <package3>
 
カスタムビルドパッケージをインストール:
 
$ pacins /path/to/<package>
 
インストールしたパッケージを完全に削除:
 
$ pacrem <package>
 
リポジトリからパッケージを検索:
 
$ pacreps <keywords>
 
リポジトリにあるパッケージの情報 (サイズ、依存関係など) を表示:
 
$ pacrep <keywords>
 
   
  +
次のコマンドで、インストールされたパッケージ全てとそれぞれの容量をリストアップします:
==== ノート ====
 
  +
$ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
   
  +
===== パッケージとその依存関係 =====
上記のエイリアスは例にすぎません。構文サンプルに従って、便利なようにエイリアスの名前を変えることが可能です。例えば:
 
   
  +
パッケージとその依存関係の合計容量を表示するのは、次の方法があります。
alias pacrem='sudo pacman -Rns'
 
  +
* {{Pkg|expac}} をインストールして {{ic|<nowiki>expac -H M '%m\t%n' | sort -h</nowiki>}} を実行。
alias pacout='sudo pacman -Rns'
 
  +
* {{ic|-c}} オプションを付けて {{Pkg|pacgraph}} を実行。
   
  +
複数のパッケージのダウンロード容量をリストアップするには ({{ic|''packages''}} を空にすると全てのパッケージの情報が出力されます):
上の場合、コマンド {{ic|pacrem}} と {{ic|pacout}} はどちらも同じコマンドを実行します。
 
   
  +
$ expac -S -H M '%k\t%n' ''packages''
=== オペレーションと Bash 構文 ===
 
   
  +
{{Pkg|base}} や {{Grp|base-devel}} に存在しない明示的にインストールしたパッケージの容量と説明をリストアップするには:
pacman の標準の機能に加えて、初歩的な [[Bash]] コマンド・構文を使うことでユーザビリティを拡張する方法が存在します。
 
   
  +
$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <(pacman -Qqg base base-devel | sort)) | sort -n
* 名前に同じようなパターンがあるパッケージを多数インストールする必要があり、グループ全体やマッチするパッケージ全てはインストールしないとき。例えば {{Grp|kde}}:
 
   
  +
アップグレード対象のパッケージとそのダウンロード容量をリストアップするには:
# pacman -S kde-{applets,theme,tools}
 
  +
$ pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh
   
  +
==== 日付を使う ====
* もちろん、これに制限はなく、拡張することができます:
 
   
  +
{{Pkg|expac}} を使って最後にインストールした20のパッケージをリストアップするには、次のコマンドを実行:
# pacman -S kde-{ui-{kde,kdemod},kdeartwork}
 
   
  +
$ expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20
* 場合によっては、{{Ic|-s}} が不必要な多くの結果を招いてしまうことがあります。こういうときにはパッケージの名前だけにマッチするように(説明やその他のフィールドには引っかからないように)制限をかけることが可能です:
 
   
  +
もしくはエポック秒を使って (1970-01-01 UTC):
# pacman -Ss '^vim-'
 
   
  +
$ expac --timefmt=%s '%l\t%n' | sort -n | tail -n 20
* pacman にはバージョンカラムを隠す {{ic|-q}} オペランドがあり、"compiz" を名前の一部に含むパッケージを再インストールしたりすることが可能です:
 
   
  +
==== 指定したグループやリポジトリに存在しないパッケージ ====
# pacman -S $(pacman -Qq | grep compiz)
 
   
  +
{{Note|依存パッケージとしてインストールされたが、既にどのパッケージからも必要とされていないパッケージを確認したい場合は[[#使用していないパッケージの削除 (孤立したパッケージ)|使用していないパッケージの削除 (孤立したパッケージ)]] を参照。}}
* もしくはリポジトリのパッケージ全てをインストールしてください (例: kde-unstable):
 
   
  +
{{Pkg|base}} や {{Grp|base-devel}} グループに存在しない明示的にインストールしたパッケージをリストアップ:
# pacman -S $(pacman -Slq kde-unstable)
 
   
  +
$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)
== メンテナンス ==
 
   
  +
{{Pkg|base}} や {{Grp|base-devel}} グループに存在せず、他のパッケージによって必要とされていないインストール済みパッケージをリストアップ:
[[The Arch Way|The Arch Way]] に従ってシステムを清潔に保つための管理業務。
 
   
  +
$ comm -23 <(pacman -Qqt | sort) <(pacman -Sqg base base-devel | sort)
[[System maintenance|システムメンテナンス]]も参照。
 
   
=== インストールしたパッケージ容量と一緒にリストアップ ===
+
上記と同じで、説明付けてリストアップ:
   
  +
$ expac -HM '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <(pacman -Qqg base base-devel | sort))
容量でソートしたインストール済みパッケージの一覧を見ることができます、これはハードドライブの空き容量を増やしたいときに役立ちます。
 
* {{Pkg|expac}} をインストールして {{ic|<nowiki>expac -s "%-30n %m" | sort -rhk 2</nowiki>}} を実行する。
 
* pacgraph に -c オプションを付けて実行することで全てのインストールしたパッケージと容量のリストを作成できます。{{Pkg|pacgraph}} は [community] からインストールできます。
 
* 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>}}
 
   
=== インストールしたパッケージをバージョンと一緒にリストアップ ===
+
指定したリポジトリ ''repo_name'' に存在しないインストール済みパッケージをリストアップ:
   
  +
$ comm -23 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
バグを報告したりインストールしたパッケージについて議論するときに、インストールしたパッケージのリストをパッケージのバージョンと一緒に取得する良いでしょう。
 
  +
* 明示的にインストールしたパッケージを全て一覧する: {{ic| pacman -Qe }}。
 
* 外部からインストールしたパッケージを一覧する (通常は手動でダウンロード・インストールしたパケージ): {{ic| pacman -Qm }}。
+
''repo_name'' リポジトリに含まれているインストール済みパッケージをスト:
  +
* 全てのネイティブなパッケージを一覧する (同期データベースからインストールしたパッケージ): {{ic| pacman -Qn }}.
 
  +
$ comm -12 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
* 正規表現でパッケージを一覧する: {{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"}} を実行する
 
* 全てのパッケージをバージョンとリポジトリを一緒に表示: {{AUR|yaourt}} をインストールして {{ic|yaourt -Q}} を実行する
 
   
  +
{{Pkg|base}} グループにはなく、Arch Linux ISO には含まれているパッケージをリストアップ:
=== ファイルがどのパッケージにも所有されていないことを確認 ===
 
  +
$ comm -23 <(curl https://git.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64) <(pacman -Qqg base | sort)
   
  +
==== 開発版パッケージ ====
pacman データベースの外のファイルを定期的にチェックすることを推奨します。これらのファイルは通例の方法を使って (例: {{ic|./configure && make && make install}}) でインストールしたサードパーティのアプリケーションであることが度々です。こうしたファイル(もしくはシンボリックリンク)をファイルシステムから検索するにはシンプルなスクリプトを使います:
 
   
  +
開発版や不安定版のパッケージを全てリストアップするには、次のコマンドを実行します:
{{hc|pacman-disowned|<nowiki>
 
  +
$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'
#!/bin/sh
 
   
  +
=== パッケージ一覧とパッケージ情報をリアルタイムプレビュー ===
tmp=${TMPDIR-/tmp}/pacman-disowned-$UID-$$
 
db=$tmp/db
 
fs=$tmp/fs
 
   
  +
インストールされたパッケージ一覧とパッケージ情報のプレビューを見るには:
mkdir "$tmp"
 
trap 'rm -rf "$tmp"' EXIT
 
   
  +
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
pacman -Qlq | sort -u > "$db"
 
   
  +
[[fzf]] を使い、2パネル表示を行ないます。左側にパッケージ一覧が、右側にパッケージ情報が表示されます。
find /etc /opt /usr ! -name lost+found \( -type d -printf '%p/\n' -o -print \) | sort > "$fs"
 
   
  +
パッケージ一覧の表示対象をキー入力で絞り込みでき、上下移動には矢印キーか {{ic|Ctrl+j}} {{ic|Ctrl+k}} を押します。{{ic|Enter}} キーを押すと [[less]] でパッケージ情報をスクロールして後ろまで確認できます。
comm -23 "$fs" "$db"</nowiki>}}
 
   
  +
=== パッケージに含まれているファイルを容量を付けてリストアップ ===
リストを生成するには:
 
   
  +
特定のパッケージが異常な容量を消費していて、どのファイルが容量を食っているのか調べたいときに便利なコマンドです。
$ pacman-disowned > non-db.txt
 
   
  +
$ pacman -Qlq ''package'' | grep -v '/$' | xargs du -h | sort -h
各エントリを確認しないで {{ic|non-db.txt}} に載っているファイルを全て削除するのは'''よくありません'''。様々な設定ファイルやログなどがあるかもしれないので、{{Ic|grep}} を使って相互参照を広く確実に検索した後でこのリストを使うようにしてください。
 
   
  +
=== ファイルがどのパッケージにも含まれていないことを確認 ===
以下は役に立つワンライナーのスクリプトです。
 
   
  +
どのパッケージにも所有されていない謎のファイルが存在する場合 ([[Arch Linux の安定化#パッケージマネージャを使ってソフトウェアをインストールする|パッケージマネージャを使わずにソフトウェアをインストール]]した場合など)、ファイルを見つけ出して消去すると良いでしょう。以下の手順で見つけ出せます:
どのパッケージにも属していないディレクトリを表示:
 
   
  +
# 所有者を確認したいファイルのソート済みリストを作成: {{bc|<nowiki>$ find /etc /opt /usr | sort > all_files.txt</nowiki>}}
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)"
 
  +
# pacman によって追跡されているファイルのソート済みリストを作成 (そしてディレクトリの末尾のスラッシュを削除): {{bc|<nowiki>$ pacman -Qlq | sed 's|/$||' | sort > owned_files.txt</nowiki>}}
  +
# 後者のファイルには存在しない行を確認: {{bc|$ comm -23 all_files.txt owned_files.txt}}
   
  +
どのパッケージにも含まれない重要なファイル (実行時に生成されるファイルやカスタム設定など) も存在するため、安全に消去できるファイルを選び出す方法としては不適切です。
どのパッケージにも属していないファイルを表示:
 
   
  +
{{Tip|{{Pkg|lostfiles}} スクリプトは上記と同じようなことを実行しますが、出力から偽陽性のファイルを取り除くための包括的なブラックリストを使用します。}}
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)"
 
   
=== 孤立パッケージの削除 ===
+
=== 使用ていないパッケージの削除 (孤立したパッケージ) ===
   
 
''再帰的に''孤立したパッケージ(とその設定ファイル)を削除するには:
 
''再帰的に''孤立したパッケージ(とその設定ファイル)を削除するには:
   
{{bc|# pacman -Rns $(pacman -Qtdq)}}
+
# pacman -Rns $(pacman -Qtdq)
   
 
孤立したパッケージが見つからなかった場合、pacman は {{ic|error: no targets specified}} を出力します。{{ic|pacman -Rns}} に何も引数が指定されていないとこうなります。
 
孤立したパッケージが見つからなかった場合、pacman は {{ic|error: no targets specified}} を出力します。{{ic|pacman -Rns}} に何も引数が指定されていないとこうなります。
   
  +
{{Note|{{Pkg|pacman}} 4.2.0 現在、{{ic|-Qt}} は本当に孤立しているパッケージしかリストアップしません。他のパッケージによって任意で必要とされているパッケージを含めたい場合、{{ic|-t}} フラグを2回指定してください ({{ic|-Qtt}})。}}
以下の'''エイリアス'''を {{ic|~/.bashrc}} に挿入することで孤立したパッケージを簡単に削除できます:
 
   
  +
{{ic|-Rns}} (や {{ic|-Rnc}}) オプションは直接依存しているパッケージだけを削除し、明示的にインストールされた任意の依存パッケージは削除しません ({{ic|--asdeps}} オプションを使用しなかった場合)。
{{hc|~/.bashrc|<nowiki># '[r]emove [o]rphans' - recursively remove ALL orphaned packages
 
alias pacro="/usr/bin/pacman -Qtdq &gt; /dev/null &amp;&amp; sudo /usr/bin/pacman -Rns \$(/usr/bin/pacman -Qtdq | sed -e ':a;N;\$!ba;s/\n/ /g')"</nowiki>}}
 
   
  +
必須ではありませんが、任意の依存パッケージをインストールする際に {{ic| --asdeps}} オプションを使用してインストールすることでシステムメンテナンスが楽になります。実行時やインストール時には何も変化はありませんが、{{ic|--asdeps}} オプションを使用してインストールしておけば、孤立したパッケージを削除するときに一緒に削除されるようになります。任意の依存パッケージをインストールするときは、以下のコマンドを使うようにしましょう:
以下の'''関数'''を {{ic|~/.bashrc}} に挿入することで孤立したパッケージを簡単に削除できます:
 
   
  +
# pacman -S --asdeps <packages that are optional dependencies>
{{hc|~/.bashrc|<nowiki>
 
orphans() {
 
if [[ ! -n $(pacman -Qdt) ]]; then
 
echo "No orphans to remove."
 
else
 
sudo pacman -Rns $(pacman -Qdtq)
 
fi
 
}</nowiki>}}
 
 
{{Note|上記のスクリプトやコマンドは本当は孤立していないパッケージを表示する可能性があるため、実は孤立パッケージでないパッケージを削除する危険性があります。本当に孤立しているパッケージだけを削除するようにしたい場合、{{AUR|pkg_scripts}} パッケージの [http://xyne.archlinux.ca/projects/pkg_scripts/#help-message-pkg-list_true_orphans pkg-list_true_orphans] を使って下さい。}}
 
 
=== 使用していないパッケージの削除 ===
 
 
システムは軽いほうがメンテナンスしやすいので、ときどき明示的にインストールパッケージを眺めて、使用していないパッケージを削除するべきだと''手動で''選択すると良いでしょう。
 
 
公式リポジトリに含まれているパッケージで明示的にインストールしたパッケージを表示するには:
 
 
$ pacman -Qen
 
 
公式リポジトリに含まれていないパッケージで明示的にインストールしたパッケージを表示するには:
 
 
$ pacman -Qem
 
   
 
=== base グループ以外の全てのパッケージを削除する ===
 
=== base グループ以外の全てのパッケージを削除する ===
   
base グループを除く全てのパッケージを削除する必要がある場合は、のワンライナーを試して下さい:
+
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))
+
# pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u))
   
ス: [https://bbs.archlinux.org/viewtopic.php?id=130176 Look at discussion here]
+
上記のワンライナ [https://bbs.archlinux.org/viewtopic.php?id=130176 こちらのスレッド] に書かれたものが元になっています。
   
  +
=== 複数のパッケージの依存パッケージリストを取得 ===
ノート:
 
   
  +
依存パッケージはアルファベット順でソートされ、重複するパッケージは削除されます。
# {{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:
 
   
  +
{{Note|ローカルにインストールしたパッケージのツリーを表示したいだけの場合、{{ic|pacman -Qi}} を使ってください。}}
{{hc|$ pactree -lu logrotate|
 
logrotate
 
popt
 
glibc
 
linux-api-headers
 
tzdata
 
dcron cron
 
bash
 
readline
 
ncurses
 
gzip}}
 
   
  +
$ pacman -Si ''packages'' | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
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.
 
   
  +
もしくは、{{Pkg|expac}} を使用して:
=== 公式にインストールされたパッケージのみを一覧する ===
 
   
  +
$ expac -l '\n' %E -S ''packages'' | sort -u
$ pacman -Qqn
 
   
  +
=== 変更されたバックアップファイルをリストアップ ===
同期データベースに存在するパッケージを一覧します。非公式のリポジトリを設定している場合は、そのリポジトリからインストールしたパッケージも表示されます。
 
   
  +
システムの設定ファイルをバックアップしたい場合は {{ic|/etc/}} にある全てのファイルをコピーすれば良いですが、普通は変更を加えたファイルだけをバックアップすればそれで足ります。変更が加えられた[[Pacnew と Pacsave ファイル#パッケージのバックアップファイル|バックアップファイル]]は次のコマンドで閲覧できます:
=== 複数のパッケージの依存パッケージ一覧を取得 ===
 
   
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}}。
 
 
=== 複数のパッケージの容量を取得 ===
 
 
以下のシェル関数を使うことができます:
 
 
{{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|yaourt]] では出来ません。
 
 
ワンライナー:
 
 
$ 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.
 
 
=== 変更された設定ファイルを一覧する ===
 
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}'
 
# 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>}}
 
   
  +
root で上記のコマンドを実行することで root からしか読み取れないファイル ({{ic|/etc/sudoers}} など) も出力に含まれるようになります。
=== 依存されていないパッケージを全て表示する ===
 
   
  +
{{Tip|バックアップファイルだけでなく、pacman が認識している全ての変更済みファイルをリストアップしたい場合は[[#パッケージから変更された全てのファイルをリストアップ|パッケージから変更された全てのファイルをリストアップ]]を見てください。}}
インストールしたパッケージの中で、どのパッケージにも依存されていないパッケージのリストを生成したい場合、以下のスクリプトを使うことができます。ハードドライブの容量を増やそうとしていて、覚えがない大量のパッケージがインストールされている場合、このスクリプトはとても役に立ちます。出力を見ることで必要なくなったパッケージを見つけることができます。
 
   
  +
=== pacman データベースをバックアップ ===
{{Note|このスクリプトは明示的にインストールしたパッケージも含めて、どのパッケージにも依存されていない全てのパッケージを表示します。依存パッケージとしてインストールされていながら、どのパッケージにも必要とされていないパッケージを表示するには、[[#孤立したパッケージの削除]] を見て下さい。}}
 
   
  +
次のコマンドでローカルの pacman データベースをバックアップできます:
{{hc|clean|<nowiki>
 
#!/bin/bash
 
   
  +
$ tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local
# 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.
 
   
  +
バックアップした pacman データベースファイルは USB スティックや外付けハードドライブ、CD-R などのオフラインメディアに保存してください。
# 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=""
 
   
  +
{{ic|pacman_database.tar.bz2}} ファイルを {{ic|/}} ディレクトリに移動して以下のコマンドを実行することでデータベースを復元できます:
comm -23 <(pacman -Qqt | sort) <(echo $ignorepkg | tr ' ' '\n' | cat <(pacman -Sqg $ignoregrp) - | sort -u)
 
</nowiki>}}
 
   
  +
# tar -xjvf pacman_database.tar.bz2
パッケージの説明も見るには:
 
   
  +
{{Note|pacman データベースファイルが破損していて、バックアップファイルが存在しない場合でも、pacman データベースを再構築できる望みはあります。[[# pacman のローカルデータベースを復元する|pacman のローカルデータベースを復元する]]を見てください。}}
{{bc|<nowiki>
 
expac -HM "%-20n\t%10d" $( comm -23 <(pacman -Qqt|sort) <(pacman -Qqg base base-devel|sort) )
 
</nowiki>}}
 
   
  +
{{Tip|{{AUR|pakbak-git}} パッケージには上記の作業を自動的に行うスクリプトと [[systemd]] サービスが入っています。{{ic|/etc/pakbak.conf}} で設定が可能です。}}
=== Systemd を使ってローカルデータベースをバックアップ ===
 
   
  +
=== 変更履歴を簡単に確認 ===
[[systemd|systemd]] は pacman のローカルデータベースのスナップショットを(データベースが変更される度に)作成することができます。
 
   
  +
メンテナがパッケージを更新するとき、大抵の場合コミットにはコメントが付けられます。{{AUR|pacolog}} をインストールすることでコマンドラインからコミットメッセージを確認することができます。{{ic|pacolog <package>}} を実行すると、公式リポジトリや AUR のパッケージの最近のコミットメッセージを出力します。
{{Note| AUR にもっと細かく設定できるバージョンがあります: {{AUR|pakbak-git}}}}
 
{{Tip| 以下のスクリプトを {{ic|/usr/lib/systemd/scripts/pakbak_script}} として保存してください。}}
 
{{Note| {{ic|$pakbak}} の値はバックアップしたデータベースを保存するフォルダに変更してください。}}
 
{{bc|<nowiki>
 
#!/bin/bash
 
 
declare -r pakbak="/pakbak.tar.xz"; ## set backup location
 
tar -cJf "$pakbak" "/var/lib/pacman/local"; ## compress & store pacman local database in $pakbak
 
</nowiki>}}
 
 
{{Tip|以下の [[Systemd#カスタム .service ファイルを書く|service]] ファイルを {{ic|/usr/lib/systemd/system/pakbak.service}} として保存してください。}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Back up pacman database
 
 
[Service]
 
Type=oneshot
 
ExecStart=/bin/bash /usr/lib/systemd/scripts/pakbak_script
 
RemainAfterExit=no
 
</nowiki>}}
 
 
{{Tip|以下の [[Systemd#カスタム .service ファイルを書く|path]] ファイルを {{ic|/usr/lib/systemd/system/pakbak.path}} として保存してください。}}
 
{{bc|<nowiki>
 
[Unit]
 
Description=Back up pacman database
 
 
[Path]
 
PathChanged=/var/lib/pacman/local
 
Unit=pakbak.service
 
 
[Install]
 
WantedBy=multi-user.target
 
</nowiki>}}
 
 
{{Tip|バックアップサービスを起動するには :
 
{{bc|<nowiki>
 
# systemctl start pakbak.path
 
</nowiki>}}
 
起動時に自動でバックアップサービスを有効にするには :
 
{{bc|<nowiki>
 
# systemctl enable pakbak.path
 
</nowiki>}}
 
}}
 
   
== インストールとリカバリ ==
+
== インストールとリカバリ ==
   
パッケージを取得・復活させるの方法。
+
パッケージを取得・復活させるの方法。
   
 
=== パッケージを CD/DVD や USB スティックからインストールする ===
 
=== パッケージを CD/DVD や USB スティックからインストールする ===
   
パッケージやパッケージグループをダウンロードするには:
+
パッケージやパッケージグループをダウンロードするには:
   
 
# cd ~/Packages
 
# cd ~/Packages
395行目: 244行目:
 
# mount /dev/sdxY /mnt/repo # USB スティックの場合。
 
# mount /dev/sdxY /mnt/repo # USB スティックの場合。
   
'''2.''' {{ic|pacman.conf}} を編集して他のリポジトリ (例: extra, core, etc.) の''前に''リポジトリを追加してください。この手順は重要です。これで標準のリポジトリに優先して CD/DVD/USB のファイルがインストールされるようになります:
+
'''2.''' {{ic|pacman.conf}} を編集して他のリポジトリ (例: extra, core など) の''前に''リポジトリを追加してください。この手順は重要です。これで標準のリポジトリに優先して CD/DVD/USB のファイルがインストールされるようになります:
   
 
{{hc|# nano /etc/pacman.conf|2=
 
{{hc|# nano /etc/pacman.conf|2=
404行目: 253行目:
 
'''3.''' 最後に、pacman データベースを同期して新しいリポジトリを使えるようにしてください:
 
'''3.''' 最後に、pacman データベースを同期して新しいリポジトリを使えるようにしてください:
   
# pacman -Sy
+
# pacman -Syu
   
 
=== カスタムローカルリポジトリ ===
 
=== カスタムローカルリポジトリ ===
420行目: 269行目:
 
$ 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.gz /path/to/packagetoadd-1.0-1-i686.pkg.tar.xz
   
{{Note|If there is a package that needs to be removed from the repository, read up on {{Ic|repo-remove}}.}}
+
{{Note|リポジトリからパッケージを削除する必要がある場合、{{Ic|repo-remove}} を使ってください。}}
   
 
ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。{{ic|db.tar.gz}} ファイルの名前がリポジトリの名前です。{{ic|file://}} url を使って直接参照するか、{{ic|ftp://localhost/path/to/directory}} を使って FTP でアクセスしてください。
 
ローカルリポジトリを作成できたら、リポジトリを {{ic|pacman.conf}} に追加してください。{{ic|db.tar.gz}} ファイルの名前がリポジトリの名前です。{{ic|file://}} url を使って直接参照するか、{{ic|ftp://localhost/path/to/directory}} を使って FTP でアクセスしてください。
   
カスタムリポジトリを[[Unofficial user repositories|非公式ユーザーリポジトリ]]に追加すれば、コミュニティはそれを使うことができるようになります。
+
カスタムリポジトリを[[非公式ユーザーリポジトリ]]に追加すれば、コミュニティはそれを使うことができるようになります。
   
 
=== pacman のキャッシュをネットワークで共有する ===
 
=== pacman のキャッシュをネットワークで共有する ===
  +
  +
LAN 上で複数の Arch マシンを使っている場合、パッケージを共有することでダウンロード回数を劇的に減らすことができます。使用しているアーキテクチャが異なるマシン (i686 と x86_64) でキャッシュを共有してはいけません。問題が発生します。
   
 
==== 読み取り専用キャッシュ ====
 
==== 読み取り専用キャッシュ ====
   
  +
簡単な方法として、他のコンピュータからミラーとして使用できるスタンドアロンのウェブサーバーを実行するという方法があります: {{ic|darkhttpd /var/cache/pacman/pkg}}。サーバーをミラーリストの一番上に追加してください。キャッシュが存在しない場合、404エラーが大量に出てしまいますが、その場合 pacman はリストの次のミラーを使用します。
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.
 
   
 
==== 読み書き可能キャッシュ ====
 
==== 読み書き可能キャッシュ ====
   
{{Tip|See [[pacserve]] for an alternative (and probably simpler) solution than what follows.}}
+
{{Tip|[[pacserve]] を使うことで以下の方法をもっと簡単に実現できます。}}
   
 
複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。
 
複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って {{ic|/var/cache/pacman/}} を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。
440行目: 291行目:
 
まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば [[sshfs]], [[shfs]], ftpfs, [[Samba|smbfs]], [[NFS|nfs]] など。
 
まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば [[sshfs]], [[shfs]], ftpfs, [[Samba|smbfs]], [[NFS|nfs]] など。
   
  +
{{Tip|
{{Tip|To use sshfs or shfs, consider reading [[Using SSH Keys]].}}
 
  +
* sshfs や shfs を使う場合、[[SSH 鍵]]を読んで下さい。
  +
* デフォルトでは、smbfs はファイル名にコロンを使えないので、クライアントは問題のあるパッケージをダウンロードしなおしてしまいます。クライアント側で {{ic|mapchars}} マウントオプションを使用することで解決します。}}
   
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.
+
それから、サーバーの {{ic|/var/cache/pacman/pkg}} をクライアントマシンの {{ic|/var/cache/pacman/pkg}} にマウントすることでパッケージを共有できます。
   
==== BitTorrent Sync を使って pacman のパッケキャッシュを同期する ====
+
==== nginx を使用する動的なリバスプロキシキャッシュ ====
   
  +
[[nginx]] を使って公式の上流ミラーへのリクエストをプロキシして結果をローカルディスクにキャッシュすることができます。その後、ファイルへのリクエストは全てローカルのキャッシュから供給されるようになり、大量のサーバーを更新するときでもインターネットのトラフィックを簡単に最小限に抑えることができます。
[[BitTorrent Sync|BitTorrent Sync]] はネットワークを介してフォルダを同期する新方法です (LAN でもインターネットでも動作します)。ピアツーピアなのでサーバーを設定する必要はありません: 詳しくはリンクを参照してください。
 
BitTorrent Sync を使って pacman のキャッシュを共有する方法:
 
* まず同期したいマシンに AUR から {{AUR|btsync}} パッケージをインストール。
 
* [[BitTorrent Sync|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}}
 
   
  +
{{Warning|この方法には欠点があります。パッケージファイルの相対パスが同じミラーを使う必要があり同じパスを使うようにキャッシュを設定しなければなりません。この例では、相対パスが {{ic|/archlinux/$repo/os/$arch}} のミラーを使用して {{ic|mirrorlist}} のキャッシュの {{ic|Server}} 設定も同じ相対パスとします。}}
Now the machines should connect and start synchronizing their cache. Pacman works as expected even during synchronization. The process of syncing is entirely automatic.
 
   
  +
この例では、キャッシュサーバーを {{ic|<nowiki>http://cache.domain.local:8080/</nowiki>}} で実行してパッケージを {{ic|/srv/http/pacman-cache/}} に保存します。
==== 要らなくなったキャッシュが消えないようにする ====
 
   
  +
キャッシュのディレクトリを作成して nginx からファイルが書き込めるようにパーティションを設定:
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.
 
   
  +
# mkdir /srv/http/pacman-cache
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}}:
 
  +
# chown http:http /srv/http/pacman-cache
   
  +
次に、nginx を [https://gist.github.com/anonymous/97ec4148f643de925e433bed3dc7ee7d 動的キャッシュ] として設定 (コマンドについてはコメントを読んでください)。
CleanMethod = KeepCurrent
 
   
  +
最後に、他の Arch Linux サーバーを更新して {{ic|mirrorlist}} ファイルに以下の行を追加して新しいキャッシュを使うように設定:
=== インストールしたパッケージのリストのバックアップと復旧 ===
 
   
  +
{{hc|/etc/pacman.d/mirrorlist|<nowiki>
pacman によってインストールしたパッケージのバックアップを定期的に行うのはグッドプラクティスです。何らかの理由でリカバリーできないシステムクラッシュが発生した時、pacman を使って全く同じパッケージを簡単に新しい環境に再インストールすることができるようになります。
 
  +
Server = http://cache.domain.local:8080/archlinux/$repo/os/$arch
  +
...
  +
</nowiki>}}
   
  +
{{Note|時間と共にディレクトリは膨れ上がるため、古いパッケージを消去できるようにする必要があります。({{ic|pacman}} に含まれている) {{ic|paccache}} を使うことでお好きな基準で消去を自動化することが可能です。例えば、{{ic|find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \;}} はキャッシュディレクトリに最新から1つ前のバージョンまでパッケージを保持します。}}
* まず、ローカルにない現在のパッケージの一覧をバックアップしてください: {{ic|$ pacman -Qqen > pkglist.txt}}
 
   
  +
==== BitTorrent Sync を使って pacman のパッケージキャッシュを同期する ====
* {{ic|pkglist.txt}} を USB キーやその他メディア gist.github.com, Evernote, Dropbox などに保存してください。
 
   
  +
[[BitTorrent Sync]] はネットワークを介してフォルダを同期する新方法です (LAN でもインターネットでも動作します)。ピアツーピアなのでサーバーを設定する必要はありません: 詳しくはリンクを参照してください。
* {{ic|pkglist.txt}} ファイルを新しいインストールにコピーして、ファイルが含まれているディレクトリにまで移動してください。
 
  +
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 -S $(< pkglist.txt)}}
 
   
  +
{{Note|BitTorrent Sync のフリーの代替として [[Syncthing]] が存在し、同じように使うことができます。}}
上記のようにリストが生成されない場合、おそらく foreign パッケージ (設定したリポジトリに存在しないパッケージ、もしくは AUR のパッケージ) が存在します。
 
   
  +
==== 要らなくなったキャッシュが消えないようにする ====
そのような場合でも、リストから利用可能なパッケージを全てインストールすることができます:
 
   
  +
デフォルトでは、{{Ic|pacman -Sc}} はコマンドの実行時にマシンにインストールされていないパッケージのキャッシュを削除します。pacman はキャッシュを共有している全てのマシンにインストールされているパッケージを推測することができないため、削除してはいけないファイルまで削除してしまいます。
# pacman -S --needed $(comm -12 <(pacman -Slq|sort) <(sort badpkdlist) )
 
   
  +
キャッシュを削除するときは古い tarball だけを削除するように、{{ic|/etc/pacman.conf}} の {{ic|[options]}} セクションに以下のエントリを追加してください:
説明:
 
   
  +
CleanMethod = KeepCurrent
* {{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}} スイッチを使うことで既にインストールされているパッケージはスキップされます。
 
   
  +
=== ファイルシステムからパッケージを再作成 ===
[[yaourt|yaourt]] を使うことで AUR からリポジトリにないパッケージを全てインストールするのを試行することもできます (何がおこるかわかってない場合は推奨しません):
 
   
  +
ファイルシステムからパッケージを再作成するには、(pacman に含まれている) ''bacman'' を使います。システム上のファイルがそのまま使われるため、作成されるパッケージにはファイルへの変更も一緒に含まれてしまいます。再作成したパッケージの配布は非推奨です。[[ABS]] や [[Arch Rollback Machine]] を見てください。
$ yaourt -S --needed $(comm -13 <(pacman -Slq|sort) <(sort badpkdlist) )
 
   
  +
{{Tip|''bacman'' は {{ic|makepkg.conf}} の {{ic|PACKAGER}}, {{ic|PKGDEST}}, {{ic|PKGEXT}} オプションを使用します。環境変数をエクスポートすることで圧縮ツールのオプションを指定することができます。例えば {{ic|1=XZ_OPT="-T 0"}} は ''xz'' の並列圧縮を有効化します。}}
最後に、リストに記されていない全てのパッケージをシステム上から削除することができます:
 
   
  +
別のツールとして {{AUR|fakepkg}} も存在します。並列化をサポートしており複数のパッケージを入力することができます。''bacman'' ではどちらもサポートされていません。
{{Warning|このコマンドは注意して使って下さい、pacman の出力をよくチェックしましょう。}}
 
   
  +
=== インストール済みパッケージのリスト ===
# pacman -Rsu $(comm -23 <(pacman -Qq|sort) <(sort pkglist))
 
   
  +
{{Tip|1=<nowiki></nowiki>
=== base や base-devel に存在しないダウンロード済みパッケージを一覧 ===
 
  +
* 以下の作業は自動化できます。{{AUR|plist-gist}}{{Broken package link|パッケージが存在しません}} や [https://bbs.archlinux.org/viewtopic.php?id=200067 bacpac] を参照。
  +
* 既にインストールされているパッケージをスキップするには、{{ic|--needed}} を使ってください。}}
   
コマンドは {{Grp|base}} や {{Grp|base-devel}} に存在しないユーザーが手動でインストールしたパッケージを表示します:
+
ネイティブの、明示的にインストールしたパッケージのリスト保存しおくことで新いシステムのインストールを素早く行うことができます
   
  +
$ pacman -Qqen > pkglist.txt
$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)
 
   
インストールしたパッケージの中で特定のリポジリに存在しないパッケジを表示するには (例えば {{ic|''repo_name''}}):
+
ストのバックアップからパッケージをインストーするには、以下のコマンドを実行:
   
  +
# pacman -S - < pkglist.txt
$ comm -23 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
 
   
インストールしたパッケージの中で {{ic|''repo_name''}} ポジ存在すパッケージを表示するには:
+
[[AUR]] のパッケージなど、外部からインストールしたパッケージトに含まれてい場合、リストから削除:
   
$ comm -12 <(pacman -Qtq | sort) <(pacman -Slq ''repo_name'' | sort)
+
# pacman -S $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))
   
=== 全パッケージの再インストール ===
+
リストに書かれいないパッケージを全て削除するには:
   
  +
# pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
全てのネイティブのパッケージを再インストールするには、次を使って下さい:
 
   
  +
=== パッケージから変更された全てのファイルをリストアップ ===
# pacman -Qenq | pacman -S -
 
   
  +
ファイルが破損している可能性があるが (例: ソフトウェアあるいはハードウェアの故障)、ファイルが確実に破損しているとは言えない場合、パッケージのハッシュサムを比較すると良いでしょう。{{Pkg|pacutils}} で比較することができます:
外部の (AUR) パッケージは別に再インストールする必要があります。外部のパッケージは {{ic|pacman -Qemq}} で一覧できます。
 
   
  +
# paccheck --md5sum --quiet
デフォルトで Pacman はインストールの理由(明示的にインストールしたか、依存でインストールしたか)を維持します。
 
   
  +
データベースのリカバリについては [[#pacman のローカルデータベースを復元する|pacman のローカルデータベースを復元する]]を参照。{{ic|mtree}} ファイルも[[#.pkg ファイルに含まれているファイルを閲覧する|該当するパッケージファイルから {{ic|.MTREE}} として抽出]]できます。
=== pacman のローカルデータベースを復元する ===
 
   
  +
{{Note|悪意のある変更がされている可能性がある場合は気をつけてください。セキュリティ上、ライブメディアを使用したりハッシュサムを別のところから持ってくるなどの用心をすることを推奨します。}}
ローカルデータベースの復元が必要だと pacman が示す場合:
 
   
  +
=== 全てのパッケージの再インストール ===
* {{ic|pacman -Q}} で何も出力がされず、{{Ic|pacman -Syu}} でシステムが最新だと表示されるとき。
 
* {{ic|pacman -S package}} を使ってパッケージをインストールしようとすると、既にインストールされている依存パッケージのリストが出力される。
 
* ({{Pkg|pacman}} に含まれている) {{ic|testdb}} でデータベースが壊れていると表示される。
 
   
  +
全てのネイティブのパッケージを再インストールするには、次を使って下さい:
以上の場合、十中八九、インストールしたソフトウェアの pacman データベースである {{ic|/var/lib/pacman/local}} が破損していたり削除されています。これは深刻な問題ですが、以下の手順に従うことで復元することができます。
 
   
  +
# pacman -Qnq | pacman -S -
まず、pacman のログファイルが存在するか確認します:
 
   
  +
外部の (AUR) パッケージは別に再インストールする必要があります。外部のパッケージは {{ic|pacman -Qmq}} で一覧できます。
$ ls /var/log/pacman.log
 
   
  +
デフォルトで Pacman はインストールの理由(明示的にインストールしたか、依存でインストールしたか)を維持します。
ログファイルが存在しない場合は、この方法で続行することは不可能です。[https://bbs.archlinux.org/viewtopic.php?pid=670876 Xyne のパッケージ検出スクリプト] を使ってデータベースを再作成してみてください。それができない場合、解決方法としてはシステム全体を再インストールするしかありません。
 
   
==== ログフィルタースクリプト ====
+
=== pacman のーカデーースを復元する ===
{{hc|pacrecover|<nowiki>
 
#!/bin/bash -e
 
   
  +
[[pacman/ローカルデータベースの復元]]を見てください。
. /etc/makepkg.conf
 
   
  +
=== 既存のインストールから USB キーを復元する ===
PKGCACHE=$((grep -m 1 '^CacheDir' /etc/pacman.conf || echo 'CacheDir = /var/cache/pacman/pkg') | sed 's/CacheDir = //')
 
   
  +
USB キーに Arch をインストールしていて壊してしまった場合 (例: ファイルの書き込み中に取り出してしまった場合など)、全てのパッケージを再インストールして元に戻せる可能性があります (USB キーが {{ic|/newarch}} にマウントされている場合):
pkgdirs=("$@" "$PKGDEST" "$PKGCACHE")
 
   
  +
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
while read -r -a parampart; do
 
pkgname="${parampart[0]}-${parampart[1]}-*.pkg.tar.xz"
 
for pkgdir in ${pkgdirs[@]}; do
 
pkgpath="$pkgdir"/$pkgname
 
[ -f $pkgpath ] && { echo $pkgpath; break; };
 
done || echo ${parampart[0]} 1>&2
 
done
 
</nowiki>}}
 
 
スクリプトを実行可能にしてください:
 
   
  +
=== .pkg ファイルに含まれているファイルを閲覧する ===
$ chmod +x pacrecover
 
   
  +
例えば、{{Pkg|systemd}} パッケージに含まれている {{ic|/etc/systemd/logind.conf}} の中身をみたい場合:
==== パッケージの復旧リストを生成する ====
 
   
  +
$ tar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf
{{Warning|If for some reason your [[pacman|pacman]] cache or [[makepkg|makepkg]] package destination contain packages for other architectures, remove them before continuation.}}
 
   
  +
もしくは {{pkg|vim}} を使って圧縮ファイルを閲覧することもできます:
スクリプトを実行してください (任意でパッケージが含まれている追加のディレクトリをパラメータで渡して下さい):
 
   
  +
$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz
$ paclog-pkglist /var/log/pacman.log | ./pacrecover >files.list 2>pkglist.orig
 
   
  +
=== 古いパッケージのライブラリを使っているアプリケーションを探す ===
このコマンドで2つのファイルが作成されます: マシンに存在するパッケージファイルが載った {{Ic|files.list}} と、ダウンロードするべきパッケージが載った {{Ic|pkglist.orig}} です。後者ではマシンに存在する、古いバージョンのパッケージのファイルと、新しいバージョンのファイルでミスマッチが発生することがあります。ミスマッチは手動で修正する必要があります。
 
   
  +
パッケージをインストールしても、(デーモンやサーバーなど) ずっと実行し続けているプログラムが古いパッケージのライブラリのコードを使用している可能性があります。古いライブラリにセキュリティのバグが存在する場合、プログラムを実行し続けるのは得策ではありません。
Here is a way to automatically restrict second list to packages available in a repository:
 
   
  +
以下のコマンドで古いパッケージのコードを使用しているプログラムを全て見つけることができます:
$ { cat pkglist.orig; pacman -Slq; } | sort | uniq -d > pkglist
 
   
  +
# lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u
重要な ''base'' パッケージが欠けていないか確認して、リストに加えます:
 
   
  +
実行中のプログラムの名前と削除あるいは置換された古いライブラリが出力されます。
$ comm -23 <(pacman -Sgq base) pkglist.orig >> pkglist
 
   
  +
== パフォーマンス ==
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/}}.
 
   
==== リカバリ実行す====
+
=== データベースのアクセス速度向上させる ===
   
  +
Pacman はパッケージの全ての情報を、パッケージごとの小さなファイルに保存しています。データベースのアクセス速度を向上させればデータベースを使う処理 (例: パッケージの検索・パッケージの依存関係の解決) にかかる時間が短くなります。一番安全で簡単な方法は root で次を実行することです:
リカバリのための bash エイリアスを定義してください:
 
   
# recovery-pacman() {
+
# pacman-optimize
pacman "$@" \
 
--log /dev/null \
 
--noscriptlet \
 
--dbonly \
 
--force \
 
--nodeps \
 
--needed \
 
#
 
}
 
   
  +
小さなファイルをハードディスクのひとつの (物理的な) 場所にまとめて置くことでパッケージにアクセスするときにハードディスクのヘッドがあまり動かなくてもいいようにします。この方法は安全ですが、フールプルーフではありません。ファイルシステムによっては、ディスク上の使用している領域と空の領域がフラグメンテーションを起こすことがあります。さらにアグレッシブな方法として、データベースを最適化する前にインストールされていないパッケージをキャッシュから削除し使われていないリポジトリを削除するという方法があります:
{{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.
 
   
  +
# pacman -Sc && pacman-optimize
同期データベースを作成:
 
   
  +
=== ダウンロード速度を向上させる ===
# pacman -Sy
 
   
  +
{{Note|ダウンロード速度が極端に遅い場合、使っている[[ミラー]]が ftp.archlinux.org ではないことを確認してください。[https://www.archlinux.org/news/302/ 2007年の3月からこのサーバーには速度制限がかかっています]。}}
{{ic|files.list}} からローカルで利用可能なパッケージファイルをインストールしてデータベースの生成を開始:
 
   
  +
パッケージをダウンロードするとき pacman は {{ic|/etc/pacman.d/mirrorlist}} に書かれている順番通りにミラーを使用します。リストの一番上のミラーがデフォルトで使用されますが、それが最速のミラーだとは限りません。一番高速なミラーを選択する方法は[[ミラー]]を見てください。
# recovery-pacman -U $(< files.list)
 
   
  +
Pacman に初めから入っているファイルダウンローダの代わりに、他のアプリケーションを使ってパッケージをダウンロードすることで Pacman のパッケージダウンロード速度を上げることができます。
{{ic|pkglist}} から残りをインストール:
 
   
  +
どんな場合でも、変更を行う前に最新の Pacman を使っていることを確認してください:
# recovery-pacman -S $(< pkglist)
 
   
  +
# pacman -Syu
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.
 
   
  +
==== Powerpill ====
# pacman -D --asdeps $(pacman -Qq)
 
# pacman -D --asexplicit $(pacman -Qtq)
 
   
  +
Powerpill は Pacman の完全なラッパーで並行・分割ダウンロードを使うことによってダウンロード処理を高速化します。通常の Pacman は一度にひとつのパッケージしかダウンロードしないので、ダウンロードが完了するまで次のダウンロードが始まりません。Powerpill は異なるアプローチを取ります: 同時に可能な限り多くのパッケージをダウンロードしようとします。
Optionally check all installed packages for corruption:
 
   
  +
[[Powerpill|Powerpill の wiki ページ]]に基本的な設定・使用方法と、パッケージと上流のリンクがあります。
# pacman -Qk
 
   
  +
==== wget ====
任意で[[#ファイルがどのパッケージにも所有されていないことを確認|ファイルがどのパッケージにも所有されていないことを確認]]してください。
 
   
  +
pacman に初めから入っている機能よりもパワフルなプロキシ設定が必要な場合、wget はとても使い勝手がよいです。
全てのパッケージをアップデート:
 
   
  +
{{ic|wget}} を使うには、まず {{ic|pacman -S wget}} で wget をインストールして、それから {{ic|/etc/pacman.conf}} を編集して次の行を {{ic|[options]}} セクションでアンコメントしてください:
# pacman -Su
 
   
  +
XferCommand = /usr/bin/wget -c -q --show-progress --passive-ftp -O %o %u
=== 既存のインストールから USB キーを回復させる ===
 
   
  +
{{ic|/etc/pacman.conf}} に {{ic|wget}} パラメータを記述する代わりに、{{ic|wget}} の設定ファイルを直接修正することも可能です (システム全体のファイルは {{ic|/etc/wgetrc}}、ユーザー別のファイルは {{ic|$HOME/.wgetrc}})。
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)
 
   
  +
==== aria2 ====
# pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman
 
   
  +
[[aria2]] はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。[http://aria2.sourceforge.net/ aria2] を使えば同時に複数の HTTP/HTTPS/FTP 接続を Arch ミラーにすることができ、ファイル・パッケージの取得の際のダウンロード速度が上昇します。
=== .pkg ファイルの中身を展開する ===
 
   
  +
{{Note|Pacman の XferCommand で aria2c を使っても複数パッケージの同時ダウンロードは行われません。Pacman はひとつのパッケージごとに XferCommand を呼び出し、それが完了してから次を呼び出すからです。同時に複数のパッケージをダウンロードするには、上の [[#Powerpill|powerpill]] のセクションを見て下さい。}}
{{ic|.xz}} で終わっている {{ic|.pkg}} ファイルは tar で固められた圧縮ファイルであり、次のコマンドで解凍できます:
 
   
  +
{{Pkg|aria2}} をインストールして {{ic|/etc/pacman.conf}} を編集し、以下の行を {{ic|[options]}} セクションに追加してください:
$ tar xvf package.tar.xz
 
   
  +
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
ファイルを {{ic|.pkg}} から展開したい場合、この方法を使うことができます。
 
   
  +
{{Tip|1=設定を簡単にして他の設定オプションを追加する [https://bbs.archlinux.org/viewtopic.php?pid=1491879#p1491879 aria2 を pacman で使用する別の設定] も存在します。}}
=== .pkg ファイルに含まれているファイルを回覧する ===
 
   
  +
aria2c で使用できるオプションについては {{ic|man aria2c}} の [http://aria2.sourceforge.net/manual/en/html/aria2c.html#options OPTIONS] を見てください。
例えば、{{Pkg|systemd}} パッケージに入っている {{ic|/etc/systemd/logind.conf}} の中身を見たいのならば:
 
   
  +
* {{ic|-d, --dir}}: [[pacman]] によって指定されるダウンロードしたファイルを保存するディレクトリ。
$ tar -xOf /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz etc/systemd/logind.conf
 
  +
* {{ic|-o, --out}}: ダウンロードしたファイルの出力ファイル名。
  +
* {{ic|%o}}: pacman によって指定されるローカルのファイル名を表す変数。
  +
*{{ic|%u}}: pacman によって指定されるダウンロード URL を表す変数。
   
  +
==== 他のアプリケーション ====
もしくは {{pkg|vim}} を使ってアーカイブをブラウズすることもできます:
 
$ vim /var/cache/pacman/pkg/systemd-204-3-x86_64.pkg.tar.xz
 
   
=== 古いパッケジのライブラリを使っているアプリケーションを探 ===
+
Pacman で利用できるダウンロアプリケーションは他にもありま:
   
  +
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}}
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.
 
  +
* {{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}}
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
 
It will print running program name and old library that was removed or replaced with newer content.
 

2019年11月21日 (木) 18:49時点における版

関連記事

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

目次

外観と利便性の向上

グラフィカルフロントエンド

警告: PackageKit は既定でシステムのパーミッションを wheel グループに開放するので、一般的な用途ではおすすめできません。FS#50459 および FS#57943 を参照してください。
  • Apper — PackageKit を使用し C++ で書かれた Qt 5 アプリケーションパッケージマネージャ。AppStream metadata をサポート。
https://userbase.kde.org/Apper || apper
  • Discover — KDE のパッケージ管理ツールのコレクション。PackageKit を使用。AppStream metadataFlatpak および Fwupd をサポート。
https://userbase.kde.org/Discover || discover
  • GNOME packagekit — GTK ベースのパッケージ管理ツール。
https://www.freedesktop.org/software/PackageKit/ || gnome-packagekit
  • GNOME Software — Gnome ソフトウェアアプリ (GNOME の精選ソフトウェアコレクション)。
https://wiki.gnome.org/Apps/Software || gnome-software
  • pcurses — curses フロントエンドのパッケージ管理ツール。
https://github.com/schuay/pcurses || pcurses
  • tkPacman — Tcl/Tk と X11 にしか依存せず、CLI の pacman を使ってパッケージデータベースを操作できるソフトウェア。
https://sourceforge.net/projects/tkpacman || tkpacmanAUR

ユーティリティ

  • Arch-Update — Gnome-Shell のアップデートインジケータ。
https://github.com/RaphaelRochet/arch-update || gnome-shell-extension-arch-updateAUR
  • Lostfiles — 孤立したファイルを検知するスクリプト。
https://github.com/graysky2/lostfiles || lostfiles
  • Pacmatic — アップグレードの前に Arch ニュースをチェックして、設定ファイルの変更を警告する pacman ラッパ。
http://kmkeen.com/pacmatic || pacmatic
  • pacutils — libalpm ベースのプログラムのヘルパーライブラリ。
https://github.com/andrewgregory/pacutils || pacutils-gitAUR
  • pkgfile — あるファイルを使っているパッケージが何かを見つけるツール。
https://github.com/falconindy/pkgfile || pkgfile
  • pkgtools — Arch Linux パッケージ用のスクリプトコレクション。
https://github.com/Daenyth/pkgtools || pkgtoolsAUR
  • Powerpillaria2Reflector を通じて並列分割ダウンロードを行い pacman のダウンロード処理を高速化。
https://xyne.archlinux.ca/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-archAUR

メンテナンス

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

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

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

バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。

  • 明示的にインストールしたパッケージを全てリストアップ: pacman -Qe
  • group グループに含まれるパッケージを全てリストアップ: pacman -Sq group
  • 依存パッケージではない、明示的にインストールしたネイティブのパッケージ (同期データベースに存在するパッケージ) を全てリストアップ: pacman -Qent
  • 外部からインストールしたパッケージ (手動でダウンロード・インストールしたパッケージ) をリストアップ: pacman -Qm
  • ネイティブなパッケージ (同期データベースからインストールしたパッケージ) をリストアップ: pacman -Qn
  • 正規表現でパッケージをリストアップ: pacman -Qs regex
  • 正規表現でカスタム出力形式を使ってパッケージをリストアップ: expac -s "%-30n %v" regex (expac が必要です)。

容量でソート

インストールしたパッケージのリストを容量で並び替えたい場合 ( どのパッケージが最大かを把握するのは、ハードドライブの空き容量を増やしたいときに有用です。 各パッケージ単独の容量を取得するか、パッケージとその依存関係の容量を取得するかの二つのオプションがあります。

パッケージ単独

次のコマンドで、インストールされたパッケージ全てとそれぞれの容量をリストアップします:

$ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
パッケージとその依存関係

パッケージとその依存関係の合計容量を表示するのは、次の方法があります。

  • expac をインストールして expac -H M '%m\t%n' | sort -h を実行。
  • -c オプションを付けて pacgraph を実行。

複数のパッケージのダウンロード容量をリストアップするには (packages を空にすると全てのパッケージの情報が出力されます):

$ expac -S -H M '%k\t%n' packages

basebase-devel に存在しない明示的にインストールしたパッケージの容量と説明をリストアップするには:

$ expac -H M "%011m\t%-20n\t%10d" $(comm -23 <(pacman -Qqen | sort) <(pacman -Qqg base base-devel | sort)) | sort -n

アップグレード対象のパッケージとそのダウンロード容量をリストアップするには:

$ pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh

日付を使う

expac を使って最後にインストールした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

指定したグループやリポジトリに存在しないパッケージ

ノート: 依存パッケージとしてインストールされたが、既にどのパッケージからも必要とされていないパッケージを確認したい場合は使用していないパッケージの削除 (孤立したパッケージ) を参照。

basebase-devel グループに存在しない明示的にインストールしたパッケージをリストアップ:

$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)

basebase-devel グループに存在せず、他のパッケージによって必要とされていないインストール済みパッケージをリストアップ:

$ comm -23 <(pacman -Qqt | sort) <(pacman -Sqg base base-devel | sort)

上記と同じで、説明を付けてリストアップ:

$ expac -HM '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <(pacman -Qqg base base-devel | sort))

指定したリポジトリ repo_name に存在しないインストール済みパッケージをリストアップ:

$ comm -23 <(pacman -Qtq | sort) <(pacman -Slq repo_name | sort)

repo_name リポジトリに含まれているインストール済みパッケージをリストアップ:

$ comm -12 <(pacman -Qtq | sort) <(pacman -Slq repo_name | sort)

base グループにはなく、Arch Linux ISO には含まれているパッケージをリストアップ:

$ comm -23 <(curl https://git.archlinux.org/archiso.git/tree/configs/releng/packages.x86_64) <(pacman -Qqg base | sort)

開発版パッケージ

開発版や不安定版のパッケージを全てリストアップするには、次のコマンドを実行します:

$ pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'

パッケージ一覧とパッケージ情報をリアルタイムプレビュー

インストールされたパッケージ一覧とパッケージ情報のプレビューを見るには:

$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'

fzf を使い、2パネル表示を行ないます。左側にパッケージ一覧が、右側にパッケージ情報が表示されます。

パッケージ一覧の表示対象をキー入力で絞り込みでき、上下移動には矢印キーか Ctrl+j Ctrl+k を押します。Enter キーを押すと less でパッケージ情報をスクロールして後ろまで確認できます。

パッケージに含まれているファイルを容量を付けてリストアップ

特定のパッケージが異常な容量を消費していて、どのファイルが容量を食っているのか調べたいときに便利なコマンドです。

$ pacman -Qlq package | grep -v '/$' | xargs du -h | sort -h

ファイルがどのパッケージにも含まれていないことを確認

どのパッケージにも所有されていない謎のファイルが存在する場合 (パッケージマネージャを使わずにソフトウェアをインストールした場合など)、ファイルを見つけ出して消去すると良いでしょう。以下の手順で見つけ出せます:

  1. 所有者を確認したいファイルのソート済みリストを作成:
    $ find /etc /opt /usr | sort > all_files.txt
  2. pacman によって追跡されているファイルのソート済みリストを作成 (そしてディレクトリの末尾のスラッシュを削除):
    $ pacman -Qlq | sed 's|/$||' | sort > owned_files.txt
  3. 後者のファイルには存在しない行を確認:
    $ comm -23 all_files.txt owned_files.txt

どのパッケージにも含まれない重要なファイル (実行時に生成されるファイルやカスタム設定など) も存在するため、安全に消去できるファイルを選び出す方法としては不適切です。

ヒント: lostfiles スクリプトは上記と同じようなことを実行しますが、出力から偽陽性のファイルを取り除くための包括的なブラックリストを使用します。

使用していないパッケージの削除 (孤立したパッケージ)

再帰的に孤立したパッケージ(とその設定ファイル)を削除するには:

# pacman -Rns $(pacman -Qtdq)

孤立したパッケージが見つからなかった場合、pacman は error: no targets specified を出力します。pacman -Rns に何も引数が指定されていないとこうなります。

ノート: pacman 4.2.0 現在、-Qt は本当に孤立しているパッケージしかリストアップしません。他のパッケージによって任意で必要とされているパッケージを含めたい場合、-t フラグを2回指定してください (-Qtt)。

-Rns (や -Rnc) オプションは直接依存しているパッケージだけを削除し、明示的にインストールされた任意の依存パッケージは削除しません (--asdeps オプションを使用しなかった場合)。

必須ではありませんが、任意の依存パッケージをインストールする際に --asdeps オプションを使用してインストールすることでシステムメンテナンスが楽になります。実行時やインストール時には何も変化はありませんが、--asdeps オプションを使用してインストールしておけば、孤立したパッケージを削除するときに一緒に削除されるようになります。任意の依存パッケージをインストールするときは、以下のコマンドを使うようにしましょう:

# pacman -S --asdeps <packages that are optional dependencies>

base グループ以外の全てのパッケージを削除する

base グループを除く全てのパッケージを削除する必要がある場合は、以下のワンライナーを試して下さい:

# pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u))

上記のワンライナーは こちらのスレッド に書かれたものが元になっています。

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

依存パッケージはアルファベット順でソートされ、重複するパッケージは削除されます。

ノート: ローカルにインストールしたパッケージのツリーを表示したいだけの場合、pacman -Qi を使ってください。
$ pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u

もしくは、expac を使用して:

$ expac -l '\n' %E -S packages | sort -u

変更されたバックアップファイルをリストアップ

システムの設定ファイルをバックアップしたい場合は /etc/ にある全てのファイルをコピーすれば良いですが、普通は変更を加えたファイルだけをバックアップすればそれで足ります。変更が加えられたバックアップファイルは次のコマンドで閲覧できます:

# pacman -Qii | awk '/^MODIFIED/ {print $2}'

root で上記のコマンドを実行することで root からしか読み取れないファイル (/etc/sudoers など) も出力に含まれるようになります。

ヒント: バックアップファイルだけでなく、pacman が認識している全ての変更済みファイルをリストアップしたい場合はパッケージから変更された全てのファイルをリストアップを見てください。

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 base base-devel grub-bios xorg gimp --cachedir .
# repo-add ./custom.db.tar.gz ./*

ダウンロードしたら "Packages" フォルダを CD/DVD に焼くか USB スティック、外部 HDD などにコピーしてください。

インストールするには:

1. メディアをマウントする:

# mkdir /mnt/repo
# mount /dev/sr0 /mnt/repo    # CD/DVD の場合
# mount /dev/sdxY /mnt/repo   # USB スティックの場合。

2. pacman.conf を編集して他のリポジトリ (例: extra, core など) の前にリポジトリを追加してください。この手順は重要です。これで標準のリポジトリに優先して CD/DVD/USB のファイルがインストールされるようになります:

# nano /etc/pacman.conf
[custom]
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages

3. 最後に、pacman データベースを同期して新しいリポジトリを使えるようにしてください:

# pacman -Syu

カスタムローカルリポジトリ

pacman 3 では個人的なリポジトリのデータベースの作成をより簡単にするため repo-add という名前の新しいスクリプトが導入されました。詳しい使い方は repo-add --help を実行して見て下さい。

リポジトリに含むパッケージを全て一つのディレクトリに保存して、次のコマンドを実行してください (repo はカスタムリポジトリの名前に置き換えてください):

$ repo-add /path/to/repo.db.tar.gz /path/to/*.pkg.tar.xz

repo-add を使う際、データベースとパッケージは同じディレクトリにある必要はないので注意してください。ただしそのデータベースで pacman を使うときには、揃っていないといけません。

新しいパッケージを追加する(そして古いパッケージが存在していたら削除する)には、次を実行してください:

$ repo-add /path/to/repo.db.tar.gz /path/to/packagetoadd-1.0-1-i686.pkg.tar.xz
ノート: リポジトリからパッケージを削除する必要がある場合、repo-remove を使ってください。

ローカルリポジトリを作成できたら、リポジトリを pacman.conf に追加してください。db.tar.gz ファイルの名前がリポジトリの名前です。file:// url を使って直接参照するか、ftp://localhost/path/to/directory を使って FTP でアクセスしてください。

カスタムリポジトリを非公式ユーザーリポジトリに追加すれば、コミュニティはそれを使うことができるようになります。

pacman のキャッシュをネットワークで共有する

LAN 上で複数の Arch マシンを使っている場合、パッケージを共有することでダウンロード回数を劇的に減らすことができます。使用しているアーキテクチャが異なるマシン (i686 と x86_64) でキャッシュを共有してはいけません。問題が発生します。

読み取り専用キャッシュ

簡単な方法として、他のコンピュータからミラーとして使用できるスタンドアロンのウェブサーバーを実行するという方法があります: darkhttpd /var/cache/pacman/pkg。サーバーをミラーリストの一番上に追加してください。キャッシュが存在しない場合、404エラーが大量に出てしまいますが、その場合 pacman はリストの次のミラーを使用します。

読み書き可能キャッシュ

ヒント: pacserve を使うことで以下の方法をもっと簡単に実現できます。

複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って /var/cache/pacman/ を共有します。このセクションでは shfs または sshfs を使ってパッケージキャッシュと関連するライブラリディレクトリを同一ローカルネットワーク上の複数のコンピュータで共有する方法を示します。ネットワークで共有されるキャッシュは、ファイルシステムの選択やその他の要因で、遅くなることがあります。

まず、ネットワークをサポートするファイルシステムをインストールしてください。例えば sshfs, shfs, ftpfs, smbfs, nfs など。

ヒント:
  • sshfs や shfs を使う場合、SSH 鍵を読んで下さい。
  • デフォルトでは、smbfs はファイル名にコロンを使えないので、クライアントは問題のあるパッケージをダウンロードしなおしてしまいます。クライアント側で mapchars マウントオプションを使用することで解決します。

それから、サーバーの /var/cache/pacman/pkg をクライアントマシンの /var/cache/pacman/pkg にマウントすることでパッケージを共有できます。

nginx を使用する動的なリバースプロキシキャッシュ

nginx を使って公式の上流ミラーへのリクエストをプロキシして結果をローカルディスクにキャッシュすることができます。その後、ファイルへのリクエストは全てローカルのキャッシュから供給されるようになり、大量のサーバーを更新するときでもインターネットのトラフィックを簡単に最小限に抑えることができます。

警告: この方法には欠点があります。パッケージファイルの相対パスが同じミラーを使う必要があり同じパスを使うようにキャッシュを設定しなければなりません。この例では、相対パスが /archlinux/$repo/os/$arch のミラーを使用して mirrorlist のキャッシュの Server 設定も同じ相対パスとします。

この例では、キャッシュサーバーを 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
...
ノート: 時間と共にディレクトリは膨れ上がるため、古いパッケージを消去できるようにする必要があります。(pacman に含まれている) paccache を使うことでお好きな基準で消去を自動化することが可能です。例えば、find /srv/http/pacman-cache/ -type d -exec paccache -v -r -k 2 -c {} \; はキャッシュディレクトリに最新から1つ前のバージョンまでパッケージを保持します。

BitTorrent Sync を使って pacman のパッケージキャッシュを同期する

BitTorrent Sync はネットワークを介してフォルダを同期する新方法です (LAN でもインターネットでも動作します)。ピアツーピアなのでサーバーを設定する必要はありません: 詳しくはリンクを参照してください。 BitTorrent Sync を使って pacman のキャッシュを共有する方法:

  • まず同期したいマシンに AUR から btsyncAUR[リンク切れ: パッケージが存在しません] パッケージをインストール。
  • BitTorrent Sync の wiki ページや AUR パッケージのインストール手順に従う。
    • root アカウントで動作するように BitTorrent Sync を設定。pacman パッケージキャッシュの読み書き権限が必要です。
    • btsync のウェブ UI でパスワードを設定。
    • btsync の systemd デーモンを起動。
    • btsync のウェブ GUI から最初のマシンに新しい同期フォルダを追加して Secret を生成。フォルダは /var/cache/pacman/pkg を指定。
    • 同じ Secret を使って他のマシンにもフォルダを追加してシステム間でキャッシュされたパッケージを共有。もしくは、最初のシステムをマスター、他のシステムをスレーブとして、Read Only Secret を使用。/var/cache/pacman/pkg を指定。

マシンを接続したらキャッシュの同期が開始されます。Pacman は同期中でも問題なく動作します。同期は完全に自動です。

ノート: BitTorrent Sync のフリーの代替として Syncthing が存在し、同じように使うことができます。

要らなくなったキャッシュが消えないようにする

デフォルトでは、pacman -Sc はコマンドの実行時にマシンにインストールされていないパッケージのキャッシュを削除します。pacman はキャッシュを共有している全てのマシンにインストールされているパッケージを推測することができないため、削除してはいけないファイルまで削除してしまいます。

キャッシュを削除するときは古い tarball だけを削除するように、/etc/pacman.conf[options] セクションに以下のエントリを追加してください:

CleanMethod = KeepCurrent

ファイルシステムからパッケージを再作成

ファイルシステムからパッケージを再作成するには、(pacman に含まれている) bacman を使います。システム上のファイルがそのまま使われるため、作成されるパッケージにはファイルへの変更も一緒に含まれてしまいます。再作成したパッケージの配布は非推奨です。ABSArch Rollback Machine を見てください。

ヒント: bacmanmakepkg.confPACKAGER, PKGDEST, PKGEXT オプションを使用します。環境変数をエクスポートすることで圧縮ツールのオプションを指定することができます。例えば XZ_OPT="-T 0"xz の並列圧縮を有効化します。

別のツールとして fakepkgAUR も存在します。並列化をサポートしており複数のパッケージを入力することができます。bacman ではどちらもサポートされていません。

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

ヒント:
  • 以下の作業は自動化できます。plist-gistAUR[リンク切れ: パッケージが存在しません]bacpac を参照。
  • 既にインストールされているパッケージをスキップするには、--needed を使ってください。

ネイティブの、明示的にインストールしたパッケージのリストを保存しておくことで新しいシステムのインストールを素早く行うことができます。

$ pacman -Qqen > pkglist.txt

リストのバックアップからパッケージをインストールするには、以下のコマンドを実行:

# pacman -S - < pkglist.txt

AUR のパッケージなど、外部からインストールしたパッケージがリストに含まれている場合、リストから削除:

# pacman -S $(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

実行中のプログラムの名前と削除あるいは置換された古いライブラリが出力されます。

パフォーマンス

データベースのアクセス速度を向上させる

Pacman はパッケージの全ての情報を、パッケージごとの小さなファイルに保存しています。データベースのアクセス速度を向上させればデータベースを使う処理 (例: パッケージの検索・パッケージの依存関係の解決) にかかる時間が短くなります。一番安全で簡単な方法は root で次を実行することです:

# pacman-optimize

小さなファイルをハードディスクのひとつの (物理的な) 場所にまとめて置くことでパッケージにアクセスするときにハードディスクのヘッドがあまり動かなくてもいいようにします。この方法は安全ですが、フールプルーフではありません。ファイルシステムによっては、ディスク上の使用している領域と空の領域がフラグメンテーションを起こすことがあります。さらにアグレッシブな方法として、データベースを最適化する前にインストールされていないパッケージをキャッシュから削除し使われていないリポジトリを削除するという方法があります:

# pacman -Sc && pacman-optimize

ダウンロード速度を向上させる

ノート: ダウンロード速度が極端に遅い場合、使っているミラーが ftp.archlinux.org ではないことを確認してください。2007年の3月からこのサーバーには速度制限がかかっています

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

Pacman に初めから入っているファイルダウンローダの代わりに、他のアプリケーションを使ってパッケージをダウンロードすることで Pacman のパッケージダウンロード速度を上げることができます。

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

# pacman -Syu

Powerpill

Powerpill は Pacman の完全なラッパーで並行・分割ダウンロードを使うことによってダウンロード処理を高速化します。通常の Pacman は一度にひとつのパッケージしかダウンロードしないので、ダウンロードが完了するまで次のダウンロードが始まりません。Powerpill は異なるアプローチを取ります: 同時に可能な限り多くのパッケージをダウンロードしようとします。

Powerpill の wiki ページに基本的な設定・使用方法と、パッケージと上流のリンクがあります。

wget

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

wget を使うには、まず pacman -S wget で wget をインストールして、それから /etc/pacman.conf を編集して次の行を [options] セクションでアンコメントしてください:

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

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

aria2

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

ノート: 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 で使用できるオプションについては man aria2cOPTIONS を見てください。

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

他のアプリケーション

Pacman で利用できるダウンロードアプリケーションは他にもあります:

  • 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