pacman/ヒントとテクニック
以下のヒントや pacman 自体の柔軟性を広げる汎用的な手法については、Core Utilities や Bash を見てください。
目次
- 1 メンテナンス
- 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 -Qi package
自動化させるには、pacman の出力をパースするというエラーの発生しやすい方法を取るのではなく、expac を使ってください:
$ expac -S '%D' package
パッケージの閲覧
インストールされているすべてのパッケージを、各パッケージのインスタントプレビューで参照するには:
$ pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
これは fzf を使用して、右側にパッケージ情報が表示されたすべてのパッケージを一覧表示する2ペインビューを表示します。
パッケージのリストをフィルタリングするための文字を入力します。矢印キー(またはCtrl-j
/Ctrl-k
)を使用してナビゲートします。Enter
を押して、less の下にパッケージ情報を表示します。
fzf を使用して、同様の方法で pacman にすべてのパッケージ(インストールされているものとまだインストールされていないものの両方)を参照するには、次を使用します。
$ pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse
ナビゲーションのキーバインディングは同じですが、Enter
は同じようには機能しません。
パッケージに含まれているファイルを容量を付けてリストアップ
特定のパッケージが異常な容量を消費していて、どのファイルが容量を食っているのか調べたいときに便利なコマンドです。
$ 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
どのパッケージにも含まれない重要なファイル (実行時に生成されるファイルやカスタム設定など) も存在するため、安全に消去できるファイルを選び出す方法としては不適切です。
パッケージによって作成された所有されていないファイルの追跡
ほとんどのシステムは、次のようないくつかの [1] ファイルをゆっくりと収集します。通常の操作の過程で状態ファイル、ログ、インデックスなどとして。
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
次に、root ユーザーとして pacreport --unowned-files
を使用すると、関連するパッケージがインストールされなくなった場合(または新しいファイルが作成された場合)に、所有されていないファイルが一覧表示されます。
さらに、aconfmgr(aconfmgr-gitAUR)を使用すると、スクリプトを使用して、変更されたファイルや孤立したファイルを追跡できます。
使用していないパッケージの削除 (孤立したパッケージ)
再帰的に孤立したパッケージ(とその設定ファイル)を削除するには:
# pacman -Rns $(pacman -Qtdq)
孤立したパッケージが見つからなかった場合、pacman は error: no targets specified
を出力します。pacman -Rns
に何も引数が指定されていないとこうなります。
-Rns
(や -Rnc
) オプションは直接依存しているパッケージだけを削除し、明示的にインストールされた任意の依存パッケージは削除しません (--asdeps
オプションを使用しなかった場合)。
必須ではありませんが、任意の依存パッケージをインストールする際に --asdeps
オプションを使用してインストールすることでシステムメンテナンスが楽になります。実行時やインストール時には何も変化はありませんが、--asdeps
オプションを使用してインストールしておけば、孤立したパッケージを削除するときに一緒に削除されるようになります。任意の依存パッケージをインストールするときは、以下のコマンドを使うようにしましょう:
# pacman -S --asdeps <packages that are optional dependencies>
必須パッケージ以外の全てのパッケージを削除する
必須パッケージを除くすべてのパッケージを削除する必要がある場合、1つの方法は、必要ではないパッケージのインストール理由を依存関係として設定してから、不要な依存関係をすべて削除することです。
まず、明示的にインストール されたすべてのパッケージについて、インストール理由を 依存関係としてインストール に変更します。
# pacman -D --asdeps $(pacman -Qqe)
次に、インストール理由を、必須パッケージのみの 明示的にインストール に変更します。これらのパッケージをターゲットにしないために、削除したくない パッケージは次のようになります。
# pacman -D --asexplicit base linux linux-firmware
最後に、Pacman ヒント#使用していないパッケージの削除 (孤立したパッケージ) の手順に従って、依存関係 でインストールされたすべてのパッケージを削除します。
複数のパッケージの依存パッケージリストを取得
依存パッケージはアルファベット順でソートされ、重複するパッケージは削除されます。
$ 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 に含まれる 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) でキャッシュを共有してはいけません。問題が発生します。
読み取り専用キャッシュ
簡単な方法として、他のコンピュータからミラーとして使用できるスタンドアロンのウェブサーバーを実行するという方法があります: 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 は /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 を使ってパッケージデータベースを操作できるソフトウェア。