「Pacman」の版間の差分
(→パッケージのインストール: 同期) |
(→パッケージの削除: 同期) |
||
129行目: | 129行目: | ||
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}} |
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}} |
||
− | ===パッケージの削除=== |
+ | === パッケージの削除 === |
− | + | 依存パッケージをすべて残したままパッケージを削除するには: |
|
# pacman -R ''パッケージ名'' |
# pacman -R ''パッケージ名'' |
||
− | 削除したいパッケージと、そのパッケージだけが必要としている |
+ | 削除したいパッケージと、そのパッケージだけが必要としている依存パッケージを一緒に削除するには: |
# pacman -Rs ''パッケージ名'' |
# pacman -Rs ''パッケージ名'' |
||
+ | {{Warning|グループ (例えば ''gnome'') を削除する場合、このコマンドはそのグループ内のパッケージのインストール理由を無視します。グループを指定した場合、そのグループ内のパッケージを分けて指定したかのように振る舞うからです。依存関係のインストール理由は依然として考慮されます。}} |
||
− | 削除したいパッケージと、そのパッケージが必要としている他のパッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには: |
||
− | + | 上記のコマンドは、必要とされているパッケージを含んでいるグループを削除する際に、実行を拒否する場合があります。そのような場合は、以下を試してください: |
|
+ | |||
+ | # pacman -Rsu ''パッケージ名'' |
||
+ | |||
+ | 削除したいパッケージと、そのパッケージの依存パッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには: |
||
+ | |||
+ | {{Warning|この操作は再帰的です。潜在的に必要とされているパッケージも削除してしまう可能性があるので、注意して使用しなければなりません。}} |
||
# pacman -Rsc ''パッケージ名'' |
# pacman -Rsc ''パッケージ名'' |
||
− | 他のパッケージ |
+ | 他のパッケージによって必要とされているパッケージを、必要としているパッケージを削除せずに削除するには: |
+ | |||
+ | {{Warning|以下の操作はシステムを破壊する可能性があり、使用は避けるべきです。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照してください。}} |
||
# pacman -Rdd ''パッケージ名'' |
# pacman -Rdd ''パッケージ名'' |
||
− | + | Pacman は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに ''.pacsave'' 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、{{ic|-n}} オプションを付けてください: |
|
# pacman -Rn ''パッケージ名'' |
# pacman -Rn ''パッケージ名'' |
||
− | {{Note|Pacman は |
+ | {{Note|Pacman は、アプリケーション自身が作成した設定ファイルを削除しません (例えば、ホームディレクトリ内の "ドットファイル")。}} |
===パッケージのアップグレード=== |
===パッケージのアップグレード=== |
2023年6月9日 (金) 22:32時点における版
関連記事
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 インストール時にパッケージを取得できない
- 3.6 pacman の手動再インストール
- 3.7 アップグレード中に Pacman がクラッシュしました
- 3.8 "make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません
- 3.9 システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
- 3.10 signature from "User <email@gmail.com>" is unknown trust
- 3.11 PGP 鍵のインポートが要求される
- 3.12 エラー: key "0123456789ABCDEF" could not be looked up remotely
- 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 明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか
- 3.18 パッケージのダウンロード時にフリーズする
- 3.19 Failed retrieving file 'core.db' from mirror
- 4 参照
使い方
pacman で何ができるかをちゃんと学びたい場合、pacman(8) を参照してください。以下にあるのは pacman でできることのほんの一例です。
パッケージのインストール
パッケージとは、以下を含むアーカイブです:
- アプリケーションの (コンパイルされた) 全ファイル
- アプリケーションのメタデータ (アプリケーション名、バージョン、依存関係など)
- pacman によって使用されるインストールファイル及びディレクティブ
- (任意で) 開始/停止スクリプトなど、作業を用意にする追加のファイル
Arch のパッケージマネージャである pacman は、このようなパッケージをインストール、アップデート、そして削除することができます。プログラムを自分でコンパイルしてインストールする代わりにパッケージを使用することには、様々な利点があります:
- 簡単なアップデート: pacman は、アップデートが利用可能になるとすぐに既存のパッケージを更新します。
- 依存関係のチェック: pacman は依存関係を処理してくれます。あなたがすべきことは、インストールしたいプログラムを指定することだけです。pacman はそのプログラムと一緒に他の必要なプログラムもインストールします。
- 綺麗にアンインストール: pacman は、パッケージに含まれる全ファイルのリストを保持します。これにより、パッケージを削除する際に意図せずファイルが残留することはありません。
特定のパッケージのインストール
ひとつ、あるいは複数のパッケージを、依存パッケージも含めてインストールするには、以下のコマンドを実行してください:
# pacman -S パッケージ名1 パッケージ名2 ...
正規表現を使ってパッケージをインストールするには (このフォーラムスレッド を参照):
# pacman -S $(pacman -Ssq パッケージのパターン)
別々のリポジトリ (例: extra と testing) 内に同一のパッケージの複数のバージョンが存在していることがあります。この場合、パッケージ名の前にリポジトリ名を明示する必要があります。例えば extra リポジトリ内のバージョンをインストールするには:
# pacman -S extra/パッケージ名
名前に類似パターンが存在するパッケージをインストールしたい場合、波括弧を使ってパッケージ名を展開することができます。例えば:
# pacman -S plasma-{desktop,mediacenter,nm}
必要に応じて更に複雑なパターンを指定することもできます:
# pacman -S plasma-{workspace{,-wallpapers},pa}
仮想パッケージ
仮想パッケージとは、それ自体は存在していないが、1つ以上のパッケージによって provides (提供) 指定されている特殊なパッケージです。仮想パッケージが存在していることにより、あるパッケージの依存関係として複数の候補が存在している場合に、パッケージは特定のパッケージを依存関係として指定する必要がなくなります。仮想パッケージはその名前を使ってインストールすることはできません。仮想パッケージを provide (提供) するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。
パッケージグループのインストール
パッケージグループに属しているパッケージをすべて同時にインストールすることができます。例えば:
# 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.jp/groups/ を見て下さい。
パッケージの削除
依存パッケージをすべて残したままパッケージを削除するには:
# pacman -R パッケージ名
削除したいパッケージと、そのパッケージだけが必要としている依存パッケージを一緒に削除するには:
# pacman -Rs パッケージ名
上記のコマンドは、必要とされているパッケージを含んでいるグループを削除する際に、実行を拒否する場合があります。そのような場合は、以下を試してください:
# pacman -Rsu パッケージ名
削除したいパッケージと、そのパッケージの依存パッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには:
# pacman -Rsc パッケージ名
他のパッケージによって必要とされているパッケージを、必要としているパッケージを削除せずに削除するには:
# pacman -Rdd パッケージ名
Pacman は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに .pacsave 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、-n
オプションを付けてください:
# pacman -Rn パッケージ名
パッケージのアップグレード
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期してそれからシステムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です):
# pacman -Syu
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら The Arch Way を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です。Arch Linux の安定化#Arch のメンテナンスを見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために .pacnew
ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは Pacnew と Pacsave ファイルを見てください。
アップグレードするまえに、Arch Linux ホームページ の最新ニュースをチェックしておくとよいでしょう (もしくは RSS フィード, arch-announce メーリングリストを講読したり Twitter の @archlinux_jp をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
部分的なアップグレードはサポートされていません
Arch Linux はローリングリリースであり、常に新しいバージョンのライブラリがリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 (AUR のパッケージなど)、ユーザーは必要に応じて共有ライブラリにあわせてリビルドしなくてはなりません。
つまり部分的なアップグレードはサポートされていません。pacman -Sy package
や、それと同等の pacman -Sy
からの pacman -S package
などをしないでください。どんなときでも、パッケージをインストールする前に (pacman -Syu
で) アップグレードしてください。IgnorePkg
や IgnoreGroup
を使用する場合は気をつけて扱って下さい。pacman -Sy
は基本的に使ってはいけないコマンドで、代わりに pacman -Syu
を使って下さい。
一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません。ライブラリは後方互換性がないときには soname のバージョンアップに対応します。pacman -Syu
を実行しさえすれば、ミラーと同期して pacman が壊れていないかぎり問題が修正されます。
インストールされているパッケージのアップグレードを確認したいときは pacman-contrib パッケージに含まれている bash スクリプト checkupdates を使うことで、システムアップデートを行わずに安全に確認が行えます。
パッケージ・データベースに問い合わせる
Pacman からローカルデータベースに問い合わせるときは -Q
フラグを、同期データベースに問い合わせるときは -S
フラグを、ファイルデータベースに問い合わせるときは -F
フラグを使います。それぞれのフラグのサブオプションについては pacman -Q --help
, pacman -S --help
, pacman -F --help
を見てください。
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:
$ pacman -Ss 検索ワード1 検索ワード2 ...
場合によって -s
の組み込みの ERE (拡張正規表現) が望まない結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください:
$ pacman -Ss '^vim-'
既にインストール済みのパッケージから検索するには:
$ pacman -Qs 検索ワード1 検索ワード2 ...
リモートパッケージからパッケージファイルの名前で検索するには:
$ pacman -Fs 検索ワード1 検索ワード2 ...
パッケージ名が分かっていれば、より詳しい情報を得ることができます:
$ pacman -Si パッケージ名
既にインストールしたパッケージの情報を得るには:
$ pacman -Qi パッケージ名
-i
フラグをふたつ付けることでバックアップファイルの一覧と状態を表示できます:
$ pacman -Qii パッケージ名
あるパッケージによってインストールされたファイルの一覧を得るには:
$ pacman -Ql パッケージ名
リモートパッケージによってインストールされるファイルのリストを得るには:
$ pacman -Fl パッケージ名
あるファイルがどのパッケージによってインストールされたかを調べるには:
$ pacman -Qo /パス/ファイル名
あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:
$ pacman -F /パス/ファイル名
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
$ pacman -Qdt
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
$ pacman -Qet
pacman ヒントには他の例も載っています。
Pactree
パッケージの依存のツリーを見るには:
$ pactree パッケージ名
あるパッケージを必要としている全てのパッケージを見るには pkgtools の whoneeds
を使います:
$ whoneeds パッケージ名
もしくは pactree のリバースフラグを使って:
$ pactree -r package_name
データベースの構造
通常 pacman のデータベースは /var/lib/pacman/sync
に配置され、/etc/pacman.conf
で指定したリポジトリのデータベースファイルがそこに作成されます。データベースファイルは gzip で圧縮された tar アーカイブになっており、パッケージごとにディレクトリが含まれています。例えば which パッケージの場合:
% tree which-2.20-6 which-2.20-6 |-- depends `-- desc
depends
ファイルにはパッケージが依存するパッケージのリストが記載されており、desc
にはファイルサイズや MD5 ハッシュなどのパッケージの情報が入っています。
パッケージキャッシュの削除
pacman はダウンロードしたパッケージを /var/cache/pacman/pkg/
に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。
現在インストールされていないパッケージキャッシュを全て削除するオプションは:
# pacman -Sc
上記の欠点のため、-Sc
や -Scc
スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:
- pacman-contrib パッケージに入っている paccache コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します:
$ paccache -r
ただし、この方法では paccache はパッケージがインストールされているかどうかを確認しないため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります:$ paccache -ruk0
他のオプションはpaccache -h
を見て下さい。
- もしくは、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
pacman で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。-p
を使うことで -S
, -U
, -R
などの操作を阻止することができます。
pacman にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは --help
スイッチを付けて呼び出すことでコマンドオプションを表示できます。
インストール理由
pacman データベースではインストールしたパッケージはインストールしたときの理由によって2つのグループに分別されます:
- 明示的にインストール: pacman の
-S
や-U
コマンドによって文字通り指定されたパッケージ。 - 依存パッケージ: pacman のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから必要とされたためにインストールされたパッケージ。
パッケージのインストール時、以下のようにすることでインストール理由を依存パッケージに強制的に変えることができます:
# pacman -S --asdeps package_name
パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。
明示的にインストールしたパッケージのリストは pacman -Qe
で表示でき、依存パッケージのリストは pacman -Qd
で表示できます。
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行:
# pacman -D --asdeps package_name
インストール理由を「明示的にインストール」に変えたいときは --asexplicit
を使ってください。
特定のファイルが含まれているパッケージを検索
ファイルデータベースを同期してください:
# pacman -Fy
ファイルが含まれているパッケージを検索するには:
$ pacman -Fs pacman core/pacman 5.0.1-4 usr/bin/pacman usr/share/bash-completion/completions/pacman extra/xscreensaver 5.36-1 usr/lib/xscreensaver/pacman
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する pkgfile をインストールしてください。
設定
pacman の設定は /etc/pacman.conf
に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は pacman.conf(5) にあります。
全般設定
全般的な設定は [options]
セクションにあります。ここで設定されている項目については pacman.conf(5) かデフォルトの pacman.conf
を参照してください。
カラー出力
コンソールのカラー出力#pacman を見てください。
並列ダウンロードを有効にする
pacman 6.0 はパッケージを同時にダウンロードするオプションを導入しました。この機能を使用するには、/etc/pacman.conf
で ParallelDownloads
を正の整数に (例:5
) など設定する必要があります。このオプションが設定されていない場合、パッケージは順番にダウンロードされます。
アップデートする前にバージョンを比較
利用可能なパッケージの新旧バージョンを確認したい場合、/etc/pacman.conf
の "VerbosePkgLists" 行をアンコメントしてください。pacman -Syu
の出力が以下のようになります:
Package (6) Old Version New Version Net Change Download Size extra/libmariadbclient 10.1.9-4 10.1.10-1 0.03 MiB 4.35 MiB extra/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB
アップグレードさせないパッケージを設定
ある特定のパッケージをアップデートさせないようにするには:
IgnorePkg=linux
複数のパッケージを記述するときはスペースで区切るか、IgnorePkg
行を追加してください。
アップグレードさせないグループを設定
パッケージの場合と同様に、アップグレードさせないグループを指定することができます:
IgnoreGroup=gnome
アップグレードさせないファイルを設定
NoUpgrade
ディレクティブで指定されたファイルはパッケージのインストール・アップグレードで変更を加えられることがなくなり、.pacnew 拡張子が付いたファイルが新しくインストールされます:
NoUpgrade=path/to/file
インストールさせないファイルを設定
特定のディレクトリのインストールをさせないようにするには NoExtract
リストにディレクトリを加えます。例えば、systemd ユニットのインストールを避けるには:
NoExtract=usr/lib/systemd/system/*
もしくは localepurgeAUR と同じように、英語以外のローカライゼーションのインストールを止めるには:
NoExtract = usr/share/help/* !usr/share/help/en* NoExtract = usr/share/locale/* !usr/share/locale/en* !usr/share/locale/locale.alias NoExtract = usr/share/man/* !usr/share/man/man* NoExtract = usr/share/vim/vim74/lang/*
後ろのルールは前のルールを上書きします。また、!
でルールを打ち消すことで、必要なロケールだけを維持できます。
複数の設定ファイルを使用
設定ファイルが複数あって (メインの設定と testing リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで Include
オプションを宣言することができます。例:
Include = /path/to/common/settings
/path/to/common/settings
は共有したいオプションが存在するファイルに置き換えてください。
フック
pacman は /usr/share/libalpm/hooks/
ディレクトリのフックを処理の前後に実行することができます。さらに pacman.conf
の HookDir
オプションでフックディレクトリを指定できます (デフォルトは /etc/pacman.d/hooks
です)。フックファイルの名前には必ず .hook を後ろに付ける必要があります。
Pacman フックは様々なことに使われています。例えば、systemd-sysusers
と systemd-tmpfiles
を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として tomcat8 パッケージでは tomcat8
という名前のシステムユーザーが必要だと指定されており特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの systemd-sysusers.hook
と systemd-tmpfiles.hook
は tomcat8
パッケージにシステムユーザーと一時ファイルが含まれていることを認識して systemd-sysusers
と systemd-tmpfiles
を実行します。
alpm のフックに関する詳細は alpm-hooks(5) の man ページを参照。
リポジトリとミラー
特殊な [options] セクションを除いて、pacman.conf
内の他の [セクション]
には、使用するパッケージリポジトリを定義します。リポジトリとはパッケージの論理的な集合であり、それらのパッケージは1つ以上のサーバに物理的に保存されています。このような理由から、各サーバはリポジトリのミラーと呼ばれます。
リポジトリは公式と非公式に分けられています。設定ファイル内でのリポジトリの順番は重要です。2つのリポジトリに同じ名前のパッケージが存在する場合、それらのバージョン番号に関わらず、設定ファイル内で最初に来るリポジトリが、その後に来るリポジトリよりも優先されます。リポジトリを使用するには、そのリポジトリを追加した後に、まずシステム全体をアップグレードする必要があります。
各リポジトリセクションではミラーのリストを定義します: ミラーのリストを直接記述することもできますし、Include
ディレクティブを使って外部の専用のファイルを使うこともできます。例えば、公式リポジトリのミラーは /etc/pacman.d/mirrorlist
からインクルードされます。ミラーの設定については記事 ミラー を参照してください。
パッケージのキャッシュディレクトリ
Pacman は、ダウンロードしたパッケージファイルをキャッシュに保存します。キャッシュは、pacman.conf
の [options] セクション内の CacheDir
で示されるディレクトリ内です (設定されていない場合、/var/cache/pacman/pkg/
がデフォルトで使用されます)。
キャッシュディレクトリは、(たとえ、インストールされているパッケージの最新のバージョンのみを保持しているとしても) 時間とともに肥大化する場合があります。
キャッシュディレクトリを他のより好都合な場所に移動したい場合は、以下のどれかを行ってください:
pacman.conf
内のCacheDir
オプションで新しいディレクトリを設定する。末尾のスラッシュを残しておくことを忘れないでください。これが推奨される方法です。/var/cache/pacman/pkg/
に専用のパーティションや Btrfs サブボリュームをマウントする。- 選択したディレクトリを
/var/cache/pacman/pkg/
でバインドマウントする。
パッケージのセキュリティ
Pacman はパッケージの署名をサポートしていて、パッケージにセキュリティレイヤーを加えています。デフォルトの設定では SigLevel = Required DatabaseOptional
によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。リポジトリ毎に SigLevel
を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、pacman-key を見てください。
トラブルシューティング
パッケージ XYZ にアップデートしたらシステムが壊れました
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ (linux, xorg-server など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.jp/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ (/var/log/pacman.log
) を見て再チェックしてください。
この段階で pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は、助けを求めるのにフォーラムや 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 --overwrite glob パッケージ名
で pacman に glob に一致するファイルを上書きさせることができます。
パッケージのインストール時にこんなエラーが出ました: "not found in sync db"
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。pacman -Syy
で全てのパッケージリストを更新してください。
インストール時にパッケージを取得できない
このエラーは、Not found in sync db
や Target not found
、Failed retrieving file
として表示されます。
まず、パッケージが本当に存在するか確認してください。パッケージが存在することが確実である場合、パッケージリストが古くなっているのかもしれません。pacman -Syy
を実行して強制的に全てのパッケージリストを更新してみましょう。また、あなたの使っているミラーが古くなっていないかや、リポジトリが正しく設定されているかを確認してください。
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは multilib リポジトリにあるが、multilib が pacman.conf
で有効になっていないということが考えられます。
FAQ#公式リポジトリにある共用ライブラリはそれぞれどうして一つのバージョンしか用意されてないんですか? も参照してください。
pacman の手動再インストール
pacman-static を使用
pacman-staticAUR は pacman を静的にコンパイルしたものなので、システム上のライブラリが動作していなくても実行できます。これは、 部分的なアップグレード が実行され、 pacman が実行できなくなった場合にも便利です。
固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法を提供し、 pacman を再インストールしたり、部分的なアップグレードの場合にシステム全体をアップグレードしたりするために使用できます。
外部の pacman を使用する
pacman-static
でさえ動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の1つは、 archiso を使用し、 --sysroot
} または --root
を使用してマウントポイントを指定する方法です。 --sysroot
に必要なファイルシステムをマウントする方法については、 Chroot#chrootの使用 を参照してください。
手動で抽出する
pacman がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
- インストールするパッケージを確認
- 適当なミラーからパッケージをそれぞれダウンロード
- パッケージをルートディレクトリに展開
pacman -S --force
でパッケージを再インストールしてパッケージデータベースを更新- フルシステムアップグレードを実行
問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます:
$ pacman -Q $(pactree -u pacman)
問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します:
# tar -xvpwf package.tar.xz -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
w
フラグを使ってインタラクティブモードにしていることに注意してください。インタラクティブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。こちらのフォーラムの投稿 には pacman の一部の依存パッケージだけが壊れた時の解決方法の例が載っています。
アップグレード中に Pacman がクラッシュしました
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
- Arch インストールメディアを使って起動してください。
- root でルートファイルシステムをマウントします (
mount /dev/sdaX /mnt
)。df -h
で十分な空き容量があることを確認してください。 - proc, sys, dev ファイルシステムもマウントしてください:
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
。 - システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で
pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu
を実行することでシステムの "pacman" データベースを更新してアップグレードすることができます。 - アップグレード後、アップグレードがないことと壊れているパッケージを確認してください:
find /mnt/usr/lib -size 0
。 pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package
で壊れているパッケージを再インストールしてください。
pacman: command not found
pacmanのキャッシュディレクトリをシンボリックリンクしてはいけません。 代わりに別のキャッシュディレクトリを構成するか、バインドマウントを使用してください。 [1]
"make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません
"conflicting files" エラーが出る場合、--force
スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします (pacman -S --force
)。ファイルシステム中の所有されていないファイルを検索するスクリプトについては Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認 を見て下さい。
システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
おそらく initramfs がカーネルアップデート中に破損しています(不正に --force
オプションを使うと起こりえます)。2つの解決方法があります:
1. Fallback エントリを試す:
システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの linux カーネル用)を入力して initramfs イメージを再生成します:
# mkinitcpio -p linux
2. それが機能しない場合は、現在の Arch リリース (CD/DVDまたはUSBスティック) から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。
# arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
カーネル (linux パッケージ) を再インストールすると、自動的に mkinitcpio-p linux
で initramfsイメージが再生成されます。これを個別に行う必要はありません。
その後、exit
、umount/mnt/{boot,}
および reboot
を実行してください。
signature from "User <email@gmail.com>" is unknown trust
以下の方法を試してみてください:
pacman-key --refresh-keys
で既知のキーを更新してください。- 手動で
archlinux-keyring
パッケージをアップグレードしてください:pacman -Sy archlinux-keyring && pacman -Su
。 - pacman-key#全ての鍵のリセットに従って下さい。
PGP 鍵のインポートが要求される
古いバージョンの ISO で Arch をインストールしようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり archlinux-keyring をアップグレードしてください (上を参照)。
エラー: key "0123456789ABCDEF" could not be looked up remotely
パッケージが archlinux-keyring に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの archlinux-keyring に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。上で書かれているように archlinux-keyring を先にアップグレードしてください。
signature from "User <email@archlinux.org>" is invalid
システム時刻が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます:
error: package: signature from "User <email@archlinux.org>" is invalid error: failed to commit transaction (invalid or corrupted package (PGP signature)) Errors occured, no packages were upgraded.
パッケージをインストール・アップグレードする前に ntpd -qg
と hwclock -w
を root で実行して下さい。
"failed to commit transaction (invalid or corrupted package)" エラー
/var/cache/pacman/pkg
にある *.part
ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい (pacman.conf
で XferCommand
を設定しているとこのエラーがよく起こります)。
# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;
pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'
そのエラーは、あなたの locale が正しく設定されていないと言っています。ロケールを見て下さい。
pacman でプロキシ設定を使うにはどうすればいいですか?
環境変数 ($http_proxy
, $ftp_proxy
など) を使って下さい。sudo と一緒に Pacman を使う時は、環境変数を pacman に渡すように sudo を設定してください。
明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか
ネイティブのパッケージを全て再インストールするには: pacman -Qnq | pacman -S -
(-S
オプションはデフォルトでインストールの理由を維持します)。
次に自分で作成したパッケージを全て再インストールしてください、pacman -Qmq
でパッケージを確認できます。
パッケージのダウンロード時にフリーズする
pacman がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [2] [3]。Arch Linux のインストール時にこの問題が発生する場合、pacman のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは pacman のパフォーマンスの向上を参照)。VirtualBox で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで NAT の代わりに Host interface を使うことで解決します。
Failed retrieving file 'core.db' from mirror
ミラーを正しく設定しているのにこのエラーメッセージが表示される場合、ネームサーバを設定してみてください。