pacman
テンプレート:Related articles start (日本語)
pacman パッケージマネージャは Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できるビルドシステムから成っています。pacman のゴールはパッケージ管理を楽にすることであり、公式 Arch レポジトリにあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。
Pacman は C 言語で書かれており .pkg.tar.xz
パッケージフォーマットを使います。
目次
- 1 設定
- 2 使い方
- 3 トラブルシューティング
- 3.1 パッケージ XYZ にアップデートしたらシステムが壊れました!
- 3.2 パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています!
- 3.3 アップデートでこんなエラーが出ました: "file exists in filesystem"
- 3.4 パッケージのインストール時にこんなエラーが出ました: "not found in sync db"
- 3.5 パッケージをインストールする時にエラーが表示されます: "target not found"
- 3.6 Pacman が何度も同じパッケージをアップグレードします!
- 3.7 アップグレード中に Pacman がクラッシュしました!
- 3.8 "make install" を使ってソフトウェアをインストールしましたが、これらのファイルはどのパッケージにも属していません!
- 3.9 特定のファイルをもったパッケージが必要です。どのパッケージがそのファイルを持っているかわかりますか?
- 3.10 Pacman が完全に壊れました!どうやったら再インストールできますか?
- 3.11 システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
- 3.12 "User <email@gmail.com>" の署名が unknown trust でインストールできません
- 3.13 signature from "User <email@archlinux.org>" is invalid
- 3.14 "failed to commit transaction (invalid or corrupted package)" エラーが出ます
- 3.15 pacman を使うたびにエラーがでます 'warning: current locale is invalid; using default "C" locale' どうすればいいですか?
- 3.16 Pacman にプロクシ設定を使うようにするにはどうすればいいですか?
- 3.17 明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか?
- 4 参照
設定
pacman の設定は /etc/pacman.conf
に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は man pacman.conf にあります。
全般設定
全般的な設定は [options]
セクションにあります。ここで設定されている項目については man かデフォルトの pacman.conf
を参照してください。
アップグレードさせないパッケージを設定
ある特定のパッケージをアップデートさせないようにするには:
IgnorePkg=linux
複数のパッケージを記述するときはスペースで区切るか、IgnorePkg
行を追加してください。
アップグレードさせないグループを設定
パッケージの場合と同様に、アップグレードさせないグループを指定することができます:
IgnoreGroup=gnome
インストールさせないファイルを設定
特定のディレクトリのインストールをさせないようにするには NoExtract
リストにディレクトリを加えます。例えば、systemd ユニットのインストールを避けるには:
NoExtract=usr/lib/systemd/system/*
Repositories
/etc/pacman.conf
に書かれているように、このセクションではどのリポジトリを使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル (/etc/pacman.d/mirrorlist
) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定はここを見て下さい。
/etc/pacman.conf
#[testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [core] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist [extra] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist #[community-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [community] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist # もし x86_64 環境で 32 bit アプリケーションを動かしたい時は、 # ここで multilib レポジトリを有効にします。 #[multilib-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist #[multilib] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist # An example of a custom package repository. See the pacman manpage for # tips on creating your own repositories. #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs
パッケージのセキュリティ
Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。SigLevel
を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では
/etc/pacman.conf
SigLevel = Required DatabaseOptional
によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に SigLevel
を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、ここを見て下さい。
使い方
pacman で何ができるかをちゃんと学びたい場合、man pacman を参照してください。以下にあるのは pacman でできることのほんの一例です。
パッケージのインストール
特定のパッケージのインストール
ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは:
# pacman -S パッケージ名1 パッケージ名2 ...
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります(例:[extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:
# pacman -S extra/パッケージ名
パッケージグループのインストール
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:
# pacman -S gnome
を実行すると gnome グループからインストールしたいパッケージを選択するように表示されます。
パッケージグループには大量のパッケージが含まれており、しばしばインストールしたいパッケージはそのうちの少しだけということがあるかもしれません。インストールするパッケージの番号を全て入力するという方法でもよいですが、以下のようにすることで簡単にパッケージを選択することが可能です:
Enter a selection (default=all): 1-10 15
以上で1番から10番までと15番のパッケージがインストールされます。
Enter a selection (default=all): ^5-8 ^2
以上で5番から8番までと2番のパッケージ以外の全てのパッケージをインストールします。
どのパッケージが gnome グループに属しているか見るには:
# pacman -Sg gnome
どのようなパッケージグループがあるかは https://www.archlinux.org/groups/ を見て下さい。
パッケージの削除
あるパッケージを、そのパッケージが必要としていたものを残したまま削除するには:
# pacman -R パッケージ名
削除したいパッケージと、そのパッケージだけが必要としている他のパッケージを一緒に削除するには:
# pacman -Rs パッケージ名
削除したいパッケージと、そのパッケージが必要としている他のパッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには:
# pacman -Rsc パッケージ名
他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:
# pacman -Rdd パッケージ名
デフォルトでは、pacman は削除されたパッケージの設定ファイルを *.pacsave という拡張子をつけてバックアップします。もしこれらのファイルも一緒に削除したい場合:
# pacman -Rn パッケージ名
パッケージのアップグレード
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはレポジトリデータベースと同期してそれからシステムのパッケージをアップデートします(レポジトリにない'ローカル'パッケージは別です):
# pacman -Syu
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら The Arch Way を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために .pacnew
ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは Pacnew and Pacsave Files (日本語) を見て下さい。
アップグレードするまえに、Arch Linux home page の最新ニュースをチェックしておくとよいでしょう (もしくは RSS フィード, arch-announce メーリングリストを講読したり Twitter の @archlinux をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
パッケージ・データベースに問い合わせる
-Q
フラグを使って Pacman からローカルデータベースを問い合わせます:
$ pacman -Q --help
同期しているデータベースに問い合わせるには -S
フラグを使います:
$ pacman -S --help
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:
$ pacman -Ss 検索ワード1 検索ワード2 ...
既にインストールしたパッケージ内を検索するには:
$ pacman -Qs 検索ワード1 検索ワード2 ...
パッケージ名が分かっていれば、より詳しい情報を得ることができます:
$ pacman -Si パッケージ名
既にインストールしたパッケージの情報を得るには:
$ pacman -Qi パッケージ名
-i
フラグをふたつ付けることでバックアップファイルの一覧と状態を表示できます:
$ pacman -Qii パッケージ名
あるパッケージによってインストールされたファイルの一覧を得るには:
$ pacman -Ql パッケージ名
インストールされていないパッケージには pkgfile を使って下さい。
あるファイルがどのパッケージによってインストールされたかを調べるには:
$ pacman -Qo /パス/ファイル名
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
$ pacman -Qdt
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
$ pacman -Qet
パッケージの依存のツリーを見るには:
$ pactree パッケージ名
あるパッケージを必要としている全てのパッケージを見るには pkgtools の whoneeds
を使います:
$ whoneeds パッケージ名
もしくは pactree のリバースフラグを使って:
$ pactree -r package_name
pacman tips には他の例も載っています。
パッケージキャッシュの削除
pacman はダウンロードしたパッケージを /var/cache/pacman/pkg/
に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。
現在インストールされていないパッケージキャッシュを全て削除するオプションは:
# pacman -Sc
上記の欠点のため、-Sc
や -Scc
スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:
- pacman パッケージに入っている paccache コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します:
$ paccache -r
ただし、この方法では paccache はパッケージがインストールされているかどうかを確認しないため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります:$ paccache -ruk0
他のオプションはpaccache -h
を見て下さい。
- もしくは、Arch User Repository から pkgcachecleanAUR をインストールして使うこともできます:
# pkgcacheclean
追加コマンド
システムのアップグレードとパッケージのインストール(ワンライナー):
# pacman -Syu パッケージ名1 パッケージ名2 ...
インストールをしないで、パッケージをダウンロードする:
# pacman -Sw パッケージ名
リポジトリに存在しない'ローカル'のパッケージ (例: AUR のパッケージ) をインストール:
# pacman -U /パス/パッケージ名-version.pkg.tar.xz
リポジトリにない、リモートのパッケージを URI を入力してインストール:
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
部分的なアップグレードはサポートされていません
Arch Linux はローリングリリースであり、常に新しいバージョンのライブラリがレポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてレポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 (AUR のパッケージなど)、ユーザーは必要に応じて共有ライブラリにあわせてリビルドしなくてはなりません。
つまり部分的なサポートはサポートされていません。pacman -Sy package
や、それと同等の pacman -Sy
からの pacman -S package
などをしないでください。いつでも、パッケージをインストールする前にアップグレードしてください -- 特に pacman が同期レポジトリを更新する時は。同じ理由から、IgnorePkg
や IgnoreGroup
は気をつけて扱って下さい。
一度部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません。ライブラリは後方互換性がないときには soname を受け取ります。単純に、正しくミラーと同期する pacman -Syu
で pacman が壊れていないかぎり問題を修正します。
一般注意事項
pacman にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは --help
スイッチを付けて呼び出すことでコマンドオプションを表示できます。ユーティリティの完全なリストを見るには、次を実行してください:
$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'
トラブルシューティング
パッケージ XYZ にアップデートしたらシステムが壊れました!
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ (linux, xorg-server など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.org/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ (/var/log/pacman.log
) を見て再チェックしてください。
この段階で pacman から何も有用な情報が得られなく、https://www.archlinux.org/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は、助けを求めるのにフォーラムや IRC を使ったり問題のあるパッケージをダウングレードしてください。
パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています!
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。MirrorStatus にミラーの更新状況がのっています。
アップデートでこんなエラーが出ました: "file exists in filesystem"
関連: Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する (pacman -Qo /path/to/file
) ことです。ファイルが他のパッケージによって使われている場合、バグレポートをしてください。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。
全てのパッケージはインストールされるとパッケージのメタデータを含んだ /var/lib/pacman/local/$package-$version/files
ファイルを作ります。このファイルが壊れている(または空だったり見つからない)と、パッケージをアップデートしようしたときに "file exists in filesystem" エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、pacman -S --force パッケージ名
で pacman にファイルを上書きさせることができます。
絶対に pacman -Syu --force
はしないでください。
パッケージのインストール時にこんなエラーが出ました: "not found in sync db"
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかレポジトリが正しく設定されていない可能性があります。pacman -Syy
で全てのパッケージリストを更新してください。
パッケージをインストールする時にエラーが表示されます: "target not found"
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。pacman -Syy
を実行して強制的に全てのパッケージリストを更新してみましょう。
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは multilib リポジトリにあるが、multilib が pacman.conf で有効になっていないということが考えられます。
Pacman が何度も同じパッケージをアップグレードします!
それは /var/lib/pacman/local/
に二重のエントリがあるためです。pacman -Qi
は正しいバージョンを示しますが、pacman -Qu
は古いバージョンだと認識してアップグレードしようとします。
解決法: /var/lib/pacman/local/
の問題のあるエントリを削除してください。
アップグレード中に Pacman がクラッシュしました!
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
- Arch インストールメディアを使って起動してください
- root ファイルシステムをマウントします
pacman -Syy
を使って pacman のデータベースを更新しますpacman -r /path/to/root -S package
で壊れたパッケージを再インストールしてください
"make install" を使ってソフトウェアをインストールしましたが、これらのファイルはどのパッケージにも属していません!
"conflicting files" エラーが出る場合、--force
スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします (pacman -S --force
)。ファイルシステム中の所有されていないファイルを検索するスクリプトについては Pacman Tips (日本語)#ファイルがどのパッケージにも所有されていないことを確認 を見て下さい。
特定のファイルをもったパッケージが必要です。どのパッケージがそのファイルを持っているかわかりますか?
全てのファイルと関連パッケージの分割データベースを使う pkgfile をインストールしてください。
Pacman が完全に壊れました!どうやったら再インストールできますか?
修復できないほど pacman が壊れてしまった場合、手動で必要なパッケージ (openssl, libarchive, pacman) をダウンロードして root に展開してください。pacman バイナリはデフォルト設定ファイルと一緒に復帰します。その後、pacman によってパッケージを再インストールしてパッケージデータベースを完全に整備してください。詳しい情報や自動で行うためのサンプルスクリプトがここにあります。
システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
おそらく initramfs がカーネルアップデート中に破損しています(不正に --force
オプションを使うと起こりえます)。2つの選択肢があります:
1. Fallback エントリを試す。
- システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの linux カーネル用)を入力して initramfs イメージを再生成します:
# mkinitcpio -p linux
2. 動かない場合、最新の Arch リリース (CD/DVD または USB スティック) から起動する:
# mount /dev/sdxY /mnt #あなたの root パーティション。 # mount /dev/sdxZ /mnt/boot #/boot パーティションを分割している場合。 # arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
- カーネル (linux パッケージ) の再インストールは自動的に initramfs イメージを
mkinitcpio -p linux
で再生成します。
別個にやる必要はありません。
- その後は、
exit
,umount /mnt/{boot,}
,reboot
と実行してください。
"User <email@gmail.com>" の署名が unknown trust でインストールできません
pacman-key (日本語)#全てのキーのリセット に従って下さい。または手動で archlinux-keyring
パッケージをアップグレードしてください、pacman -S archlinux-keyring
。
signature from "User <email@archlinux.org>" is invalid
システム時刻が間違っていることが原因です。時刻を設定してパッケージをインストール・アップグレードする前に次を実行してください:
# hwclock -w
"failed to commit transaction (invalid or corrupted package)" エラーが出ます
/var/cache/pacman/pkg
にある *.part
ファイル(部分ダウンロードファイル)を見つけたらそれらを削除します (pacman.conf
で XferCommand
を設定しているとよく起こります)。
pacman を使うたびにエラーがでます 'warning: current locale is invalid; using default "C" locale' どうすればいいですか?
そのエラーは、あなたの locale が正しく設定されていないと言っています。Locale (日本語) を見て下さい。
Pacman にプロクシ設定を使うようにするにはどうすればいいですか?
環境変数 ($http_proxy
, $ftp_proxy
など) を使って下さい。sudo と一緒に Pacman を使う時は、環境変数を pacman に渡すように sudo を設定してください。
明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか?
ネイティブのパッケージを全て再インストールするには: pacman -S $(pacman -Qnq)
(-S
オプションはデフォルトでインストールの理由の維持します)。
次に外部のパッケージを全て再インストールしてください、pacman -Qmq
でパッケージを表示できます。