「Pacman」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎pacman の手動再インストール: 英語版と同期して情報を更新)
(同期)
 
(5人の利用者による、間の52版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
[[Category:パッケージ管理]]
 
 
[[Category:Arch プロジェクト]]
 
[[Category:Arch プロジェクト]]
  +
[[Category:パッケージマネージャー]]
[[ar:Pacman]]
 
[[cs:Pacman]]
 
[[da:Pacman]]
 
 
[[de:Pacman]]
 
[[de:Pacman]]
[[el:Pacman]]
 
 
[[en:Pacman]]
 
[[en:Pacman]]
 
[[es:Pacman]]
 
[[es:Pacman]]
[[fa:Pacman]]
+
[[fi:Pacman]]
 
[[fr:Pacman]]
 
[[fr:Pacman]]
[[id:Pacman]]
 
 
[[it:Pacman]]
 
[[it:Pacman]]
[[ko:Pacman]]
 
[[nl:Pacman]]
 
 
[[pl:Pacman]]
 
[[pl:Pacman]]
 
[[pt:Pacman]]
 
[[pt:Pacman]]
 
[[ru:Pacman]]
 
[[ru:Pacman]]
[[sr:Pacman]]
 
 
[[sv:Pacman]]
 
[[sv:Pacman]]
 
[[zh-hans:Pacman]]
 
[[zh-hans:Pacman]]
[[zh-hant:Pacman]]
 
{{Lowercase title}}
 
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|pacman/パッケージの署名}}
  +
{{Related|pacman/Pacnew と Pacsave}}
  +
{{Related|pacman/ローカルデータベースの復元}}
  +
{{Related|pacman/比較表}}
  +
{{Related|pacman/ヒントとテクニック}}
  +
{{Related|Arch User Repository}}
 
{{Related|パッケージの作成}}
 
{{Related|パッケージの作成}}
 
{{Related|パッケージのダウングレード}}
 
{{Related|パッケージのダウングレード}}
{{Related|Pacman のパフォーマンスの向上}}
+
{{Related|namcap}}
{{Related|Pacman GUI フロントエンド}}
 
{{Related|Pacman 比較表}}
 
{{Related|Pacman ヒント}}
 
 
{{Related|FAQ#パッケージ管理}}
 
{{Related|FAQ#パッケージ管理}}
{{Related|pacman-key}}
+
{{Related|システムメンテナンス}}
{{Related|Pacnew と Pacsave ファイル}}
 
{{Related|Pacman/ローカルデータベースの復元}}
 
{{Related|アプリケーション一覧/ユーティリティ#パッケージ管理}}
 
{{Related|Arch Build System}}
 
{{Related|公式リポジトリ}}
 
{{Related|Arch User Repository}}
 
 
{{Related articles end}}
 
{{Related articles end}}
   
'''[https://www.archlinux.org/pacman/ pacman]''' [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる[[Arch Build System|ビルドシステム]]から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[公式リポジトリ|公式 Arch リポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。
+
[https://pacman.archlinux.page/ pacman] [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は [[Arch Linux]] の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる [[Arch build system]] から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[公式リポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。
   
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。
+
''Pacman'' はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。
   
Pacman は C 言語で書かれており {{ic|.pkg.tar.xz}} パッケージフォーマットを使ます。
+
''Pacman''[[C]] 言語で書かれており、パッケージングに {{man|1|bsdtar}} [[Wikipedia:ja:tar|tar]] フォーマットを使用します。
   
{{Tip|1=公式の {{Pkg|pacman}} パッケージには [[makepkg]] や '''vercmp''' などのツールが含まれています。'''pactree''' や [[#部分的なアップグレードはサポートされていません|checkupdates]] など他の有用なツールは {{Pkg|pacman-contrib}} パッケージに含まれています([https://git.archlinux.org/pacman.git/commit/?id=0c99eabd50752310f42ec808c8734a338122ec86 以前] は pacman パッケージに含まれていました)。ツールの一覧を見るには {{ic|pacman -Ql pacman pacman-contrib {{!}} grep -E 'bin/.+'}} を実行してください。 }}
+
{{Tip|1={{Pkg|pacman}} パッケージには [[makepkg]] や {{man|8|vercmp}} などのツールが含まれています。[[#Pactree|pactree]] や [[checkupdates]] など他の有用なツールは {{Pkg|pacman-contrib}} パッケージに含まれています ([https://gitlab.archlinux.org/pacman/pacman/commit/0c99eabd50752310f42ec808c8734a338122ec86 以前]は ''pacman'' パッケージに含まれていました)。ツールの一覧を見るには {{ic|pacman -Ql pacman pacman-contrib {{!}} grep -E 'bin/.+'}} を実行してください。}}
   
==使い方==
+
== 使い方 ==
   
 
pacman で何ができるかをちゃんと学びたい場合、{{man|8|pacman}} を参照してください。以下にあるのは pacman でできることのほんの一例です。
 
pacman で何ができるかをちゃんと学びたい場合、{{man|8|pacman}} を参照してください。以下にあるのは pacman でできることのほんの一例です。
   
{{Tip|他の Linux ディストリビューションを使ったことがある場合、[[Pacman 比較表]]の記事が役に立つでしょう。}}
+
{{Tip|他の Linux ディストリビューションを使ったことがある場合、[[Pacman/比較表]]の記事が役に立つでしょう。}}
   
===パッケージのインストール===
+
=== パッケージのインストール ===
  +
  +
パッケージとは、以下を含むアーカイブです:
  +
  +
* アプリケーションの (コンパイルされた) 全ファイル
  +
* アプリケーションのメタデータ (アプリケーション名、バージョン、依存関係など)
  +
* ''pacman'' によって使用されるインストールファイル及びディレクティブ
  +
  +
Arch のパッケージマネージャである ''pacman'' は、このようなパッケージをインストール、アップデート、そして削除することができます。プログラムを自分でコンパイルしてインストールする代わりにパッケージを使用することには、様々な利点があります:
  +
  +
* 簡単なアップデート: ''pacman'' は、アップデートが利用可能になるとすぐに既存のパッケージを更新します。
  +
* 依存関係のチェック: ''pacman'' は依存関係を処理してくれます。あなたがすべきことは、インストールしたいプログラムを指定することだけです。''pacman'' はそのプログラムと一緒に他の必要なプログラムもインストールします。
  +
* 綺麗にアンインストール: ''pacman'' は、パッケージに含まれる全ファイルのリストを保持します。これにより、パッケージを削除する際に意図せずファイルが残留することはありません。
   
 
{{Note|
 
{{Note|
* パッケージには [[PKGBUILD#optdepends|optdepends]] が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。[[#パッケージ・デタベースに問い合わる|パッケージ・データベースに問い合わせる]]ことで情報参照することができます。
+
* パッケージには[[PKGBUILD#optdepends|任意の依存パッケージ]]が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。''pacman'' は、パッケージのインストル時に任意の依存パッケジのリトを表示しますが、そのリストは {{ic|pacman.log}} 残りまん。[[#パッケージ・データベースに問い合わせる]] コマンドを使うことで、パッケージの任意の依存パッケージることができます。
* 他のパッケージの依存パッケージとしてパッケージをインストールする場合 (そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは[[#インストール理由|インストール理由]]を参照。}}
+
* 他のパッケージの (任意の) 依存パッケージとしてパッケージをインストールする場合 (つまり、そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは [[#インストール理由]] セクションを参照。}}
   
{{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新しないでください (つり {{ic|pacman -Sy ''パッケージ名''}} をしてはいけない)。これを実行すると依存関係に問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}}
+
{{Warning|1=Arch でパッケージのインストールをする際に、[[#パッケージのアップグレード|システムのアップグレード]]をせずにパッケージリストを更新することは避けてください (例えば、公式リポジトリで[[#インストール時にパッケージを取得できない|パッケージが見からなくなった]]時など)。実際の場面でいうと、{{ic|pacman -Sy'''u''' ''パッケージ名''}} の代わ {{ic|pacman -Sy ''パッケージ名''}} を実行しては'''いけない'''ということです。これを実行すると依存関係に問題が発生する可能性があります。[[システムメンテナンス#部分的なアップグレードはサポートされていません]] や [https://bbs.archlinux.org/viewtopic.php?id=89328 BBS#89328] を参照。}}
   
====特定のパッケージのインストール====
+
==== 特定のパッケージのインストール ====
   
ひとつ、あるいは複数の依存を含む)パッケージインストールするときは:
+
ひとつ、あるいは複数のパッケージを、依存パッケージも含めてインストールする、以下のコマンドを実行してください:
   
 
# pacman -S ''パッケージ名1'' ''パッケージ名2'' ...
 
# pacman -S ''パッケージ名1'' ''パッケージ名2'' ...
   
  +
正規表現を使ってパッケージをインストールするには ([https://bbs.archlinux.org/viewtopic.php?id=7179 このフォーラムスレッド] を参照):
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります (例: [extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:
 
  +
  +
# pacman -S $(pacman -Ssq ''パッケージのパターン'')
  +
  +
別々のリポジトリ (例: ''extra'' と ''testing'') 内に同一のパッケージの複数のバージョンが存在していることがあります。この場合、パッケージ名の前にリポジトリ名を明示する必要があります。例えば ''extra'' リポジトリ内のバージョンをインストールするには:
   
 
# pacman -S extra/''パッケージ名''
 
# pacman -S extra/''パッケージ名''
   
名前に類似パターンが存在するパッケージをインストールしたい場合 (グループ全体ではなくマッチするパッケージのみ、: {{Grp|plasma}}):
+
名前に類似パターンが存在するパッケージをインストールしたい場合、波括弧を使ってパッケージ名を展開することができます。えば:
   
 
# pacman -S plasma-{desktop,mediacenter,nm}
 
# pacman -S plasma-{desktop,mediacenter,nm}
   
もちろん、必要に応じて更に複雑なパターンを指定することもできます:
+
必要に応じて更に複雑なパターンを指定することもできます:
   
 
# pacman -S plasma-{workspace{,-wallpapers},pa}
 
# pacman -S plasma-{workspace{,-wallpapers},pa}
   
====パッケージグループのインストール====
+
===== 仮想パッケージ =====
   
  +
仮想パッケージとは、それ自体は存在していないが、1つ以上のパッケージによって [[PKGBUILD#provides|provides (提供)]] 指定されている特殊なパッケージです。仮想パッケージが存在していることにより、あるパッケージの依存関係として複数の候補が存在している場合に、パッケージは特定のパッケージを依存関係として指定する必要がなくなります。仮想パッケージはその名前を使ってインストールすることはできません。仮想パッケージを ''provide (提供)'' するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。例としては [[D-Bus#実装|dbus-units]] パッケージがあります。
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:
 
  +
  +
{{Tip|複数の候補が存在する場合、候補のリストは、{{ic|pacman.conf}} 内に現れる[[リポジトリ]]の順番でソートされ、そして同一のリポジトリ内にも複数の候補が存在する場合はさらにアルファベット順にソートされます。}}
  +
  +
==== パッケージグループのインストール ====
  +
  +
[[パッケージグループ]]に属しているパッケージをすべて同時にインストールすることができます。例えば:
   
 
# pacman -S gnome
 
# pacman -S gnome
87行目: 97行目:
 
を実行すると {{Grp|gnome}} グループからインストールしたいパッケージを選択するように表示されます。
 
を実行すると {{Grp|gnome}} グループからインストールしたいパッケージを選択するように表示されます。
   
パッケージグループには大量のパッケージが含まれており、しばしばインストールしたいパッケージはそのうちの少しだけということがあるかもしれません。インストールするパッケージの番号を全て入力するという方法でもよいですが、以下のようにすることで簡単にパッケージを選択することが可能です:
+
パッケージグループには大量のパッケージが含まれており、しばしばインストールしたいパッケージはそのうちの少しだけということがあるかもしれません。インストールするパッケージの番号を全て入力するという方法でもよいですが、以下のような構文を使うことで簡単にパッケージを選択することが可能です:
   
 
Enter a selection (default=all): 1-10 15
 
Enter a selection (default=all): 1-10 15
99行目: 109行目:
 
どのパッケージが gnome グループに属しているか見るには:
 
どのパッケージが gnome グループに属しているか見るには:
   
# pacman -Sg gnome
+
$ pacman -Sg gnome
   
 
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。
 
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。
105行目: 115行目:
 
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}}
 
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}}
   
===パッケージの削除===
+
=== パッケージの削除 ===
   
あるパッケージを、そのパッケージが必要としていたもの残したまま削除するには:
+
依存パッケージをすべて残したままパッケージを削除するには:
   
 
# pacman -R ''パッケージ名''
 
# pacman -R ''パッケージ名''
   
削除したいパッケージと、そのパッケージだけが必要としている他のパッケージを一緒に削除するには:
+
削除したいパッケージと、そのパッケージだけが必要としている依存パッケージを一緒に削除するには:
   
 
# pacman -Rs ''パッケージ名''
 
# pacman -Rs ''パッケージ名''
   
  +
{{Warning|グループ (例えば ''gnome'') を削除する場合、このコマンドはそのグループ内のパッケージのインストール理由を無視します。グループを指定した場合、そのグループ内のパッケージを分けて指定したかのように振る舞うからです。依存関係のインストール理由は依然として考慮されます。}}
削除したいパッケージと、そのパッケージが必要としている他のパッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには:
 
   
{{Warning|こ操作再帰的です。必要パッケージを削除してしまうこともあるのつけて使っさい。}}
+
上記コマンド必要とされているパッケージを含んでいるグループを削除際に、実行を拒否する場合があります。そような場合は以下試しください:
   
# pacman -Rsc ''パッケージ名''
+
# pacman -Rsu ''パッケージ名''
   
のパッケージから依存されてパッケージを、依存しているパッケージを削除しないで削除するには:
+
削除したいパッケージと、そのパッケージ依存パッケージ、らに削除したいパッケージ依存しているパッケージを削除するには:
   
  +
{{Warning|この操作は再帰的です。潜在的に必要とされているパッケージも削除してしまう可能性があるので、注意して使用しなければなりません。}}
# pacman -Rdd ''パッケージ名''
 
   
  +
# pacman -Rsc ''パッケージ名''
デフォルトでは、pacman は削除されたパッケージの設定ファイルを *.pacsave という拡張子をつけてバックアップします。もしこれらのファイルも一緒に削除したい場合:
 
   
  +
他のパッケージによって必要とされているパッケージを、必要としているパッケージを削除せずに削除するには:
# pacman -Rn ''パッケージ名''
 
   
  +
{{Warning|以下の操作はシステムを破壊する可能性があり、使用は避けるべきです。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照してください。}}
{{Note|Pacman はパッケージがインストールされた後に作成された設定ファイルを削除しません。$HOME ディレクトリ下の設定ファイルなどは手動で削除してください。}}
 
   
===パッケージのアップグレード===
+
# pacman -Rdd ''パッケージ名''
   
  +
''Pacman'' は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに ''.pacsave'' 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、{{ic|-n}} オプションを付けてください:
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期して''それから''システムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です):
 
   
# pacman -Syu
+
# pacman -Rn ''パッケージ名''
   
  +
{{Note|''Pacman'' は、アプリケーション自身が作成した設定ファイルを削除しません (例えば、ホームディレクトリ内の "ドットファイル")。}}
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}}
 
   
  +
=== パッケージのアップグレード ===
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[The Arch Way]] を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。'''システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です'''。[[Arch Linux の安定化#Arch のメンテナンス]]を見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために {{ic|.pacnew}} ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは [[Pacnew と Pacsave ファイル]]を見てください。
 
   
{{Tip|
+
{{Warning|
  +
* Arch ユーザーは、[[システムメンテナンス#システムのアップグレード]] セクションのガイダンスに従ってシステムを定期的にアップグレードすることが期待されます。以下のコマンドを闇雲に実行するべきではありません。
* Pacman からの出力は {{ic|/var/log/pacman.log}} に記録されています。
 
  +
* Arch Linux は完全なシステムアップグレードのみをサポートしています。詳細は [[システムメンテナンス#部分的なアップグレードはサポートされていません]] と [[#パッケージのインストール]] を参照してください。
* {{AUR|wat-git}} などのログビューアを使うことで pacman のログを検索できます。
 
 
}}
 
}}
   
  +
''Pacman'' はコマンド一つでシステム上の全パッケージをアップデートできます。この処理に掛かる時間は、システムがどれだけ新しいかによります。以下のコマンドは、リポジトリデータベースを同期し、''かつ''、システム内のパッケージをアップデートします (ただし、リポジトリに無い"ローカル"のパッケージを除く):
アップグレードするまえに、[https://www.archlinux.jp/ Arch Linux ホームページ] の最新ニュースをチェックしておくとよいでしょう (もしくは [https://www.archlinux.jp/feeds/ RSS フィード], [https://lists.archlinux.org/listinfo/arch-announce/ arch-announce メーリングリスト]を講読したり Twitter の [https://twitter.com/archlinux_jp @archlinux_jp] をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。
 
   
  +
# pacman -Syu
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
 
 
====部分的なアップグレードはサポートされていません====
 
 
Arch Linux はローリングリリースであり、常に新しいバージョンの[[Wikipedia:ja:ライブラリ|ライブラリ]]がリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 ([[Arch User Repository|AUR]] のパッケージなど)、ユーザーは必要に応じて[[Wikipedia:soname|共有ライブラリ]]にあわせてリビルドしなくてはなりません。
 
 
つまり部分的なアップグレードは'''サポートされていません'''。{{ic|pacman -Sy package}} や、それと同等の {{ic|pacman -Sy}} からの {{ic|pacman -S package}} などをしないでください。どんなときでも、パッケージをインストールする前に ({{ic|pacman -Syu}} で) アップグレードしてください。{{ic|IgnorePkg}} や {{ic|IgnoreGroup}} を使用する場合は気をつけて扱って下さい。{{ic|pacman -Sy}} は基本的に使ってはいけないコマンドで、代わりに {{ic|pacman -Syu}} を使って下さい。
 
 
一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。'''シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません'''。ライブラリは''後方互換性がない''ときには [[Wikipedia:soname|soname]] のバージョンアップに対応します。{{ic|pacman -Syu}} を実行しさえすれば、ミラーと同期して ''pacman'' が壊れていないかぎり問題が修正されます。
 
 
インストールされているパッケージのアップグレードを確認したいときは pacman パッケージに含まれている bash スクリプト '''checkupdates''' を使うことで、システムアップデートを行わずに安全に確認が行えます。
 
   
===パッケージ・データベースに問い合わせる===
+
=== パッケージ・データベースに問い合わせる ===
   
Pacman からローカルデータベースに問い合わせるときは {{ic|-Q}} フラグを、同期データベースに問い合わせるときは {{ic|-S}} フラグを、ファイルデータベースに問い合わせるときは {{ic|-F}} フラグを使います。それぞれのフラグのサブオプションについては {{ic|pacman -Q --help}}, {{ic|pacman -S --help}}, {{ic|pacman -F --help}} を見てください。
+
''Pacman'' からローカルデータベースに問い合わせるときは {{ic|-Q}} フラグを、同期データベースに問い合わせるときは {{ic|-S}} フラグを、ファイルデータベースに問い合わせるときは {{ic|-F}} フラグを使います。それぞれのフラグのサブオプションについては {{ic|pacman -Q --help}}{{ic|pacman -S --help}}{{ic|pacman -F --help}} を見てください。
   
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:
+
''Pacman'' はデータベースからパッケージ検索することができます。パッケージ名と説明の両方を検索るには:
   
 
$ pacman -Ss ''検索ワード1'' ''検索ワード2'' ...
 
$ pacman -Ss ''検索ワード1'' ''検索ワード2'' ...
   
場合によって {{Ic|-s}} の組み込みの ERE (拡張正規表現) が望ま結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください:
+
場合によっては、{{Ic|-s}} の組み込みの ERE (拡張正規表現) によって、余計検索結果が大量に出てきてしまうことがあるでしょう。そのようなときは検索対象をパッケージ名だけに絞ってみてください:
   
 
$ pacman -Ss '^vim-'
 
$ pacman -Ss '^vim-'
178行目: 178行目:
 
リモートパッケージからパッケージファイルの名前で検索するには:
 
リモートパッケージからパッケージファイルの名前で検索するには:
   
$ pacman -Fs ''検索ワード1'' ''検索ワード2'' ...
+
$ pacman -F ''検索ワード1'' ''検索ワード2'' ...
   
パッケージ名が分かっいれば、よりしい情報を得ることができます:
+
パッケージ名を指定して詳細な情報を得るには:
   
 
$ pacman -Si ''パッケージ名''
 
$ pacman -Si ''パッケージ名''
   
にインストールしたパッケージの情報を得るには:
+
ローカルにインストールされているパッケージの詳細な情報を得るには:
   
 
$ pacman -Qi ''パッケージ名''
 
$ pacman -Qi ''パッケージ名''
   
{{ic|-i}} フラグをふたつ付けることでバックアップファイルの一覧と状態表示できます:
+
{{ic|-i}} フラグを2つ付けることで、バックファイルのリストとバックアップファイルの変更状態も同時に表示できます:
   
 
$ pacman -Qii ''パッケージ名''
 
$ pacman -Qii ''パッケージ名''
200行目: 200行目:
 
$ pacman -Fl ''パッケージ名''
 
$ pacman -Fl ''パッケージ名''
   
あるファイルがどのパッケージによってインストールされたかを調べるには:
+
あるパッケージによってインストールされたファイルが存在している確認するには:
  +
  +
$ pacman -Qk ''パッケージ名''
  +
  +
{{ic|k}} フラグを2つ付けると、より徹底したチェックが行われます。
  +
  +
データベースを検索して、あるファイルがどのパッケージに属しているかを調べるには:
   
 
$ pacman -Qo ''/パス/ファイル名''
 
$ pacman -Qo ''/パス/ファイル名''
206行目: 212行目:
 
あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:
 
あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:
   
$ pacman -Fo ''/パス/ファイル名''
+
$ pacman -F ''/パス/ファイル名''
   
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
+
他のパッケージに必要とされていないパッケージ (孤児) の一覧を得るには:
   
 
$ pacman -Qdt
 
$ pacman -Qdt
   
  +
明示的にインストールしたパッケージで、依存関係として必要とされていないパッケージを全て表示するには:
{{Tip|上記のコマンドを pacman の post-transaction [[#フック|フック]]に追加することで、トランザクションによってパッケージが孤立したときに通知することができます。(明示的にインストールしたのでない限り) リポジトリから消されたパッケージはローカルでは孤児になるため、パッケージがリポジトリから消されたときに知ることができます。孤児が見つからなかったときに "failed to execute command" エラーを表示しないようにするため、フックの {{ic|Exec}} では次のコマンドを使用してください: {{ic|<nowiki>/usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'"</nowiki>}}。}}
 
 
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
 
   
 
$ pacman -Qet
 
$ pacman -Qet
   
[[pacman ヒント]]には他の例も載っています
+
その他の例については [[pacman/ヒントとテクニック]] を参照しください。
   
====Pactree====
+
==== Pactree ====
   
  +
{{Note|{{man|8|pactree}} は {{Pkg|pacman}} パッケージの一部ではなくなりました。代わりに、{{Pkg|pacman-contrib}} でインストールできます。}}
パッケージの依存のツリーを見るには:
 
  +
  +
あるパッケージの依存関係ツリー (dependency tree、つまり、そのパッケージ'''が'''必要としているパッケージの木) を表示するには:
   
 
$ pactree ''パッケージ名''
 
$ pactree ''パッケージ名''
   
あるパッケージを必要としている全てのパッケージをるには [[pkgtools]] の {{ic|whoneeds}} を使ます:
+
あるパッケージの被依存ツリー (dependant tree、つまり、そのパッケージ''''''必要としているパッケージの木) 表示するには、逆フラグ {{ic|-r}} を ''pactree'' に渡てくださ
   
  +
==== データベースの構造 ====
$ whoneeds ''パッケージ名''
 
   
  +
''pacman'' データベースは通常、{{ic|/var/lib/pacman/sync}} にあります。{{ic|/etc/pacman.conf}} で指定された各リポジトリに対して、対応するデータベースファイルがこのディレクトリ内に存在します。データベースファイルは、パッケージごとに 1 つのディレクトリを含む gzip 圧縮された tar アーカイブです。たとえば、{{Pkg|which}} パッケージの場合は次のようになります:
もしくは ''pactree'' のリバースフラグを使って:
 
   
  +
{{hc|$ tree which-2.21-5|
$ pactree -r ''package_name''
 
  +
which-2.21-5
  +
{{!}}-- desc
  +
}}
   
  +
{{ic|desc}} ファイルには、パッケージの説明、依存関係、ファイルサイズ、MD5 ハッシュなどのメタデータが含まれています。
====データベースの構造====
 
   
  +
=== パッケージキャッシュの削除 ===
通常 pacman のデータベースは {{ic|/var/lib/pacman/sync}} に配置され、{{ic|/etc/pacman.conf}} で指定したリポジトリのデータベースファイルがそこに作成されます。データベースファイルは gzip で圧縮された tar アーカイブになっており、パッケージごとにディレクトリが含まれています。例えば {{Pkg|which}} パッケージの場合:
 
   
  +
''Pacman'' は、ダウンロードしたファイルを {{ic|/var/cache/pacman/pkg/}} に保存しますが、これらは古くなってもアンインストールされても自動的に削除されません。これにはいくつかの利点があります:
{{bc|
 
% tree which-2.20-6
 
which-2.20-6<nowiki>
 
|-- depends
 
`-- desc</nowiki>
 
}}
 
   
  +
# パッケージを[[ダウングレード]]する際に、他の方法 ([[Arch Linux Archive]] など) によって以前のバージョンを入手する必要がない。
{{ic|depends}} ファイルにはパッケージが依存するパッケージのリストが記載されており、{{ic|desc}} にはファイルサイズや MD5 ハッシュなどのパッケージの情報が入っています。
 
  +
# アンインストールされたパッケージをキャッシュディレクトリから簡単に直接再インストールでき、リポジトリから新しくダウンロードする必要がない。
   
  +
しかし、ディレクトリのサイズが大きくなりすぎないようにするために、定期的にキャッシュを手動でクリーンアップする必要があります。
===パッケージキャッシュの削除===
 
   
pacman はダウンロードしたパッケージ {{ic|/var/cache/pacman/pkg/}} に保存し古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズあまりに大きくすぎめに定期的・計画的にこのフォルダを掃除する必要があります。
+
{{Pkg|pacman-contrib}} パッケージで提供されている {{man|8|paccache}} スクリプトはインストール済みパッケージアンインストール済みパッケージのキャッシュ済みバージョン、最も新しい3つを残して全て削除します (オプション指定しなかっ場合):
   
  +
# paccache -r
現在インストールされていないパッケージキャッシュを全て削除するオプションは:
 
   
  +
{{ic|paccache.timer}} を[[有効化]]し[[起動]]すれば、週に1度、未使用のパッケージキャッシュを削除してくれます。
# pacman -Sc
 
   
  +
{{Tip|1=''pacman'' のトランザクションの度にこの操作を自動で実行する[[#フック|フック]]を作成することもできます。フックを導入する {{AUR|paccache-hook}} を[[インストール]]することもできます。[https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 フックの例]もあります。}}
{{Warning|
 
* インストールしたパッケージが安定していて、[[パッケージのダウングレード|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[Arch Linux Archive]] などから古いパッケージを取得するしか方法がなくなってしまいます。
 
* {{ic|pacman -Scc}} でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。
 
}}
 
   
  +
何個の新しいバージョンのキャッシュを保持するかを指定することも可能です。最も新しいバージョン1つだけを保持するには:
上記の欠点のため、{{ic|-Sc}} や {{ic|-Scc}} スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:
 
   
  +
# paccache -rk1
*{{Pkg|pacman-contrib}} パッケージに入っている ''paccache'' コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します: {{bc|$ paccache -r}} ただし、この方法では ''paccache'' はパッケージがインストールされているかどうかを確認''しない''ため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります: {{bc|$ paccache -ruk0}} 他のオプションは {{ic|paccache -h}} を見て下さい。
 
   
  +
{{ic|-u}}/{{ic|--uninstalled}} スイッチを加えれば、アンインストールされたパッケージに対象を絞ることもできます。例えば、アンインストールされたパッケージのキャッシュを全て削除するには:
*もしくは、{{AUR|pkgcacheclean}} をインストールして使うこともできます: {{bc|# pkgcacheclean}}
 
   
  +
# paccache -ruk0
{{Tip|1=[[#フック]]を作成して pacman の操作後に上記のコマンドを自動的に実行することができます。サンプルが [https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 こちらのスレッド] に載っています。}}
 
   
  +
その他のオプションは {{ic|paccache -h}} を見てください。
===追加コマンド===
 
   
  +
また、''Pacman'' にも、パッケージキャッシュと、{{ic|/etc/pacman.conf}} 設定ファイルにもはや存在しないリポジトリの残留データベースファイルをクリーンアップする組み込みコマンドが存在します。しかし、''pacman'' では、パッケージキャッシュのバージョンをいくつ残すか指定することができないため、''paccache'' のデフォルトオプションよりも強引です。
システムのアップグレードとパッケージのインストール (ワンライナー):
 
   
  +
現在インストールされていないパッケージのキャッシュと、未使用の同期データベースをを全て削除するには:
# pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ...
 
   
  +
# pacman -Sc
インストールをしないで、パッケージをダウンロードする:
 
  +
  +
全てのキャッシュファイルを削除するには、{{ic|c}} スイッチを2度使用してください。これは最も強引なアプローチであり、キャッシュディレクトリには何も残りません:
  +
  +
# pacman -Scc
  +
  +
{{Warning|ディスクの空き容量がどうしても必要でない限り、インストール済みパッケージとアンインストール済みパッケージのキャッシュを全て削除することは避けるべきです。さもないと、パッケージをダウングレードしたり再インストールしたりするためにファイルを再ダウンロードしなければならなくなってしまいます。}}
  +
  +
さらに、キャッシュをクリーンアップするツールとして {{AUR|pkgcacheclean}} と {{AUR|pacleaner}} もあります。
  +
  +
=== その他のコマンド ===
  +
  +
パッケージをダウンロードするが、インストールはしない:
   
 
# pacman -Sw ''パッケージ名''
 
# pacman -Sw ''パッケージ名''
   
リポジトリに存在しない'ローカル'のパッケージ (例: [[Arch User Repository|AUR]] のパッケージ) をインストール:
+
リモートリポジトリ以外の'ローカル'のパッケージをインストールする (例えば、[[AUR]] のパッケージ):
   
# pacman -U /パス/パッケージ名-version.pkg.tar.xz
+
# pacman -U ''/path/to/package/package_name-version.pkg.tar.zst''
   
  +
ローカルパッケージのコピーを ''pacman'' のキャッシュに保持するには:
リポジトリにない、リモートのパッケージを URI を入力してインストール:
 
   
# pacman -U <nowiki>http://www.example.com/repo/example.pkg.tar.xz</nowiki>
+
# pacman -U file:///''path/to/package/package_name-version.pkg.tar.zst''
   
  +
(''pacman'' の設定ファイルに記述されているリポジトリ以外の) 'リモート'パッケージをインストールする:
{{Tip|pacman のキャッシュにローカルパッケージのコピーを残したいときは、次を使って下さい:
 
{{bc|<nowiki>
 
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz
 
</nowiki>}}
 
}}
 
   
  +
# pacman -U ''<nowiki>http://www.example.com/repo/example.pkg.tar.zst</nowiki>''
{{Warning|{{ic|--force}} スイッチを使う時は細心の注意を払って下さい、誤って使用すると大きな問題が起こる場合があります。Arch ニュースでこのスイッチを使うように指示があってとき''だけ''使用することを強く推奨します。}}
 
   
  +
==== ドライラン ====
''pacman'' で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。{{ic|-p}} を使うことで {{ic|-S}}, {{ic|-U}}, {{ic|-R}} などの操作を阻止することができます。
 
   
  +
''Pacman'' は'''常に'''、インストールされるパッケージと削除されるパッケージを一覧表示して、操作を行う前にユーザに許可を求めます。
''pacman'' にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは {{ic|--help}} スイッチを付けて呼び出すことでコマンドオプションを表示できます。
 
   
  +
{{ic|--print}} (短いバージョンは {{ic|-p}}) を使用することで、{{ic|-S}}、{{ic|-U}}、{{ic|-R}} のアクションを行わずに、パッケージの一覧を処理可能な形式で表示できます。
===インストール理由===
 
   
  +
{{ic|--print-format}} を追加すれば、このリストを様々な形にフォーマットできます。例えば、{{ic|--print-format %n}} は、パッケージのバージョン無しでパッケージの一覧を表示します。
''pacman'' データベースではインストールしたパッケージはインストールしたときの理由によって2つのグループに分別されます:
 
  +
  +
=== インストール理由 ===
  +
  +
''pacman'' データベースでは、インストールしたパッケージはインストール理由によって2つのグループに分別されます:
   
 
*'''明示的にインストール''': ''pacman'' の {{ic|-S}} や {{ic|-U}} コマンドによって文字通り指定されたパッケージ。
 
*'''明示的にインストール''': ''pacman'' の {{ic|-S}} や {{ic|-U}} コマンドによって文字通り指定されたパッケージ。
307行目: 321行目:
 
パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます:
 
パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます:
   
# pacman -S --asdeps ''package_name''
+
# pacman -S --asdeps ''パッケージ名''
   
{{Tip|任意の依存パッケージを {{ic|--asdeps}} でインストールすると、[[Pacman ヒント#使用ていないパッケージの削除 (孤立したパッケージ)|孤立パッケージを削除]]するとき ''pacman'' によって任意の依存パッケージも削除されるようになります。}}
+
明示的にインストールしパッケージが、必須でない機能のための[[optdepends|任意の依存パッケージ]]を提供ている場合があります。大抵、このコマンドはそのようなパッケージをインストールするため使用されます。
   
  +
{{Tip|任意の依存パッケージを {{ic|--asdeps}} でインストールすると、[[pacman/ヒントとテクニック#使用していないパッケージ (孤立したパッケージ) の削除|孤立したパッケージを削除]]するときに ''pacman'' によって任意の依存パッケージも削除されるようになります。}}
パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。
 
  +
  +
パッケージの'''再'''インストールを行っても、デフォルトではインストール理由は変更されません。
   
 
明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。
 
明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。
   
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行:
+
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行してください:
   
# pacman -D --asdeps ''package_name''
+
# pacman -D --asdeps ''パッケージ名''
   
  +
Use {{ic|--asexplicit}} to do the opposite operation.
インストール理由を「明示的にインストール」に変えたいときは {{ic|--asexplicit}} を使ってください。
 
   
{{Note|{{ic|pacman -Syu ''package_name'' --asdeps}} のように、アップグレードをするときに {{ic|--asdeps}} や {{ic|--asexplicit}} オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。}}
+
{{Note|{{ic|pacman -Syu ''パッケージ名'' --asdeps}} のように、アップグレードをするときに {{ic|--asdeps}} や {{ic|--asexplicit}} オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。}}
   
===特定のファイルが含まれているパッケージを検索===
+
=== 特定のファイルが含まれているパッケージを検索 ===
   
 
ファイルデータベースを同期してください:
 
ファイルデータベースを同期してください:
331行目: 347行目:
 
ファイルが含まれているパッケージを検索するには:
 
ファイルが含まれているパッケージを検索するには:
   
$ pacman -Fs pacman
+
{{hc|$ pacman -F pacman|
core/pacman 5.0.1-4
+
core/pacman 5.2.1-1 (base base-devel) [installed]
usr/bin/pacman
+
usr/bin/pacman
usr/share/bash-completion/completions/pacman
+
usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.36-1
+
extra/xscreensaver 5.43-1
usr/lib/xscreensaver/pacman
+
usr/lib/xscreensaver/pacman
  +
}}
   
{{Tip|[[cron]]ョブや [[systemd/タイマー|systemd タイマー]]を設定してファイルデータベースを定期的同期させることができます。}}
+
{{Tip|{{ic|pacman-filesdb-refresh.timer}} ({{Pkg|pacman-contrib}} パッケーに同梱されています) [[起動/有効化]]すれば、''pacman'' ファイルデータベースを週ごとリフレッシュできます。}}
   
 
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する [[pkgfile]] をインストールしてください。
 
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する [[pkgfile]] をインストールしてください。
   
  +
=== パッケージのインストール/アップグレード/アンインストール時に起こること ===
==設定==
 
   
  +
成功時のトランザクションは、5つのステップと、トランザクション前と後のフックで構成されます:
pacman の設定は {{ic|/etc/pacman.conf}} に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は {{man|5|pacman.conf}} にあります。
 
   
  +
# データベースがロックされていない場合、トランザクションを初期化する。
===全般設定===
 
  +
# トランザクション中に追加/削除すべきパッケージを選択する。
  +
# 同期データベース、パッケージ、及びパッケージ間の依存関係のサニティチェックを行い、コマンドラインフラグに基づいてトランザクションの準備をする。
  +
# トランザクションを実行する:
  +
## 必要に応じてパッケージをダウンロードする ({{ic|_alpm_sync_load}})。
  +
## ''pacman'' の既存の {{ic|PreTransaction}} フックが適用される場合、それらのフックを実行する。
  +
## 最終的に置き換えられるパッケージ、衝突するパッケージ、明示的に削除するように指定されたパッケージを削除する。
  +
## 追加するべきパッケージが存在する場合、各パッケージに対して以下を実行する:
  +
### パッケージにインストールスクリプトが存在する場合、そのスクリプトの {{ic|pre_install}} 関数を実行する (アップグレードする場合は {{ic|pre_upgrade}} が、削除される場合は {{ic|pre_remove}} が代わりに実行されます)。
  +
### 以前のバージョンのパッケージのファイルを全て削除する (パッケージをアップグレードまたは削除する場合)。ただし、パッケージによって設定ファイルであると指定されたファイルに関しては、削除しない ([[pacman/Pacnew と Pacsave]] を参照)。
  +
### パッケージを解凍し、含まれているファイルをファイルシステムに保存する (パッケージをインストールまたはアップグレードする場合)。新しいパッケージのファイルが、ファイルシステム上の手動で変更された設定ファイル (前のステップを参照) を上書きしてしまう場合、パッケージ側のファイルに別の名前 (''.pacnew'') を付けて保存する。
  +
### パッケージにインストールスクリプトが存在する場合、{{ic|post_install}} 関数を実行する (アップグレードする場合は {{ic|post_upgrade}} が、削除される場合は {{ic|post_remove}} が代わりに実行されます)。
  +
## トランザクションの終わりの時点で存在している {{ic|PostTransaction}} フックが適用される場合、それらのフックを実行する。
  +
# トランザクション及びトランザクションリソース (つまり、データベースロック) を解放する。
   
  +
== 設定 ==
全般的な設定は {{ic|[options]}} セクションにあります。ここで設定されている項目については {{man|5|pacman.conf}} かデフォルトの {{ic|pacman.conf}} を参照してください。
 
   
  +
''Pacman'' の設定は {{ic|/etc/pacman.conf}} に記述します。ここで、pacman がどのように動作するかを設定することができます。この設定ファイルに関するより詳しい情報は {{man|5|pacman.conf}} にあります。
====カラー出力====
 
   
  +
=== 全般設定 ===
[[コンソールのカラー出力#pacman]] を見てください。
 
   
  +
全般的な設定は {{ic|[options]}} セクションにあります。ここで設定できる項目については {{man|5|pacman.conf}} を読むか、デフォルトの {{ic|pacman.conf}} ファイルを見てください。
====アップデートする前にバージョンを比較====
 
   
  +
==== アップデートする前にバージョンを比較 ====
利用可能なパッケージの新旧バージョンを確認したい場合、{{ic|/etc/pacman.conf}} の "VerbosePkgLists" 行をアンコメントしてください。{{ic|pacman -Syu}} の出力が以下のようになります:
 
   
  +
利用可能なパッケージの新旧のバージョンを確認したい場合、{{ic|/etc/pacman.conf}} の "VerbosePkgLists" という行をアンコメントしてください。{{ic|pacman -Syu}} の出力が以下のようになります:
Package (6) Old Version New Version Net Change Download Size
 
  +
  +
パッケージ (6) 古いバージョン 新しいバージョン 最終的な変化 ダウンロード容量
 
 
extra/libmariadbclient 10.1.9-4 10.1.10-1 0.03 MiB 4.35 MiB
+
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/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
+
extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB
   
====アップグレードさせないパッケージ設定====
+
==== 並列ダウンロードを有効にする ====
   
  +
並列にダウンロードするパッケージの数は、{{ic|/etc/pacman.conf}} の {{ic|[options]}} セクション内の {{ic|ParallelDownloads}} オプションで設定できます。このオプションが設定されていない場合、パッケージは1つずつダウンロードされます。
ある特定のパッケージをアップデートさせないようにするには:
 
  +
  +
==== アップグレードさせないパッケージを設定 ====
  +
  +
{{Warning|[[部分的なアップグレード]]はサポートされていないので、パッケージのアップグレードをスキップする際は気をつけてください。。}}
  +
  +
システムを[[#パッケージのアップグレード|アップグレード]]する際に特定のパッケージをアップグレードシないようにするには、{{ic|[options]}} セクションに以下の行を追加してください:
   
 
IgnorePkg=linux
 
IgnorePkg=linux
   
複数のパッケージを記述するときはスペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。
+
複数のパッケージを指定する場合スペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。また、[[Wikipedia:ja:グロブ|グロブ]]パターンも使用できます。一度に限ってパッケージをアップグレードしないようにするには、コマンドラインで {{ic|--ignore}} オプションを使用してください (複数のパッケージを指定する場合は、コンマで区切ってください)
   
  +
{{ic|pacman -S}} を使えば、依然として対象のパッケージをアップグレードすることが可能です。この場合、''pacman'' はパッケージが {{ic|IgnorePkg}} 文に含まれていることを知らせてくれます。
====アップグレードさせないグループを設定====
 
   
パッケージの場合と同様に、アップグレードさせないグループをすることができます:
+
==== アップグレードさせないパッケージグループを ====
  +
  +
{{Warning|[[部分的なアップグレード]]はサポートされていないので、パッケージグループのアップグレードをスキップする際は気をつけてください。。}}
  +
  +
パッケージの場合と同様に、アップグレードさせないパッケージグループを指定することもできます:
   
 
IgnoreGroup=gnome
 
IgnoreGroup=gnome
   
====アップグレードさせないファイルを設定====
+
==== アップグレードさせないファイルを設定 ====
   
{{Ic|NoUpgrade}} ディレクティブで指定されたファイルはパッケージのインストールアップグレード変更を加えられることがなくなり、''.pacnew'' 拡張子が付いたファイルが新しくインストールされます:
+
{{Ic|NoUpgrade}} ディレクティブで指定されたファイルはパッケージのインストール/アップグレードの際に変更を加えられなくなり、代わりに新しいファイルは ''.pacnew'' 拡張子が付けられてインストールされます
   
 
NoUpgrade=''path/to/file''
 
NoUpgrade=''path/to/file''
   
  +
以下のようにして複数のファイルを指定することができます:
{{Note|パスはパッケージ内のファイルを参照します。したがって、一番最初のスラッシュは必要ありません。}}
 
  +
  +
NoUpgrade=''path/to/file1 path/to/file2''
  +
  +
{{Note|パスはパッケージアーカイブ内のファイルを示します。なので、一番最初にスラッシュを置かないでください。}}
   
====インストールさせないファイルを設定====
+
==== インストールさせないファイルを設定 ====
   
特定のディレクトリインストールさせないようにするには {{Ic|NoExtract}} リストにディレクトリを加えます。例えば、[[systemd]] ユニットインストールを避けるには:
+
特定のディレクトリまたはファイルをインストールさせないようにするには{{Ic|NoExtract}} リストにそのディレクトリを加えてください。例えば、[[systemd]] ユニットインストールさせないようにするには:
   
 
NoExtract=usr/lib/systemd/system/*
 
NoExtract=usr/lib/systemd/system/*
   
  +
後ろのルールは前のルールを上書きします。また、{{ic|!}} を前に付けることでルールを無効化できます。
もしくは {{AUR|localepurge}} と同じように、英語以外のローカライゼーションのインストールを止めるには:
 
   
  +
{{Tip|Pacman は、''localepurge'' や ''bleachbit'' によってロケールが削除されたパッケージをアップデートする際に、ロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには、{{ic|pacman.conf}} の {{ic|CheckSpace}} オプションをコメントアウトしてください。ただし、容量チェックの機能が全てのパッケージで無効化されることに注意してください。}}
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/*
 
   
  +
==== 複数の設定ファイルを使用 ====
後ろのルールは前のルールを上書きします。また、{{ic|!}} でルールを打ち消すことで、必要なロケールだけを維持できます。
 
   
  +
設定ファイルが複数あって (メインの設定と [[testing]] リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで {{ic|Include}} オプションを宣言することができます。例:
{{Tip|pacman 5 から、''localepurge'' や ''bleachbit'' で消去したロケールがあるパッケージをアップデートする際に、''pacman'' はロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには {{ic|pacman.conf}} の {{ic|CheckSpace}} オプションをコメントアウトしてください。ただし容量チェック機能は全てのパッケージで無効になります。}}
 
   
  +
Include = ''/path/to/common/settings''
====複数の設定ファイルを使用====
 
   
  +
{{ic|''/path/to/common/settings''}} は共有したいオプションが存在するファイルに置き換えてください。
設定ファイルが複数あって (メインの設定と [[公式リポジトリ|testing]] リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで {{ic|Include}} オプションを宣言することができます。例:
 
   
  +
==== フック ====
Include = /path/to/common/settings
 
   
  +
Pacman は {{ic|/usr/share/libalpm/hooks/}} ディレクトリ内に存在するフックをトランザクションの前後に実行することができます。その他のフックディレクトリを指定したい場合は、{{ic|pacman.conf}} 内で {{ic|HookDir}} オプションを使ってください (デフォルトは {{ic|/etc/pacman.d/hooks}} です)。フックファイルの名前には必ず ''.hook'' を後ろに付ける必要があります。Pacman フックはインタラクティブではありません。
{{ic|/path/to/common/settings}} は共有したいオプションが存在するファイルに置き換えてください。
 
   
  +
Pacman フックは様々なことに使われています。例えば、{{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として {{pkg|tomcat8}} パッケージでは {{ic|tomcat8}} という名前のシステムユーザーが必要だと指定されており、特定のディレクトリの所有者がこのユーザーになるように設定されています。''pacman'' フックの {{ic|systemd-sysusers.hook}} と {{ic|systemd-tmpfiles.hook}} は、{{ic|tomcat8}} にユーザが指定されているファイルと一時ファイルが存在していることを認識し、{{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を実行します。
===フック===
 
   
  +
alpm のフックに関する詳細は {{man|5|alpm-hooks}} を参照してください。
''pacman'' は {{ic|/usr/share/libalpm/hooks/}} ディレクトリのフックを処理の前後に実行することができます。さらに {{ic|pacman.conf}} の {{ic|HookDir}} オプションでフックディレクトリを指定できます (デフォルトは {{ic|/etc/pacman.d/hooks}} です)。フックファイルの名前には必ず ''.hook'' を後ろに付ける必要があります。
 
   
  +
=== リポジトリとミラー ===
Pacman フックは様々なことに使われています。例えば、{{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として {{pkg|tomcat8}} パッケージでは {{ic|tomcat8}} という名前のシステムユーザーが必要だと指定されており特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの {{ic|systemd-sysusers.hook}} と {{ic|systemd-tmpfiles.hook}} は {{ic|tomcat8}} パッケージにシステムユーザーと一時ファイルが含まれていることを認識して {{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を実行します。
 
   
  +
特殊な [[#全般設定|[options]]] セクションを除いて、{{ic|pacman.conf}} 内の他の {{ic|[セクション]}} には、使用するパッケージリポジトリを定義します。''リポジトリ''とはパッケージの''論理的な''集合であり、それらのパッケージは1つ以上のサーバに''物理的に''保存されています。このような理由から、各サーバはリポジトリの''ミラー''と呼ばれます。
alpm のフックに関する詳細は {{man|5|alpm-hooks}} の man ページを参照。
 
   
  +
リポジトリは[[公式リポジトリ|公式]]と[[非公式ユーザーリポジトリ|非公式]]に分けられています。設定ファイル内でのリポジトリの順番は重要です。2つのリポジトリに同じ名前のパッケージが存在する場合、それらのバージョン番号に関わらず、設定ファイル内で最初に来るリポジトリが、その後に来るリポジトリよりも優先されます。リポジトリを使用するには、そのリポジトリを追加した後に、まずシステム全体を[[#パッケージのアップグレード|アップグレード]]する必要があります。
===リポジトリ===
 
   
{{ic|/etc/pacman.conf}} に書かれているように、Repositories セクションでは[[公式ポジリ|リポジトリ]]使うか定義しますポジリはここで直接設定することもできますし、のファイル ({{ic|/etc/pacman.d/mirrorlist}}) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてくだ。ミラーの設定は[[ミラー|ここ]]をさい。
+
各リポジトリセクションではミラーのリトを定義します: ミラーの直接記述することもできますし、{{ic|Include}} ディレクティブを使って外部の専用のファイルを使うこともできます。例えば、公式リポジトリのミラーは {{ic|/etc/pacman.d/mirrorlist}} からインクードれます。ミラーの設定について記事 [[ミラー]] 参照しください。
   
  +
==== パッケージのキャッシュディレクトリ ====
{{Warning|[testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている [https://lists.archlinux.org/listinfo/arch-dev-public arch-dev-public メーリングリスト] を購読するのをお薦めします。}}
 
   
  +
Pacman は、ダウンロードしたパッケージファイルをキャッシュに保存します。キャッシュは、{{ic|pacman.conf}} の [[#全般設定|[options]]] セクション内の {{ic|CacheDir}} で示されるディレクトリ内です (設定されていない場合、{{ic|/var/cache/pacman/pkg/}} がデフォルトで使用されます)。
===パッケージのセキュリティ===
 
   
  +
キャッシュディレクトリは、(たとえ、インストールされているパッケージの最新のバージョンのみを保持しているとしても) 時間とともに肥大化する場合があります。
Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。{{ic|SigLevel}} を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では {{ic|SigLevel <nowiki>=</nowiki> Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key]] を見てください。
 
  +
  +
キャッシュディレクトリを他のより好都合な場所に移動したい場合は、以下のどれかを行ってください:
  +
  +
* {{ic|pacman.conf}} 内の {{ic|CacheDir}} オプションで新しいディレクトリを設定する。末尾のスラッシュを残しておくことを忘れないでください。'''これが推奨される方法です'''。
  +
* {{ic|/var/cache/pacman/pkg/}} に専用のパーティションや [[Btrfs#サブボリューム|Btrfs サブボリューム]]をマウントする。
  +
* 選択したディレクトリを {{ic|/var/cache/pacman/pkg/}} でバインドマウントする。
  +
  +
{{Warning|{{ic|/var/cache/pacman/pkg/}} ディレクトリを他の場所への'''シンボリックリンクにしないでください'''。Pacman の誤動作の'''原因になります'''。特に、pacman が自分自身をアップデートしようとしている場合です。}}
  +
  +
==== パッケージのセキュリティ ====
  +
  +
Pacman はパッケージの署名をサポートしていて、パッケージにセキュリティレイヤーを加えています。デフォルトの設定では {{ic|1=SigLevel = Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。リポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key]] を見てください。
   
 
==トラブルシューティング==
 
==トラブルシューティング==
   
  +
=== "Failed to commit transaction (conflicting files)" エラー ===
===パッケージ XYZ にアップデートしたらシステムが壊れました===
 
   
  +
次のエラーが表示される場合: [https://bbs.archlinux.org/viewtopic.php?id=56373]
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
 
   
  +
エラー: 処理を完了できませんでした (衝突しているファイル)
一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ ({{Pkg|linux}}, {{Pkg|xorg-server}} など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.jp/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。
 
  +
''package'': ''/path/to/file'' がファイルシステムに存在しています
  +
エラーが発生したため、パッケージは更新されませんでした。
   
  +
これは、''pacman'' がファイルの衝突を検出し、仕様によりファイルを上書きしないために発生します。これは仕様によるものであり、欠陥ではありません。
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ ({{ic|/var/log/pacman.log}}) を見て再チェックしてください。
 
   
  +
通常、この問題の解決法は自明です (とはいえ、なぜこれらのファイルがそこに存在しているのかを念の為に調べてみるべきでしょう)。まず、他のパッケージがそのファイルを所有していないか調べるのが安全です ({{ic|pacman -Qo ''/path/to/file''}})。そのファイルが他のパッケージによって所有されている場合、[[バグ報告ガイドライン|バグレポートを提出]]してください。そのファイルが他のパッケージのよって所有されていない場合、"ファイルシステムに存在している"方のファイルの名称を変更し、アップデートのコマンドを再度実行してください。問題がなければ、そのファイルは削除しても良いです。
この段階で '''pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は'''、助けを求めるのにフォーラムや [[IRC チャンネル|IRC]] を使ったり問題のあるパッケージを[[パッケージのダウングレード|ダウングレード]]してください。
 
   
  +
何らかのプログラムを ''pacman'' を使用せずに (例えば {{ic|make install}} などで) 手動でインストールしている場合、プログラム自体とそのプログラムに属するファイルを全て削除しなければなりません。[[pacman/ヒントとテクニック#どのパッケージにも所有されていないファイルを特定する]] も参照してください。
===パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています===
 
   
  +
インストールされたパッケージは、そのパッケージに関するメタデータを含む {{ic|/var/lib/pacman/local/''package-version''/files}} ファイルを提供します。このファイルが破損している、空である、または存在しない場合、パッケージの更新時に {{ic|file exists in filesystem}} エラーが発生します。そのようなエラーは通常、1つのパッケージだけが原因です。原因のパッケージに属するファイルの名前を変えて後で削除する代わりに、{{ic|pacman -S --overwrite ''glob'' ''package''}} を実行して {{ic|''glob''}} にマッチするファイルを上書きすることもできます。
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux.jp/mirrors/status/ MirrorStatus] にミラーの更新状況がのっています。
 
   
  +
{{Warning|通常、{{ic|--overwrite}} スイッチの使用は避けてください。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照してください。}}
===アップデートでこんなエラーが出ました: "file exists in filesystem"===
 
   
  +
=== "Failed to commit transaction (invalid or corrupted package)" エラー ===
関連: ''Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.''
 
   
  +
{{ic|/var/cache/pacman/pkg/}} から ''.part'' ファイル (部分的にダウンロードされたパッケージ) を探し、そのファイルを削除してください (これは、{{ic|pacman.conf}} でカスタムの {{ic|XferCommand}} を使用した場合に起こりやすいです):
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.
 
   
  +
# find /var/cache/pacman/pkg/ -iname "*.part" -delete
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。
 
   
  +
また、''archlinux-keyring'' が古く、''pacman'' が署名を検証できない場合にも、このエラーが発生することがあります。この問題を解決方法と防止方法は [[pacman/パッケージの署名#システムの定期的な更新]] を参照してください。
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo ''/path/to/file''}}) ことです。ファイルが他のパッケージによって使われている場合、[[バグ報告ガイドライン|バグレポートをしてください]]。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。
 
   
  +
=== "Failed to init transaction (unable to lock database)" エラー ===
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。
 
   
  +
''pacman'' がパッケージデータベースを変更する際に (パッケージのインストール時など)、''pacman'' はロックファイル {{ic|/var/lib/pacman/db.lck}} を作成します。これにより、複数の ''pacman'' インスタンスが同時にパッケージデータベースを変更してしまうことを防ぎます。
全てのパッケージはインストールされるとパッケージのメタデータを含んだ {{ic|/var/lib/pacman/local/$package-$version/files}} ファイルを作ります。このファイルが壊れている(または空だったり見つからない)と、パッケージをアップデートしようしたときに "file exists in filesystem" エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、{{ic|pacman -S --overwrite glob パッケージ名}} で pacman に glob に一致するファイルを上書きさせることができます。
 
   
  +
''pacman'' がデータベースの変更中に中断されてしまった場合、古いロックファイルが残ってしまう可能性があります。''pacman'' インスタンスが実行中でないことが確実である場合は、ロックファイルを削除してください:
{{Warning|一般的に --overwrite スイッチの使用は避けてください。}}
 
   
  +
# rm /var/lib/pacman/db.lck
===パッケージのインストール時にこんなエラーが出ました: "not found in sync db"===
 
   
  +
{{Tip|{{ic|fuser /var/lib/pacman/db.lck}} を root として実行すれば、ロックファイルを使用しているプロセスが存在するか調べることができます。}}
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} で全てのパッケージリストを更新してください。
 
   
===パッケージをインストールする時にエラが表示されます: "target not found"===
+
=== インストール時にパッケジを取得できない ===
   
  +
具体的には次のようなエラーです: {{ic|Not found in sync db}}、{{ic|対象が見つかりませんでした}}、{{ic|ファイルの取得に失敗しました}}。
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう。
 
   
、パッケージが含まれているリポトリがあなたのシテムで有効になっていないのかもしれません。例えば、パッケージは ''multilib'' リポジトリにあるが、''multilib'' が {{ic|pacman.conf}} で有効になっていないということが考えられます
+
、パッケージが実際に存在することを確認しくださ。パッケージが存在することが確実でらば、パッケージデータベーが古いのかもしれません。{{ic|pacman -Syu}} を実行して、パッケージデータベースを更新してシステムをアップグレードしてみてください。また、[[ミラー]]が最新であり、[[#リポジトリとミラー|リポジトリ]]が正しく設定されているこも確認してください。
   
  +
また、インストールしたいパッケージが含まれているリポジトリがシステムで有効化されていない可能性もあります。例えば、パッケージが [[multilib]] リポジトリにあるが、{{ic|pacman.conf}} で ''multilib'' が有効化されていない場合、このエラーが発生します。
=== pacman の手動再インストール ===
 
   
  +
[[FAQ#公式リポジトリにある共用ライブラリはそれぞれどうして一つのバージョンしか用意されてないんですか?]] も参照してください。
==== pacman-static を使用====
 
   
  +
=== アップグレードの中断によって起動できなくなったシステムを修復する ===
{{AUR|pacman-static}} は pacman を静的にコンパイルしたものなので、システム上のライブラリが動作していなくても実行できます。これは、 [https://wiki.archlinux.jp/index.php/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9#.E9.83.A8.E5.88.86.E7.9A.84.E3.81.AA.E3.82.A2.E3.83.83.E3.83.97.E3.82.B0.E3.83.AC.E3.83.BC.E3.83.89.E3.81.AF.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.A6.E3.81.84.E3.81.BE.E3.81.9B.E3.82.93 部分的なアップグレード] が実行され、 pacman が実行できなくなった場合にも便利です。
 
   
  +
{{Accuracy|これには複数の潜在的な問題があります。[[:en:Talk:pacman#More details in pacman crashes during an update]] を参照。}}
固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法を提供し、 pacman を再インストールしたり、部分的なアップグレードの場合にシステム全体をアップグレードしたりするために使用できます。
 
   
  +
電源断やカーネルパニック、ハードウェア障害によって、アップデートが中断されてしまうことがあります。ほとんどの場合、システムが大きなダメージを負うことはありませんが、起動できなくなってしまうことはあります。
==== 外部の pacman を使用する ====
 
   
  +
# [[USB インストールメディア]] を用意して、それを起動してください。
{{ic|pacman-static}} でさえ動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の1つは、 [[archiso]] を使用し、 {{ic|--sysroot}}} または {{ic|--root}} を使用してマウントポイントを指定する方法です。 {{ic|--sysroot}} に必要なファイルシステムをマウントする方法については、 [[Chroot#chrootの使用]] を参照してください。
 
  +
# ルートファイルシステムを[[マウント]]してください。
  +
# マウントしたルートファイルシステムに {{ic|arch-chroot}} してください。
  +
# 次に、アップデートを完全にやり直します。{{ic|/var/log/pacman.log}} を確認し、中断されたトランザクション中にアップグレードされていたパッケージ''全ての''リストを {{ic|pacman -S}} に渡して、再インストールを許可してください。例:
   
  +
# pacman -S linux linux-headers systemd systemd-libs systemd-sysvcompat firefox texlive-basic texlive-fontsextra texlive-latex texlive-latexextra texlive-latexrecommended texlive-pictures
==== 手動で抽出する ====
 
   
  +
アップグレードを''完全に''やり直すのは、適切なスクリプトレットとフックが実行されるようにするために必要だからです。
{{Warning|以下の方法でシステムをさらに再起不能にまで壊してしまう可能性があります。[[#アップグレード中に Pacman がクラッシュしました]]に書かれている方法で直らない場合の最後の手段として使ってください。}}
 
   
  +
=== アップグレード中に pacman がクラッシュしてしまった ===
''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
 
   
  +
''pacman'' が "database write" (データベース書き込み) エラーが発生してクラッシュし、その後、パッケージのアンインストール/再インストール/アップグレードができなくなってしまった場合、以下を行ってください:
#インストールするパッケージを確認
 
#適当なミラーからパッケージをそれぞれダウンロード
 
#パッケージをルートディレクトリに展開
 
#{{ic|pacman -S --force}} でパッケージを再インストールしてパッケージデータベースを更新
 
#フルシステムアップグレードを実行
 
   
  +
# Arch Linux の [[USB インストールメディア]]を起動してください。システム上の ''pacman'' と同じバージョンかより新しいものを使うために、最近のメディアを使うことが望ましいです。
問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます:
 
  +
# システムのルートファイルシステムをマウントしてください (例えば、{{ic|mount /dev/sdaX /mnt}} を root として実行してください)。そして、{{ic|df -h}} を実行してファイルシステムに十分な空き領域が存在することを確認してください。
  +
# ファイルシステム proc、sys、dev もマウントしてください: {{ic|mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev}}
  +
# システムにおいてデータベースの場所とディレクトリの場所がデフォルトである場合、{{ic|1=pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syu}} を root として実行すればシステムの ''pacman'' データベースを更新してシステムをアップグレードすることができます。
  +
#* アップデート/アップグレードができない場合、[[pacman/ヒントとテクニック#全てのパッケージの再インストール]] を参照してください。
  +
# アップグレードしたら、アップグレードされていない壊れているパッケージがないかチェックしてください: {{ic|find /mnt/usr/lib -size 0}}
  +
# そのようなパッケージが依然として存在する場合は、そのパッケージを再インストールしてください: {{ic|1=pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S ''package''}}。
   
$ pacman -Q $(pactree -u pacman)
+
==== pacman: command not found ====
   
  +
{{ic|/var/cache/pacman/pkg}} がシンボリックリンクである場合、''pacman'' は自己アップデート時に同じディレクトリを作成しようとするため、このシンボリックリンクは削除されます。これにより、アップデートが失敗します。その結果、{{ic|/usr/bin/pacman}} と {{Pkg|pacman}} パッケージに含まれる他のコンテンツが消えてしまいます (訳注: [[#パッケージのインストール/アップグレード/アンインストール時に起こること]] の 4.2 を参照)。
問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します:
 
   
  +
{{ic|/var/cache/pacman/pkg}} は ''pacman'' によって管理されているため、シンボリックリンクにしないでください。代わりに {{ic|CacheDir}} オプションを使うか、このディレクトリをバインドマウントしてください ([[#パッケージのキャッシュディレクトリ]] を参照)。
# tar -xvpwf ''package.tar.xz'' -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
 
   
{{ic|w}} フラグを使ってインタラクティブモードにしている注意してくださ。インタラクィブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。[https://bbs.archlinux.org/viewtopic.php?id=95007 こちらのフォーラムの投稿] には ''pacman'' の一部の依存パケージけが壊れた時の解決方法の例が載ってます
+
の問題が既発生していて、シスムが壊れてしまっている場合''pacman'' パッケージに含まれる {{ic|/usr}} 内のコンテンツを手動で展開して ''pacman'' を復元し、その後、適切 ''pacman'' を再インストールしてください。詳細は {{Bug|73306}} や[https://bbs.archlinux.org/viewtopic.php?id=241213 関連するフォーラムのスレド]を参照してくい。
   
  +
=== Pacman の手動再インストール ===
===アップグレード中に Pacman がクラッシュしました===
 
   
  +
==== pacman-static を使う ====
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
 
   
  +
{{AUR|pacman-static}} は ''pacman'' を静的にコンパイルしたものなので、システム上のライブラリが機能していなくても実行できます。これは、[[部分的なアップグレード]]によって ''pacman'' が実行できなくなってしまった場合にも便利です。
#Arch インストールメディアを使って起動してください。
 
#root でルートファイルシステムをマウントします ({{ic|mount /dev/sdaX /mnt}})。{{ic|df -h}} で十分な空き容量があることを確認してください。
 
#proc, sys, dev ファイルシステムもマウントしてください: {{ic|mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev}}。
 
#システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で {{ic|1=pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu}} を実行することでシステムの "pacman" データベースを更新してアップグレードすることができます。
 
#アップグレード後、アップグレードがないことと壊れているパッケージを確認してください: {{ic|find /mnt/usr/lib -size 0}}。
 
#{{ic|1=pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S ''package''}} で壊れているパッケージを再インストールしてください。
 
   
  +
{{AUR|pacman-static}} パッケージのページにある固定コメントと PKGBUILD には、バイナリを直接ダウンロードする方法が記されています。''pacman'' を再インストールしたり、部分的なアップグレードが起こった際にシステム全体をアップグレードしたりする際にこの方法が使えます。
==="make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません===
 
   
  +
==== 外部の pacman を使う ====
"conflicting files" エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の''所有されていない''ファイルを検索するスクリプトについては [[Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。
 
{{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch ニュースで使うように指示が出ている時にだけ使うことを推奨します。}}
 
   
  +
{{ic|pacman-static}} でさえも動作しない場合は、外部の ''pacman'' を使用してリカバリできます。最も簡単な方法の一つは、[[archiso]] を使い、{{ic|--sysroot}} か {{ic|--root}} で、操作を行うシステム上のマウントポイントを指定することです。{{ic|--sysroot}} に必要なファイルシステムをマウントする方法については、[[Chroot#chroot を使う]] を参照してください。
===システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません===
 
   
  +
==== 手動で抽出する ====
おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。2つの解決方法があります:
 
   
  +
{{Warning|この方法では、一歩間違うとシステムの状態をさらに悪化させてしまいます。[[#アップグレード中に pacman がクラッシュしてしまった]] に書かれてある方法を使えない場合の最後の手段としてのみ、以下を行ってください。}}
'''1.''' ''Fallback'' エントリを試す:
 
   
  +
''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
{{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ([[Syslinux]] の場合) や {{ic|e}} ([[GRUB]] や [[systemd-boot]] の場合) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して(ブートローダによる)新しいパラメータを使って起動できます。}}
 
   
  +
# インストールすべき {{Pkg|pacman}} の依存関係を調べる。
システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します:
 
  +
# それぞれの依存パッケージを[[ミラー]]からダウンロードする。
  +
# 各パッケージをルートディレクトリに展開する。
  +
# {{ic|pacman -S --overwrite}} を実行してパッケージデータベースを更新することで、パッケージを再インストールする。
  +
# システムの完全なアップグレードを行う。
   
  +
正常に動作している Arch システムがあれば、以下のコマンドで ''pacman'' の依存関係リストを見ることができます:
{{bc|# mkinitcpio -p linux}}
 
   
  +
$ pacman -Q $(pactree -u pacman)
'''2.''' それが機能しない場合は、現在の Arch リリース (CD/DVDまたはUSBスティック) から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。
 
  +
  +
しかし、発生している問題によっては、それらの依存パッケージのうち数個だけをアップデートすれば良い場合もあります。パッケージは以下のようにして展開します:
  +
  +
# tar -xvpwf ''package.tar.zst'' -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
  +
  +
注意点として、{{ic|w}} フラグを使用してインタラクティブモードにしてください。非インタラクティブモードでは、重要なファイルが問答無用で上書きされてしまうかもしれないので、非常に危険です。また、パッケージを展開する順番には注意を払ってください (つまり、依存パッケージを先に展開してください)。[https://bbs.archlinux.org/viewtopic.php?id=95007 このフォーラムの投稿]には、''pacman'' のいくつかの依存関係だけが壊れてしまった場合のこの手順の例が書かれてあります。
  +
  +
=== 再起動後に "Unable to find root device" エラー ===
  +
  +
[[カーネル]]の更新中に [[initramfs]] が破損してしまった可能性が高いです (''pacman'' の {{ic|--overwrite}} オプションを不適切に使用すると、起こることがあります)。この状況から抜け出す方法は2つあります。1つ目は、''fallback'' エントリです。
  +
  +
{{Tip|''Fallback'' エントリを削除してしまった場合、ブートローダのパラメータを変えれば ''Fallback'' イメージを起動できます。ブートローダのメニューが表示されたときに、Syslinux の場合は {{ic|Tab}} を、GRUB と systemd-boot の場合は {{ic|e}} を押してエントリの編集画面を開き、''initramfs'' イメージ名を {{ic|initramfs-linux-fallback.img}} に変更して {{ic|Enter}} か {{ic|b}} (キーは[[ブートローダー]]に依ります) を押してください。}}
  +
  +
システムが起動したら、コンソールかターミナルから以下のコマンドを実行して initramfs イメージを再ビルドしてください (以下のコマンドは標準の {{Pkg|linux}} カーネルの場合です):
  +
  +
# mkinitcpio -p linux
  +
  +
これでうまく行かなかった場合、最新の Arch リリース (CD/DVD あるいは USB スティック) を起動し、ルートパーティションとブートパーティションをそれぞれ {{ic|/mnt}} と {{ic|/mnt/boot}} に[[マウント]]してください。そして、''arch-chroot'' を使ってルートパーティションに [[chroot]] してください:
   
 
# arch-chroot /mnt
 
# arch-chroot /mnt
542行目: 617行目:
   
 
{{Note|
 
{{Note|
* もしあなたが現在のリリースを持っていなかったりの "Live" Linux ディストリビューションを持っていないなら、昔ながらの方法で [[chroot]] することができます。もちろん単に {{ic|arch-chroot}} スクリプトを実行するよりも、より多入力が必要になりま
+
* 最新 Arch リリースを持っていない場合やArch 以外の "ライブ" Linux ディストリビューションしかない場合、昔ながらの方法で [[chroot]] することができます。当然、{{ic|arch-chroot}} スクリプトを実行する場合よりも、さん入力しなければなりません
* "pacman" が {{ic|Could not resolve host}} で失敗し場合 [https://wiki.archlinux.jp/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A#.E6.8E.A5.E7.B6.9A.E3.81.AE.E7.A2.BA.E8.AA.8D 接続の確認] をクリしてください。
+
* ''pacman'' が {{ic|Could not resolve host}} というエラーで失敗してしまう場合、[[ネットワーク設定#接続の確認|インターネト接続を確認してください]]
* arch-chroot または chroot 環境に入れないが、パッケージを再インストールする必要がある場合はルートパーティションで "pacman" コマンド {{ic|pacman--sysroot/mnt-Syu foo bar}} を使できます。}}
+
* パッケージを再インストールする必要があるarch-chroot chroot の環境に入れない場合、コマンド {{ic|pacman --sysroot /mnt -Syu foo bar}} を使えば、別のルートパーティションから ''pacman'' を使うことができます。
  +
}}
   
カーネル ({{Pkg|linux}} パッケージ) を再インストールすると自動的に {{ic|mkinitcpio-p linux}} initramfsイメージが再生成されます。これ行う必要はありません。
+
カーネル ({{Pkg|linux}} パッケージ) を再インストールすれば、{{ic|mkinitcpio -p linux}} が実行されて initramfs イメージが再生成されます。イメージの再生成を別行う必要はありません。
   
その後、{{ic|exit}}、{{ic|umount/mnt/{boot,} }} および {{ic|reboot}} を実行してくだ
+
その後、{{ic|exit}}、{{ic|umount /mnt/{boot,} }}、そして {{ic|reboot}} を実行することが推奨れます
   
  +
=== "Warning: current locale is invalid; using default "C" locale" エラー ===
===signature from "User <email@gmail.com>" is unknown trust===
 
   
  +
このエラーメッセージが言っている通り、ロケールが正しく設定されていません。[[ロケール]]の記事を参照してください。
以下の方法を試してみてください:
 
   
  +
=== Pacman がプロキシの設定に従わない ===
*{{ic|pacman-key --refresh-keys}} で既知のキーを更新してください。
 
*手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください: {{ic|pacman -Sy archlinux-keyring && pacman -Su}}。
 
*[[pacman-key#全ての鍵のリセット]]に従って下さい。
 
   
  +
関連する環境変数 ({{ic|$http_proxy}}、{{ic|$ftp_proxy}} など) が設定されていることを確認してください。''pacman'' を [[sudo]] で実行する場合、[[sudo#環境変数|環境変数を pacman に渡す]]ように sudo を設定する必要があります。また、[[GnuPG#鍵サーバー|dirmngr]] の設定ファイル {{ic|/etc/pacman.d/gnupg/dirmngr.conf}} で、鍵をリフレッシュする際にプロキシの設定に従うようにする {{ic|honor-http-proxy}} オプションが存在していることも確認してください。
===PGP 鍵のインポートが要求される===
 
   
  +
=== パッケージが明示的にインストールされたか依存関係としてインストールされたかの情報を保持しつつ、全パッケージを再インストールするには? ===
古いバージョンの ISO で Arch を[[インストールガイド|インストール]]しようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり {{Pkg|archlinux-keyring}} をアップグレードしてください ([[#signature from "User <email@gmail.com>" is unknown trust|上]]を参照)。
 
   
  +
ネイティブなパッケージ (つまり、同期データベース内に存在するパッケージ) を全て再インストールするには、{{ic|pacman -Qnq {{!}} pacman -S -}} か {{ic|pacman -S $(pacman -Qnq)}} を実行してください ({{ic|-S}} オプションはデフォルトでインストール理由を維持します)。
===エラー: key "0123456789ABCDEF" could not be looked up remotely===
 
   
  +
次に、外部のパッケージを全て再インストールする必要があります。これらのパッケージの一覧は {{ic|pacman -Qmq}} で得られます。
パッケージが {{Pkg|archlinux-keyring}} に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの {{Pkg|archlinux-keyring}} に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。[[#signature from "User <email@gmail.com>" is unknown trust|上]]で書かれているように {{Pkg|archlinux-keyring}} を先にアップグレードしてください。
 
   
  +
=== "Cannot open shared object file" エラー ===
===signature from "User <email@archlinux.org>" is invalid===
 
   
  +
どうやら、以前の ''pacman'' トランザクションで、''pacman'' 自体が必要とする共有ライブラリが削除されたか破損したようです。
システム[[時刻]]が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます:
 
   
  +
この問題を解決するには、必要なライブラリをファイルシステム上に手動で展開する必要があります。まず、必要なライブラリを含むパッケージを調べ、''pacman'' キャッシュ ({{ic|/var/cache/pacman/pkg/}}) からそのパッケージを見つけてください。そして、その共有ライブラリをファイルシステム上へ展開してください。これで ''pacman'' が実行できるようになりました。
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.
 
   
  +
その後、壊れたパッケージを[[#特定のパッケージのインストール|再インストール]]する必要があります。注意点として、システムファイルがファイルシステム上に展開されたことを ''pacman'' は知らないため、{{ic|--overwrite}} フラグを使用する必要があります。Pacman は、先程の共有ライブラリファイルをパッケージのものに適切に置き換えてくれます。
パッケージをインストール・アップグレードする前に {{ic|ntpd -qg}} と {{ic|hwclock -w}} を root で実行して下さい。
 
   
  +
やるべきことは以上です。あとはシステムの残りも更新してください。
==="failed to commit transaction (invalid or corrupted package)" エラー===
 
   
  +
===パッケージのダウンロード時にフリーズする===
{{ic|/var/cache/pacman/pkg}} にある {{ic|*.part}} ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい ({{ic|pacman.conf}} で {{ic|XferCommand}} を設定しているとこのエラーがよく起こります)。
 
   
  +
''pacman'' がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [https://bbs.archlinux.org/viewtopic.php?id&#61;68944] [https://bbs.archlinux.org/viewtopic.php?id&#61;65728]。Arch Linux のインストール時にこの問題が発生する場合、''pacman'' のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは [[pacman のパフォーマンスの向上]]を参照)。[[VirtualBox]] で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで ''NAT'' の代わりに ''Host interface'' を使うことで解決します。
# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;
 
   
  +
=== Failed retrieving file 'core.db' from mirror ===
===pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'===
 
   
そのエラーは、あなたの locale が正しく設定されていないと言っていま[[ロケ]]をさい。
+
[[ミラー]]を正しく設定ているにも関わらずこのエラーが発生る場合、別の[[Resolv.conf|ネームサーバー]]を設定しみてください。
   
  +
=== error: 'local-package.pkg.tar': permission denied ===
===pacman でプロキシ設定を使うにはどうすればいいですか?===
 
   
  +
{{ic|pacman -U}} を使用して sshfs のマウントポイント上にパッケージをインストールしようとしてこのエラーが発生する場合、インストールしたいパッケージをローカルのディレクトリに移動し、もう一度インストールしてみてください。
環境変数 ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} など) を使って下さい。[[sudo]] と一緒に Pacman を使う時は、[[sudo#環境変数|環境変数を pacman に渡すように]] sudo を設定してください。
 
   
  +
=== error: could not determine cachedir mount point /var/cache/pacman/pkg ===
===明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか===
 
   
  +
Chroot 環境内で {{ic|pacman -Syu}} などを実行した際に以下のエラーが発生する場合:
ネイティブのパッケージを全て再インストールするには: {{ic|<nowiki>pacman -Qnq | pacman -S -</nowiki>}} ({{ic|-S}} オプションはデフォルトでインストールの理由を維持します)。
 
   
  +
エラー: キャッシュディレクトリ /var/cache/pacman/pkg のマウントポイントを決定できませんでした
次に自分で作成したパッケージを全て再インストールしてください、{{ic|pacman -Qmq}} でパッケージを確認できます。
 
  +
エラー: 処理を完了できませんでした (空き容量が足りません)
   
  +
このエラーのよくある原因は、chroot したディレクトリがマウントポイントでないことです。解決策は、[[既存の Linux からインストール#基本ツールをダウンロード]] に書かれてあるノートを見てください。また、{{man|8|arch-chroot}} には、バインとマウントを使って chroot ディレクトリをマウントポイント化する方法について例と共に説明されています。
===パッケージのダウンロード時にフリーズする===
 
   
  +
=== error: GPGME error: No data ===
''pacman'' がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [https://bbs.archlinux.org/viewtopic.php?id&#61;68944] [https://bbs.archlinux.org/viewtopic.php?id&#61;65728]。Arch Linux のインストール時にこの問題が発生する場合、''pacman'' のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは [[pacman のパフォーマンスの向上]]を参照)。[[VirtualBox]] で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで ''NAT'' の代わりに ''Host interface'' を使うことで解決します。
 
  +
  +
パッケージを更新できず、このエラーが発生する場合は、更新する前に {{ic|rm -r /var/lib/pacman/sync/}} を実行してみてください。
  +
  +
Sync ファイルを削除しても問題が解決しない場合は、更新する前に {{ic|file /var/lib/pacman/sync/*}} を実行して sync ファイルが {{ic|gzip compressed data}} であることを確認してください。ルーターかプロキシが、ダウンロードしたデータを破損させているのかもしれません。
  +
  +
Sync ファイルが正しい種類であった場合、ミラーサーバー側に問題があるのかもしれません。{{ic|pacman-conf -r core}} と {{ic|pacman-conf -r extra}} でミラーサーバーを確認してください。表示された URL の一番最初のものをブラうさの URL 欄にペーストし、ファイルの一覧が表示されるか確かめてください。ミラーがエラーを返した場合、{{ic|/etc/pacman.d/mirrorlist}} 内のそのミラーをコメントアウトしてください。
  +
  +
=== 壊れている、または同期されていないパッケージを再インストールする ===
  +
  +
{{ic|pacman -Qk $pkg}} コマンドを使えば、{{ic|$pkg}} パッケージのインストールされたファイルがデータベースのバージョンに含まれているファイルと一致するかどうかを確認することができます。複数のパッケージに対しては、以下のようなループを使うことで、存在しないファイルがあるパッケージを再インストールすることができます:
  +
  +
$ LC_ALL=C.UTF-8 pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1 |
  +
while read -r package; do
  +
pacman -S "$package" --noconfirm
  +
done
   
  +
(部分的なダウングレードなどにより) {{ic|/var/lib/pacman}} のローカルデータベースが {{ic|/}} ファイルシステムにインストールされているパッケージよりも新しい場合、これはルートファイルシステムをローカルデータベースと再同期させる最適な方法です。
===Failed retrieving file 'core.db' from mirror===
 
   
  +
== 参照 ==
[[ミラー]]を正しく設定しているのにこのエラーメッセージが表示される場合、[[Resolv.conf|ネームサーバ]]を設定してみてください。
 
   
  +
* {{man|3|libalpm}}
==参照==
 
  +
* {{man|8|pacman}}
  +
* {{man|5|pacman.conf}}
  +
* {{man|8|repo-add}}
   
  +
{{TranslationStatus|pacman|2024-09-15|816454}}
*[https://www.archlinux.org/pacman/ Pacman ホームページ]
 
*{{man|3|libalpm}}
 
*{{man|8|pacman}}
 
*{{man|5|pacman.conf}}
 
*{{man|8|repo-add}}
 

2024年9月15日 (日) 05:56時点における最新版

関連記事

pacman パッケージマネージャArch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる Arch build system から成っています。pacman のゴールはパッケージ管理を楽にすることであり、公式リポジトリにあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。

Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。

PacmanC 言語で書かれており、パッケージングに bsdtar(1) tar フォーマットを使用します。

ヒント: pacman パッケージには makepkgvercmp(8) などのツールが含まれています。pactreecheckupdates など、他の有用なツールは pacman-contrib パッケージに含まれています (以前pacman パッケージに含まれていました)。ツールの一覧を見るには pacman -Ql pacman pacman-contrib | grep -E 'bin/.+' を実行してください。

目次

使い方

pacman で何ができるかをちゃんと学びたい場合、pacman(8) を参照してください。以下にあるのは pacman でできることのほんの一例です。

ヒント: 他の Linux ディストリビューションを使ったことがある場合、Pacman/比較表の記事が役に立つでしょう。

パッケージのインストール

パッケージとは、以下を含むアーカイブです:

  • アプリケーションの (コンパイルされた) 全ファイル
  • アプリケーションのメタデータ (アプリケーション名、バージョン、依存関係など)
  • pacman によって使用されるインストールファイル及びディレクティブ

Arch のパッケージマネージャである pacman は、このようなパッケージをインストール、アップデート、そして削除することができます。プログラムを自分でコンパイルしてインストールする代わりにパッケージを使用することには、様々な利点があります:

  • 簡単なアップデート: pacman は、アップデートが利用可能になるとすぐに既存のパッケージを更新します。
  • 依存関係のチェック: pacman は依存関係を処理してくれます。あなたがすべきことは、インストールしたいプログラムを指定することだけです。pacman はそのプログラムと一緒に他の必要なプログラムもインストールします。
  • 綺麗にアンインストール: pacman は、パッケージに含まれる全ファイルのリストを保持します。これにより、パッケージを削除する際に意図せずファイルが残留することはありません。
ノート:
  • パッケージには、任意の依存パッケージが設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。pacman は、パッケージのインストール時に任意の依存パッケージのリストを表示しますが、そのリストは pacman.log に残りません。#パッケージ・データベースに問い合わせる コマンドを使うことで、パッケージの任意の依存パッケージを見ることができます。
  • 他のパッケージの (任意の) 依存パッケージとしてパッケージをインストールする場合 (つまり、そのパッケージ自体は必要としていない場合)、--asdeps オプションを使用することを推奨します。詳しくは #インストール理由 セクションを参照。
警告: Arch でパッケージのインストールをする際に、システムのアップグレードをせずにパッケージリストを更新することは避けてください (例えば、公式リポジトリでパッケージが見つからなくなった時など)。実際の場面でいうと、pacman -Syu パッケージ名 の代わりに pacman -Sy パッケージ名 を実行してはいけないということです。これを実行すると依存関係に問題が発生する可能性があります。システムメンテナンス#部分的なアップグレードはサポートされていませんBBS#89328 を参照。

特定のパッケージのインストール

ひとつ、あるいは複数のパッケージを、依存パッケージも含めてインストールするには、以下のコマンドを実行してください:

# pacman -S パッケージ名1 パッケージ名2 ...

正規表現を使ってパッケージをインストールするには (このフォーラムスレッド を参照):

# pacman -S $(pacman -Ssq パッケージのパターン)

別々のリポジトリ (例: extratesting) 内に同一のパッケージの複数のバージョンが存在していることがあります。この場合、パッケージ名の前にリポジトリ名を明示する必要があります。例えば extra リポジトリ内のバージョンをインストールするには:

# pacman -S extra/パッケージ名

名前に類似パターンが存在するパッケージをインストールしたい場合、波括弧を使ってパッケージ名を展開することができます。例えば:

# pacman -S plasma-{desktop,mediacenter,nm}

必要に応じて更に複雑なパターンを指定することもできます:

# pacman -S plasma-{workspace{,-wallpapers},pa}
仮想パッケージ

仮想パッケージとは、それ自体は存在していないが、1つ以上のパッケージによって provides (提供) 指定されている特殊なパッケージです。仮想パッケージが存在していることにより、あるパッケージの依存関係として複数の候補が存在している場合に、パッケージは特定のパッケージを依存関係として指定する必要がなくなります。仮想パッケージはその名前を使ってインストールすることはできません。仮想パッケージを provide (提供) するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。例としては dbus-units パッケージがあります。

ヒント: 複数の候補が存在する場合、候補のリストは、pacman.conf 内に現れるリポジトリの順番でソートされ、そして同一のリポジトリ内にも複数の候補が存在する場合はさらにアルファベット順にソートされます。

パッケージグループのインストール

パッケージグループに属しているパッケージをすべて同時にインストールすることができます。例えば:

# 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/ を見て下さい。

ノート: グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。--needed オプションを使うことで無視できます。

パッケージの削除

依存パッケージをすべて残したままパッケージを削除するには:

# pacman -R パッケージ名

削除したいパッケージと、そのパッケージだけが必要としている依存パッケージを一緒に削除するには:

# pacman -Rs パッケージ名
警告: グループ (例えば gnome) を削除する場合、このコマンドはそのグループ内のパッケージのインストール理由を無視します。グループを指定した場合、そのグループ内のパッケージを分けて指定したかのように振る舞うからです。依存関係のインストール理由は依然として考慮されます。

上記のコマンドは、必要とされているパッケージを含んでいるグループを削除する際に、実行を拒否する場合があります。そのような場合は、以下を試してください:

# pacman -Rsu パッケージ名

削除したいパッケージと、そのパッケージの依存パッケージ、さらに削除したいパッケージに依存しているパッケージを削除するには:

警告: この操作は再帰的です。潜在的に必要とされているパッケージも削除してしまう可能性があるので、注意して使用しなければなりません。
# pacman -Rsc パッケージ名

他のパッケージによって必要とされているパッケージを、必要としているパッケージを削除せずに削除するには:

警告: 以下の操作はシステムを破壊する可能性があり、使用は避けるべきです。システムメンテナンス#特定の pacman コマンドを避けてください を参照してください。
# pacman -Rdd パッケージ名

Pacman は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに .pacsave 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、-n オプションを付けてください:

# pacman -Rn パッケージ名
ノート: Pacman は、アプリケーション自身が作成した設定ファイルを削除しません (例えば、ホームディレクトリ内の "ドットファイル")。

パッケージのアップグレード

警告:

Pacman はコマンド一つでシステム上の全パッケージをアップデートできます。この処理に掛かる時間は、システムがどれだけ新しいかによります。以下のコマンドは、リポジトリデータベースを同期し、かつ、システム内のパッケージをアップデートします (ただし、リポジトリに無い"ローカル"のパッケージを除く):

# pacman -Syu

パッケージ・データベースに問い合わせる

Pacman からローカルデータベースに問い合わせるときは -Q フラグを、同期データベースに問い合わせるときは -S フラグを、ファイルデータベースに問い合わせるときは -F フラグを使います。それぞれのフラグのサブオプションについては pacman -Q --helppacman -S --helppacman -F --help を見てください。

Pacman はデータベースからパッケージを検索することができます。パッケージ名と説明の両方を検索するには:

$ pacman -Ss 検索ワード1 検索ワード2 ...

場合によっては、-s の組み込みの ERE (拡張正規表現) によって、余計な検索結果が大量に出てきてしまうことがあるでしょう。そのようなときは検索対象をパッケージ名だけに絞ってみてください:

$ pacman -Ss '^vim-'

既にインストール済みのパッケージから検索するには:

$ pacman -Qs 検索ワード1 検索ワード2 ...

リモートパッケージからパッケージファイルの名前で検索するには:

$ pacman -F 検索ワード1 検索ワード2 ...

パッケージ名を指定して詳細な情報を得るには:

$ pacman -Si パッケージ名

ローカルにインストールされているパッケージの詳細な情報を得るには:

$ pacman -Qi パッケージ名

-i フラグを2つ付けることで、バックファイルのリストとバックアップファイルの変更状態も同時に表示できます:

$ pacman -Qii パッケージ名

あるパッケージによってインストールされたファイルの一覧を得るには:

$ pacman -Ql パッケージ名

リモートパッケージによってインストールされるファイルのリストを得るには:

$ pacman -Fl パッケージ名

あるパッケージによってインストールされたファイルが存在しているか確認するには:

$ pacman -Qk パッケージ名

k フラグを2つ付けると、より徹底したチェックが行われます。

データベースを検索して、あるファイルがどのパッケージに属しているかを調べるには:

$ pacman -Qo /パス/ファイル名

あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:

$ pacman -F /パス/ファイル名

他のパッケージに必要とされていないパッケージ (孤児) の一覧を得るには:

$ pacman -Qdt

明示的にインストールしたパッケージで、依存関係として必要とされていないパッケージを全て表示するには:

$ pacman -Qet

その他の例については pacman/ヒントとテクニック を参照してください。

Pactree

ノート: pactree(8)pacman パッケージの一部ではなくなりました。代わりに、pacman-contrib でインストールできます。

あるパッケージの依存関係ツリー (dependency tree、つまり、そのパッケージ必要としているパッケージの木) を表示するには:

$ pactree パッケージ名

あるパッケージの被依存ツリー (dependant tree、つまり、そのパッケージ必要としているパッケージの木) を表示するには、逆フラグ -rpactree に渡てください。

データベースの構造

pacman データベースは通常、/var/lib/pacman/sync にあります。/etc/pacman.conf で指定された各リポジトリに対して、対応するデータベースファイルがこのディレクトリ内に存在します。データベースファイルは、パッケージごとに 1 つのディレクトリを含む gzip 圧縮された tar アーカイブです。たとえば、which パッケージの場合は次のようになります:

$ tree which-2.21-5
which-2.21-5
|-- desc

desc ファイルには、パッケージの説明、依存関係、ファイルサイズ、MD5 ハッシュなどのメタデータが含まれています。

パッケージキャッシュの削除

Pacman は、ダウンロードしたファイルを /var/cache/pacman/pkg/ に保存しますが、これらは古くなってもアンインストールされても自動的に削除されません。これにはいくつかの利点があります:

  1. パッケージをダウングレードする際に、他の方法 (Arch Linux Archive など) によって以前のバージョンを入手する必要がない。
  2. アンインストールされたパッケージをキャッシュディレクトリから簡単に直接再インストールでき、リポジトリから新しくダウンロードする必要がない。

しかし、ディレクトリのサイズが大きくなりすぎないようにするために、定期的にキャッシュを手動でクリーンアップする必要があります。

pacman-contrib パッケージで提供されている paccache(8) スクリプトは、インストール済みパッケージとアンインストール済みパッケージのキャッシュ済みバージョンを、最も新しい3つを残して全て削除します (オプションを何も指定しなかった場合):

# paccache -r

paccache.timer有効化起動すれば、週に1度、未使用のパッケージキャッシュを削除してくれます。

ヒント: pacman のトランザクションの度にこの操作を自動で実行するフックを作成することもできます。フックを導入する paccache-hookAURインストールすることもできます。フックの例もあります。

何個の新しいバージョンのキャッシュを保持するかを指定することも可能です。最も新しいバージョン1つだけを保持するには:

# paccache -rk1

-u/--uninstalled スイッチを加えれば、アンインストールされたパッケージに対象を絞ることもできます。例えば、アンインストールされたパッケージのキャッシュを全て削除するには:

# paccache -ruk0

その他のオプションは paccache -h を見てください。

また、Pacman にも、パッケージキャッシュと、/etc/pacman.conf 設定ファイルにもはや存在しないリポジトリの残留データベースファイルをクリーンアップする組み込みコマンドが存在します。しかし、pacman では、パッケージキャッシュのバージョンをいくつ残すか指定することができないため、paccache のデフォルトオプションよりも強引です。

現在インストールされていないパッケージのキャッシュと、未使用の同期データベースをを全て削除するには:

# pacman -Sc

全てのキャッシュファイルを削除するには、c スイッチを2度使用してください。これは最も強引なアプローチであり、キャッシュディレクトリには何も残りません:

# pacman -Scc
警告: ディスクの空き容量がどうしても必要でない限り、インストール済みパッケージとアンインストール済みパッケージのキャッシュを全て削除することは避けるべきです。さもないと、パッケージをダウングレードしたり再インストールしたりするためにファイルを再ダウンロードしなければならなくなってしまいます。

さらに、キャッシュをクリーンアップするツールとして pkgcachecleanAURpacleanerAUR もあります。

その他のコマンド

パッケージをダウンロードするが、インストールはしない:

# pacman -Sw パッケージ名

リモートリポジトリ以外の'ローカル'のパッケージをインストールする (例えば、AUR のパッケージ):

# pacman -U /path/to/package/package_name-version.pkg.tar.zst

ローカルパッケージのコピーを pacman のキャッシュに保持するには:

# pacman -U file:///path/to/package/package_name-version.pkg.tar.zst

(pacman の設定ファイルに記述されているリポジトリ以外の) 'リモート'パッケージをインストールする:

# pacman -U http://www.example.com/repo/example.pkg.tar.zst

ドライラン

Pacman常に、インストールされるパッケージと削除されるパッケージを一覧表示して、操作を行う前にユーザに許可を求めます。

--print (短いバージョンは -p) を使用することで、-S-U-R のアクションを行わずに、パッケージの一覧を処理可能な形式で表示できます。

--print-format を追加すれば、このリストを様々な形にフォーマットできます。例えば、--print-format %n は、パッケージのバージョン無しでパッケージの一覧を表示します。

インストール理由

pacman データベースでは、インストールしたパッケージはインストール理由によって2つのグループに分別されます:

  • 明示的にインストール: pacman-S-U コマンドによって文字通り指定されたパッケージ。
  • 依存パッケージ: pacman のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから必要とされたためにインストールされたパッケージ。

パッケージのインストール時、以下のようにすることでインストール理由を依存パッケージに強制的に変えることができます:

# pacman -S --asdeps パッケージ名

明示的にインストールしたパッケージが、必須でない機能のための任意の依存パッケージを提供している場合があります。大抵、このコマンドはそのようなパッケージをインストールするために使用されます。

ヒント: 任意の依存パッケージを --asdeps でインストールすると、孤立したパッケージを削除するときに pacman によって任意の依存パッケージも削除されるようになります。

パッケージのインストールを行っても、デフォルトではインストール理由は変更されません。

明示的にインストールしたパッケージのリストは pacman -Qe で表示でき、依存パッケージのリストは pacman -Qd で表示できます。

既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行してください:

# pacman -D --asdeps パッケージ名

Use --asexplicit to do the opposite operation.

ノート: pacman -Syu パッケージ名 --asdeps のように、アップグレードをするときに --asdeps--asexplicit オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。

特定のファイルが含まれているパッケージを検索

ファイルデータベースを同期してください:

# pacman -Fy

ファイルが含まれているパッケージを検索するには:

$ pacman -F pacman
core/pacman 5.2.1-1 (base base-devel) [installed]
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.43-1
    usr/lib/xscreensaver/pacman
ヒント: pacman-filesdb-refresh.timer (pacman-contrib パッケージに同梱されています) を起動/有効化すれば、pacman ファイルデータベースを週ごとにリフレッシュできます。

高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する pkgfile をインストールしてください。

パッケージのインストール/アップグレード/アンインストール時に起こること

成功時のトランザクションは、5つのステップと、トランザクション前と後のフックで構成されます:

  1. データベースがロックされていない場合、トランザクションを初期化する。
  2. トランザクション中に追加/削除すべきパッケージを選択する。
  3. 同期データベース、パッケージ、及びパッケージ間の依存関係のサニティチェックを行い、コマンドラインフラグに基づいてトランザクションの準備をする。
  4. トランザクションを実行する:
    1. 必要に応じてパッケージをダウンロードする (_alpm_sync_load)。
    2. pacman の既存の PreTransaction フックが適用される場合、それらのフックを実行する。
    3. 最終的に置き換えられるパッケージ、衝突するパッケージ、明示的に削除するように指定されたパッケージを削除する。
    4. 追加するべきパッケージが存在する場合、各パッケージに対して以下を実行する:
      1. パッケージにインストールスクリプトが存在する場合、そのスクリプトの pre_install 関数を実行する (アップグレードする場合は pre_upgrade が、削除される場合は pre_remove が代わりに実行されます)。
      2. 以前のバージョンのパッケージのファイルを全て削除する (パッケージをアップグレードまたは削除する場合)。ただし、パッケージによって設定ファイルであると指定されたファイルに関しては、削除しない (pacman/Pacnew と Pacsave を参照)。
      3. パッケージを解凍し、含まれているファイルをファイルシステムに保存する (パッケージをインストールまたはアップグレードする場合)。新しいパッケージのファイルが、ファイルシステム上の手動で変更された設定ファイル (前のステップを参照) を上書きしてしまう場合、パッケージ側のファイルに別の名前 (.pacnew) を付けて保存する。
      4. パッケージにインストールスクリプトが存在する場合、post_install 関数を実行する (アップグレードする場合は post_upgrade が、削除される場合は post_remove が代わりに実行されます)。
    5. トランザクションの終わりの時点で存在している PostTransaction フックが適用される場合、それらのフックを実行する。
  5. トランザクション及びトランザクションリソース (つまり、データベースロック) を解放する。

設定

Pacman の設定は /etc/pacman.conf に記述します。ここで、pacman がどのように動作するかを設定することができます。この設定ファイルに関するより詳しい情報は pacman.conf(5) にあります。

全般設定

全般的な設定は [options] セクションにあります。ここで設定できる項目については pacman.conf(5) を読むか、デフォルトの pacman.conf ファイルを見てください。

アップデートする前にバージョンを比較

利用可能なパッケージの新旧のバージョンを確認したい場合、/etc/pacman.conf の "VerbosePkgLists" という行をアンコメントしてください。pacman -Syu の出力が以下のようになります:

パッケージ (6)          古いバージョン  新しいバージョン  最終的な変化 ダウンロード容量

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

並列ダウンロードを有効にする

並列にダウンロードするパッケージの数は、/etc/pacman.conf[options] セクション内の ParallelDownloads オプションで設定できます。このオプションが設定されていない場合、パッケージは1つずつダウンロードされます。

アップグレードさせないパッケージを設定

警告: 部分的なアップグレードはサポートされていないので、パッケージのアップグレードをスキップする際は気をつけてください。。

システムをアップグレードする際に特定のパッケージをアップグレードシないようにするには、[options] セクションに以下の行を追加してください:

IgnorePkg=linux

複数のパッケージを指定する場合は、スペースで区切るか、IgnorePkg 行を追加してください。また、グロブパターンも使用できます。一度に限ってパッケージをアップグレードしないようにするには、コマンドラインで --ignore オプションを使用してください (複数のパッケージを指定する場合は、コンマで区切ってください)。

pacman -S を使えば、依然として対象のパッケージをアップグレードすることが可能です。この場合、pacman はパッケージが IgnorePkg 文に含まれていることを知らせてくれます。

アップグレードさせないパッケージグループを設定

警告: 部分的なアップグレードはサポートされていないので、パッケージグループのアップグレードをスキップする際は気をつけてください。。

パッケージの場合と同様に、アップグレードさせないパッケージグループを指定することもできます:

IgnoreGroup=gnome

アップグレードさせないファイルを設定

NoUpgrade ディレクティブで指定されたファイルは、パッケージのインストール/アップグレードの際に変更を加えられなくなり、代わりに新しいファイルは .pacnew 拡張子が付けられてインストールされます。

NoUpgrade=path/to/file

以下のようにして複数のファイルを指定することができます:

NoUpgrade=path/to/file1 path/to/file2
ノート: パスはパッケージアーカイブ内のファイルを示します。なので、一番最初にスラッシュを置かないでください。

インストールさせないファイルを設定

特定のディレクトリまたはファイルをインストールさせないようにするには、NoExtract リストにそのディレクトリを加えてください。例えば、systemd ユニットをインストールさせないようにするには:

NoExtract=usr/lib/systemd/system/*

後ろのルールは前のルールを上書きします。また、! を前に付けることでルールを無効化できます。

ヒント: Pacman は、localepurgebleachbit によってロケールが削除されたパッケージをアップデートする際に、ロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには、pacman.confCheckSpace オプションをコメントアウトしてください。ただし、容量チェックの機能が全てのパッケージで無効化されることに注意してください。

複数の設定ファイルを使用

設定ファイルが複数あって (メインの設定と 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 フックはインタラクティブではありません。

Pacman フックは様々なことに使われています。例えば、systemd-sysuserssystemd-tmpfiles を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として tomcat8 パッケージでは tomcat8 という名前のシステムユーザーが必要だと指定されており、特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの systemd-sysusers.hooksystemd-tmpfiles.hook は、tomcat8 にユーザが指定されているファイルと一時ファイルが存在していることを認識し、systemd-sysuserssystemd-tmpfiles を実行します。

alpm のフックに関する詳細は alpm-hooks(5) を参照してください。

リポジトリとミラー

特殊な [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/ でバインドマウントする。
警告: /var/cache/pacman/pkg/ ディレクトリを他の場所へのシンボリックリンクにしないでください。Pacman の誤動作の原因になります。特に、pacman が自分自身をアップデートしようとしている場合です。

パッケージのセキュリティ

Pacman はパッケージの署名をサポートしていて、パッケージにセキュリティレイヤーを加えています。デフォルトの設定では SigLevel = Required DatabaseOptional によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。リポジトリ毎に SigLevel を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、pacman-key を見てください。

トラブルシューティング

"Failed to commit transaction (conflicting files)" エラー

次のエラーが表示される場合: [1]

エラー: 処理を完了できませんでした (衝突しているファイル)
package: /path/to/file がファイルシステムに存在しています
エラーが発生したため、パッケージは更新されませんでした。

これは、pacman がファイルの衝突を検出し、仕様によりファイルを上書きしないために発生します。これは仕様によるものであり、欠陥ではありません。

通常、この問題の解決法は自明です (とはいえ、なぜこれらのファイルがそこに存在しているのかを念の為に調べてみるべきでしょう)。まず、他のパッケージがそのファイルを所有していないか調べるのが安全です (pacman -Qo /path/to/file)。そのファイルが他のパッケージによって所有されている場合、バグレポートを提出してください。そのファイルが他のパッケージのよって所有されていない場合、"ファイルシステムに存在している"方のファイルの名称を変更し、アップデートのコマンドを再度実行してください。問題がなければ、そのファイルは削除しても良いです。

何らかのプログラムを pacman を使用せずに (例えば make install などで) 手動でインストールしている場合、プログラム自体とそのプログラムに属するファイルを全て削除しなければなりません。pacman/ヒントとテクニック#どのパッケージにも所有されていないファイルを特定する も参照してください。

インストールされたパッケージは、そのパッケージに関するメタデータを含む /var/lib/pacman/local/package-version/files ファイルを提供します。このファイルが破損している、空である、または存在しない場合、パッケージの更新時に file exists in filesystem エラーが発生します。そのようなエラーは通常、1つのパッケージだけが原因です。原因のパッケージに属するファイルの名前を変えて後で削除する代わりに、pacman -S --overwrite glob package を実行して glob にマッチするファイルを上書きすることもできます。

警告: 通常、--overwrite スイッチの使用は避けてください。システムメンテナンス#特定の pacman コマンドを避けてください を参照してください。

"Failed to commit transaction (invalid or corrupted package)" エラー

/var/cache/pacman/pkg/ から .part ファイル (部分的にダウンロードされたパッケージ) を探し、そのファイルを削除してください (これは、pacman.conf でカスタムの XferCommand を使用した場合に起こりやすいです):

# find /var/cache/pacman/pkg/ -iname "*.part" -delete

また、archlinux-keyring が古く、pacman が署名を検証できない場合にも、このエラーが発生することがあります。この問題を解決方法と防止方法は pacman/パッケージの署名#システムの定期的な更新 を参照してください。

"Failed to init transaction (unable to lock database)" エラー

pacman がパッケージデータベースを変更する際に (パッケージのインストール時など)、pacman はロックファイル /var/lib/pacman/db.lck を作成します。これにより、複数の pacman インスタンスが同時にパッケージデータベースを変更してしまうことを防ぎます。

pacman がデータベースの変更中に中断されてしまった場合、古いロックファイルが残ってしまう可能性があります。pacman インスタンスが実行中でないことが確実である場合は、ロックファイルを削除してください:

# rm /var/lib/pacman/db.lck
ヒント: fuser /var/lib/pacman/db.lck を root として実行すれば、ロックファイルを使用しているプロセスが存在するか調べることができます。

インストール時にパッケージを取得できない

具体的には次のようなエラーです: Not found in sync db対象が見つかりませんでしたファイルの取得に失敗しました

まず、パッケージが実際に存在することを確認してください。パッケージが存在することが確実であるならば、パッケージデータベースが古いのかもしれません。pacman -Syu を実行して、パッケージデータベースを更新してシステムをアップグレードしてみてください。また、ミラーが最新であり、リポジトリが正しく設定されていることも確認してください。

また、インストールしたいパッケージが含まれているリポジトリがシステムで有効化されていない可能性もあります。例えば、パッケージが multilib リポジトリにあるが、pacman.confmultilib が有効化されていない場合、このエラーが発生します。

FAQ#公式リポジトリにある共用ライブラリはそれぞれどうして一つのバージョンしか用意されてないんですか? も参照してください。

アップグレードの中断によって起動できなくなったシステムを修復する

この記事またはセクションの正確性には問題があります。
理由: これには複数の潜在的な問題があります。en:Talk:pacman#More details in pacman crashes during an update を参照。 (議論: トーク:Pacman#)

電源断やカーネルパニック、ハードウェア障害によって、アップデートが中断されてしまうことがあります。ほとんどの場合、システムが大きなダメージを負うことはありませんが、起動できなくなってしまうことはあります。

  1. USB インストールメディア を用意して、それを起動してください。
  2. ルートファイルシステムをマウントしてください。
  3. マウントしたルートファイルシステムに arch-chroot してください。
  4. 次に、アップデートを完全にやり直します。/var/log/pacman.log を確認し、中断されたトランザクション中にアップグレードされていたパッケージ全てのリストを pacman -S に渡して、再インストールを許可してください。例:
# pacman -S linux linux-headers systemd systemd-libs systemd-sysvcompat firefox texlive-basic texlive-fontsextra texlive-latex texlive-latexextra texlive-latexrecommended texlive-pictures

アップグレードを完全にやり直すのは、適切なスクリプトレットとフックが実行されるようにするために必要だからです。

アップグレード中に pacman がクラッシュしてしまった

pacman が "database write" (データベース書き込み) エラーが発生してクラッシュし、その後、パッケージのアンインストール/再インストール/アップグレードができなくなってしまった場合、以下を行ってください:

  1. Arch Linux の USB インストールメディアを起動してください。システム上の pacman と同じバージョンかより新しいものを使うために、最近のメディアを使うことが望ましいです。
  2. システムのルートファイルシステムをマウントしてください (例えば、mount /dev/sdaX /mnt を root として実行してください)。そして、df -h を実行してファイルシステムに十分な空き領域が存在することを確認してください。
  3. ファイルシステム proc、sys、dev もマウントしてください: mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
  4. システムにおいてデータベースの場所とディレクトリの場所がデフォルトである場合、pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syu を root として実行すればシステムの pacman データベースを更新してシステムをアップグレードすることができます。
  5. アップグレードしたら、アップグレードされていない壊れているパッケージがないかチェックしてください: find /mnt/usr/lib -size 0
  6. そのようなパッケージが依然として存在する場合は、そのパッケージを再インストールしてください: pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package

pacman: command not found

/var/cache/pacman/pkg がシンボリックリンクである場合、pacman は自己アップデート時に同じディレクトリを作成しようとするため、このシンボリックリンクは削除されます。これにより、アップデートが失敗します。その結果、/usr/bin/pacmanpacman パッケージに含まれる他のコンテンツが消えてしまいます (訳注: #パッケージのインストール/アップグレード/アンインストール時に起こること の 4.2 を参照)。

/var/cache/pacman/pkgpacman によって管理されているため、シンボリックリンクにしないでください。代わりに CacheDir オプションを使うか、このディレクトリをバインドマウントしてください (#パッケージのキャッシュディレクトリ を参照)。

この問題が既に発生していて、システムが壊れてしまっている場合、pacman パッケージに含まれる /usr 内のコンテンツを手動で展開して pacman を復元し、その後、適切に pacman を再インストールしてください。詳細は FS#73306関連するフォーラムのスレッドを参照してください。

Pacman の手動再インストール

pacman-static を使う

pacman-staticAURpacman を静的にコンパイルしたものなので、システム上のライブラリが機能していなくても実行できます。これは、部分的なアップグレードによって pacman が実行できなくなってしまった場合にも便利です。

pacman-staticAUR パッケージのページにある固定コメントと PKGBUILD には、バイナリを直接ダウンロードする方法が記されています。pacman を再インストールしたり、部分的なアップグレードが起こった際にシステム全体をアップグレードしたりする際にこの方法が使えます。

外部の pacman を使う

pacman-static でさえも動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の一つは、archiso を使い、--sysroot--root で、操作を行うシステム上のマウントポイントを指定することです。--sysroot に必要なファイルシステムをマウントする方法については、Chroot#chroot を使う を参照してください。

手動で抽出する

警告: この方法では、一歩間違うとシステムの状態をさらに悪化させてしまいます。#アップグレード中に pacman がクラッシュしてしまった に書かれてある方法を使えない場合の最後の手段としてのみ、以下を行ってください。

pacman がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:

  1. インストールすべき pacman の依存関係を調べる。
  2. それぞれの依存パッケージをミラーからダウンロードする。
  3. 各パッケージをルートディレクトリに展開する。
  4. pacman -S --overwrite を実行してパッケージデータベースを更新することで、パッケージを再インストールする。
  5. システムの完全なアップグレードを行う。

正常に動作している Arch システムがあれば、以下のコマンドで pacman の依存関係リストを見ることができます:

$ pacman -Q $(pactree -u pacman)

しかし、発生している問題によっては、それらの依存パッケージのうち数個だけをアップデートすれば良い場合もあります。パッケージは以下のようにして展開します:

# tar -xvpwf package.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO

注意点として、w フラグを使用してインタラクティブモードにしてください。非インタラクティブモードでは、重要なファイルが問答無用で上書きされてしまうかもしれないので、非常に危険です。また、パッケージを展開する順番には注意を払ってください (つまり、依存パッケージを先に展開してください)。このフォーラムの投稿には、pacman のいくつかの依存関係だけが壊れてしまった場合のこの手順の例が書かれてあります。

再起動後に "Unable to find root device" エラー

カーネルの更新中に initramfs が破損してしまった可能性が高いです (pacman--overwrite オプションを不適切に使用すると、起こることがあります)。この状況から抜け出す方法は2つあります。1つ目は、fallback エントリです。

ヒント: Fallback エントリを削除してしまった場合、ブートローダのパラメータを変えれば Fallback イメージを起動できます。ブートローダのメニューが表示されたときに、Syslinux の場合は Tab を、GRUB と systemd-boot の場合は e を押してエントリの編集画面を開き、initramfs イメージ名を initramfs-linux-fallback.img に変更して Enterb (キーはブートローダーに依ります) を押してください。

システムが起動したら、コンソールかターミナルから以下のコマンドを実行して initramfs イメージを再ビルドしてください (以下のコマンドは標準の linux カーネルの場合です):

# mkinitcpio -p linux

これでうまく行かなかった場合、最新の Arch リリース (CD/DVD あるいは USB スティック) を起動し、ルートパーティションとブートパーティションをそれぞれ /mnt/mnt/bootマウントしてください。そして、arch-chroot を使ってルートパーティションに chroot してください:

# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
ノート:
  • 最新の Arch リリースを持っていない場合や、Arch 以外の "ライブ" Linux ディストリビューションしかない場合、昔ながらの方法で chroot することができます。当然、arch-chroot スクリプトを実行する場合よりも、たくさん入力しなければなりません。
  • pacmanCould not resolve host というエラーで失敗してしまう場合、インターネット接続を確認してください
  • パッケージを再インストールする必要があるが、arch-chroot や chroot の環境に入れない場合、コマンド pacman --sysroot /mnt -Syu foo bar を使えば、別のルートパーティションから pacman を使うことができます。

カーネル (linux パッケージ) を再インストールすれば、mkinitcpio -p linux が実行されて initramfs イメージが再生成されます。イメージの再生成を別途行う必要はありません。

その後、exitumount /mnt/{boot,} 、そして reboot を実行することが推奨されます。

"Warning: current locale is invalid; using default "C" locale" エラー

このエラーメッセージが言っている通り、ロケールが正しく設定されていません。ロケールの記事を参照してください。

Pacman がプロキシの設定に従わない

関連する環境変数 ($http_proxy$ftp_proxy など) が設定されていることを確認してください。pacmansudo で実行する場合、環境変数を pacman に渡すように sudo を設定する必要があります。また、dirmngr の設定ファイル /etc/pacman.d/gnupg/dirmngr.conf で、鍵をリフレッシュする際にプロキシの設定に従うようにする honor-http-proxy オプションが存在していることも確認してください。

パッケージが明示的にインストールされたか依存関係としてインストールされたかの情報を保持しつつ、全パッケージを再インストールするには?

ネイティブなパッケージ (つまり、同期データベース内に存在するパッケージ) を全て再インストールするには、pacman -Qnq | pacman -S -pacman -S $(pacman -Qnq) を実行してください (-S オプションはデフォルトでインストール理由を維持します)。

次に、外部のパッケージを全て再インストールする必要があります。これらのパッケージの一覧は pacman -Qmq で得られます。

"Cannot open shared object file" エラー

どうやら、以前の pacman トランザクションで、pacman 自体が必要とする共有ライブラリが削除されたか破損したようです。

この問題を解決するには、必要なライブラリをファイルシステム上に手動で展開する必要があります。まず、必要なライブラリを含むパッケージを調べ、pacman キャッシュ (/var/cache/pacman/pkg/) からそのパッケージを見つけてください。そして、その共有ライブラリをファイルシステム上へ展開してください。これで pacman が実行できるようになりました。

その後、壊れたパッケージを再インストールする必要があります。注意点として、システムファイルがファイルシステム上に展開されたことを pacman は知らないため、--overwrite フラグを使用する必要があります。Pacman は、先程の共有ライブラリファイルをパッケージのものに適切に置き換えてくれます。

やるべきことは以上です。あとはシステムの残りも更新してください。

パッケージのダウンロード時にフリーズする

pacman がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [2] [3]。Arch Linux のインストール時にこの問題が発生する場合、pacman のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは pacman のパフォーマンスの向上を参照)。VirtualBox で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで NAT の代わりに Host interface を使うことで解決します。

Failed retrieving file 'core.db' from mirror

ミラーを正しく設定しているにも関わらずこのエラーが発生する場合、別のネームサーバーを設定してみてください。

error: 'local-package.pkg.tar': permission denied

pacman -U を使用して sshfs のマウントポイント上にパッケージをインストールしようとしてこのエラーが発生する場合、インストールしたいパッケージをローカルのディレクトリに移動し、もう一度インストールしてみてください。

error: could not determine cachedir mount point /var/cache/pacman/pkg

Chroot 環境内で pacman -Syu などを実行した際に以下のエラーが発生する場合:

エラー: キャッシュディレクトリ /var/cache/pacman/pkg のマウントポイントを決定できませんでした
エラー: 処理を完了できませんでした (空き容量が足りません)

このエラーのよくある原因は、chroot したディレクトリがマウントポイントでないことです。解決策は、既存の Linux からインストール#基本ツールをダウンロード に書かれてあるノートを見てください。また、arch-chroot(8) には、バインとマウントを使って chroot ディレクトリをマウントポイント化する方法について例と共に説明されています。

error: GPGME error: No data

パッケージを更新できず、このエラーが発生する場合は、更新する前に rm -r /var/lib/pacman/sync/ を実行してみてください。

Sync ファイルを削除しても問題が解決しない場合は、更新する前に file /var/lib/pacman/sync/* を実行して sync ファイルが gzip compressed data であることを確認してください。ルーターかプロキシが、ダウンロードしたデータを破損させているのかもしれません。

Sync ファイルが正しい種類であった場合、ミラーサーバー側に問題があるのかもしれません。pacman-conf -r corepacman-conf -r extra でミラーサーバーを確認してください。表示された URL の一番最初のものをブラうさの URL 欄にペーストし、ファイルの一覧が表示されるか確かめてください。ミラーがエラーを返した場合、/etc/pacman.d/mirrorlist 内のそのミラーをコメントアウトしてください。

壊れている、または同期されていないパッケージを再インストールする

pacman -Qk $pkg コマンドを使えば、$pkg パッケージのインストールされたファイルがデータベースのバージョンに含まれているファイルと一致するかどうかを確認することができます。複数のパッケージに対しては、以下のようなループを使うことで、存在しないファイルがあるパッケージを再インストールすることができます:

$ LC_ALL=C.UTF-8 pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1 |
    while read -r package; do
        pacman -S "$package" --noconfirm
    done

(部分的なダウングレードなどにより) /var/lib/pacman のローカルデータベースが / ファイルシステムにインストールされているパッケージよりも新しい場合、これはルートファイルシステムをローカルデータベースと再同期させる最適な方法です。

参照

翻訳ステータス: このページは en:pacman の翻訳バージョンです。最後の翻訳日は 2024-09-15 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。