「Pacman/ヒントとテクニック」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→パッケージ一覧とパッケージ情報をリアルタイムプレビュー: 記事を追加) |
Kusanaginoturugi (トーク | 投稿記録) (→ファイルがどのパッケージにも含まれていないことを確認: === Tracking unowned files created by packages === を追加) |
||
149行目: | 149行目: | ||
{{Tip|{{Pkg|lostfiles}} スクリプトは上記と同じようなことを実行しますが、出力から偽陽性のファイルを取り除くための包括的なブラックリストを使用します。}} |
{{Tip|{{Pkg|lostfiles}} スクリプトは上記と同じようなことを実行しますが、出力から偽陽性のファイルを取り除くための包括的なブラックリストを使用します。}} |
||
+ | |||
+ | === Tracking unowned files created by packages === |
||
+ | |||
+ | Most systems will slowly collect several [http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html#S3-RPM-INSIDE-FLIST-GHOST-DIRECTIVE ghost] files such as state files, logs, indexes, etc. through the course of usual operation. |
||
+ | |||
+ | {{ic|pacreport}} from {{Pkg|pacutils}} can be used to track these files and their associations via {{ic|/etc/pacreport.conf}} (see {{man|1|pacreport|FILES}}). |
||
+ | |||
+ | An example may look something like this (abridged): |
||
+ | |||
+ | {{hc|/etc/pacreport.conf|2= |
||
+ | [Options] |
||
+ | IgnoreUnowned = usr/share/applications/mimeinfo.cache |
||
+ | |||
+ | [PkgIgnoreUnowned] |
||
+ | alsa-utils = var/lib/alsa/asound.state |
||
+ | bluez = var/lib/bluetooth |
||
+ | ca-certificates = etc/ca-certificates/trust-source/* |
||
+ | dbus = var/lib/dbus/machine-id |
||
+ | glibc = etc/ld.so.cache |
||
+ | grub = boot/grub/* |
||
+ | linux = boot/initramfs-linux.img |
||
+ | pacman = var/lib/pacman/local |
||
+ | update-mime-database = usr/share/mime/magic |
||
+ | }} |
||
+ | |||
+ | Then, when using {{ic|pacreport --unowned-files}} as the root user, any unowned files will be listed if the associated package is no longer installed (or if any new files have been created). |
||
+ | |||
+ | Additionally, [https://github.com/CyberShadow/aconfmgr aconfmgr] ({{AUR|aconfmgr-git}}) allows tracking modified and orphaned files using a configuration script. |
||
=== 使用していないパッケージの削除 (孤立したパッケージ) === |
=== 使用していないパッケージの削除 (孤立したパッケージ) === |
2022年1月12日 (水) 09:56時点における版
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、Core Utilities や Bash を見てください。
目次
- 1 メンテナンス
- 1.1 パッケージをリストアップ
- 1.2 パッケージ一覧とパッケージ情報をリアルタイムプレビュー
- 1.3 パッケージに含まれているファイルを容量を付けてリストアップ
- 1.4 ファイルがどのパッケージにも含まれていないことを確認
- 1.5 Tracking unowned files created by packages
- 1.6 使用していないパッケージの削除 (孤立したパッケージ)
- 1.7 必須パッケージ以外の全てのパッケージを削除する
- 1.8 複数のパッケージの依存パッケージリストを取得
- 1.9 変更されたバックアップファイルをリストアップ
- 1.10 pacman データベースをバックアップ
- 1.11 変更履歴を簡単に確認
- 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 必要な言語のコンテンツのみをインストールする
- 3 パフォーマンス
- 4 ユーティリティ
メンテナンス
システムメンテナンスも参照。
パッケージをリストアップ
With version
バグを報告したりインストールしたパッケージについて説明するときは、インストール済みのパッケージとそのバージョンのリストを貼り付けると便利です。
- 明示的にインストールしたパッケージを全てリストアップ:
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
パッケージとその依存関係
パッケージとその依存関係の合計容量を表示するのは、次の方法があります。
複数のパッケージのダウンロード容量をリストアップするには (packages
を空にすると全てのパッケージの情報が出力されます):
$ expac -S -H M '%k\t%n' packages
base や base-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
指定したグループやリポジトリに存在しないパッケージ
base や base-devel グループに存在しない明示的にインストールしたパッケージをリストアップ:
$ comm -23 <(pacman -Qeq | sort) <(pacman -Qgq base base-devel | sort)
base や base-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 でパッケージ情報をスクロールして後ろまで確認できます。
To list all packages, sorted by package size & with package size in the title:
$ expac -H M "%n - %m" $(pacman -Qqe) | sort -nrk3 | \ fzf --reverse -m --no-mouse --bind 'esc:accept' \ --preview 'pacman -Qqi "$(echo {} | cut -f1 -d" ")";' \ --bind 'enter:execute:p=$(echo {}|cut -f1 -d" ");bash -c "pacman -Qi $p;echo Package Tree:;pactree $p;echo File Tree:;pacman -Qql $p|tree --fromfile|head -n-2|tail -n+2|sed -e \"s/── /── \//g\" -e s/^....//g" | less'
Press Enter
to see package info under less. This includes a package tree and a file tree.
Press Tab
to select a package.
Press Esc
to exit fzf. This will print all the packages you selected. Useful for going through all your packages and marking them for deletion.
To browse all packages currently known to pacman (both installed and not yet installed) in a similar way, using fzf, use:
$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse
The navigational keybindings are the same, although Enter will not work in the same way.
パッケージに含まれているファイルを容量を付けてリストアップ
特定のパッケージが異常な容量を消費していて、どのファイルが容量を食っているのか調べたいときに便利なコマンドです。
$ pacman -Qlq package | grep -v '/$' | xargs du -h | sort -h
ファイルがどのパッケージにも含まれていないことを確認
どのパッケージにも所有されていない謎のファイルが存在する場合 (パッケージマネージャを使わずにソフトウェアをインストールした場合など)、ファイルを見つけ出して消去すると良いでしょう。以下の手順で見つけ出せます:
- 所有者を確認したいファイルのソート済みリストを作成:
$ find /etc /opt /usr | sort > all_files.txt
- pacman によって追跡されているファイルのソート済みリストを作成 (そしてディレクトリの末尾のスラッシュを削除):
$ pacman -Qlq | sed 's|/$||' | sort > owned_files.txt
- 後者のファイルには存在しない行を確認:
$ comm -23 all_files.txt owned_files.txt
どのパッケージにも含まれない重要なファイル (実行時に生成されるファイルやカスタム設定など) も存在するため、安全に消去できるファイルを選び出す方法としては不適切です。
Tracking unowned files created by packages
Most systems will slowly collect several ghost files such as state files, logs, indexes, etc. through the course of usual operation.
pacreport
from pacutils can be used to track these files and their associations via /etc/pacreport.conf
(see pacreport(1) § FILES).
An example may look something like this (abridged):
/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
Then, when using pacreport --unowned-files
as the root user, any unowned files will be listed if the associated package is no longer installed (or if any new files have been created).
Additionally, aconfmgr (aconfmgr-gitAUR) allows tracking modified and orphaned files using a configuration script.
使用していないパッケージの削除 (孤立したパッケージ)
再帰的に孤立したパッケージ(とその設定ファイル)を削除するには:
# pacman -Rns $(pacman -Qtdq)
孤立したパッケージが見つからなかった場合、pacman は error: no targets specified
を出力します。pacman -Rns
に何も引数が指定されていないとこうなります。
-Rns
(や -Rnc
) オプションは直接依存しているパッケージだけを削除し、明示的にインストールされた任意の依存パッケージは削除しません (--asdeps
オプションを使用しなかった場合)。
必須ではありませんが、任意の依存パッケージをインストールする際に --asdeps
オプションを使用してインストールすることでシステムメンテナンスが楽になります。実行時やインストール時には何も変化はありませんが、--asdeps
オプションを使用してインストールしておけば、孤立したパッケージを削除するときに一緒に削除されるようになります。任意の依存パッケージをインストールするときは、以下のコマンドを使うようにしましょう:
# pacman -S --asdeps <packages that are optional dependencies>
必須パッケージ以外の全てのパッケージを削除する
If it is ever necessary to remove all packages except the essentials packages, one method is to set the installation reason of the non-essential ones as dependency and then remove all unnecessary dependencies.
First, for all the packages installed "as explicitly", change their installation reason to "as dependency":
# pacman -D --asdeps $(pacman -Qqe)
Then, change the installation reason to "as explicitly" of only the essential packages, those you do not want to remove, in order to avoid targeting them:
# pacman -D --asexplicit base linux linux-firmware
Finally, follow the instructions in #Removing unused packages (orphans) to remove all packages that have installation reason "as dependency".
複数のパッケージの依存パッケージリストを取得
依存パッケージはアルファベット順でソートされ、重複するパッケージは削除されます。
$ 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 データベースをバックアップできます:
$ 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 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
ローカルリポジトリを作成できたら、リポジトリを 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 はリストの次のミラーを使用します。
読み書き可能キャッシュ
複数のコンピュータ間でパッケージを共有するには、ネットワークベースのマウントプロトコルを使って /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 を介してパッケージをダウンロードできるようにします。
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 は同期中でも問題なく動作します。同期は完全に自動です。
同期プログラムを使用して pacman のパッケージキャッシュを同期します
Syncthing または Resilio Sync を使用して、pacman キャッシュフォルダ (つまり、/var/cache/pacman/pkg
) を同期します。
要らなくなったキャッシュが消えないようにする
デフォルトでは、pacman -Sc
はコマンドの実行時にマシンにインストールされていないパッケージのキャッシュを削除します。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
パフォーマンス
データベースのアクセス速度を向上させる
Pacman はパッケージの全ての情報を、パッケージごとの小さなファイルに保存しています。データベースのアクセス速度を向上させればデータベースを使う処理 (例: パッケージの検索・パッケージの依存関係の解決) にかかる時間が短くなります。一番安全で簡単な方法は root で次を実行することです:
# pacman-optimize
小さなファイルをハードディスクのひとつの (物理的な) 場所にまとめて置くことでパッケージにアクセスするときにハードディスクのヘッドがあまり動かなくてもいいようにします。この方法は安全ですが、フールプルーフではありません。ファイルシステムによっては、ディスク上の使用している領域と空の領域がフラグメンテーションを起こすことがあります。さらにアグレッシブな方法として、データベースを最適化する前にインストールされていないパッケージをキャッシュから削除し使われていないリポジトリを削除するという方法があります:
# pacman -Sc && pacman-optimize
ダウンロード速度を向上させる
パッケージをダウンロードするとき 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.conf
に wget
パラメータを記述する代わりに、wget
の設定ファイルを直接修正することも可能です (システム全体のファイルは /etc/wgetrc
、ユーザー別のファイルは $HOME/.wgetrc
)。
aria2
aria2 はレジューム機能と分割 HTTP/HTTPS/FTP ダウンロードをサポートしている軽量なダウンロードユーティリティです。aria2 を使えば同時に複数の HTTP/HTTPS/FTP 接続を Arch ミラーにすることができ、ファイル・パッケージの取得の際のダウンロード速度が上昇します。
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 で使用できるオプションについては man aria2c
の OPTIONS を見てください。
-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
hget
:XferCommand = /usr/bin/hget %u -n 2 -skip-tls false
(詳細については Githubプロジェクトページのドキュメントを読んで下さい)saldl
:XferCommand = /usr/bin/saldl -c6 -l4 -s2m -o %o %u
(詳細については Githubプロジェクトページのドキュメントを読んで下さい)
ユーティリティ
- Arch-Update — Gnome-Shell のアップデートインジケータ。
- Lostfiles — 孤立したファイルを検知するスクリプト。
- Pacmatic — アップグレードの前に Arch ニュースをチェックして、設定ファイルの変更を警告する pacman ラッパ。
- pacutils — libalpm ベースのプログラムのヘルパーライブラリ。
- pkgfile — あるファイルを使っているパッケージが何かを見つけるツール。
- pkgtools — Arch Linux パッケージ用のスクリプトコレクション。
- repoctl — ローカルリポジトリの管理を補助するツール。
- repose — Arch Linux リポジトリ作成ツール。
- snap-pac — openSUSE の YaST のように pacman で自動的に snapper のスナップショットを作成するツール。
- vrms-arch — 仮想 Richard M. Stallman がインストールされた不自由なパッケージを報告します。
グラフィカルフロントエンド
- Apper — PackageKit を使用し C++ で書かれた Qt 5 アプリケーションパッケージマネージャ。AppStream metadata をサポート。
- Discover — KDE のパッケージ管理ツールのコレクション。PackageKit を使用。AppStream metadata、Flatpak および Fwupd をサポート。
- GNOME packagekit — GTK ベースのパッケージ管理ツール。
- GNOME Software — Gnome ソフトウェアアプリ (GNOME の精選ソフトウェアコレクション)。
- pcurses — curses フロントエンドのパッケージ管理ツール。
- tkPacman — Tcl/Tk と X11 にしか依存せず、CLI の pacman を使ってパッケージデータベースを操作できるソフトウェア。