「Pacman」の版間の差分
(→トラブルシューティング: 情報を更新) |
(同期) |
||
(同じ利用者による、間の37版が非表示) | |||
1行目: | 1行目: | ||
+ | {{Lowercase title}} |
||
− | [[Category:パッケージマネージャー]] |
||
[[Category:Arch プロジェクト]] |
[[Category:Arch プロジェクト]] |
||
− | [[Category: |
+ | [[Category:パッケージマネージャー]] |
− | [[ar:Pacman]] |
||
− | [[cs:Pacman]] |
||
− | [[da:Pacman]] |
||
[[de:Pacman]] |
[[de:Pacman]] |
||
− | [[el:Pacman]] |
||
[[en:Pacman]] |
[[en:Pacman]] |
||
[[es:Pacman]] |
[[es: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| |
+ | {{Related|namcap}} |
− | {{Related|Pacman GUI フロントエンド}} |
||
− | {{Related|Pacman 比較表}} |
||
− | {{Related|Pacman ヒント}} |
||
{{Related|FAQ#パッケージ管理}} |
{{Related|FAQ#パッケージ管理}} |
||
− | {{Related| |
+ | {{Related|システムメンテナンス}} |
− | {{Related|Pacnew と Pacsave ファイル}} |
||
− | {{Related|Pacman/ローカルデータベースの復元}} |
||
− | {{Related|アプリケーション一覧/ユーティリティ#パッケージ管理}} |
||
− | {{Related|Arch Build System}} |
||
− | {{Related|公式リポジトリ}} |
||
− | {{Related|Arch User Repository}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | + | [https://pacman.archlinux.page/ pacman] [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は [[Arch Linux]] の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる [[Arch build system]] から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[公式リポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。 |
|
− | Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。 |
+ | ''Pacman'' はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。 |
− | Pacman は C 言語で書かれており {{ |
+ | ''Pacman'' は [[C]] 言語で書かれており、パッケージングに {{man|1|bsdtar}} [[Wikipedia:ja:tar|tar]] フォーマットを使用します。 |
− | {{Tip|1= |
+ | {{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/比較表]]の記事が役に立つでしょう。}} |
=== パッケージのインストール === |
=== パッケージのインストール === |
||
61行目: | 48行目: | ||
* アプリケーションのメタデータ (アプリケーション名、バージョン、依存関係など) |
* アプリケーションのメタデータ (アプリケーション名、バージョン、依存関係など) |
||
* ''pacman'' によって使用されるインストールファイル及びディレクティブ |
* ''pacman'' によって使用されるインストールファイル及びディレクティブ |
||
− | * (任意で) 開始/停止スクリプトなど、作業を用意にする追加のファイル |
||
Arch のパッケージマネージャである ''pacman'' は、このようなパッケージをインストール、アップデート、そして削除することができます。プログラムを自分でコンパイルしてインストールする代わりにパッケージを使用することには、様々な利点があります: |
Arch のパッケージマネージャである ''pacman'' は、このようなパッケージをインストール、アップデート、そして削除することができます。プログラムを自分でコンパイルしてインストールする代わりにパッケージを使用することには、様々な利点があります: |
||
73行目: | 59行目: | ||
* 他のパッケージの (任意の) 依存パッケージとしてパッケージをインストールする場合 (つまり、そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは [[#インストール理由]] セクションを参照。}} |
* 他のパッケージの (任意の) 依存パッケージとしてパッケージをインストールする場合 (つまり、そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは [[#インストール理由]] セクションを参照。}} |
||
− | {{Warning|1=Arch でパッケージのインストールをする際に、[[#パッケージのアップグレード|システムのアップグレード]]をせずにパッケージリストを更新することは避けてください (例えば、公式リポジトリで[[#インストール時にパッケージを取得できない|パッケージが見つからなくなった]]時など)。実際の場面でいうと、{{ic|pacman -Sy'''u''' '' |
+ | {{Warning|1=Arch でパッケージのインストールをする際に、[[#パッケージのアップグレード|システムのアップグレード]]をせずにパッケージリストを更新することは避けてください (例えば、公式リポジトリで[[#インストール時にパッケージを取得できない|パッケージが見つからなくなった]]時など)。実際の場面でいうと、{{ic|pacman -Sy'''u''' ''パッケージ名''}} の代わりに {{ic|pacman -Sy ''パッケージ名''}} を実行しては'''いけない'''ということです。これを実行すると依存関係に問題が発生する可能性があります。[[システムメンテナンス#部分的なアップグレードはサポートされていません]] や [https://bbs.archlinux.org/viewtopic.php?id=89328 BBS#89328] を参照。}} |
==== 特定のパッケージのインストール ==== |
==== 特定のパッケージのインストール ==== |
||
99行目: | 85行目: | ||
===== 仮想パッケージ ===== |
===== 仮想パッケージ ===== |
||
− | 仮想パッケージとは、それ自体は存在していないが、1つ以上のパッケージによって [[PKGBUILD#provides|provides (提供)]] 指定されている特殊なパッケージです。仮想パッケージが存在していることにより、あるパッケージの依存関係として複数の候補が存在している場合に、パッケージは特定のパッケージを依存関係として指定する必要がなくなります。仮想パッケージはその名前を使ってインストールすることはできません。仮想パッケージを ''provide (提供)'' するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。 |
+ | 仮想パッケージとは、それ自体は存在していないが、1つ以上のパッケージによって [[PKGBUILD#provides|provides (提供)]] 指定されている特殊なパッケージです。仮想パッケージが存在していることにより、あるパッケージの依存関係として複数の候補が存在している場合に、パッケージは特定のパッケージを依存関係として指定する必要がなくなります。仮想パッケージはその名前を使ってインストールすることはできません。仮想パッケージを ''provide (提供)'' するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。例としては [[D-Bus#実装|dbus-units]] パッケージがあります。 |
{{Tip|複数の候補が存在する場合、候補のリストは、{{ic|pacman.conf}} 内に現れる[[リポジトリ]]の順番でソートされ、そして同一のリポジトリ内にも複数の候補が存在する場合はさらにアルファベット順にソートされます。}} |
{{Tip|複数の候補が存在する場合、候補のリストは、{{ic|pacman.conf}} 内に現れる[[リポジトリ]]の順番でソートされ、そして同一のリポジトリ内にも複数の候補が存在する場合はさらにアルファベット順にソートされます。}} |
||
123行目: | 109行目: | ||
どのパッケージが gnome グループに属しているか見るには: |
どのパッケージが gnome グループに属しているか見るには: |
||
− | + | $ pacman -Sg gnome |
|
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。 |
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。 |
||
157行目: | 143行目: | ||
# pacman -Rdd ''パッケージ名'' |
# pacman -Rdd ''パッケージ名'' |
||
− | Pacman は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに ''.pacsave'' 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、{{ic|-n}} オプションを付けてください: |
+ | ''Pacman'' は、特定のアプリケーションを削除する際に、重要な設定ファイルを削除せずに ''.pacsave'' 拡張子を付けてバックアップします。これらのバックアップファイルの作成を行わないようにするには、{{ic|-n}} オプションを付けてください: |
# pacman -Rn ''パッケージ名'' |
# pacman -Rn ''パッケージ名'' |
||
− | {{Note|Pacman は、アプリケーション自身が作成した設定ファイルを削除しません (例えば、ホームディレクトリ内の "ドットファイル")。}} |
+ | {{Note|''Pacman'' は、アプリケーション自身が作成した設定ファイルを削除しません (例えば、ホームディレクトリ内の "ドットファイル")。}} |
− | ===パッケージのアップグレード=== |
+ | === パッケージのアップグレード === |
+ | {{Warning| |
||
− | Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期して''それから''システムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です): |
||
+ | * Arch ユーザーは、[[システムメンテナンス#システムのアップグレード]] セクションのガイダンスに従ってシステムを定期的にアップグレードすることが期待されます。以下のコマンドを闇雲に実行するべきではありません。 |
||
− | |||
+ | * Arch Linux は完全なシステムアップグレードのみをサポートしています。詳細は [[システムメンテナンス#部分的なアップグレードはサポートされていません]] と [[#パッケージのインストール]] を参照してください。 |
||
− | # pacman -Syu |
||
− | |||
− | {{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}} |
||
− | |||
− | Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[The Arch Way]] を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。'''システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です'''。[[Arch Linux の安定化#Arch のメンテナンス]]を見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために {{ic|.pacnew}} ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは [[Pacnew と Pacsave ファイル]]を見てください。 |
||
− | |||
− | {{Tip| |
||
− | * Pacman からの出力は {{ic|/var/log/pacman.log}} に記録されています。 |
||
− | * {{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'' が壊れていないかぎり問題が修正されます。 |
||
− | |||
− | インストールされているパッケージのアップグレードを確認したいときは {{Pkg|pacman-contrib}} パッケージに含まれている bash スクリプト '''checkupdates''' を使うことで、システムアップデートを行わずに安全に確認が行えます。 |
||
− | ===パッケージ・データベースに問い合わせる=== |
+ | === パッケージ・データベースに問い合わせる === |
− | Pacman からローカルデータベースに問い合わせるときは {{ic|-Q}} フラグを、同期データベースに問い合わせるときは {{ic|-S}} フラグを、ファイルデータベースに問い合わせるときは {{ic|-F}} フラグを使います。それぞれのフラグのサブオプションについては {{ic|pacman -Q --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 (拡張正規表現) によって、余計な検索結果が大量に出てきてしまうことがあるでしょう。そのようなときは検索対象をパッケージ名だけに絞ってみてください: |
$ pacman -Ss '^vim-' |
$ pacman -Ss '^vim-' |
||
210行目: | 178行目: | ||
リモートパッケージからパッケージファイルの名前で検索するには: |
リモートパッケージからパッケージファイルの名前で検索するには: |
||
− | $ pacman - |
+ | $ pacman -F ''検索ワード1'' ''検索ワード2'' ... |
− | パッケージ名 |
+ | パッケージ名を指定して詳細な情報を得るには: |
$ pacman -Si ''パッケージ名'' |
$ pacman -Si ''パッケージ名'' |
||
− | + | ローカルにインストールされているパッケージの詳細な情報を得るには: |
|
$ pacman -Qi ''パッケージ名'' |
$ pacman -Qi ''パッケージ名'' |
||
− | {{ic|-i}} フラグを |
+ | {{ic|-i}} フラグを2つ付けることで、バックファイルのリストとバックアップファイルの変更状態も同時に表示できます: |
$ pacman -Qii ''パッケージ名'' |
$ pacman -Qii ''パッケージ名'' |
||
232行目: | 200行目: | ||
$ pacman -Fl ''パッケージ名'' |
$ pacman -Fl ''パッケージ名'' |
||
− | ある |
+ | あるパッケージによってインストールされたファイルが存在しているか確認するには: |
+ | |||
+ | $ pacman -Qk ''パッケージ名'' |
||
+ | |||
+ | {{ic|k}} フラグを2つ付けると、より徹底したチェックが行われます。 |
||
+ | |||
+ | データベースを検索して、あるファイルがどのパッケージに属しているかを調べるには: |
||
$ pacman -Qo ''/パス/ファイル名'' |
$ pacman -Qo ''/パス/ファイル名'' |
||
240行目: | 214行目: | ||
$ pacman -F ''/パス/ファイル名'' |
$ pacman -F ''/パス/ファイル名'' |
||
− | + | 他のパッケージに必要とされていないパッケージ (孤児) の一覧を得るには: |
|
$ pacman -Qdt |
$ pacman -Qdt |
||
− | 明示的にインストールしたパッケージで、依存関係 |
+ | 明示的にインストールしたパッケージで、依存関係として必要とされていないパッケージを全て表示するには: |
$ pacman -Qet |
$ pacman -Qet |
||
− | その他の例については [[pacman |
+ | その他の例については [[pacman/ヒントとテクニック]] を参照してください。 |
==== Pactree ==== |
==== Pactree ==== |
||
− | {{Note|{{man|8|pactree}} は {{Pkg|pacman}} パッケージの一部ではなくなりました。代わりに、{{Pkg|pacman-contrib}} |
+ | {{Note|{{man|8|pactree}} は {{Pkg|pacman}} パッケージの一部ではなくなりました。代わりに、{{Pkg|pacman-contrib}} でインストールできます。}} |
− | パッケージの依存 |
+ | あるパッケージの依存関係ツリー (dependency tree、つまり、そのパッケージ'''が'''必要としているパッケージの木) を表示するには: |
$ pactree ''パッケージ名'' |
$ pactree ''パッケージ名'' |
||
− | パッケージの依存ツリーを表示するには、逆フラグ {{ic|-r}} を ''pactree'' に渡 |
+ | あるパッケージの被依存ツリー (dependant tree、つまり、そのパッケージ'''を'''必要としているパッケージの木) を表示するには、逆フラグ {{ic|-r}} を ''pactree'' に渡てください。 |
− | ====データベースの構造==== |
+ | ==== データベースの構造 ==== |
− | ''pacman'' データベースは通常、{{ic|/var/lib/pacman/sync}} にあります。{{ic|/etc/pacman.conf}} で指定された各リポジトリに |
+ | ''pacman'' データベースは通常、{{ic|/var/lib/pacman/sync}} にあります。{{ic|/etc/pacman.conf}} で指定された各リポジトリに対して、対応するデータベースファイルがこのディレクトリ内に存在します。データベースファイルは、パッケージごとに 1 つのディレクトリを含む gzip 圧縮された tar アーカイブです。たとえば、{{Pkg|which}} パッケージの場合は次のようになります: |
{{hc|$ tree which-2.21-5| |
{{hc|$ tree which-2.21-5| |
||
271行目: | 245行目: | ||
{{ic|desc}} ファイルには、パッケージの説明、依存関係、ファイルサイズ、MD5 ハッシュなどのメタデータが含まれています。 |
{{ic|desc}} ファイルには、パッケージの説明、依存関係、ファイルサイズ、MD5 ハッシュなどのメタデータが含まれています。 |
||
− | ===パッケージキャッシュの削除=== |
+ | === パッケージキャッシュの削除 === |
− | + | ''Pacman'' は、ダウンロードしたファイルを {{ic|/var/cache/pacman/pkg/}} に保存しますが、これらは古くなってもアンインストールされても自動的に削除されません。これにはいくつかの利点があります: |
|
+ | # パッケージを[[ダウングレード]]する際に、他の方法 ([[Arch Linux Archive]] など) によって以前のバージョンを入手する必要がない。 |
||
− | 現在インストールされていないパッケージキャッシュを全て削除するオプションは: |
||
+ | # アンインストールされたパッケージをキャッシュディレクトリから簡単に直接再インストールでき、リポジトリから新しくダウンロードする必要がない。 |
||
+ | しかし、ディレクトリのサイズが大きくなりすぎないようにするために、定期的にキャッシュを手動でクリーンアップする必要があります。 |
||
− | # pacman -Sc |
||
+ | {{Pkg|pacman-contrib}} パッケージで提供されている {{man|8|paccache}} スクリプトは、インストール済みパッケージとアンインストール済みパッケージのキャッシュ済みバージョンを、最も新しい3つを残して全て削除します (オプションを何も指定しなかった場合): |
||
− | {{Warning| |
||
− | * インストールしたパッケージが安定していて、[[パッケージのダウングレード|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[Arch Linux Archive]] などから古いパッケージを取得するしか方法がなくなってしまいます。 |
||
− | * {{ic|pacman -Scc}} でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。 |
||
− | }} |
||
+ | # paccache -r |
||
− | 上記の欠点のため、{{ic|-Sc}} や {{ic|-Scc}} スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます: |
||
+ | {{ic|paccache.timer}} を[[有効化]]し[[起動]]すれば、週に1度、未使用のパッケージキャッシュを削除してくれます。 |
||
− | *{{Pkg|pacman-contrib}} パッケージに入っている ''paccache'' コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します: {{bc|$ paccache -r}} ただし、この方法では ''paccache'' はパッケージがインストールされているかどうかを確認''しない''ため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります: {{bc|$ paccache -ruk0}} 他のオプションは {{ic|paccache -h}} を見て下さい。 |
||
+ | {{Tip|1=''pacman'' のトランザクションの度にこの操作を自動で実行する[[#フック|フック]]を作成することもできます。フックを導入する {{AUR|paccache-hook}} を[[インストール]]することもできます。[https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 フックの例]もあります。}} |
||
− | *もしくは、{{AUR|pkgcacheclean}} をインストールして使うこともできます: {{bc|# pkgcacheclean}} |
||
+ | 何個の新しいバージョンのキャッシュを保持するかを指定することも可能です。最も新しいバージョン1つだけを保持するには: |
||
− | {{Tip|1=[[#フック]]を作成して pacman の操作後に上記のコマンドを自動的に実行することができます。サンプルが [https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 こちらのスレッド] に載っています。}} |
||
+ | # paccache -rk1 |
||
− | ===追加コマンド=== |
||
+ | {{ic|-u}}/{{ic|--uninstalled}} スイッチを加えれば、アンインストールされたパッケージに対象を絞ることもできます。例えば、アンインストールされたパッケージのキャッシュを全て削除するには: |
||
− | システムのアップグレードとパッケージのインストール (ワンライナー): |
||
+ | # paccache -ruk0 |
||
− | # pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ... |
||
+ | その他のオプションは {{ic|paccache -h}} を見てください。 |
||
− | インストールをしないで、パッケージをダウンロードする: |
||
+ | |||
+ | また、''Pacman'' にも、パッケージキャッシュと、{{ic|/etc/pacman.conf}} 設定ファイルにもはや存在しないリポジトリの残留データベースファイルをクリーンアップする組み込みコマンドが存在します。しかし、''pacman'' では、パッケージキャッシュのバージョンをいくつ残すか指定することができないため、''paccache'' のデフォルトオプションよりも強引です。 |
||
+ | |||
+ | 現在インストールされていないパッケージのキャッシュと、未使用の同期データベースをを全て削除するには: |
||
+ | |||
+ | # pacman -Sc |
||
+ | |||
+ | 全てのキャッシュファイルを削除するには、{{ic|c}} スイッチを2度使用してください。これは最も強引なアプローチであり、キャッシュディレクトリには何も残りません: |
||
+ | |||
+ | # pacman -Scc |
||
+ | |||
+ | {{Warning|ディスクの空き容量がどうしても必要でない限り、インストール済みパッケージとアンインストール済みパッケージのキャッシュを全て削除することは避けるべきです。さもないと、パッケージをダウングレードしたり再インストールしたりするためにファイルを再ダウンロードしなければならなくなってしまいます。}} |
||
+ | |||
+ | さらに、キャッシュをクリーンアップするツールとして {{AUR|pkgcacheclean}} と {{AUR|pacleaner}} もあります。 |
||
+ | |||
+ | === その他のコマンド === |
||
+ | |||
+ | パッケージをダウンロードするが、インストールはしない: |
||
# pacman -Sw ''パッケージ名'' |
# pacman -Sw ''パッケージ名'' |
||
− | リポジトリ |
+ | リモートリポジトリ以外の'ローカル'のパッケージをインストールする (例えば、[[AUR]] のパッケージ): |
− | # pacman -U / |
+ | # pacman -U ''/path/to/package/package_name-version.pkg.tar.zst'' |
+ | ローカルパッケージのコピーを ''pacman'' のキャッシュに保持するには: |
||
− | リポジトリにない、リモートのパッケージを URI を入力してインストール: |
||
− | # pacman -U |
+ | # 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}} コマンドによって文字通り指定されたパッケージ。 |
||
331行目: | 321行目: | ||
パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます: |
パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます: |
||
− | # pacman -S --asdeps '' |
+ | # pacman -S --asdeps ''パッケージ名'' |
− | + | 明示的にインストールしたパッケージが、必須でない機能のための[[optdepends|任意の依存パッケージ]]を提供している場合があります。大抵、このコマンドはそのようなパッケージをインストールするために使用されます。 |
|
+ | {{Tip|任意の依存パッケージを {{ic|--asdeps}} でインストールすると、[[pacman/ヒントとテクニック#使用していないパッケージ (孤立したパッケージ) の削除|孤立したパッケージを削除]]するときに ''pacman'' によって任意の依存パッケージも削除されるようになります。}} |
||
− | パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。 |
||
+ | |||
+ | パッケージの'''再'''インストールを行っても、デフォルトではインストール理由は変更されません。 |
||
明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。 |
明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。 |
||
− | 既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行: |
+ | 既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行してください: |
− | # pacman -D --asdeps '' |
+ | # pacman -D --asdeps ''パッケージ名'' |
+ | Use {{ic|--asexplicit}} to do the opposite operation. |
||
− | インストール理由を「明示的にインストール」に変えたいときは {{ic|--asexplicit}} を使ってください。 |
||
− | {{Note|{{ic|pacman -Syu '' |
+ | {{Note|{{ic|pacman -Syu ''パッケージ名'' --asdeps}} のように、アップグレードをするときに {{ic|--asdeps}} や {{ic|--asexplicit}} オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。}} |
− | ===特定のファイルが含まれているパッケージを検索=== |
+ | === 特定のファイルが含まれているパッケージを検索 === |
ファイルデータベースを同期してください: |
ファイルデータベースを同期してください: |
||
355行目: | 347行目: | ||
ファイルが含まれているパッケージを検索するには: |
ファイルが含まれているパッケージを検索するには: |
||
− | + | {{hc|$ 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 |
|
+ | }} |
||
− | {{Tip| |
+ | {{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}} ファイルを見てください。 |
||
− | ==== 並列ダウンロードを有効にする ==== |
||
+ | ==== アップデートする前にバージョンを比較 ==== |
||
− | ''pacman'' 6.0 はパッケージを同時にダウンロードするオプションを導入しました。この機能を使用するには、{{ic|/etc/pacman.conf}} で {{ic|ParallelDownloads}} を正の整数に (例:{{ic|5}}) など設定する必要があります。このオプションが設定されていない場合、パッケージは順番にダウンロードされます。 |
||
+ | 利用可能なパッケージの新旧のバージョンを確認したい場合、{{ic|/etc/pacman.conf}} の "VerbosePkgLists" という行をアンコメントしてください。{{ic|pacman -Syu}} の出力が以下のようになります: |
||
− | ====アップデートする前にバージョンを比較==== |
||
+ | パッケージ (6) 古いバージョン 新しいバージョン 最終的な変化 ダウンロード容量 |
||
− | 利用可能なパッケージの新旧バージョンを確認したい場合、{{ic|/etc/pacman.conf}} の "VerbosePkgLists" 行をアンコメントしてください。{{ic|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/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}} 行を追加してください。また、[[Wikipedia:ja:グロブ|グロブ]]パターンも使用できます。一度に限ってパッケージをアップグレードしないようにするには、コマンドラインで {{ic|--ignore}} オプションを使用してください (複数のパッケージを指定する場合は、コンマで区切ってください)。 |
+ | {{ic|pacman -S}} を使えば、依然として対象のパッケージをアップグレードすることが可能です。この場合、''pacman'' はパッケージが {{ic|IgnorePkg}} 文に含まれていることを知らせてくれます。 |
||
− | ====アップグレードさせないグループを設定==== |
||
− | + | ==== アップグレードさせないパッケージグループを設定 ==== |
|
+ | |||
+ | {{Warning|[[部分的なアップグレード]]はサポートされていないので、パッケージグループのアップグレードをスキップする際は気をつけてください。。}} |
||
+ | |||
+ | パッケージの場合と同様に、アップグレードさせないパッケージグループを指定することもできます: |
||
IgnoreGroup=gnome |
IgnoreGroup=gnome |
||
− | ====アップグレードさせないファイルを設定==== |
+ | ==== アップグレードさせないファイルを設定 ==== |
− | {{Ic|NoUpgrade}} ディレクティブで指定されたファイルはパッケージのインストール |
+ | {{Ic|NoUpgrade}} ディレクティブで指定されたファイルは、パッケージのインストール/アップグレードの際に変更を加えられなくなり、代わりに新しいファイルは ''.pacnew'' 拡張子が付けられてインストールされます。 |
NoUpgrade=''path/to/file'' |
NoUpgrade=''path/to/file'' |
||
+ | 以下のようにして複数のファイルを指定することができます: |
||
− | {{Note|パスはパッケージ内のファイルを参照します。したがって、一番最初のスラッシュは必要ありません。}} |
||
+ | NoUpgrade=''path/to/file1 path/to/file2'' |
||
− | ====インストールさせないファイルを設定==== |
||
+ | {{Note|パスはパッケージアーカイブ内のファイルを示します。なので、一番最初にスラッシュを置かないでください。}} |
||
− | 特定のディレクトリのインストールをさせないようにするには {{Ic|NoExtract}} リストにディレクトリを加えます。例えば、[[systemd]] ユニットのインストールを避けるには: |
||
+ | ==== インストールさせないファイルを設定 ==== |
||
− | NoExtract=usr/lib/systemd/system/* |
||
+ | 特定のディレクトリまたはファイルをインストールさせないようにするには、{{Ic|NoExtract}} リストにそのディレクトリを加えてください。例えば、[[systemd]] ユニットをインストールさせないようにするには: |
||
− | もしくは {{AUR|localepurge}} と同じように、英語以外のローカライゼーションのインストールを止めるには: |
||
− | NoExtract |
+ | NoExtract=usr/lib/systemd/system/* |
− | 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|!}} |
+ | 後ろのルールは前のルールを上書きします。また、{{ic|!}} を前に付けることでルールを無効化できます。 |
− | {{Tip| |
+ | {{Tip|Pacman は、''localepurge'' や ''bleachbit'' によってロケールが削除されたパッケージをアップデートする際に、ロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには、{{ic|pacman.conf}} の {{ic|CheckSpace}} オプションをコメントアウトしてください。ただし、容量チェックの機能が全てのパッケージで無効化されることに注意してください。}} |
− | ====複数の設定ファイルを使用==== |
+ | ==== 複数の設定ファイルを使用 ==== |
− | 設定ファイルが複数あって (メインの設定と [[ |
+ | 設定ファイルが複数あって (メインの設定と [[testing]] リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで {{ic|Include}} オプションを宣言することができます。例: |
− | Include = /path/to/common/settings |
+ | Include = ''/path/to/common/settings'' |
− | {{ic|/path/to/common/settings}} は共有したいオプションが存在するファイルに置き換えてください。 |
+ | {{ic|''/path/to/common/settings''}} は共有したいオプションが存在するファイルに置き換えてください。 |
− | ===フック=== |
+ | ==== フック ==== |
− | + | Pacman は {{ic|/usr/share/libalpm/hooks/}} ディレクトリ内に存在するフックをトランザクションの前後に実行することができます。その他のフックディレクトリを指定したい場合は、{{ic|pacman.conf}} 内で {{ic|HookDir}} オプションを使ってください (デフォルトは {{ic|/etc/pacman.d/hooks}} です)。フックファイルの名前には必ず ''.hook'' を後ろに付ける必要があります。Pacman フックはインタラクティブではありません。 |
|
− | Pacman フックは様々なことに使われています。例えば、{{ic|systemd-sysusers}} と {{ic|systemd-tmpfiles}} を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として {{pkg|tomcat8}} パッケージでは {{ic|tomcat8}} という名前のシステムユーザーが必要だと指定されており特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの {{ic|systemd-sysusers.hook}} と {{ic|systemd-tmpfiles.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}} を実行します。 |
− | alpm のフックに関する詳細は {{man|5|alpm-hooks}} |
+ | alpm のフックに関する詳細は {{man|5|alpm-hooks}} を参照してください。 |
=== リポジトリとミラー === |
=== リポジトリとミラー === |
||
479行目: | 490行目: | ||
次のエラーが表示される場合: [https://bbs.archlinux.org/viewtopic.php?id=56373] |
次のエラーが表示される場合: [https://bbs.archlinux.org/viewtopic.php?id=56373] |
||
+ | エラー: 処理を完了できませんでした (衝突しているファイル) |
||
− | error: could not prepare transaction |
||
+ | ''package'': ''/path/to/file'' がファイルシステムに存在しています |
||
− | error: failed to commit transaction (conflicting files) |
||
+ | エラーが発生したため、パッケージは更新されませんでした。 |
||
− | ''package'': ''/path/to/file'' exists in filesystem |
||
− | Errors occurred, no packages were upgraded. |
||
− | これは、''pacman'' がファイルの |
+ | これは、''pacman'' がファイルの衝突を検出し、仕様によりファイルを上書きしないために発生します。これは仕様によるものであり、欠陥ではありません。 |
− | + | 通常、この問題の解決法は自明です (とはいえ、なぜこれらのファイルがそこに存在しているのかを念の為に調べてみるべきでしょう)。まず、他のパッケージがそのファイルを所有していないか調べるのが安全です ({{ic|pacman -Qo ''/path/to/file''}})。そのファイルが他のパッケージによって所有されている場合、[[バグ報告ガイドライン|バグレポートを提出]]してください。そのファイルが他のパッケージのよって所有されていない場合、"ファイルシステムに存在している"方のファイルの名称を変更し、アップデートのコマンドを再度実行してください。問題がなければ、そのファイルは削除しても良いです。 |
|
− | + | 何らかのプログラムを ''pacman'' を使用せずに (例えば {{ic|make install}} などで) 手動でインストールしている場合、プログラム自体とそのプログラムに属するファイルを全て削除しなければなりません。[[pacman/ヒントとテクニック#どのパッケージにも所有されていないファイルを特定する]] も参照してください。 |
|
− | インストールされた |
+ | インストールされたパッケージは、そのパッケージに関するメタデータを含む {{ic|/var/lib/pacman/local/''package-version''/files}} ファイルを提供します。このファイルが破損している、空である、または存在しない場合、パッケージの更新時に {{ic|file exists in filesystem}} エラーが発生します。そのようなエラーは通常、1つのパッケージだけが原因です。原因のパッケージに属するファイルの名前を変えて後で削除する代わりに、{{ic|pacman -S --overwrite ''glob'' ''package''}} を実行して {{ic|''glob''}} にマッチするファイルを上書きすることもできます。 |
{{Warning|通常、{{ic|--overwrite}} スイッチの使用は避けてください。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照してください。}} |
{{Warning|通常、{{ic|--overwrite}} スイッチの使用は避けてください。[[システムメンテナンス#特定の pacman コマンドを避けてください]] を参照してください。}} |
||
496行目: | 506行目: | ||
=== "Failed to commit transaction (invalid or corrupted package)" エラー === |
=== "Failed to commit transaction (invalid or corrupted package)" エラー === |
||
− | {{ic|/var/cache/pacman/pkg/}} |
+ | {{ic|/var/cache/pacman/pkg/}} から ''.part'' ファイル (部分的にダウンロードされたパッケージ) を探し、そのファイルを削除してください (これは、{{ic|pacman.conf}} でカスタムの {{ic|XferCommand}} を使用した場合に起こりやすいです): |
# find /var/cache/pacman/pkg/ -iname "*.part" -delete |
# find /var/cache/pacman/pkg/ -iname "*.part" -delete |
||
− | + | また、''archlinux-keyring'' が古く、''pacman'' が署名を検証できない場合にも、このエラーが発生することがあります。この問題を解決方法と防止方法は [[pacman/パッケージの署名#システムの定期的な更新]] を参照してください。 |
|
=== "Failed to init transaction (unable to lock database)" エラー === |
=== "Failed to init transaction (unable to lock database)" エラー === |
||
− | ''pacman'' |
+ | ''pacman'' がパッケージデータベースを変更する際に (パッケージのインストール時など)、''pacman'' はロックファイル {{ic|/var/lib/pacman/db.lck}} を作成します。これにより、複数の ''pacman'' インスタンスが同時にパッケージデータベースを変更してしまうことを防ぎます。 |
− | データベースの変更中に |
+ | ''pacman'' がデータベースの変更中に中断されてしまった場合、古いロックファイルが残ってしまう可能性があります。''pacman'' インスタンスが実行中でないことが確実である場合は、ロックファイルを削除してください: |
# rm /var/lib/pacman/db.lck |
# rm /var/lib/pacman/db.lck |
||
− | {{Tip|{{ic|fuser /var/lib/pacman/db.lck}} を root として実行 |
+ | {{Tip|{{ic|fuser /var/lib/pacman/db.lck}} を root として実行すれば、ロックファイルを使用しているプロセスが存在するか調べることができます。}} |
=== インストール時にパッケージを取得できない === |
=== インストール時にパッケージを取得できない === |
||
− | + | 具体的には次のようなエラーです: {{ic|Not found in sync db}}、{{ic|対象が見つかりませんでした}}、{{ic|ファイルの取得に失敗しました}}。 |
|
− | まず、パッケージが実際に存在することを確認し |
+ | まず、パッケージが実際に存在することを確認してください。パッケージが存在することが確実であるならば、パッケージデータベースが古いのかもしれません。{{ic|pacman -Syu}} を実行して、パッケージデータベースを更新してシステムをアップグレードしてみてください。また、[[ミラー]]が最新であり、[[#リポジトリとミラー|リポジトリ]]が正しく設定されていることも確認してください。 |
− | また、パッケージ |
+ | また、インストールしたいパッケージが含まれているリポジトリがシステムで有効化されていない可能性もあります。例えば、パッケージが [[multilib]] リポジトリにあるが、{{ic|pacman.conf}} で ''multilib'' が有効化されていない場合、このエラーが発生します。 |
− | [[FAQ# |
+ | [[FAQ#公式リポジトリにある共用ライブラリはそれぞれどうして一つのバージョンしか用意されてないんですか?]] も参照してください。 |
− | ===アップグレード中に |
+ | === アップグレードの中断によって起動できなくなったシステムを修復する === |
+ | {{Accuracy|これには複数の潜在的な問題があります。[[:en:Talk:pacman#More details in pacman crashes during an update]] を参照。}} |
||
− | パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合: |
||
+ | 電源断やカーネルパニック、ハードウェア障害によって、アップデートが中断されてしまうことがあります。ほとんどの場合、システムが大きなダメージを負うことはありませんが、起動できなくなってしまうことはあります。 |
||
− | #Arch インストールメディアを使って起動してください。 |
||
+ | |||
− | #root でルートファイルシステムをマウントします ({{ic|mount /dev/sdaX /mnt}})。{{ic|df -h}} で十分な空き容量があることを確認してください。 |
||
+ | # [[USB インストールメディア]] を用意して、それを起動してください。 |
||
− | #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|arch-chroot}} してください。 |
||
− | #アップグレード後、アップグレードがないことと壊れているパッケージを確認してください: {{ic|find /mnt/usr/lib -size 0}}。 |
||
− | #{{ic| |
+ | # 次に、アップデートを完全にやり直します。{{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 |
||
+ | |||
+ | アップグレードを''完全に''やり直すのは、適切なスクリプトレットとフックが実行されるようにするために必要だからです。 |
||
+ | |||
+ | === アップグレード中に pacman がクラッシュしてしまった === |
||
+ | |||
+ | ''pacman'' が "database write" (データベース書き込み) エラーが発生してクラッシュし、その後、パッケージのアンインストール/再インストール/アップグレードができなくなってしまった場合、以下を行ってください: |
||
+ | |||
+ | # Arch Linux の [[USB インストールメディア]]を起動してください。システム上の ''pacman'' と同じバージョンかより新しいものを使うために、最近のメディアを使うことが望ましいです。 |
||
+ | # システムのルートファイルシステムをマウントしてください (例えば、{{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: command not found ==== |
==== pacman: command not found ==== |
||
+ | {{ic|/var/cache/pacman/pkg}} がシンボリックリンクである場合、''pacman'' は自己アップデート時に同じディレクトリを作成しようとするため、このシンボリックリンクは削除されます。これにより、アップデートが失敗します。その結果、{{ic|/usr/bin/pacman}} と {{Pkg|pacman}} パッケージに含まれる他のコンテンツが消えてしまいます (訳注: [[#パッケージのインストール/アップグレード/アンインストール時に起こること]] の 4.2 を参照)。 |
||
− | pacmanのキャッシュディレクトリをシンボリックリンクしてはいけません。 |
||
+ | |||
− | 代わりに別のキャッシュディレクトリを構成するか、バインドマウントを使用してください。 |
||
+ | {{ic|/var/cache/pacman/pkg}} は ''pacman'' によって管理されているため、シンボリックリンクにしないでください。代わりに {{ic|CacheDir}} オプションを使うか、このディレクトリをバインドマウントしてください ([[#パッケージのキャッシュディレクトリ]] を参照)。 |
||
− | [https://bbs.archlinux.org/viewtopic.php?id=241213] |
||
+ | |||
+ | この問題が既に発生していて、システムが壊れてしまっている場合、''pacman'' パッケージに含まれる {{ic|/usr}} 内のコンテンツを手動で展開して ''pacman'' を復元し、その後、適切に ''pacman'' を再インストールしてください。詳細は {{Bug|73306}} や[https://bbs.archlinux.org/viewtopic.php?id=241213 関連するフォーラムのスレッド]を参照してください。 |
||
− | === |
+ | === Pacman の手動再インストール === |
− | ==== pacman-static を使 |
+ | ==== pacman-static を使う ==== |
− | {{AUR|pacman-static}} は pacman を静的にコンパイルしたものなので、システム上のライブラリが |
+ | {{AUR|pacman-static}} は ''pacman'' を静的にコンパイルしたものなので、システム上のライブラリが機能していなくても実行できます。これは、[[部分的なアップグレード]]によって ''pacman'' が実行できなくなってしまった場合にも便利です。 |
− | 固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法 |
+ | {{AUR|pacman-static}} パッケージのページにある固定コメントと PKGBUILD には、バイナリを直接ダウンロードする方法が記されています。''pacman'' を再インストールしたり、部分的なアップグレードが起こった際にシステム全体をアップグレードしたりする際にこの方法が使えます。 |
− | ==== 外部の pacman を使 |
+ | ==== 外部の pacman を使う ==== |
− | {{ic|pacman-static}} でさえ動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の |
+ | {{ic|pacman-static}} でさえも動作しない場合は、外部の ''pacman'' を使用してリカバリできます。最も簡単な方法の一つは、[[archiso]] を使い、{{ic|--sysroot}} か {{ic|--root}} で、操作を行うシステム上のマウントポイントを指定することです。{{ic|--sysroot}} に必要なファイルシステムをマウントする方法については、[[Chroot#chroot を使う]] を参照してください。 |
==== 手動で抽出する ==== |
==== 手動で抽出する ==== |
||
− | {{Warning| |
+ | {{Warning|この方法では、一歩間違うとシステムの状態をさらに悪化させてしまいます。[[#アップグレード中に pacman がクラッシュしてしまった]] に書かれてある方法を使えない場合の最後の手段としてのみ、以下を行ってください。}} |
''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います: |
''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います: |
||
− | #インストールする |
+ | # インストールすべき {{Pkg|pacman}} の依存関係を調べる。 |
− | # |
+ | # それぞれの依存パッケージを[[ミラー]]からダウンロードする。 |
− | #パッケージをルートディレクトリに展開 |
+ | # 各パッケージをルートディレクトリに展開する。 |
− | #{{ic|pacman -S -- |
+ | # {{ic|pacman -S --overwrite}} を実行してパッケージデータベースを更新することで、パッケージを再インストールする。 |
− | # |
+ | # システムの完全なアップグレードを行う。 |
− | + | 正常に動作している Arch システムがあれば、以下のコマンドで ''pacman'' の依存関係リストを見ることができます: |
|
$ pacman -Q $(pactree -u pacman) |
$ pacman -Q $(pactree -u pacman) |
||
− | 問題によっては |
+ | しかし、発生している問題によっては、それらの依存パッケージのうち数個だけをアップデートすれば良い場合もあります。パッケージは以下のようにして展開します: |
− | # tar -xvpwf ''package.tar. |
+ | # tar -xvpwf ''package.tar.zst'' -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO |
− | {{ic|w}} フラグを使 |
+ | 注意点として、{{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}} (キーは[[ブートローダー]]に依ります) を押してください。}} |
||
− | '''1.''' ''Fallback'' エントリを試す: |
||
+ | システムが起動したら、コンソールかターミナルから以下のコマンドを実行して initramfs イメージを再ビルドしてください (以下のコマンドは標準の {{Pkg|linux}} カーネルの場合です): |
||
− | {{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ([[Syslinux]] の場合) や {{ic|e}} ([[GRUB]] や [[systemd-boot]] の場合) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して(ブートローダによる)新しいパラメータを使って起動できます。}} |
||
+ | # mkinitcpio -p linux |
||
− | システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します: |
||
+ | これでうまく行かなかった場合、最新の Arch リリース (CD/DVD あるいは USB スティック) を起動し、ルートパーティションとブートパーティションをそれぞれ {{ic|/mnt}} と {{ic|/mnt/boot}} に[[マウント]]してください。そして、''arch-chroot'' を使ってルートパーティションに [[chroot]] してください: |
||
− | {{bc|# mkinitcpio -p linux}} |
||
− | |||
− | '''2.''' それが機能しない場合は、現在の Arch リリース (CD/DVDまたはUSBスティック) から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。 |
||
# arch-chroot /mnt |
# arch-chroot /mnt |
||
591行目: | 617行目: | ||
{{Note| |
{{Note| |
||
− | * |
+ | * 最新の Arch リリースを持っていない場合や、Arch 以外の "ライブ" Linux ディストリビューションしかない場合、昔ながらの方法で [[chroot]] することができます。当然、{{ic|arch-chroot}} スクリプトを実行する場合よりも、たくさん入力しなければなりません。 |
− | * |
+ | * ''pacman'' が {{ic|Could not resolve host}} というエラーで失敗してしまう場合、[[ネットワーク設定#接続の確認|インターネット接続を確認してください]]。 |
− | * |
+ | * パッケージを再インストールする必要があるが、arch-chroot や chroot の環境に入れない場合、コマンド {{ic|pacman --sysroot /mnt -Syu foo bar}} を使えば、別のルートパーティションから ''pacman'' を使うことができます。 |
+ | }} |
||
− | カーネル ({{Pkg|linux}} パッケージ) を再インストールす |
+ | カーネル ({{Pkg|linux}} パッケージ) を再インストールすれば、{{ic|mkinitcpio -p linux}} が実行されて initramfs イメージが再生成されます。イメージの再生成を別途行う必要はありません。 |
− | その後、{{ic|exit}}、{{ic|umount/mnt/{boot,} }} |
+ | その後、{{ic|exit}}、{{ic|umount /mnt/{boot,} }}、そして {{ic|reboot}} を実行することが推奨されます。 |
− | === |
+ | === "Warning: current locale is invalid; using default "C" locale" エラー === |
− | + | このエラーメッセージが言っている通り、ロケールが正しく設定されていません。[[ロケール]]の記事を参照してください。 |
|
− | === |
+ | === Pacman がプロキシの設定に従わない === |
− | 環境変数 ({{ic|$http_proxy}} |
+ | 関連する環境変数 ({{ic|$http_proxy}}、{{ic|$ftp_proxy}} など) が設定されていることを確認してください。''pacman'' を [[sudo]] で実行する場合、[[sudo#環境変数|環境変数を pacman に渡す]]ように sudo を設定する必要があります。また、[[GnuPG#鍵サーバー|dirmngr]] の設定ファイル {{ic|/etc/pacman.d/gnupg/dirmngr.conf}} で、鍵をリフレッシュする際にプロキシの設定に従うようにする {{ic|honor-http-proxy}} オプションが存在していることも確認してください。 |
− | ===明示的にインストール |
+ | === パッケージが明示的にインストールされたか依存関係としてインストールされたかの情報を保持しつつ、全パッケージを再インストールするには? === |
− | ネイティブ |
+ | ネイティブなパッケージ (つまり、同期データベース内に存在するパッケージ) を全て再インストールするには、{{ic|pacman -Qnq {{!}} pacman -S -}} か {{ic|pacman -S $(pacman -Qnq)}} を実行してください ({{ic|-S}} オプションはデフォルトでインストール理由を維持します)。 |
− | 次に |
+ | 次に、外部のパッケージを全て再インストールする必要があります。これらのパッケージの一覧は {{ic|pacman -Qmq}} で得られます。 |
=== "Cannot open shared object file" エラー === |
=== "Cannot open shared object file" エラー === |
||
− | 以前の ''pacman'' トランザクション |
+ | どうやら、以前の ''pacman'' トランザクションで、''pacman'' 自体が必要とする共有ライブラリが削除されたか破損したようです。 |
− | この |
+ | この問題を解決するには、必要なライブラリをファイルシステム上に手動で展開する必要があります。まず、必要なライブラリを含むパッケージを調べ、''pacman'' キャッシュ ({{ic|/var/cache/pacman/pkg/}}) からそのパッケージを見つけてください。そして、その共有ライブラリをファイルシステム上へ展開してください。これで ''pacman'' が実行できるようになりました。 |
− | + | その後、壊れたパッケージを[[#特定のパッケージのインストール|再インストール]]する必要があります。注意点として、システムファイルがファイルシステム上に展開されたことを ''pacman'' は知らないため、{{ic|--overwrite}} フラグを使用する必要があります。Pacman は、先程の共有ライブラリファイルをパッケージのものに適切に置き換えてくれます。 |
|
− | + | やるべきことは以上です。あとはシステムの残りも更新してください。 |
|
===パッケージのダウンロード時にフリーズする=== |
===パッケージのダウンロード時にフリーズする=== |
||
629行目: | 656行目: | ||
=== Failed retrieving file 'core.db' from mirror === |
=== Failed retrieving file 'core.db' from mirror === |
||
− | [[ミラー]] |
+ | [[ミラー]]を正しく設定しているにも関わらずこのエラーが発生する場合、別の[[Resolv.conf|ネームサーバー]]を設定してみてください。 |
=== error: 'local-package.pkg.tar': permission denied === |
=== error: 'local-package.pkg.tar': permission denied === |
||
− | {{ic|pacman -U}} を使用して sshfs マウントにパッケージをインストールしようとしてこのエラーが発生 |
+ | {{ic|pacman -U}} を使用して sshfs のマウントポイント上にパッケージをインストールしようとしてこのエラーが発生する場合、インストールしたいパッケージをローカルのディレクトリに移動し、もう一度インストールしてみてください。 |
=== error: could not determine cachedir mount point /var/cache/pacman/pkg === |
=== error: could not determine cachedir mount point /var/cache/pacman/pkg === |
||
− | + | Chroot 環境内で {{ic|pacman -Syu}} などを実行した際に以下のエラーが発生する場合: |
|
+ | エラー: キャッシュディレクトリ /var/cache/pacman/pkg のマウントポイントを決定できませんでした |
||
− | error: could not determine cachedir mount point /var/cache/pacman/pkg |
||
+ | エラー: 処理を完了できませんでした (空き容量が足りません) |
||
− | error: failed to commit transaction (not enough free disk space) |
||
− | こ |
+ | このエラーのよくある原因は、chroot したディレクトリがマウントポイントでないことです。解決策は、[[既存の Linux からインストール#基本ツールをダウンロード]] に書かれてあるノートを見てください。また、{{man|8|arch-chroot}} には、バインとマウントを使って chroot ディレクトリをマウントポイント化する方法について例と共に説明されています。 |
=== error: GPGME error: No data === |
=== error: GPGME error: No data === |
||
− | パッケージを更新できず |
+ | パッケージを更新できず、このエラーが発生する場合は、更新する前に {{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|/}} ファイルシステムにインストールされているパッケージよりも新しい場合、これはルートファイルシステムをローカルデータベースと再同期させる最適な方法です。 |
||
+ | |||
+ | == 参照 == |
||
+ | * {{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 はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。
Pacman は C 言語で書かれており、パッケージングに bsdtar(1) tar フォーマットを使用します。
目次
- 1 使い方
- 2 設定
- 3 トラブルシューティング
- 3.1 "Failed to commit transaction (conflicting files)" エラー
- 3.2 "Failed to commit transaction (invalid or corrupted package)" エラー
- 3.3 "Failed to init transaction (unable to lock database)" エラー
- 3.4 インストール時にパッケージを取得できない
- 3.5 アップグレードの中断によって起動できなくなったシステムを修復する
- 3.6 アップグレード中に pacman がクラッシュしてしまった
- 3.7 Pacman の手動再インストール
- 3.8 再起動後に "Unable to find root device" エラー
- 3.9 "Warning: current locale is invalid; using default "C" locale" エラー
- 3.10 Pacman がプロキシの設定に従わない
- 3.11 パッケージが明示的にインストールされたか依存関係としてインストールされたかの情報を保持しつつ、全パッケージを再インストールするには?
- 3.12 "Cannot open shared object file" エラー
- 3.13 パッケージのダウンロード時にフリーズする
- 3.14 Failed retrieving file 'core.db' from mirror
- 3.15 error: 'local-package.pkg.tar': permission denied
- 3.16 error: could not determine cachedir mount point /var/cache/pacman/pkg
- 3.17 error: GPGME error: No data
- 3.18 壊れている、または同期されていないパッケージを再インストールする
- 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 (提供) するパッケージをインストールすると、その仮想パッケージがシステムにインストールされたことになります。例としては dbus-units パッケージがあります。
パッケージグループのインストール
パッケージグループに属しているパッケージをすべて同時にインストールすることができます。例えば:
# 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 からローカルデータベースに問い合わせるときは -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 -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
あるパッケージの依存関係ツリー (dependency tree、つまり、そのパッケージが必要としているパッケージの木) を表示するには:
$ pactree パッケージ名
あるパッケージの被依存ツリー (dependant tree、つまり、そのパッケージを必要としているパッケージの木) を表示するには、逆フラグ -r
を pactree に渡てください。
データベースの構造
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/
に保存しますが、これらは古くなってもアンインストールされても自動的に削除されません。これにはいくつかの利点があります:
- パッケージをダウングレードする際に、他の方法 (Arch Linux Archive など) によって以前のバージョンを入手する必要がない。
- アンインストールされたパッケージをキャッシュディレクトリから簡単に直接再インストールでき、リポジトリから新しくダウンロードする必要がない。
しかし、ディレクトリのサイズが大きくなりすぎないようにするために、定期的にキャッシュを手動でクリーンアップする必要があります。
pacman-contrib パッケージで提供されている paccache(8) スクリプトは、インストール済みパッケージとアンインストール済みパッケージのキャッシュ済みバージョンを、最も新しい3つを残して全て削除します (オプションを何も指定しなかった場合):
# paccache -r
paccache.timer
を有効化し起動すれば、週に1度、未使用のパッケージキャッシュを削除してくれます。
何個の新しいバージョンのキャッシュを保持するかを指定することも可能です。最も新しいバージョン1つだけを保持するには:
# paccache -rk1
-u
/--uninstalled
スイッチを加えれば、アンインストールされたパッケージに対象を絞ることもできます。例えば、アンインストールされたパッケージのキャッシュを全て削除するには:
# paccache -ruk0
その他のオプションは paccache -h
を見てください。
また、Pacman にも、パッケージキャッシュと、/etc/pacman.conf
設定ファイルにもはや存在しないリポジトリの残留データベースファイルをクリーンアップする組み込みコマンドが存在します。しかし、pacman では、パッケージキャッシュのバージョンをいくつ残すか指定することができないため、paccache のデフォルトオプションよりも強引です。
現在インストールされていないパッケージのキャッシュと、未使用の同期データベースをを全て削除するには:
# pacman -Sc
全てのキャッシュファイルを削除するには、c
スイッチを2度使用してください。これは最も強引なアプローチであり、キャッシュディレクトリには何も残りません:
# pacman -Scc
さらに、キャッシュをクリーンアップするツールとして pkgcachecleanAUR と pacleanerAUR もあります。
その他のコマンド
パッケージをダウンロードするが、インストールはしない:
# 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 パッケージ名
明示的にインストールしたパッケージが、必須でない機能のための任意の依存パッケージを提供している場合があります。大抵、このコマンドはそのようなパッケージをインストールするために使用されます。
パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。
明示的にインストールしたパッケージのリストは pacman -Qe
で表示でき、依存パッケージのリストは pacman -Qd
で表示できます。
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行してください:
# pacman -D --asdeps パッケージ名
Use --asexplicit
to do the opposite operation.
特定のファイルが含まれているパッケージを検索
ファイルデータベースを同期してください:
# 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
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する pkgfile をインストールしてください。
パッケージのインストール/アップグレード/アンインストール時に起こること
成功時のトランザクションは、5つのステップと、トランザクション前と後のフックで構成されます:
- データベースがロックされていない場合、トランザクションを初期化する。
- トランザクション中に追加/削除すべきパッケージを選択する。
- 同期データベース、パッケージ、及びパッケージ間の依存関係のサニティチェックを行い、コマンドラインフラグに基づいてトランザクションの準備をする。
- トランザクションを実行する:
- 必要に応じてパッケージをダウンロードする (
_alpm_sync_load
)。 - pacman の既存の
PreTransaction
フックが適用される場合、それらのフックを実行する。 - 最終的に置き換えられるパッケージ、衝突するパッケージ、明示的に削除するように指定されたパッケージを削除する。
- 追加するべきパッケージが存在する場合、各パッケージに対して以下を実行する:
- パッケージにインストールスクリプトが存在する場合、そのスクリプトの
pre_install
関数を実行する (アップグレードする場合はpre_upgrade
が、削除される場合はpre_remove
が代わりに実行されます)。 - 以前のバージョンのパッケージのファイルを全て削除する (パッケージをアップグレードまたは削除する場合)。ただし、パッケージによって設定ファイルであると指定されたファイルに関しては、削除しない (pacman/Pacnew と Pacsave を参照)。
- パッケージを解凍し、含まれているファイルをファイルシステムに保存する (パッケージをインストールまたはアップグレードする場合)。新しいパッケージのファイルが、ファイルシステム上の手動で変更された設定ファイル (前のステップを参照) を上書きしてしまう場合、パッケージ側のファイルに別の名前 (.pacnew) を付けて保存する。
- パッケージにインストールスクリプトが存在する場合、
post_install
関数を実行する (アップグレードする場合はpost_upgrade
が、削除される場合はpost_remove
が代わりに実行されます)。
- パッケージにインストールスクリプトが存在する場合、そのスクリプトの
- トランザクションの終わりの時点で存在している
PostTransaction
フックが適用される場合、それらのフックを実行する。
- 必要に応じてパッケージをダウンロードする (
- トランザクション及びトランザクションリソース (つまり、データベースロック) を解放する。
設定
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/*
後ろのルールは前のルールを上書きします。また、!
を前に付けることでルールを無効化できます。
複数の設定ファイルを使用
設定ファイルが複数あって (メインの設定と 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-sysusers
と systemd-tmpfiles
を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として tomcat8 パッケージでは tomcat8
という名前のシステムユーザーが必要だと指定されており、特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの systemd-sysusers.hook
と systemd-tmpfiles.hook
は、tomcat8
にユーザが指定されているファイルと一時ファイルが存在していることを認識し、systemd-sysusers
と systemd-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/
でバインドマウントする。
パッケージのセキュリティ
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
にマッチするファイルを上書きすることもできます。
"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
インストール時にパッケージを取得できない
具体的には次のようなエラーです: Not found in sync db
、対象が見つかりませんでした
、ファイルの取得に失敗しました
。
まず、パッケージが実際に存在することを確認してください。パッケージが存在することが確実であるならば、パッケージデータベースが古いのかもしれません。pacman -Syu
を実行して、パッケージデータベースを更新してシステムをアップグレードしてみてください。また、ミラーが最新であり、リポジトリが正しく設定されていることも確認してください。
また、インストールしたいパッケージが含まれているリポジトリがシステムで有効化されていない可能性もあります。例えば、パッケージが multilib リポジトリにあるが、pacman.conf
で multilib が有効化されていない場合、このエラーが発生します。
FAQ#公式リポジトリにある共用ライブラリはそれぞれどうして一つのバージョンしか用意されてないんですか? も参照してください。
アップグレードの中断によって起動できなくなったシステムを修復する
電源断やカーネルパニック、ハードウェア障害によって、アップデートが中断されてしまうことがあります。ほとんどの場合、システムが大きなダメージを負うことはありませんが、起動できなくなってしまうことはあります。
- USB インストールメディア を用意して、それを起動してください。
- ルートファイルシステムをマウントしてください。
- マウントしたルートファイルシステムに
arch-chroot
してください。 - 次に、アップデートを完全にやり直します。
/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" (データベース書き込み) エラーが発生してクラッシュし、その後、パッケージのアンインストール/再インストール/アップグレードができなくなってしまった場合、以下を行ってください:
- Arch Linux の USB インストールメディアを起動してください。システム上の pacman と同じバージョンかより新しいものを使うために、最近のメディアを使うことが望ましいです。
- システムのルートファイルシステムをマウントしてください (例えば、
mount /dev/sdaX /mnt
を root として実行してください)。そして、df -h
を実行してファイルシステムに十分な空き領域が存在することを確認してください。 - ファイルシステム proc、sys、dev もマウントしてください:
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
- システムにおいてデータベースの場所とディレクトリの場所がデフォルトである場合、
pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syu
を root として実行すればシステムの pacman データベースを更新してシステムをアップグレードすることができます。- アップデート/アップグレードができない場合、pacman/ヒントとテクニック#全てのパッケージの再インストール を参照してください。
- アップグレードしたら、アップグレードされていない壊れているパッケージがないかチェックしてください:
find /mnt/usr/lib -size 0
- そのようなパッケージが依然として存在する場合は、そのパッケージを再インストールしてください:
pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package
。
pacman: command not found
/var/cache/pacman/pkg
がシンボリックリンクである場合、pacman は自己アップデート時に同じディレクトリを作成しようとするため、このシンボリックリンクは削除されます。これにより、アップデートが失敗します。その結果、/usr/bin/pacman
と pacman パッケージに含まれる他のコンテンツが消えてしまいます (訳注: #パッケージのインストール/アップグレード/アンインストール時に起こること の 4.2 を参照)。
/var/cache/pacman/pkg
は pacman によって管理されているため、シンボリックリンクにしないでください。代わりに CacheDir
オプションを使うか、このディレクトリをバインドマウントしてください (#パッケージのキャッシュディレクトリ を参照)。
この問題が既に発生していて、システムが壊れてしまっている場合、pacman パッケージに含まれる /usr
内のコンテンツを手動で展開して pacman を復元し、その後、適切に pacman を再インストールしてください。詳細は FS#73306 や関連するフォーラムのスレッドを参照してください。
Pacman の手動再インストール
pacman-static を使う
pacman-staticAUR は pacman を静的にコンパイルしたものなので、システム上のライブラリが機能していなくても実行できます。これは、部分的なアップグレードによって pacman が実行できなくなってしまった場合にも便利です。
pacman-staticAUR パッケージのページにある固定コメントと PKGBUILD には、バイナリを直接ダウンロードする方法が記されています。pacman を再インストールしたり、部分的なアップグレードが起こった際にシステム全体をアップグレードしたりする際にこの方法が使えます。
外部の pacman を使う
pacman-static
でさえも動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の一つは、archiso を使い、--sysroot
か --root
で、操作を行うシステム上のマウントポイントを指定することです。--sysroot
に必要なファイルシステムをマウントする方法については、Chroot#chroot を使う を参照してください。
手動で抽出する
pacman がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
- インストールすべき pacman の依存関係を調べる。
- それぞれの依存パッケージをミラーからダウンロードする。
- 各パッケージをルートディレクトリに展開する。
pacman -S --overwrite
を実行してパッケージデータベースを更新することで、パッケージを再インストールする。- システムの完全なアップグレードを行う。
正常に動作している 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 エントリです。
システムが起動したら、コンソールかターミナルから以下のコマンドを実行して initramfs イメージを再ビルドしてください (以下のコマンドは標準の linux カーネルの場合です):
# mkinitcpio -p linux
これでうまく行かなかった場合、最新の Arch リリース (CD/DVD あるいは USB スティック) を起動し、ルートパーティションとブートパーティションをそれぞれ /mnt
と /mnt/boot
にマウントしてください。そして、arch-chroot を使ってルートパーティションに chroot してください:
# arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
カーネル (linux パッケージ) を再インストールすれば、mkinitcpio -p linux
が実行されて initramfs イメージが再生成されます。イメージの再生成を別途行う必要はありません。
その後、exit
、umount /mnt/{boot,}
、そして reboot
を実行することが推奨されます。
"Warning: current locale is invalid; using default "C" locale" エラー
このエラーメッセージが言っている通り、ロケールが正しく設定されていません。ロケールの記事を参照してください。
Pacman がプロキシの設定に従わない
関連する環境変数 ($http_proxy
、$ftp_proxy
など) が設定されていることを確認してください。pacman を sudo で実行する場合、環境変数を pacman に渡すように sudo を設定する必要があります。また、dirmngr の設定ファイル /etc/pacman.d/gnupg/dirmngr.conf
で、鍵をリフレッシュする際にプロキシの設定に従うようにする honor-http-proxy
オプションが存在していることも確認してください。
パッケージが明示的にインストールされたか依存関係としてインストールされたかの情報を保持しつつ、全パッケージを再インストールするには?
ネイティブなパッケージ (つまり、同期データベース内に存在するパッケージ) を全て再インストールするには、pacman -Qnq | pacman -S -
か pacman -S $(pacman -Qnq)
を実行してください (-S
オプションはデフォルトでインストール理由を維持します)。
次に、外部のパッケージを全て再インストールする必要があります。これらのパッケージの一覧は pacman -Qmq
で得られます。
どうやら、以前の 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 core
と pacman-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
のローカルデータベースが /
ファイルシステムにインストールされているパッケージよりも新しい場合、これはルートファイルシステムをローカルデータベースと再同期させる最適な方法です。