「Pacman」の版間の差分
細 (1版 をインポートしました) |
(同期) |
||
(7人の利用者による、間の20版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:パッケージ管理]] |
+ | [[Category:Arch プロジェクト]] |
||
[[ar:Pacman]] |
[[ar:Pacman]] |
||
[[cs:Pacman]] |
[[cs:Pacman]] |
||
7行目: | 8行目: | ||
[[en:Pacman]] |
[[en:Pacman]] |
||
[[es:Pacman]] |
[[es:Pacman]] |
||
+ | [[fa:Pacman]] |
||
[[fr:Pacman]] |
[[fr:Pacman]] |
||
[[id:Pacman]] |
[[id:Pacman]] |
||
[[it:Pacman]] |
[[it:Pacman]] |
||
[[ko:Pacman]] |
[[ko:Pacman]] |
||
− | [[lt:Pacman]] |
||
[[nl:Pacman]] |
[[nl:Pacman]] |
||
[[pl:Pacman]] |
[[pl:Pacman]] |
||
19行目: | 20行目: | ||
[[sr:Pacman]] |
[[sr:Pacman]] |
||
[[sv:Pacman]] |
[[sv:Pacman]] |
||
− | [[ |
+ | [[zh-hans:Pacman]] |
− | [[ |
+ | [[zh-hant:Pacman]] |
− | [[zh-CN:Pacman]] |
||
− | [[zh-TW:Pacman]] |
||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | {{Related articles start |
+ | {{Related articles start}} |
− | {{ |
+ | {{Related|パッケージの作成}} |
+ | {{Related|パッケージのダウングレード}} |
||
− | {{Related2|Improve Pacman Performance (日本語)|Pacman のパフォーマンスの向上}} |
||
− | {{ |
+ | {{Related|Pacman のパフォーマンスの向上}} |
− | {{ |
+ | {{Related|Pacman GUI フロントエンド}} |
− | {{ |
+ | {{Related|Pacman 比較表}} |
+ | {{Related|Pacman ヒント}} |
||
− | {{Related2|Pacman package signing|Pacman パッケージ署名}} |
||
− | {{ |
+ | {{Related|FAQ#パッケージ管理}} |
− | {{ |
+ | {{Related|pacman-key}} |
− | {{ |
+ | {{Related|Pacnew と Pacsave ファイル}} |
+ | {{Related|Pacman/ローカルデータベースの復元}} |
||
− | {{Related2|List of Applications/Utilities (日本語)#パッケージ管理|アプリケーション一覧/ユーティリティ#パッケージ管理}} |
||
+ | {{Related|アプリケーション一覧/ユーティリティ#パッケージ管理}} |
||
− | {{Related2|Arch Build System (日本語)|Arch Build System}} |
||
+ | {{Related|Arch Build System}} |
||
− | {{Related2|Official Repositories (日本語)|公式リポジトリ}} |
||
+ | {{Related|公式リポジトリ}} |
||
− | {{Related2|Arch User Repository (日本語)|Arch User Repository}} |
||
+ | {{Related|Arch User Repository}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | '''[https://www.archlinux.org/pacman/ pacman]''' [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる[[Arch Build System |
+ | '''[https://www.archlinux.org/pacman/ pacman]''' [[Wikipedia:ja:パッケージ管理システム|パッケージマネージャ]]は Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できる[[Arch Build System|ビルドシステム]]から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[公式リポジトリ|公式 Arch リポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。 |
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。 |
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。 |
||
46行目: | 46行目: | ||
Pacman は C 言語で書かれており {{ic|.pkg.tar.xz}} パッケージフォーマットを使います。 |
Pacman は C 言語で書かれており {{ic|.pkg.tar.xz}} パッケージフォーマットを使います。 |
||
− | {{Tip|公式の {{Pkg|pacman}} パッケージには |
+ | {{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/.+'}} を実行してください。 }} |
− | == |
+ | == 使い方 == |
+ | pacman で何ができるかをちゃんと学びたい場合、{{man|8|pacman}} を参照してください。以下にあるのは pacman でできることのほんの一例です。 |
||
− | pacman の設定は {{ic|/etc/pacman.conf}} に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf] にあります。 |
||
+ | {{Tip|他の Linux ディストリビューションを使ったことがある場合、[[Pacman 比較表]]の記事が役に立つでしょう。}} |
||
− | === 全般設定 === |
||
+ | === パッケージのインストール === |
||
− | 全般的な設定は {{ic|[options]}} セクションにあります。ここで設定されている項目については man かデフォルトの {{ic|pacman.conf}} を参照してください。 |
||
− | |||
− | ==== アップグレードさせないパッケージを設定 ==== |
||
− | |||
− | ある特定のパッケージをアップデートさせないようにするには: |
||
− | |||
− | IgnorePkg=linux |
||
− | |||
− | 複数のパッケージを記述するときはスペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。 |
||
− | |||
− | ==== アップグレードさせないグループを設定 ==== |
||
− | |||
− | パッケージの場合と同様に、アップグレードさせないグループを指定することができます: |
||
− | |||
− | IgnoreGroup=gnome |
||
− | |||
− | ==== インストールさせないファイルを設定 ==== |
||
− | |||
− | 特定のディレクトリのインストールをさせないようにするには {{Ic|NoExtract}} リストにディレクトリを加えます。例えば、[[systemd (日本語)|systemd]] ユニットのインストールを避けるには: |
||
− | |||
− | NoExtract=usr/lib/systemd/system/* |
||
− | |||
− | === Repositories === |
||
− | |||
− | {{ic|/etc/pacman.conf}} に書かれているように、このセクションではどの[[Official Repositories (日本語)|リポジトリ]]を使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル ({{ic|/etc/pacman.d/mirrorlist}}) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定は[[Mirrors (日本語)|ここ]]を見て下さい。 |
||
− | |||
− | {{hc|/etc/pacman.conf|2= |
||
− | #[testing] |
||
− | #SigLevel = PackageRequired |
||
− | #Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | [core] |
||
− | SigLevel = PackageRequired |
||
− | Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | [extra] |
||
− | SigLevel = PackageRequired |
||
− | Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | #[community-testing] |
||
− | #SigLevel = PackageRequired |
||
− | #Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | [community] |
||
− | SigLevel = PackageRequired |
||
− | Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | # もし x86_64 環境で 32 bit アプリケーションを動かしたい時は、 |
||
− | # ここで multilib レポジトリを有効にします。 |
||
− | |||
− | #[multilib-testing] |
||
− | #SigLevel = PackageRequired |
||
− | #Include = /etc/pacman.d/mirrorlist |
||
− | |||
− | #[multilib] |
||
− | #SigLevel = PackageRequired |
||
− | #Include = /etc/pacman.d/mirrorlist |
||
+ | {{Note| |
||
− | # An example of a custom package repository. See the pacman manpage for |
||
+ | * パッケージには [[PKGBUILD#optdepends|optdepends]] が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。[[#パッケージ・データベースに問い合わせる|パッケージ・データベースに問い合わせる]]ことで情報を参照することができます。 |
||
− | # tips on creating your own repositories. |
||
+ | * 他のパッケージの依存パッケージとしてパッケージをインストールする場合 (そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは[[#インストール理由|インストール理由]]を参照。}} |
||
− | #[custom] |
||
− | #SigLevel = Optional TrustAll |
||
− | #Server = file:///home/custompkgs}} |
||
+ | {{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新しないでください (つまり {{ic|pacman -Sy ''パッケージ名''}} をしてはいけない)。これを実行すると依存関係に問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}} |
||
− | {{Warning|[testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public arch-dev-public mailing list] を購読するのをお薦めします。}} |
||
− | === パッケージの |
+ | ==== 特定のパッケージのインストール ==== |
+ | ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは: |
||
− | Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。{{ic|SigLevel}} を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では {{hc|head=/etc/pacman.conf|output=SigLevel <nowiki>=</nowiki> Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key (日本語)|ここ]]を見て下さい。 |
||
+ | # pacman -S ''パッケージ名1'' ''パッケージ名2'' ... |
||
− | == 使い方 == |
||
+ | 異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります (例: [extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください: |
||
− | pacman で何ができるかをちゃんと学びたい場合、[https://www.archlinux.org/pacman/pacman.8.html man pacman] を参照してください。以下にあるのは pacman でできることのほんの一例です。 |
||
− | + | # pacman -S extra/''パッケージ名'' |
|
+ | 名前に類似パターンが存在するパッケージをインストールしたい場合 (グループ全体ではなくマッチするパッケージのみ、例: {{Grp|plasma}}): |
||
− | ==== 特定のパッケージのインストール ==== |
||
+ | # pacman -S plasma-{desktop,mediacenter,nm} |
||
− | ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは: |
||
+ | もちろん、必要に応じて更に複雑なパターンを指定することもできます: |
||
− | # pacman -S ''パッケージ名1'' ''パッケージ名2'' ... |
||
+ | # pacman -S plasma-{workspace{,-wallpapers},pa} |
||
− | 異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります(例:[extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください: |
||
− | |||
− | # pacman -S extra/''パッケージ名'' |
||
==== パッケージグループのインストール ==== |
==== パッケージグループのインストール ==== |
||
162行目: | 102行目: | ||
# pacman -Sg gnome |
# pacman -Sg gnome |
||
− | どのようなパッケージグループがあるかは https://www.archlinux. |
+ | どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。 |
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}} |
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}} |
||
− | |||
− | {{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新'''しないでください''' (つまり {{ic|pacman -Sy ''パッケージ名''}} をしてはいけない)。これをすると依存問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}} |
||
=== パッケージの削除 === |
=== パッケージの削除 === |
||
196行目: | 134行目: | ||
=== パッケージのアップグレード === |
=== パッケージのアップグレード === |
||
− | Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドは |
+ | Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期して''それから''システムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です): |
# pacman -Syu |
# pacman -Syu |
||
202行目: | 140行目: | ||
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}} |
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}} |
||
− | Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[ |
+ | Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[The Arch Way]] を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。'''システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です'''。[[Arch Linux の安定化#Arch のメンテナンス]]を見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために {{ic|.pacnew}} ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは [[Pacnew と Pacsave ファイル]]を見てください。 |
+ | {{Tip| |
||
− | {{Tip|Pacman からの出力は {{ic|/var/log/pacman.log}} に記録されています。}} |
||
+ | * Pacman からの出力は {{ic|/var/log/pacman.log}} に記録されています。 |
||
+ | * {{AUR|wat-git}} などのログビューアを使うことで pacman のログを検索できます。 |
||
+ | }} |
||
− | アップグレードするまえに、[https://www.archlinux. |
+ | アップグレードするまえに、[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 から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。 |
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。 |
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。 |
||
− | === |
+ | ==== 部分的なアップグレードはサポートされていません ==== |
+ | Arch Linux はローリングリリースであり、常に新しいバージョンの[[Wikipedia:ja:ライブラリ|ライブラリ]]がリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 ([[Arch User Repository|AUR]] のパッケージなど)、ユーザーは必要に応じて[[Wikipedia:soname|共有ライブラリ]]にあわせてリビルドしなくてはなりません。 |
||
− | {{ic|-Q}} フラグを使って Pacman からローカルデータベースを問い合わせます: |
||
+ | つまり部分的なアップグレードは'''サポートされていません'''。{{ic|pacman -Sy package}} や、それと同等の {{ic|pacman -Sy}} からの {{ic|pacman -S package}} などをしないでください。どんなときでも、パッケージをインストールする前に ({{ic|pacman -Syu}} で) アップグレードしてください。{{ic|IgnorePkg}} や {{ic|IgnoreGroup}} を使用する場合は気をつけて扱って下さい。{{ic|pacman -Sy}} は基本的に使ってはいけないコマンドで、代わりに {{ic|pacman -Syu}} を使って下さい。 |
||
− | $ pacman -Q --help |
||
+ | 一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。'''シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません'''。ライブラリは''後方互換性がない''ときには [[Wikipedia:soname|soname]] のバージョンアップに対応します。{{ic|pacman -Syu}} を実行しさえすれば、ミラーと同期して ''pacman'' が壊れていないかぎり問題が修正されます。 |
||
− | 同期しているデータベースに問い合わせるには {{ic|-S}} フラグを使います: |
||
+ | インストールされているパッケージのアップグレードを確認したいときは pacman パッケージに含まれている bash スクリプト '''checkupdates''' を使うことで、システムアップデートを行わずに安全に確認が行えます。 |
||
− | $ pacman -S --help |
||
+ | |||
+ | === パッケージ・データベースに問い合わせる === |
||
+ | |||
+ | Pacman からローカルデータベースに問い合わせるときは {{ic|-Q}} フラグを、同期データベースに問い合わせるときは {{ic|-S}} フラグを、ファイルデータベースに問い合わせるときは {{ic|-F}} フラグを使います。それぞれのフラグのサブオプションについては {{ic|pacman -Q --help}}, {{ic|pacman -S --help}}, {{ic|pacman -F --help}} を見てください。 |
||
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには: |
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには: |
||
224行目: | 169行目: | ||
$ pacman -Ss ''検索ワード1'' ''検索ワード2'' ... |
$ pacman -Ss ''検索ワード1'' ''検索ワード2'' ... |
||
+ | 場合によって {{Ic|-s}} の組み込みの ERE (拡張正規表現) が望まない結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください: |
||
− | 既にインストールしたパッケージ内を検索するには: |
||
+ | |||
+ | $ pacman -Ss '^vim-' |
||
+ | |||
+ | 既にインストール済みのパッケージから検索するには: |
||
$ pacman -Qs ''検索ワード1'' ''検索ワード2'' ... |
$ pacman -Qs ''検索ワード1'' ''検索ワード2'' ... |
||
+ | |||
+ | リモートパッケージからパッケージファイルの名前で検索するには: |
||
+ | |||
+ | $ pacman -Fs ''検索ワード1'' ''検索ワード2'' ... |
||
パッケージ名が分かっていれば、より詳しい情報を得ることができます: |
パッケージ名が分かっていれば、より詳しい情報を得ることができます: |
||
244行目: | 197行目: | ||
$ pacman -Ql ''パッケージ名'' |
$ pacman -Ql ''パッケージ名'' |
||
+ | リモートパッケージによってインストールされるファイルのリストを得るには: |
||
− | インストールされていないパッケージには [[pkgfile (日本語)|pkgfile]] を使って下さい。 |
||
+ | |||
+ | $ pacman -Fl ''パッケージ名'' |
||
あるファイルがどのパッケージによってインストールされたかを調べるには: |
あるファイルがどのパッケージによってインストールされたかを調べるには: |
||
$ pacman -Qo ''/パス/ファイル名'' |
$ pacman -Qo ''/パス/ファイル名'' |
||
+ | |||
+ | あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには: |
||
+ | |||
+ | $ pacman -Fo ''/パス/ファイル名'' |
||
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには: |
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには: |
||
$ 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 ヒント]]には他の例も載っています。 |
||
+ | |||
+ | ==== Pactree ==== |
||
パッケージの依存のツリーを見るには: |
パッケージの依存のツリーを見るには: |
||
270行目: | 235行目: | ||
$ pactree -r ''package_name'' |
$ pactree -r ''package_name'' |
||
+ | ==== データベースの構造 ==== |
||
− | [[pacman Tips (日本語)|pacman tips]] には他の例も載っています。 |
||
+ | |||
+ | 通常 pacman のデータベースは {{ic|/var/lib/pacman/sync}} に配置され、{{ic|/etc/pacman.conf}} で指定したリポジトリのデータベースファイルがそこに作成されます。データベースファイルは gzip で圧縮された tar アーカイブになっており、パッケージごとにディレクトリが含まれています。例えば {{Pkg|which}} パッケージの場合: |
||
+ | |||
+ | {{bc| |
||
+ | % tree which-2.20-6 |
||
+ | which-2.20-6<nowiki> |
||
+ | |-- depends |
||
+ | `-- desc</nowiki> |
||
+ | }} |
||
+ | |||
+ | {{ic|depends}} ファイルにはパッケージが依存するパッケージのリストが記載されており、{{ic|desc}} にはファイルサイズや MD5 ハッシュなどのパッケージの情報が入っています。 |
||
=== パッケージキャッシュの削除 === |
=== パッケージキャッシュの削除 === |
||
281行目: | 257行目: | ||
{{Warning| |
{{Warning| |
||
− | * インストールしたパッケージが安定していて、[[ |
+ | * インストールしたパッケージが安定していて、[[パッケージのダウングレード|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[Arch Linux Archive]] などから古いパッケージを取得するしか方法がなくなってしまいます。 |
* {{ic|pacman -Scc}} でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。 |
* {{ic|pacman -Scc}} でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。 |
||
}} |
}} |
||
287行目: | 263行目: | ||
上記の欠点のため、{{ic|-Sc}} や {{ic|-Scc}} スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます: |
上記の欠点のため、{{ic|-Sc}} や {{ic|-Scc}} スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます: |
||
− | * {{Pkg|pacman}} パッケージに入っている ''paccache'' コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します: {{bc|$ paccache -r}} ただし、この方法では ''paccache'' はパッケージがインストールされているかどうかを確認''しない''ため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります: {{bc|$ paccache -ruk0}} 他のオプションは {{ic|paccache -h}} を見て下さい。 |
+ | * {{Pkg|pacman-contrib}} パッケージに入っている ''paccache'' コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します: {{bc|$ paccache -r}} ただし、この方法では ''paccache'' はパッケージがインストールされているかどうかを確認''しない''ため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります: {{bc|$ paccache -ruk0}} 他のオプションは {{ic|paccache -h}} を見て下さい。 |
− | * もしくは、 |
+ | * もしくは、{{AUR|pkgcacheclean}} をインストールして使うこともできます: {{bc|# pkgcacheclean}} |
+ | |||
+ | {{Tip|1=[[#フック]]を作成して pacman の操作後に上記のコマンドを自動的に実行することができます。サンプルが [https://bbs.archlinux.org/viewtopic.php?pid=1694743#p1694743 こちらのスレッド] に載っています。}} |
||
=== 追加コマンド === |
=== 追加コマンド === |
||
− | システムのアップグレードとパッケージのインストール(ワンライナー): |
+ | システムのアップグレードとパッケージのインストール (ワンライナー): |
# pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ... |
# pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ... |
||
301行目: | 279行目: | ||
# pacman -Sw ''パッケージ名'' |
# pacman -Sw ''パッケージ名'' |
||
− | リポジトリに存在しない'ローカル'のパッケージ (例: [[Arch User Repository |
+ | リポジトリに存在しない'ローカル'のパッケージ (例: [[Arch User Repository|AUR]] のパッケージ) をインストール: |
# pacman -U /パス/パッケージ名-version.pkg.tar.xz |
# pacman -U /パス/パッケージ名-version.pkg.tar.xz |
||
315行目: | 293行目: | ||
}} |
}} |
||
+ | {{Warning|{{ic|--force}} スイッチを使う時は細心の注意を払って下さい、誤って使用すると大きな問題が起こる場合があります。Arch ニュースでこのスイッチを使うように指示があってとき''だけ''使用することを強く推奨します。}} |
||
− | === 部分的なアップグレードはサポートされていません === |
||
+ | ''pacman'' で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。{{ic|-p}} を使うことで {{ic|-S}}, {{ic|-U}}, {{ic|-R}} などの操作を阻止することができます。 |
||
− | Arch Linux はローリングリリースであり、常に新しいバージョンの[[Wikipedia:Library (computing)|ライブラリ]]がレポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてレポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 ([[Arch User Repository (日本語)|AUR]] のパッケージなど)、ユーザーは必要に応じて[[Wikipedia:soname|共有ライブラリ]]にあわせてリビルドしなくてはなりません。 |
||
+ | ''pacman'' にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは {{ic|--help}} スイッチを付けて呼び出すことでコマンドオプションを表示できます。 |
||
− | つまり部分的なサポートは'''サポートされていません'''。{{ic|pacman -Sy package}} や、それと同等の {{ic|pacman -Sy}} からの {{ic|pacman -S package}} などをしないでください。いつでも、パッケージをインストールする前にアップグレードしてください -- 特に pacman が同期レポジトリを更新する時は。同じ理由から、{{ic|IgnorePkg}} や {{ic|IgnoreGroup}} は気をつけて扱って下さい。 |
||
+ | === インストール理由 === |
||
− | 一度部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。'''シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません'''。ライブラリは''後方互換性がない''ときには [[Wikipedia:soname|soname]] を受け取ります。単純に、正しくミラーと同期する {{ic|pacman -Syu}} で pacman が壊れていないかぎり問題を修正します。 |
||
+ | ''pacman'' データベースではインストールしたパッケージはインストールしたときの理由によって2つのグループに分別されます: |
||
− | === 一般注意事項 === |
||
− | {{Warning|{{ic|--force}} スイッチを使う時は細心の注意を払って下さい、誤って使用すると大きな問題が起こる場合があります。Arch ニュースでこのスイッチを使うように指示があってとき''だけ''使用することを強く推奨します。}} |
||
+ | * '''明示的にインストール''': ''pacman'' の {{ic|-S}} や {{ic|-U}} コマンドによって文字通り指定されたパッケージ。 |
||
− | ''pacman'' にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは {{ic|--help}} スイッチを付けて呼び出すことでコマンドオプションを表示できます。ユーティリティの完全なリストを見るには、次を実行してください: |
||
+ | * '''依存パッケージ''': ''pacman'' のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから[[PKGBUILD#依存関係|必要]]とされたためにインストールされたパッケージ。 |
||
− | $ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}' |
||
+ | |||
+ | パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます: |
||
+ | |||
+ | # pacman -S --asdeps ''package_name'' |
||
+ | |||
+ | {{Tip|任意の依存パッケージを {{ic|--asdeps}} でインストールすると、[[Pacman ヒント#使用していないパッケージの削除 (孤立したパッケージ)|孤立したパッケージを削除]]するときに ''pacman'' によって任意の依存パッケージも削除されるようになります。}} |
||
+ | |||
+ | パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。 |
||
+ | |||
+ | 明示的にインストールしたパッケージのリストは {{ic|pacman -Qe}} で表示でき、依存パッケージのリストは {{ic|pacman -Qd}} で表示できます。 |
||
+ | |||
+ | 既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行: |
||
+ | |||
+ | # pacman -D --asdeps ''package_name'' |
||
+ | |||
+ | インストール理由を「明示的にインストール」に変えたいときは {{ic|--asexplicit}} を使ってください。 |
||
+ | |||
+ | {{Note|{{ic|pacman -Syu ''package_name'' --asdeps}} のように、アップグレードをするときに {{ic|--asdeps}} や {{ic|--asexplicit}} オプションを使用するのは推奨されません。インストールされるパッケージだけでなく、アップグレードされるパッケージのインストール理由まで変更されてしまうためです。}} |
||
+ | |||
+ | === 特定のファイルが含まれているパッケージを検索 === |
||
+ | |||
+ | ファイルデータベースを同期してください: |
||
+ | |||
+ | # pacman -Fy |
||
+ | |||
+ | ファイルが含まれているパッケージを検索するには: |
||
+ | |||
+ | $ pacman -Fs pacman |
||
+ | core/pacman 5.0.1-4 |
||
+ | usr/bin/pacman |
||
+ | usr/share/bash-completion/completions/pacman |
||
+ | extra/xscreensaver 5.36-1 |
||
+ | usr/lib/xscreensaver/pacman |
||
+ | |||
+ | {{Tip|[[cron]] ジョブや [[systemd/タイマー|systemd タイマー]]を設定してファイルデータベースを定期的に同期させることができます。}} |
||
+ | |||
+ | 高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する [[pkgfile]] をインストールしてください。 |
||
+ | |||
+ | == 設定 == |
||
+ | |||
+ | pacman の設定は {{ic|/etc/pacman.conf}} に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は {{man|5|pacman.conf}} にあります。 |
||
+ | |||
+ | === 全般設定 === |
||
+ | |||
+ | 全般的な設定は {{ic|[options]}} セクションにあります。ここで設定されている項目については {{man|8|pacman}} かデフォルトの {{ic|pacman.conf}} を参照してください。 |
||
+ | |||
+ | ==== カラー出力 ==== |
||
+ | |||
+ | [[コンソールのカラー出力#pacman]] を見てください。 |
||
+ | |||
+ | ==== アップデートする前にバージョンを比較 ==== |
||
+ | |||
+ | 利用可能なパッケージの新旧バージョンを確認したい場合、{{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/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB |
||
+ | extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB |
||
+ | |||
+ | ==== アップグレードさせないパッケージを設定 ==== |
||
+ | |||
+ | ある特定のパッケージをアップデートさせないようにするには: |
||
+ | |||
+ | IgnorePkg=linux |
||
+ | |||
+ | 複数のパッケージを記述するときはスペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。 |
||
+ | |||
+ | ==== アップグレードさせないグループを設定 ==== |
||
+ | |||
+ | パッケージの場合と同様に、アップグレードさせないグループを指定することができます: |
||
+ | |||
+ | IgnoreGroup=gnome |
||
+ | |||
+ | ==== アップグレードさせないファイルを設定 ==== |
||
+ | |||
+ | {{Ic|NoUpgrade}} ディレクティブで指定されたファイルはパッケージのインストール・アップグレードで変更を加えられることがなくなり、''.pacnew'' 拡張子が付いたファイルが新しくインストールされます: |
||
+ | |||
+ | NoUpgrade=''path/to/file'' |
||
+ | |||
+ | {{Note|パスはパッケージ内のファイルを参照します。したがって、一番最初のスラッシュは必要ありません。}} |
||
+ | |||
+ | ==== インストールさせないファイルを設定 ==== |
||
+ | |||
+ | 特定のディレクトリのインストールをさせないようにするには {{Ic|NoExtract}} リストにディレクトリを加えます。例えば、[[systemd]] ユニットのインストールを避けるには: |
||
+ | |||
+ | NoExtract=usr/lib/systemd/system/* |
||
+ | |||
+ | もしくは {{AUR|localepurge}} と同じように、英語以外のローカライゼーションのインストールを止めるには: |
||
+ | |||
+ | 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|!}} でルールを打ち消すことで、必要なロケールだけを維持できます。 |
||
+ | |||
+ | {{Tip|pacman 5 から、''localepurge'' や ''bleachbit'' で消去したロケールがあるパッケージをアップデートする際に、''pacman'' はロケールが存在しないという警告メッセージを表示します。警告を表示しないようにするには {{ic|pacman.conf}} の {{ic|CheckSpace}} オプションをコメントアウトしてください。ただし容量チェック機能は全てのパッケージで無効になります。}} |
||
+ | |||
+ | ==== 複数の設定ファイルを使用 ==== |
||
+ | |||
+ | 設定ファイルが複数あって (メインの設定と [[公式リポジトリ|testing]] リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで {{ic|Include}} オプションを宣言することができます。例: |
||
+ | |||
+ | Include = /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 フックは様々なことに使われています。例えば、{{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}} の man ページを参照。 |
||
+ | |||
+ | === リポジトリ === |
||
+ | |||
+ | {{ic|/etc/pacman.conf}} に書かれているように、Repositories セクションではどの[[公式リポジトリ|リポジトリ]]を使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル ({{ic|/etc/pacman.d/mirrorlist}}) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定は[[ミラー|ここ]]を見て下さい。 |
||
+ | |||
+ | {{Warning|[testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている [https://lists.archlinux.org/listinfo/arch-dev-public arch-dev-public メーリングリスト] を購読するのをお薦めします。}} |
||
+ | |||
+ | === パッケージのセキュリティ === |
||
+ | |||
+ | Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。{{ic|SigLevel}} を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では {{ic|SigLevel <nowiki>=</nowiki> Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key]] を見てください。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | === パッケージ XYZ にアップデートしたらシステムが壊れました |
+ | === パッケージ XYZ にアップデートしたらシステムが壊れました === |
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。 |
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。 |
||
− | 一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ ({{Pkg|linux}}, {{Pkg|xorg-server}} など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux. |
+ | 一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ ({{Pkg|linux}}, {{Pkg|xorg-server}} など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.jp/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。 |
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ ({{ic|/var/log/pacman.log}}) を見て再チェックしてください。 |
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ ({{ic|/var/log/pacman.log}}) を見て再チェックしてください。 |
||
− | この段階で '''pacman から何も有用な情報が得られなく、https://www.archlinux. |
+ | この段階で '''pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は'''、助けを求めるのにフォーラムや [[IRC チャンネル|IRC]] を使ったり問題のあるパッケージを[[パッケージのダウングレード|ダウングレード]]してください。 |
− | === パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています |
+ | === パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています === |
− | Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux. |
+ | Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux.jp/mirrors/status/ MirrorStatus] にミラーの更新状況がのっています。 |
=== アップデートでこんなエラーが出ました: "file exists in filesystem" === |
=== アップデートでこんなエラーが出ました: "file exists in filesystem" === |
||
356行目: | 457行目: | ||
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。 |
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。 |
||
− | この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo /path/to/file}}) ことです。ファイルが他のパッケージによって使われている場合、[[ |
+ | この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo ''/path/to/file''}}) ことです。ファイルが他のパッケージによって使われている場合、[[バグ報告ガイドライン|バグレポートをしてください]]。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。 |
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。 |
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。 |
||
366行目: | 467行目: | ||
=== パッケージのインストール時にこんなエラーが出ました: "not found in sync db" === |
=== パッケージのインストール時にこんなエラーが出ました: "not found in sync db" === |
||
− | まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているか |
+ | まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} で全てのパッケージリストを更新してください。 |
=== パッケージをインストールする時にエラーが表示されます: "target not found" === |
=== パッケージをインストールする時にエラーが表示されます: "target not found" === |
||
− | まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう |
+ | まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう。 |
+ | また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは ''multilib'' リポジトリにあるが、''multilib'' が {{ic|pacman.conf}} で有効になっていないということが考えられます。 |
||
− | === Pacman が何度も同じパッケージをアップグレードします! === |
||
+ | === pacman の手動再インストール === |
||
− | それは {{ic|/var/lib/pacman/local/}} に二重のエントリがあるためです。{{ic|pacman -Qi}} は正しいバージョンを示しますが、{{ic|pacman -Qu}} は古いバージョンだと認識してアップグレードしようとします。 |
||
+ | {{Warning|以下の方法でシステムをさらに再起不能にまで壊してしまう可能性があります。[[#アップグレード中に Pacman がクラッシュしました]]に書かれている方法で直らない場合の最後の手段として使ってください。}} |
||
− | 解決法: {{ic|/var/lib/pacman/local/}} の問題のあるエントリを削除してください。 |
||
+ | ''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います: |
||
− | {{Note|Pacman は version 3.4 から二重のエントリの場合はエラーを表示するため、この質問と回答はすでに不要になっているはずです。}} |
||
+ | # インストールするパッケージを確認 |
||
− | === アップグレード中に Pacman がクラッシュしました! === |
||
+ | # 適当なミラーからパッケージをそれぞれダウンロード |
||
+ | # パッケージをルートディレクトリに展開 |
||
+ | # {{ic|pacman -S --force}} でパッケージを再インストールしてパッケージデータベースを更新 |
||
+ | # フルシステムアップグレードを実行 |
||
+ | 問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます: |
||
− | パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合: |
||
+ | $ pacman -Q $(pactree -u pacman) |
||
− | # Arch インストールメディアを使って起動してください |
||
− | # root ファイルシステムをマウントします |
||
− | # {{ic|pacman -Syy}} を使って pacman のデータベースを更新します |
||
− | # {{ic|pacman -r /path/to/root -S package}} で壊れたパッケージを再インストールしてください |
||
− | + | 問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します: |
|
+ | # tar -xvpwf ''package.tar.xz'' -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO |
||
− | "conflicting files" エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の''所有されていない''ファイルを検索するスクリプトについては [[Pacman Tips (日本語)#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。 |
||
− | {{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch news で使うように指示が出ている時にだけ使うことを推奨します。}} |
||
+ | {{ic|w}} フラグを使ってインタラクティブモードにしていることに注意してください。インタラクティブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。[https://bbs.archlinux.org/viewtopic.php?id=95007 こちらのフォーラムの投稿] には ''pacman'' の一部の依存パッケージだけが壊れた時の解決方法の例が載っています。 |
||
− | === 特定のファイルをもったパッケージが必要です。どのパッケージがそのファイルを持っているかわかりますか? === |
||
+ | === アップグレード中に Pacman がクラッシュしました === |
||
− | 全てのファイルと関連パッケージの分割データベースを使う [[pkgfile (日本語)|pkgfile]] をインストールしてください。 |
||
+ | パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合: |
||
− | === Pacman が完全に壊れました!どうやったら再インストールできますか? === |
||
+ | # Arch インストールメディアを使って起動してください。 |
||
− | 修復できないほど pacman が壊れてしまった場合、手動で必要なパッケージ ({{Pkg|openssl}}, {{Pkg|libarchive}}, {{Pkg|pacman}}) をダウンロードして root に展開してください。pacman バイナリはデフォルト設定ファイルと一緒に復帰します。その後、pacman によってパッケージを再インストールしてパッケージデータベースを完全に整備してください。詳しい情報や自動で行うためのサンプルスクリプトが[https://bbs.archlinux.org/viewtopic.php?id=95007 ここ]にあります。 |
||
+ | # 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''}} で壊れているパッケージを再インストールしてください。 |
||
+ | |||
+ | === "make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません === |
||
+ | |||
+ | "conflicting files" エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の''所有されていない''ファイルを検索するスクリプトについては [[Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。 |
||
+ | {{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch ニュースで使うように指示が出ている時にだけ使うことを推奨します。}} |
||
=== システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません === |
=== システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません === |
||
− | おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。 |
+ | おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。2つの解決方法があります: |
− | '''1.''' ''Fallback'' エントリを試す |
+ | '''1.''' ''Fallback'' エントリを試す: |
− | : {{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ( |
+ | : {{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ([[Syslinux]] の場合) や {{ic|e}} ([[GRUB]] や [[systemd-boot]] の場合) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して(ブートローダによる)新しいパラメータを使って起動できます。}} |
: システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します: |
: システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します: |
||
416行目: | 527行目: | ||
'''2.''' 動かない場合、最新の Arch リリース (CD/DVD または USB スティック) から起動する: |
'''2.''' 動かない場合、最新の Arch リリース (CD/DVD または USB スティック) から起動する: |
||
+ | : {{Note| |
||
− | : {{Note|最新のリリースを持っていなかったり他の "live" Linux ディストリビューションしかないときは、代わりに古い方法である [[Change_Root_(日本語)|chroot]] が使えます。{{ic|arch-chroot}} スクリプトを入らせるよりは多くのタイピングが必要です。}} |
||
+ | * 最新のリリースを持っていなかったり他の "live" Linux ディストリビューションしかないときは、代わりに古い方法である [[Change Root|chroot]] が使えます。{{ic|arch-chroot}} スクリプトを入らせるよりは多くのタイピングが必要です。 |
||
+ | * arch-chroot や chroot 環境に入れない場合にパッケージを再インストールしたいときは、root パーティションで {{ic|pacman -r /mnt -Syu foo bar}} コマンドで ''pacman'' を使えます。}} |
||
: {{bc|<nowiki> |
: {{bc|<nowiki> |
||
424行目: | 537行目: | ||
# pacman -Syu mkinitcpio systemd linux</nowiki>}} |
# pacman -Syu mkinitcpio systemd linux</nowiki>}} |
||
− | : カーネル ({{Pkg|linux}} パッケージ) の再インストールは自動的に initramfs イメージを {{ic|mkinitcpio -p linux}} で再生成します。 |
+ | : カーネル ({{Pkg|linux}} パッケージ) の再インストールは自動的に initramfs イメージを {{ic|mkinitcpio -p linux}} で再生成します。別個にやる必要はありません。 |
+ | : その後 {{ic|exit}}, {{ic|umount /mnt/{boot,} }}, {{ic|reboot}} を実行してください。 |
||
− | 別個にやる必要はありません。 |
||
+ | === signature from "User <email@gmail.com>" is unknown trust === |
||
− | : その後は、{{ic|exit}}, {{ic|umount /mnt/{boot,} }} , {{ic|reboot}} と実行してください。 |
||
+ | 以下の方法を試してみてください: |
||
− | === "User <email@gmail.com>" の署名が unknown trust でインストールできません === |
||
+ | * {{ic|pacman-key --refresh-keys}} で既知のキーを更新してください。 |
||
+ | * 手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください: {{ic|pacman -Sy archlinux-keyring && pacman -Su}}。 |
||
+ | * [[pacman-key#全ての鍵のリセット]]に従って下さい。 |
||
+ | === PGP 鍵のインポートが要求される === |
||
− | [[pacman-key (日本語)#全てのキーのリセット]] に従って下さい。または手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください、{{ic|pacman -S archlinux-keyring}}。 |
||
+ | |||
+ | 古いバージョンの ISO で Arch を[[インストールガイド|インストール]]しようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり {{Pkg|archlinux-keyring}} をアップグレードしてください ([[#signature from "User <email@gmail.com>" is unknown trust|上]]を参照)。 |
||
+ | |||
+ | === エラー: key "0123456789ABCDEF" could not be looked up remotely === |
||
+ | |||
+ | パッケージが {{Pkg|archlinux-keyring}} に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの {{Pkg|archlinux-keyring}} に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。[[#signature from "User <email@gmail.com>" is unknown trust|上]]で書かれているように {{Pkg|archlinux-keyring}} を先にアップグレードしてください。 |
||
=== signature from "User <email@archlinux.org>" is invalid === |
=== signature from "User <email@archlinux.org>" is invalid === |
||
− | システム時刻が間違っている |
+ | システム[[時刻]]が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます: |
+ | |||
+ | error: ''package'': signature from "User <email@archlinux.org>" is invalid |
||
+ | error: failed to commit transaction (invalid or corrupted package (PGP signature)) |
||
+ | Errors occured, no packages were upgraded. |
||
+ | |||
+ | パッケージをインストール・アップグレードする前に {{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}} を設定しているとこのエラーがよく起こります)。 |
||
+ | |||
+ | # find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \; |
||
+ | |||
+ | === pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale' === |
||
+ | |||
+ | そのエラーは、あなたの locale が正しく設定されていないと言っています。[[ロケール]]を見て下さい。 |
||
+ | === pacman でプロキシ設定を使うにはどうすればいいですか? === |
||
− | === "failed to commit transaction (invalid or corrupted package)" エラーが出ます === |
||
+ | 環境変数 ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} など) を使って下さい。[[sudo]] と一緒に Pacman を使う時は、[[sudo#環境変数|環境変数を pacman に渡すように]] sudo を設定してください。 |
||
− | {{ic|/var/cache/pacman/pkg}} にある {{ic|*.part}} ファイル(部分ダウンロードファイル)を見つけたらそれらを削除します ({{ic|pacman.conf}} で {{ic|XferCommand}} を設定しているとよく起こります)。 |
||
+ | === 明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか === |
||
− | === pacman を使うたびにエラーがでます 'warning: current locale is invalid; using default "C" locale' どうすればいいですか? === |
||
+ | ネイティブのパッケージを全て再インストールするには: {{ic|<nowiki>pacman -Qnq | pacman -S -</nowiki>}} ({{ic|-S}} オプションはデフォルトでインストールの理由を維持します)。 |
||
− | そのエラーは、あなたの locale が正しく設定されていないと言っています。[[Locale (日本語)]] を見て下さい。 |
||
+ | 次に自分で作成したパッケージを全て再インストールしてください、{{ic|pacman -Qmq}} でパッケージを確認できます。 |
||
− | === Pacman にプロクシ設定を使うようにするにはどうすればいいですか? === |
||
+ | === パッケージのダウンロード時にフリーズする === |
||
− | 環境変数 ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} など) を使って下さい。[[sudo (日本語)|sudo]] と一緒に Pacman を使う時は、[[sudo (日本語)#環境変数|環境変数を pacman に渡すように]] sudo を設定してください。 |
||
+ | ''pacman'' がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [https://bbs.archlinux.org/viewtopic.php?id=68944] [https://bbs.archlinux.org/viewtopic.php?id=65728]。Arch Linux のインストール時にこの問題が発生する場合、''pacman'' のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは [[pacman のパフォーマンスの向上]]を参照)。[[VirtualBox]] で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで ''NAT'' の代わりに ''Host interface'' を使うことで解決します。 |
||
− | === 明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか? === |
||
+ | === Failed retrieving file 'core.db' from mirror === |
||
− | ネイティブのパッケージを全て再インストールするには: {{ic|pacman -S $(pacman -Qnq)}} ({{ic|-S}} オプションはデフォルトでインストールの理由の維持します)。 |
||
+ | [[ミラー]]を正しく設定しているのにこのエラーメッセージが表示される場合、[[Resolv.conf|ネームサーバ]]を設定してみてください。 |
||
− | 次に外部のパッケージを全て再インストールしてください、{{ic|pacman -Qmq}} でパッケージを表示できます。 |
||
== 参照 == |
== 参照 == |
||
− | * [https://www.archlinux.org/pacman/ |
+ | * [https://www.archlinux.org/pacman/ Pacman ホームページ] |
+ | * {{man|3|libalpm}} |
||
− | * [https://www.archlinux.org/pacman/pacman.8.html pacman(8) Manual Page] |
||
+ | * {{man|8|pacman}} |
||
− | * [https://www.archlinux.org/pacman/pacman.conf.5.html pacman.conf(5) Manual Page] |
||
+ | * {{man|5|pacman.conf}} |
||
− | * [https://www.archlinux.org/pacman/repo-add.8.html repo-add(8) Manual Page] |
||
+ | * {{man|8|repo-add}} |
2018年5月29日 (火) 19:34時点における版
関連記事
pacman パッケージマネージャは Arch Linux の主要な機能のひとつです。pacman はシンプルなバイナリのパッケージ形式と簡単に利用できるビルドシステムから成っています。pacman のゴールはパッケージ管理を楽にすることであり、公式 Arch リポジトリにあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。
Pacman はマスターサーバーと同期してシステムを最新に保ちます。このサーバー・クライアントモデルによって、シンプルなコマンドだけで必要な依存性を解決してパッケージのダウンロード・インストールをすることができます。
Pacman は C 言語で書かれており .pkg.tar.xz
パッケージフォーマットを使います。
目次
- 1 使い方
- 2 設定
- 3 トラブルシューティング
- 3.1 パッケージ XYZ にアップデートしたらシステムが壊れました
- 3.2 パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています
- 3.3 アップデートでこんなエラーが出ました: "file exists in filesystem"
- 3.4 パッケージのインストール時にこんなエラーが出ました: "not found in sync db"
- 3.5 パッケージをインストールする時にエラーが表示されます: "target not found"
- 3.6 pacman の手動再インストール
- 3.7 アップグレード中に Pacman がクラッシュしました
- 3.8 "make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません
- 3.9 システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
- 3.10 signature from "User <email@gmail.com>" is unknown trust
- 3.11 PGP 鍵のインポートが要求される
- 3.12 エラー: key "0123456789ABCDEF" could not be looked up remotely
- 3.13 signature from "User <email@archlinux.org>" is invalid
- 3.14 "failed to commit transaction (invalid or corrupted package)" エラー
- 3.15 pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'
- 3.16 pacman でプロキシ設定を使うにはどうすればいいですか?
- 3.17 明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか
- 3.18 パッケージのダウンロード時にフリーズする
- 3.19 Failed retrieving file 'core.db' from mirror
- 4 参照
使い方
pacman で何ができるかをちゃんと学びたい場合、pacman(8) を参照してください。以下にあるのは pacman でできることのほんの一例です。
パッケージのインストール
特定のパッケージのインストール
ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは:
# pacman -S パッケージ名1 パッケージ名2 ...
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります (例: [extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:
# pacman -S extra/パッケージ名
名前に類似パターンが存在するパッケージをインストールしたい場合 (グループ全体ではなくマッチするパッケージのみ、例: plasma):
# pacman -S plasma-{desktop,mediacenter,nm}
もちろん、必要に応じて更に複雑なパターンを指定することもできます:
# pacman -S plasma-{workspace{,-wallpapers},pa}
パッケージグループのインストール
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:
# 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 -Rsc パッケージ名
他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:
# pacman -Rdd パッケージ名
デフォルトでは、pacman は削除されたパッケージの設定ファイルを *.pacsave という拡張子をつけてバックアップします。もしこれらのファイルも一緒に削除したい場合:
# pacman -Rn パッケージ名
パッケージのアップグレード
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期してそれからシステムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です):
# pacman -Syu
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら The Arch Way を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です。Arch Linux の安定化#Arch のメンテナンスを見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために .pacnew
ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは Pacnew と Pacsave ファイルを見てください。
アップグレードするまえに、Arch Linux ホームページ の最新ニュースをチェックしておくとよいでしょう (もしくは RSS フィード, arch-announce メーリングリストを講読したり Twitter の @archlinux_jp をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
部分的なアップグレードはサポートされていません
Arch Linux はローリングリリースであり、常に新しいバージョンのライブラリがリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 (AUR のパッケージなど)、ユーザーは必要に応じて共有ライブラリにあわせてリビルドしなくてはなりません。
つまり部分的なアップグレードはサポートされていません。pacman -Sy package
や、それと同等の pacman -Sy
からの pacman -S package
などをしないでください。どんなときでも、パッケージをインストールする前に (pacman -Syu
で) アップグレードしてください。IgnorePkg
や IgnoreGroup
を使用する場合は気をつけて扱って下さい。pacman -Sy
は基本的に使ってはいけないコマンドで、代わりに pacman -Syu
を使って下さい。
一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません。ライブラリは後方互換性がないときには soname のバージョンアップに対応します。pacman -Syu
を実行しさえすれば、ミラーと同期して pacman が壊れていないかぎり問題が修正されます。
インストールされているパッケージのアップグレードを確認したいときは pacman パッケージに含まれている bash スクリプト checkupdates を使うことで、システムアップデートを行わずに安全に確認が行えます。
パッケージ・データベースに問い合わせる
Pacman からローカルデータベースに問い合わせるときは -Q
フラグを、同期データベースに問い合わせるときは -S
フラグを、ファイルデータベースに問い合わせるときは -F
フラグを使います。それぞれのフラグのサブオプションについては pacman -Q --help
, pacman -S --help
, pacman -F --help
を見てください。
Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:
$ pacman -Ss 検索ワード1 検索ワード2 ...
場合によって -s
の組み込みの ERE (拡張正規表現) が望まない結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください:
$ pacman -Ss '^vim-'
既にインストール済みのパッケージから検索するには:
$ pacman -Qs 検索ワード1 検索ワード2 ...
リモートパッケージからパッケージファイルの名前で検索するには:
$ pacman -Fs 検索ワード1 検索ワード2 ...
パッケージ名が分かっていれば、より詳しい情報を得ることができます:
$ pacman -Si パッケージ名
既にインストールしたパッケージの情報を得るには:
$ pacman -Qi パッケージ名
-i
フラグをふたつ付けることでバックアップファイルの一覧と状態を表示できます:
$ pacman -Qii パッケージ名
あるパッケージによってインストールされたファイルの一覧を得るには:
$ pacman -Ql パッケージ名
リモートパッケージによってインストールされるファイルのリストを得るには:
$ pacman -Fl パッケージ名
あるファイルがどのパッケージによってインストールされたかを調べるには:
$ pacman -Qo /パス/ファイル名
あるファイルがどのリモートパッケージに属しているかデータベースに問い合わせるには:
$ pacman -Fo /パス/ファイル名
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
$ pacman -Qdt
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
$ pacman -Qet
pacman ヒントには他の例も載っています。
Pactree
パッケージの依存のツリーを見るには:
$ pactree パッケージ名
あるパッケージを必要としている全てのパッケージを見るには pkgtools の whoneeds
を使います:
$ whoneeds パッケージ名
もしくは pactree のリバースフラグを使って:
$ pactree -r package_name
データベースの構造
通常 pacman のデータベースは /var/lib/pacman/sync
に配置され、/etc/pacman.conf
で指定したリポジトリのデータベースファイルがそこに作成されます。データベースファイルは gzip で圧縮された tar アーカイブになっており、パッケージごとにディレクトリが含まれています。例えば which パッケージの場合:
% tree which-2.20-6 which-2.20-6 |-- depends `-- desc
depends
ファイルにはパッケージが依存するパッケージのリストが記載されており、desc
にはファイルサイズや MD5 ハッシュなどのパッケージの情報が入っています。
パッケージキャッシュの削除
pacman はダウンロードしたパッケージを /var/cache/pacman/pkg/
に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。
現在インストールされていないパッケージキャッシュを全て削除するオプションは:
# pacman -Sc
上記の欠点のため、-Sc
や -Scc
スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:
- pacman-contrib パッケージに入っている paccache コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します:
$ paccache -r
ただし、この方法では paccache はパッケージがインストールされているかどうかを確認しないため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります:$ paccache -ruk0
他のオプションはpaccache -h
を見て下さい。
- もしくは、pkgcachecleanAUR をインストールして使うこともできます:
# pkgcacheclean
追加コマンド
システムのアップグレードとパッケージのインストール (ワンライナー):
# pacman -Syu パッケージ名1 パッケージ名2 ...
インストールをしないで、パッケージをダウンロードする:
# pacman -Sw パッケージ名
リポジトリに存在しない'ローカル'のパッケージ (例: AUR のパッケージ) をインストール:
# pacman -U /パス/パッケージ名-version.pkg.tar.xz
リポジトリにない、リモートのパッケージを URI を入力してインストール:
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
pacman で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。-p
を使うことで -S
, -U
, -R
などの操作を阻止することができます。
pacman にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは --help
スイッチを付けて呼び出すことでコマンドオプションを表示できます。
インストール理由
pacman データベースではインストールしたパッケージはインストールしたときの理由によって2つのグループに分別されます:
- 明示的にインストール: pacman の
-S
や-U
コマンドによって文字通り指定されたパッケージ。 - 依存パッケージ: pacman のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから必要とされたためにインストールされたパッケージ。
パッケージのインストール時、以下のようにすることでインストール理由を依存パッケージに強制的に変えることができます:
# pacman -S --asdeps package_name
パッケージの再インストールを行っても、デフォルトではインストール理由は変更されません。
明示的にインストールしたパッケージのリストは pacman -Qe
で表示でき、依存パッケージのリストは pacman -Qd
で表示できます。
既にインストールしたパッケージのインストール理由を変更したい場合、以下のコマンドを実行:
# pacman -D --asdeps package_name
インストール理由を「明示的にインストール」に変えたいときは --asexplicit
を使ってください。
特定のファイルが含まれているパッケージを検索
ファイルデータベースを同期してください:
# pacman -Fy
ファイルが含まれているパッケージを検索するには:
$ pacman -Fs pacman core/pacman 5.0.1-4 usr/bin/pacman usr/share/bash-completion/completions/pacman extra/xscreensaver 5.36-1 usr/lib/xscreensaver/pacman
高度な使い方をしたい場合、全てのファイルと関連するパッケージのデータベースを使用する pkgfile をインストールしてください。
設定
pacman の設定は /etc/pacman.conf
に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は pacman.conf(5) にあります。
全般設定
全般的な設定は [options]
セクションにあります。ここで設定されている項目については pacman(8) かデフォルトの pacman.conf
を参照してください。
カラー出力
コンソールのカラー出力#pacman を見てください。
アップデートする前にバージョンを比較
利用可能なパッケージの新旧バージョンを確認したい場合、/etc/pacman.conf
の "VerbosePkgLists" 行をアンコメントしてください。pacman -Syu
の出力が以下のようになります:
Package (6) Old Version New Version Net Change Download Size extra/libmariadbclient 10.1.9-4 10.1.10-1 0.03 MiB 4.35 MiB extra/libpng 1.6.19-1 1.6.20-1 0.00 MiB 0.23 MiB extra/mariadb 10.1.9-4 10.1.10-1 0.26 MiB 13.80 MiB
アップグレードさせないパッケージを設定
ある特定のパッケージをアップデートさせないようにするには:
IgnorePkg=linux
複数のパッケージを記述するときはスペースで区切るか、IgnorePkg
行を追加してください。
アップグレードさせないグループを設定
パッケージの場合と同様に、アップグレードさせないグループを指定することができます:
IgnoreGroup=gnome
アップグレードさせないファイルを設定
NoUpgrade
ディレクティブで指定されたファイルはパッケージのインストール・アップグレードで変更を加えられることがなくなり、.pacnew 拡張子が付いたファイルが新しくインストールされます:
NoUpgrade=path/to/file
インストールさせないファイルを設定
特定のディレクトリのインストールをさせないようにするには NoExtract
リストにディレクトリを加えます。例えば、systemd ユニットのインストールを避けるには:
NoExtract=usr/lib/systemd/system/*
もしくは localepurgeAUR と同じように、英語以外のローカライゼーションのインストールを止めるには:
NoExtract = usr/share/help/* !usr/share/help/en* NoExtract = usr/share/locale/* !usr/share/locale/en* !usr/share/locale/locale.alias NoExtract = usr/share/man/* !usr/share/man/man* NoExtract = usr/share/vim/vim74/lang/*
後ろのルールは前のルールを上書きします。また、!
でルールを打ち消すことで、必要なロケールだけを維持できます。
複数の設定ファイルを使用
設定ファイルが複数あって (メインの設定と testing リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで Include
オプションを宣言することができます。例:
Include = /path/to/common/settings
/path/to/common/settings
は共有したいオプションが存在するファイルに置き換えてください。
フック
pacman は /usr/share/libalpm/hooks/
ディレクトリのフックを処理の前後に実行することができます。さらに pacman.conf
の HookDir
オプションでフックディレクトリを指定できます (デフォルトは /etc/pacman.d/hooks
です)。フックファイルの名前には必ず .hook を後ろに付ける必要があります。
Pacman フックは様々なことに使われています。例えば、systemd-sysusers
と systemd-tmpfiles
を組み合わせてパッケージのインストール時に自動的にシステムユーザーを作成します。例として tomcat8 パッケージでは tomcat8
という名前のシステムユーザーが必要だと指定されており特定のディレクトリの所有者がこのユーザーになるように設定されています。pacman フックの systemd-sysusers.hook
と systemd-tmpfiles.hook
は tomcat8
パッケージにシステムユーザーと一時ファイルが含まれていることを認識して systemd-sysusers
と systemd-tmpfiles
を実行します。
alpm のフックに関する詳細は alpm-hooks(5) の man ページを参照。
リポジトリ
/etc/pacman.conf
に書かれているように、Repositories セクションではどのリポジトリを使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル (/etc/pacman.d/mirrorlist
) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定はここを見て下さい。
パッケージのセキュリティ
Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。SigLevel
を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では SigLevel = Required DatabaseOptional
によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に SigLevel
を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、pacman-key を見てください。
トラブルシューティング
パッケージ XYZ にアップデートしたらシステムが壊れました
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ (linux, xorg-server など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.jp/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。
パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ (/var/log/pacman.log
) を見て再チェックしてください。
この段階で pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は、助けを求めるのにフォーラムや IRC を使ったり問題のあるパッケージをダウングレードしてください。
パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。MirrorStatus にミラーの更新状況がのっています。
アップデートでこんなエラーが出ました: "file exists in filesystem"
関連: Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する (pacman -Qo /path/to/file
) ことです。ファイルが他のパッケージによって使われている場合、バグレポートをしてください。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。
全てのパッケージはインストールされるとパッケージのメタデータを含んだ /var/lib/pacman/local/$package-$version/files
ファイルを作ります。このファイルが壊れている(または空だったり見つからない)と、パッケージをアップデートしようしたときに "file exists in filesystem" エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、pacman -S --force パッケージ名
で pacman にファイルを上書きさせることができます。
絶対に pacman -Syu --force
はしないでください。
パッケージのインストール時にこんなエラーが出ました: "not found in sync db"
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。pacman -Syy
で全てのパッケージリストを更新してください。
パッケージをインストールする時にエラーが表示されます: "target not found"
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。pacman -Syy
を実行して強制的に全てのパッケージリストを更新してみましょう。
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは multilib リポジトリにあるが、multilib が pacman.conf
で有効になっていないということが考えられます。
pacman の手動再インストール
pacman がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
- インストールするパッケージを確認
- 適当なミラーからパッケージをそれぞれダウンロード
- パッケージをルートディレクトリに展開
pacman -S --force
でパッケージを再インストールしてパッケージデータベースを更新- フルシステムアップグレードを実行
問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます:
$ pacman -Q $(pactree -u pacman)
問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します:
# tar -xvpwf package.tar.xz -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
w
フラグを使ってインタラクティブモードにしていることに注意してください。インタラクティブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。こちらのフォーラムの投稿 には pacman の一部の依存パッケージだけが壊れた時の解決方法の例が載っています。
アップグレード中に Pacman がクラッシュしました
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
- Arch インストールメディアを使って起動してください。
- root でルートファイルシステムをマウントします (
mount /dev/sdaX /mnt
)。df -h
で十分な空き容量があることを確認してください。 - proc, sys, dev ファイルシステムもマウントしてください:
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
。 - システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で
pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu
を実行することでシステムの "pacman" データベースを更新してアップグレードすることができます。 - アップグレード後、アップグレードがないことと壊れているパッケージを確認してください:
find /mnt/usr/lib -size 0
。 pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package
で壊れているパッケージを再インストールしてください。
"make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません
"conflicting files" エラーが出る場合、--force
スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします (pacman -S --force
)。ファイルシステム中の所有されていないファイルを検索するスクリプトについては Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認 を見て下さい。
システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません
おそらく initramfs がカーネルアップデート中に破損しています(不正に --force
オプションを使うと起こりえます)。2つの解決方法があります:
1. Fallback エントリを試す:
- システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの linux カーネル用)を入力して initramfs イメージを再生成します:
# mkinitcpio -p linux
2. 動かない場合、最新の Arch リリース (CD/DVD または USB スティック) から起動する:
- 最新のリリースを持っていなかったり他の "live" Linux ディストリビューションしかないときは、代わりに古い方法である chroot が使えます。
arch-chroot
スクリプトを入らせるよりは多くのタイピングが必要です。 - arch-chroot や chroot 環境に入れない場合にパッケージを再インストールしたいときは、root パーティションで
pacman -r /mnt -Syu foo bar
コマンドで pacman を使えます。
# mount /dev/sdxY /mnt #あなたの root パーティション。 # mount /dev/sdxZ /mnt/boot #/boot パーティションを分割している場合。 # arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
- カーネル (linux パッケージ) の再インストールは自動的に initramfs イメージを
mkinitcpio -p linux
で再生成します。別個にやる必要はありません。 - その後
exit
,umount /mnt/{boot,}
,reboot
を実行してください。
signature from "User <email@gmail.com>" is unknown trust
以下の方法を試してみてください:
pacman-key --refresh-keys
で既知のキーを更新してください。- 手動で
archlinux-keyring
パッケージをアップグレードしてください:pacman -Sy archlinux-keyring && pacman -Su
。 - pacman-key#全ての鍵のリセットに従って下さい。
PGP 鍵のインポートが要求される
古いバージョンの ISO で Arch をインストールしようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり archlinux-keyring をアップグレードしてください (上を参照)。
エラー: key "0123456789ABCDEF" could not be looked up remotely
パッケージが archlinux-keyring に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの archlinux-keyring に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。上で書かれているように archlinux-keyring を先にアップグレードしてください。
signature from "User <email@archlinux.org>" is invalid
システム時刻が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます:
error: package: signature from "User <email@archlinux.org>" is invalid error: failed to commit transaction (invalid or corrupted package (PGP signature)) Errors occured, no packages were upgraded.
パッケージをインストール・アップグレードする前に ntpd -qg
と hwclock -w
を root で実行して下さい。
"failed to commit transaction (invalid or corrupted package)" エラー
/var/cache/pacman/pkg
にある *.part
ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい (pacman.conf
で XferCommand
を設定しているとこのエラーがよく起こります)。
# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;
pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'
そのエラーは、あなたの locale が正しく設定されていないと言っています。ロケールを見て下さい。
pacman でプロキシ設定を使うにはどうすればいいですか?
環境変数 ($http_proxy
, $ftp_proxy
など) を使って下さい。sudo と一緒に Pacman を使う時は、環境変数を pacman に渡すように sudo を設定してください。
明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか
ネイティブのパッケージを全て再インストールするには: pacman -Qnq | pacman -S -
(-S
オプションはデフォルトでインストールの理由を維持します)。
次に自分で作成したパッケージを全て再インストールしてください、pacman -Qmq
でパッケージを確認できます。
パッケージのダウンロード時にフリーズする
pacman がリポジトリのアップデートや同期をできないというネットワークの問題がいくつか報告されています [1] [2]。Arch Linux のインストール時にこの問題が発生する場合、pacman のデフォルトのファイルダウンローダを置き換えることで解決します (詳しくは pacman のパフォーマンスの向上を参照)。VirtualBox で Arch Linux をゲスト OS としてインストールする時にこの問題が起こる場合、マシンのプロパティで NAT の代わりに Host interface を使うことで解決します。
Failed retrieving file 'core.db' from mirror
ミラーを正しく設定しているのにこのエラーメッセージが表示される場合、ネームサーバを設定してみてください。