「Pacman」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(→‎アップグレード中に Pacman がクラッシュしました: ケース「"pacman: command not found"」について追加)
(13人の利用者による、間の32版が非表示)
1行目: 1行目:
[[Category:Package management (日本語)]]
+
[[Category:パッケージ管理]]
  +
[[Category:Arch プロジェクト]]
  +
[[Category:コマンド]]
 
[[ar:Pacman]]
 
[[ar:Pacman]]
 
[[cs:Pacman]]
 
[[cs:Pacman]]
7行目: 9行目:
 
[[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]]
 
[[pt:Pacman]]
 
[[pt:Pacman]]
[[ro:Pacman]]
 
 
[[ru:Pacman]]
 
[[ru:Pacman]]
 
[[sr:Pacman]]
 
[[sr:Pacman]]
 
[[sv:Pacman]]
 
[[sv:Pacman]]
[[tr:pacman]]
+
[[zh-hans:Pacman]]
[[uk:Pacman]]
+
[[zh-hant:Pacman]]
[[zh-CN:Pacman]]
 
[[zh-TW:Pacman]]
 
 
{{Lowercase title}}
 
{{Lowercase title}}
{{Related articles start (日本語)}}
+
{{Related articles start}}
{{Related2|Downgrading Packages (日本語)|パッケージのダウングレード}}
+
{{Related|パッケージの作成}}
  +
{{Related|パッケージのダウングレード}}
{{Related2|Improve Pacman Performance (日本語)|Pacman のパフォーマンスの向上}}
 
{{Related2|Pacman GUI Frontends (日本語)|Pacman GUI ロントエ}}
+
{{Related|Pacman のパォーマスの向上}}
{{Related2|Pacman Rosetta (日本語)|Pacman 比較表}}
+
{{Related|Pacman GUI フロントエンド}}
{{Related2|Pacman Tips (日本語)|Pacman ヒント}}
+
{{Related|Pacman 比較表}}
  +
{{Related|Pacman ヒント}}
{{Related2|Pacman package signing|Pacman パッケージ署名}}
 
{{Related2|FAQ (日本語)#パッケージ管理|FAQ#パッケージ管理}}
+
{{Related|FAQ#パッケージ管理}}
{{Related2|pacman-key (日本語)|pacman-key}}
+
{{Related|pacman-key}}
{{Related2|Pacnew and Pacsave Files (日本語)|Pacnew と Pacsave ファイル}}
+
{{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 (日本語)|ビルドシステム]]から成っています。pacman のゴールはパッケージ管理を楽にすることであり、[[Official Repositories (日本語)|公式 Arch ポジトリ]]にあるパッケージや、ユーザー自身が作成したパッケージを容易に管理することができます。
+
'''[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}} パッケージには他にも有用なツールが含まれています。'''makepkg''', '''pactree''', '''vercmp''' など。ツールの一覧を見るには {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}} を実行してください。 }}
+
{{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}} を参照してください。
 
   
  +
{{Note|
==== アップグレードさせないパッケージを設定 ====
 
  +
* パッケージには [[PKGBUILD#optdepends|optdepends]] が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。[[#パッケージ・データベースに問い合わせる|パッケージ・データベースに問い合わせる]]ことで情報を参照することができます。
  +
* 他のパッケージの依存パッケージとしてパッケージをインストールする場合 (そのパッケージ自体は必要としていない場合)、{{ic|--asdeps}} オプションを使用することを推奨します。詳しくは[[#インストール理由|インストール理由]]を参照。}}
   
  +
{{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新しないでください (つまり {{ic|pacman -Sy ''パッケージ名''}} をしてはいけない)。これを実行すると依存関係に問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}}
ある特定のパッケージをアップデートさせないようにするには:
 
   
  +
====特定のパッケージのインストール====
IgnorePkg=linux
 
   
複数のパッケージを記述するときはスペースで区切るか、{{ic|IgnorePkg}} 行を追加してください。
+
ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは:
   
  +
# pacman -S ''パッケージ名1'' ''パッケージ名2'' ...
==== アップグレードさせないグループを設定 ====
 
   
  +
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります (例: [extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:
パッケージの場合と同様に、アップグレードさせないグループを指定することができます:
 
   
  +
# pacman -S extra/''パッケージ名''
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
 
   
  +
名前に類似パターンが存在するパッケージをインストールしたい場合 (グループ全体ではなくマッチするパッケージのみ、例: {{Grp|plasma}}):
# An example of a custom package repository. See the pacman manpage for
 
# tips on creating your own repositories.
 
#[custom]
 
#SigLevel = Optional TrustAll
 
#Server = file:///home/custompkgs}}
 
   
  +
# pacman -S plasma-{desktop,mediacenter,nm}
{{Warning|[testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public arch-dev-public mailing list] を購読するのをお薦めします。}}
 
   
  +
もちろん、必要に応じて更に複雑なパターンを指定することもできます:
=== パッケージのセキュリティ ===
 
   
  +
# pacman -S plasma-{workspace{,-wallpapers},pa}
Pacman 4 は署名済みのパッケージをサポートしていて、パッケージにセキュリティレイヤーを加えています。{{ic|SigLevel}} を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では {{hc|head=/etc/pacman.conf|output=SigLevel <nowiki>=</nowiki> Required DatabaseOptional}} によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に {{ic|SigLevel}} を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、[[pacman-key (日本語)|ここ]]を見て下さい。
 
   
  +
====パッケージグループのインストール====
== 使い方 ==
 
 
pacman で何ができるかをちゃんと学びたい場合、[https://www.archlinux.org/pacman/pacman.8.html man pacman] を参照してください。以下にあるのは pacman でできることのほんの一例です。
 
 
=== パッケージのインストール ===
 
 
==== 特定のパッケージのインストール ====
 
 
ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは:
 
 
# pacman -S ''パッケージ名1'' ''パッケージ名2'' ...
 
 
異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります(例:[extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:
 
 
# pacman -S extra/''パッケージ名''
 
 
==== パッケージグループのインストール ====
 
   
 
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:
 
パッケージグループに属しているパッケージを同時にインストールすることができます。例えば:
162行目: 102行目:
 
# pacman -Sg gnome
 
# pacman -Sg gnome
   
どのようなパッケージグループがあるかは https://www.archlinux.org/groups/ を見て下さい。
+
どのようなパッケージグループがあるかは https://www.archlinux.jp/groups/ を見て下さい。
   
 
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}}
 
{{Note|グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。{{ic|--needed}} オプションを使うことで無視できます。}}
   
  +
===パッケージの削除===
{{Warning|1=パッケージのインストールをする際に、[[#パッケージのアップグレード|アップグレード]]をせずにパッケージリストを更新'''しないでください''' (つまり {{ic|pacman -Sy ''パッケージ名''}} をしてはいけない)。これをすると依存問題がおこる可能性があります。[[#部分的なアップグレードはサポートされていません]] や https://bbs.archlinux.org/viewtopic.php?id=89328 を参照。}}
 
 
=== パッケージの削除 ===
 
   
 
あるパッケージを、そのパッケージが必要としていたものを残したまま削除するには:
 
あるパッケージを、そのパッケージが必要としていたものを残したまま削除するには:
194行目: 132行目:
 
{{Note|Pacman はパッケージがインストールされた後に作成された設定ファイルを削除しません。$HOME ディレクトリ下の設定ファイルなどは手動で削除してください。}}
 
{{Note|Pacman はパッケージがインストールされた後に作成された設定ファイルを削除しません。$HOME ディレクトリ下の設定ファイルなどは手動で削除してください。}}
   
=== パッケージのアップグレード ===
+
===パッケージのアップグレード===
   
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはポジトリデータベースと同期して''それから''システムのパッケージをアップデートします(ポジトリにない'ローカル'パッケージは別です):
+
Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはポジトリデータベースと同期して''それから''システムのパッケージをアップデートします(ポジトリにない'ローカル'パッケージは別です):
   
 
# pacman -Syu
 
# pacman -Syu
202行目: 140行目:
 
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}}
 
{{Warning|アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。}}
   
Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら [[The Arch Way (日本語)|The Arch Way]] を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。'''システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要です'''。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために {{ic|.pacnew}} ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは [[Pacnew and Pacsave Files (日本語)]] を見てさい。
+
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.org/ Arch Linux home page] の最新ニュースをチェックしておくとよいでしょう もしくは [https://www.archlinux.org/feeds/news/ RSS フィード], [https://mailman.archlinux.org/mailman/listinfo/arch-announce/ arch-announce メーリングリスト]を講読したり Twitter の [https://twitter.com/archlinux @archlinux] をフォローする: アップデートの際にいつもとは違うユーザーの操作が必要になった時 (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 から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。
   
 
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
 
もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。
   
===ジ・デタベースに問合わ===
+
====部分的なアプグレドはサポトされてん====
   
  +
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}} フラグを使います:
 
   
  +
インストールされているパッケージのアップグレードを確認したいときは {{Pkg|pacman-contrib}} パッケージに含まれている 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 -F ''/パス/ファイル名''
   
 
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
 
孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:
   
 
$ pacman -Qdt
 
$ pacman -Qdt
  +
  +
{{Tip|上記のコマンドを pacman の post-transaction [[#フック|フック]]に追加することで、トランザクションによってパッケージが孤立したときに通知することができます。(明示的にインストールしたのでない限り) リポジトリから消されたパッケージはローカルでは孤児になるため、パッケージがリポジトリから消されたときに知ることができます。孤児が見つからなかったときに "failed to execute command" エラーを表示しないようにするため、フックの {{ic|Exec}} では次のコマンドを使用してください: {{ic|<nowiki>/usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'"</nowiki>}}。}}
   
 
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
 
明示的にインストールしたパッケージで、依存関係で必要とされていないパッケージを全て表示するには:
   
 
$ pacman -Qet
 
$ pacman -Qet
  +
  +
[[pacman ヒント]]には他の例も載っています。
  +
  +
====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 ハッシュなどのパッケージの情報が入っています。
  +
  +
===パッケージキャッシュの削除===
   
 
pacman はダウンロードしたパッケージを {{ic|/var/cache/pacman/pkg/}} に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。
 
pacman はダウンロードしたパッケージを {{ic|/var/cache/pacman/pkg/}} に保存し、古いバージョンやアンインストールされたパッケージを自動では削除しません。従ってこのフォルダのサイズをあまりにも大きくしすぎないために定期的・計画的にこのフォルダを掃除する必要があります。
281行目: 257行目:
   
 
{{Warning|
 
{{Warning|
* インストールしたパッケージが安定していて、[[Downgrading Packages (日本語)|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[Arch Rollback Machine (日本語)|Arch Rollback Machine]] などから古いパッケージを取得するしか方法がなくなってしまいます。
+
* インストールしたパッケージが安定していて、[[パッケージのダウングレード|ダウングレード]]が必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと [[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 こちらのスレッド] に載っています。}}
* もしくは、[[Arch User Repository (日本語)|Arch User Repository]] から {{AUR|pkgcacheclean}} をインストールして使うこともできます: {{bc|# pkgcacheclean}}
 
   
=== 追加コマンド ===
+
===追加コマンド===
   
システムのアップグレードとパッケージのインストール(ワンライナー):
+
システムのアップグレードとパッケージのインストール (ワンライナー):
   
 
# pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ...
 
# pacman -Syu ''パッケージ名1'' ''パッケージ名2'' ...
301行目: 279行目:
 
# pacman -Sw ''パッケージ名''
 
# pacman -Sw ''パッケージ名''
   
リポジトリに存在しない'ローカル'のパッケージ (例: [[Arch User Repository (日本語)|AUR]] のパッケージ) をインストール:
+
リポジトリに存在しない'ローカル'のパッケージ (例: [[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'' のインストールコマンドにパッケージの名前は指定されず、明示的にインストールした他のパッケージから[[PKGBUILD#依存関係|必要]]とされたためにインストールされたパッケージ。
  +
  +
パッケージのインストール時、以下のようにすることでインストール理由を''依存パッケージ''に強制的に変えることができます:
  +
  +
# 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|5|pacman.conf}} かデフォルトの {{ic|pacman.conf}} を参照してください。
  +
  +
====カラー出力====
  +
  +
[[コンソールのカラー出力#pacman]] を見てください。
  +
  +
==== 並列ダウンロードを有効にする ====
  +
  +
''pacman'' 6.0 はパッケージを同時にダウンロードするオプションを導入しました。この機能を使用するには、{{ic|/etc/pacman.conf}} で {{ic|ParallelDownloads}} を正の整数に (例:{{ic|5}}) など設定する必要があります。このオプションが設定されていない場合、パッケージは順番にダウンロードされます。
  +
  +
====アップデートする前にバージョンを比較====
  +
  +
利用可能なパッケージの新旧バージョンを確認したい場合、{{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]] を見てください。
''pacman'' にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは {{ic|--help}} スイッチを付けて呼び出すことでコマンドオプションを表示できます。ユーティリティの完全なリストを見るには、次を実行してください:
 
$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'
 
   
== トラブルシューティング ==
+
==トラブルシューティング==
   
=== パッケージ XYZ にアップデートしたらシステムが壊れました===
+
===パッケージ XYZ にアップデートしたらシステムが壊れました===
   
 
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
 
Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。
   
一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ ({{Pkg|linux}}, {{Pkg|xorg-server}} など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.org/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。
+
一番重要なことは"やみくもに" 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.org/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は'''、助けを求めるのにフォーラムや [[IRC Channel|IRC]] を使ったり問題のあるパッケージを[[Downgrading Packages (日本語)|ダウングレード]]してください。
+
この段階で '''pacman から何も有用な情報が得られなく、https://www.archlinux.jp/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は'''、助けを求めるのにフォーラムや [[IRC チャンネル|IRC]] を使ったり問題のあるパッケージを[[パッケージのダウングレード|ダウングレード]]してください。
   
=== パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています===
+
===パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています===
   
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux.org/mirrors/status/ MirrorStatus] にミラーの更新状況がのっています。
+
Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。[https://www.archlinux.jp/mirrors/status/ MirrorStatus] にミラーの更新状況がのっています。
   
=== アップデートでこんなエラーが出ました: "file exists in filesystem" ===
+
===アップデートでこんなエラーが出ました: "file exists in filesystem"===
   
 
関連: ''Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.''
 
関連: ''Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.''
356行目: 461行目:
 
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。
 
なぜこれが起こるというと: pacman がファイル衝突を検知して、あなたのために、故意に、ファイルを上書きしないようにしているからです。これは仕様であり、欠陥ではありません。
   
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo /path/to/file}}) ことです。ファイルが他のパッケージによって使われている場合、[[Reporting Bug Guidelines (日本語)|バグレポートをしてください]]。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。
+
この問題は簡単に解決できます。安全な方法は初めに他のパッケージがファイルを使っていないか確認する ({{ic|pacman -Qo ''/path/to/file''}}) ことです。ファイルが他のパッケージによって使われている場合、[[バグ報告ガイドライン|バグレポートをしてください]]。他のパッケージによって使われていない場合、'ファイルシステムに存在している'ファイルの名前を変えてもう一度アップデートしてください。うまくいったならば、そのファイルは削除してかまいません。
   
 
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。
 
pacman やフロントエンドを使わずに手動でプログラムをインストールしたときは、プログラムとファイルを削除して pacman を使って正しく再インストールしなくてはなりません。
   
全てのパッケージはインストールされるとパッケージのメタデータを含んだ {{ic|/var/lib/pacman/local/$package-$version/files}} ファイルを作ります。このファイルが壊れている(または空だったり見つからない)と、パッケージをアップデートしようしたときに "file exists in filesystem" エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、{{ic|pacman -S --force パッケージ名}} で pacman にファイルを上書きさせることができます。
+
全てのパッケージはインストールされるとパッケージのメタデータを含んだ {{ic|/var/lib/pacman/local/$package-$version/files}} ファイルを作ります。このファイルが壊れている(または空だったり見つからない)と、パッケージをアップデートしようしたときに "file exists in filesystem" エラーが出ます。このようなエラーは大抵一つのパッケージだけが関わっていて、手動で名前を変更してその後削除する代わりに、{{ic|pacman -S --overwrite glob パッケージ名}} で pacman に glob に一致するファイルを上書きさせることができます。
   
'''絶対に''' {{ic|pacman -Syu --force}}しないでください。
+
{{Warning|一般的に --overwrite スイッチの使用避けてください。}}
   
=== パッケージのインストール時にこんなエラーが出ました: "not found in sync db" ===
+
===パッケージのインストール時にこんなエラーが出ました: "not found in sync db"===
   
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} で全てのパッケージリストを更新してください。
+
まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} で全てのパッケージリストを更新してください。
   
=== パッケージをインストールする時にエラーが表示されます: "target not found" ===
+
===パッケージをインストールする時にエラーが表示されます: "target not found"===
   
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう。 <br> また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは ''multilib'' リポジトリにあるが、''multilib'' が ''pacman.conf'' で有効になっていないということが考えられます
+
まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。{{ic|pacman -Syy}} を実行して強制的に全てのパッケージリストを更新してみましょう。
   
  +
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは ''multilib'' リポジトリにあるが、''multilib'' が {{ic|pacman.conf}} で有効になっていないということが考えられます。
=== Pacman が何度も同じパッケージをアップグレードします! ===
 
   
  +
=== pacman の手動再インストール ===
それは {{ic|/var/lib/pacman/local/}} に二重のエントリがあるためです。{{ic|pacman -Qi}} は正しいバージョンを示しますが、{{ic|pacman -Qu}} は古いバージョンだと認識してアップグレードしようとします。
 
   
  +
==== pacman-static を使用====
解決法: {{ic|/var/lib/pacman/local/}} の問題のあるエントリを削除してください。
 
   
  +
{{AUR|pacman-static}} は pacman を静的にコンパイルしたものなので、システム上のライブラリが動作していなくても実行できます。これは、 [https://wiki.archlinux.jp/index.php/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9#.E9.83.A8.E5.88.86.E7.9A.84.E3.81.AA.E3.82.A2.E3.83.83.E3.83.97.E3.82.B0.E3.83.AC.E3.83.BC.E3.83.89.E3.81.AF.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.A6.E3.81.84.E3.81.BE.E3.81.9B.E3.82.93 部分的なアップグレード] が実行され、 pacman が実行できなくなった場合にも便利です。
{{Note|Pacman は version 3.4 から二重のエントリの場合はエラーを表示するため、この質問と回答はすでに不要になっているはずです。}}
 
   
  +
固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法を提供し、 pacman を再インストールしたり、部分的なアップグレードの場合にシステム全体をアップグレードしたりするために使用できます。
=== アップグレード中に Pacman がクラッシュしました! ===
 
  +
  +
==== 外部の pacman を使用する ====
  +
  +
{{ic|pacman-static}} でさえ動作しない場合は、外部の pacman を使用してリカバリできます。最も簡単な方法の1つは、 [[archiso]] を使用し、 {{ic|--sysroot}}} または {{ic|--root}} を使用してマウントポイントを指定する方法です。 {{ic|--sysroot}} に必要なファイルシステムをマウントする方法については、 [[Chroot#chrootの使用]] を参照してください。
  +
  +
==== 手動で抽出する ====
  +
  +
{{Warning|以下の方法でシステムをさらに再起不能にまで壊してしまう可能性があります。[[#アップグレード中に Pacman がクラッシュしました]]に書かれている方法で直らない場合の最後の手段として使ってください。}}
  +
  +
''pacman'' がどうしようもなく破壊されたとしても、最新のパッケージを手動でダウンロードして適切な場所に展開することで修復が可能です。以下のような手順で行います:
  +
  +
#インストールするパッケージを確認
  +
#適当なミラーからパッケージをそれぞれダウンロード
  +
#パッケージをルートディレクトリに展開
  +
#{{ic|pacman -S --force}} でパッケージを再インストールしてパッケージデータベースを更新
  +
#フルシステムアップグレードを実行
  +
  +
問題なく動く Arch 環境があるのであれば、以下のコマンドで依存パッケージのリストを確認できます:
  +
  +
$ pacman -Q $(pactree -u pacman)
  +
  +
問題によってはアップデートしなくてはならないパッケージは少数かもしれません。パッケージは以下のようにして展開します:
  +
  +
# tar -xvpwf ''package.tar.xz'' -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
  +
  +
{{ic|w}} フラグを使ってインタラクティブモードにしていることに注意してください。インタラクティブで実行しないと重要なファイルを誤って上書きしてしまう可能性があります。また、パッケージは適切な順番で展開するようにしてください。[https://bbs.archlinux.org/viewtopic.php?id=95007 こちらのフォーラムの投稿] には ''pacman'' の一部の依存パッケージだけが壊れた時の解決方法の例が載っています。
  +
  +
===アップグレード中に Pacman がクラッシュしました===
   
 
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
 
パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
   
# Arch インストールメディアを使って起動してください
+
#Arch インストールメディアを使って起動してください
# root ファイルシステムをマウントします
+
#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}}。
# {{ic|pacman -Syy}} を使って pacman のデータベースを更新します
 
  +
#システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で {{ic|1=pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu}} を実行することでシステムの "pacman" データベースを更新してアップグレードすることができます。
# {{ic|pacman -r /path/to/root -S package}} で壊れたパッケージを再インストールしてください
 
  +
#アップグレード後、アップグレードがないことと壊れているパッケージを確認してください: {{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のキャッシュディレクトリをシンボリックリンクしてはいけません。
  +
代わりに別のキャッシュディレクトリを構成するか、バインドマウントを使用してください。
  +
[https://bbs.archlinux.org/viewtopic.php?id=241213]
  +
  +
==="make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません===
  +
  +
"conflicting files" エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の''所有されていない''ファイルを検索するスクリプトについては [[Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。
  +
{{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch ニュースで使うように指示が出ている時にだけ使うことを推奨します。}}
  +
  +
===システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません===
  +
  +
おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。2つの解決方法があります:
  +
  +
'''1.''' ''Fallback'' エントリを試す:
  +
  +
{{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー ([[Syslinux]] の場合) や {{ic|e}} ([[GRUB]] や [[systemd-boot]] の場合) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して(ブートローダによる)新しいパラメータを使って起動できます。}}
  +
  +
システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します:
  +
  +
{{bc|# mkinitcpio -p linux}}
   
  +
'''2.''' それが機能しない場合は、現在の Arch リリース (CD/DVDまたはUSBスティック) から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。
=== "make install" を使ってソフトウェアをインストールしましたが、これらのファイルはどのパッケージにも属していません! ===
 
   
  +
# arch-chroot /mnt
"conflicting files" エラーが出る場合、{{ic|--force}} スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします ({{ic|pacman -S --force}})。ファイルシステム中の''所有されていない''ファイルを検索するスクリプトについては [[Pacman Tips (日本語)#ファイルがどのパッケージにも所有されていないことを確認]] を見て下さい。
 
  +
# pacman -Syu mkinitcpio systemd linux
{{Warning|{{ic|--force}} スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch news で使うように指示が出ている時にだけ使うことを推奨します。}}
 
   
  +
{{Note|
=== 特定のファイルをもったパッケージが必要です。どのパッケージがそのファイルを持っているかわかりますか? ===
 
  +
* もしあなたが現在のリリースを持っていなかったり、他の "Live" Linux ディストリビューションを持っていないなら、昔ながらの方法で [[chroot]] することができます。もちろん、単に {{ic|arch-chroot}} スクリプトを実行するよりも、より多くの入力が必要になります。
  +
* "pacman" が {{ic|Could not resolve host}} で失敗した場合は、 [https://wiki.archlinux.jp/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A#.E6.8E.A5.E7.B6.9A.E3.81.AE.E7.A2.BA.E8.AA.8D 接続の確認] をクリックしてください。
  +
* arch-chroot または chroot 環境に入れないが、パッケージを再インストールする必要がある場合は、ルートパーティションで "pacman" コマンド {{ic|pacman--sysroot/mnt-Syu foo bar}} を使用できます。}}
   
  +
カーネル ({{Pkg|linux}} パッケージ) を再インストールすると、自動的に {{ic|mkinitcpio-p linux}} で initramfsイメージが再生成されます。これを個別に行う必要はありません。
全てのファイルと関連パッケージの分割データベースを使う [[pkgfile (日本語)|pkgfile]] をインストールしてください。
 
   
  +
その後、{{ic|exit}}、{{ic|umount/mnt/{boot,} }} および {{ic|reboot}} を実行してください。
=== Pacman が完全に壊れました!どうやったら再インストールできますか? ===
 
   
  +
===signature from "User <email@gmail.com>" is unknown trust===
修復できないほど pacman が壊れてしまった場合、手動で必要なパッケージ ({{Pkg|openssl}}, {{Pkg|libarchive}}, {{Pkg|pacman}}) をダウンロードして root に展開してください。pacman バイナリはデフォルト設定ファイルと一緒に復帰します。その後、pacman によってパッケージを再インストールしてパッケージデータベースを完全に整備してください。詳しい情報や自動で行うためのサンプルスクリプトが[https://bbs.archlinux.org/viewtopic.php?id=95007 ここ]にあります。
 
   
  +
以下の方法を試してみてください:
=== システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません ===
 
   
  +
*{{ic|pacman-key --refresh-keys}} で既知のキーを更新してください。
おそらく initramfs がカーネルアップデート中に破損しています(不正に {{ic|--force}} オプションを使うと起こりえます)。2つの選択肢があります:
 
  +
*手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください: {{ic|pacman -Sy archlinux-keyring && pacman -Su}}。
  +
*[[pacman-key#全ての鍵のリセット]]に従って下さい。
   
  +
===PGP 鍵のインポートが要求される===
'''1.''' ''Fallback'' エントリを試す。
 
   
  +
古いバージョンの ISO で Arch を[[インストールガイド|インストール]]しようとすると、PGP 鍵のインポートが要求されることがあります。鍵のダウンロードに同意して先に進んでください。PGP 鍵を追加できない場合、キーリングを更新したり {{Pkg|archlinux-keyring}} をアップグレードしてください ([[#signature from "User <email@gmail.com>" is unknown trust|上]]を参照)。
: {{Tip|いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に {{ic|Tab}} キー (for Syslinux) や {{ic|e}} (for GRUB) を押して、{{ic|initramfs-linux-fallback.img}} に名前を変更して {{ic|Enter}} や {{ic|b}} を押して(ブートローダによる)新しいパラメータを使って起動できます。}}
 
   
  +
===エラー: key "0123456789ABCDEF" could not be looked up remotely===
: システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの {{Pkg|linux}} カーネル用)を入力して initramfs イメージを再生成します:
 
   
  +
パッケージが {{Pkg|archlinux-keyring}} に最近追加された新しい鍵で署名されている場合、アップグレード時にはまだローカルで鍵が利用できない状態になっていることがあります (鶏が先か、卵が先か)。インストール済みの {{Pkg|archlinux-keyring}} に鍵が含まれていない場合、Pacman は鍵サーバーを確認しにいきますが、プロキシやファイアウォールを使っているなどの理由でエラーになることがあります。[[#signature from "User <email@gmail.com>" is unknown trust|上]]で書かれているように {{Pkg|archlinux-keyring}} を先にアップグレードしてください。
: {{bc|# mkinitcpio -p linux}}
 
   
  +
===signature from "User <email@archlinux.org>" is invalid===
'''2.''' 動かない場合、最新の Arch リリース (CD/DVD または USB スティック) から起動する:
 
   
  +
システム[[時刻]]が間違っていると、署名鍵が期限切れとして扱われたりパッケージの署名チェックが失敗して、以下のようなエラーが表示されます:
: {{Note|最新のリリースを持っていなかったり他の "live" Linux ディストリビューションしかないときは、代わりに古い方法である [[Change_Root_(日本語)|chroot]] が使えます。{{ic|arch-chroot}} スクリプトを入らせるよりは多くのタイピングが必要です。}}
 
   
  +
error: ''package'': signature from "User <email@archlinux.org>" is invalid
: {{bc|<nowiki>
 
  +
error: failed to commit transaction (invalid or corrupted package (PGP signature))
# mount /dev/sdxY /mnt #あなたの root パーティション。
 
  +
Errors occured, no packages were upgraded.
# mount /dev/sdxZ /mnt/boot #/boot パーティションを分割している場合。
 
# arch-chroot /mnt
 
# pacman -Syu mkinitcpio systemd linux</nowiki>}}
 
   
: カーネル ({{Pkg|linux}} パッケージ) の再インストールは自動的initramfs イメージを {{ic|mkinitcpio -p linux}} で再生成ます
+
パッケージインストール・アップグレードする前 {{ic|ntpd -qg}} {{ic|hwclock -w}} を root実行て下さい
別個にやる必要はありません。
 
   
  +
==="failed to commit transaction (invalid or corrupted package)" エラー===
: その後は、{{ic|exit}}, {{ic|umount /mnt/{boot,} }} , {{ic|reboot}} と実行してください。
 
   
  +
{{ic|/var/cache/pacman/pkg}} にある {{ic|*.part}} ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい ({{ic|pacman.conf}} で {{ic|XferCommand}} を設定しているとこのエラーがよく起こります)。
=== "User <email@gmail.com>" の署名が unknown trust でインストールできません ===
 
   
  +
# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;
[[pacman-key (日本語)#全てのキーのリセット]] に従って下さい。または手動で {{ic|archlinux-keyring}} パッケージをアップグレードしてください、{{ic|pacman -S archlinux-keyring}}。
 
   
  +
===pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'===
=== signature from "User <email@archlinux.org>" is invalid ===
 
   
  +
そのエラーは、あなたの locale が正しく設定されていないと言っています。[[ロケール]]を見て下さい。
システム時刻が間違っていることが原因です。[[Time (日本語)|時刻]]を設定してパッケージをインストール・アップグレードする前に次を実行してください: {{bc|# hwclock -w}}
 
   
  +
===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&#61;68944] [https://bbs.archlinux.org/viewtopic.php?id&#61;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/libalpm.3.html libalpm(3) Manual Page]
+
*[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}}

2022年1月11日 (火) 00:38時点における版

関連記事

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

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

Pacman は C 言語で書かれており .pkg.tar.xz パッケージフォーマットを使います。

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

目次

使い方

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

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

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

ノート:
  • パッケージには optdepends が設定されていることがあります。必ずインストールする必要はありませんが、インストールすることで機能が追加されます。パッケージ・データベースに問い合わせることで情報を参照することができます。
  • 他のパッケージの依存パッケージとしてパッケージをインストールする場合 (そのパッケージ自体は必要としていない場合)、--asdeps オプションを使用することを推奨します。詳しくはインストール理由を参照。
警告: パッケージのインストールをする際に、アップグレードをせずにパッケージリストを更新しないでください (つまり pacman -Sy パッケージ名 をしてはいけない)。これを実行すると依存関係に問題がおこる可能性があります。#部分的なアップグレードはサポートされていませんhttps://bbs.archlinux.org/viewtopic.php?id=89328 を参照。

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

ひとつ、あるいは複数の(依存を含む)パッケージをインストールするときは:

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

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

パッケージの削除

あるパッケージを、そのパッケージが必要としていたものを残したまま削除するには:

# pacman -R パッケージ名

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

# pacman -Rs パッケージ名

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

警告: この操作は再帰的です。必要なパッケージを削除してしまうこともあるので、気をつけて使って下さい。
# pacman -Rsc パッケージ名

他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:

# pacman -Rdd パッケージ名

デフォルトでは、pacman は削除されたパッケージの設定ファイルを *.pacsave という拡張子をつけてバックアップします。もしこれらのファイルも一緒に削除したい場合:

# pacman -Rn パッケージ名
ノート: Pacman はパッケージがインストールされた後に作成された設定ファイルを削除しません。$HOME ディレクトリ下の設定ファイルなどは手動で削除してください。

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

Pacman は以下のコマンドひとつでシステムの全てのパッケージのアップデートができます。システムがどれだけ新しいかによってかかる時間が変わります。このコマンドはリポジトリデータベースと同期してそれからシステムのパッケージをアップデートします(リポジトリにない'ローカル'パッケージは別です):

# pacman -Syu
警告: アップデートがきたらすぐにアップデートしようとする前に、Arch のローリングリリースのことを再確認してください、アップデートが思いがけない結果になることもあります。つまり、重要なプレゼンをやらなくちゃいけないからといってアップデートするのは賢いとは言えません。手の空いた時間に、何が起こっても対処できるように準備をしてからアップデートしましょう。

Pacman は強力なパッケージ管理ツールですが、全ての問題を解決できるわけではありません。混乱したのなら The Arch Way を読んで下さい。ユーザーは用心深くなって、システムのメンテナンスの責任を自分でとらなくてはなりません。システムアップデートをしたときは、pacman からの表示を全て読み常識を働かせることが肝要ですArch Linux の安定化#Arch のメンテナンスを見てください。もし(ユーザーによって作られた)設定ファイルを新しいパッケージのバージョンにあわせて変更する必要があるときは、ユーザーの設定を上書きするのを回避するために .pacnew ファイルが作られます。Pacman はユーザーにそれらをマージするよう表示します。これらのファイルはユーザーが手動で修正しなくてはなりません。パッケージのアップグレードや削除のあとチェックするのが良いでしょう。詳しくは Pacnew と Pacsave ファイルを見てください。

ヒント:
  • Pacman からの出力は /var/log/pacman.log に記録されています。
  • wat-gitAUR などのログビューアを使うことで pacman のログを検索できます。

アップグレードするまえに、Arch Linux ホームページ の最新ニュースをチェックしておくとよいでしょう (もしくは RSS フィード, arch-announce メーリングリストを講読したり Twitter の @archlinux_jp をフォローする): アップデートの際にいつもとは違うユーザーの操作が必要になった時 (pacman から与えられる指示だけでは不十分な場合など)、それに関してニュースが作られているはずです。

もし解決できない問題にあたったときは、フォーラムを検索してみましょう。他の人も同じ問題にぶつかり、解決法が投稿されているかもしれません。

部分的なアップグレードはサポートされていません

Arch Linux はローリングリリースであり、常に新しいバージョンのライブラリがリポジトリにプッシュされます。開発者や Trusted User はライブラリにあわせてリポジトリの全てのパッケージをリビルドします。ローカルでパッケージをインストールした場合 (AUR のパッケージなど)、ユーザーは必要に応じて共有ライブラリにあわせてリビルドしなくてはなりません。

つまり部分的なアップグレードはサポートされていませんpacman -Sy package や、それと同等の pacman -Sy からの pacman -S package などをしないでください。どんなときでも、パッケージをインストールする前に (pacman -Syu で) アップグレードしてください。IgnorePkgIgnoreGroup を使用する場合は気をつけて扱って下さい。pacman -Sy は基本的に使ってはいけないコマンドで、代わりに pacman -Syu を使って下さい。

一度、部分的なアップグレードがなされると、リンクしていたライブラリが見つからなくなってバイナリが壊れてしまいます。シンボリックリンクを張ることでこの問題を"解決"しようとしてはいけません。ライブラリは後方互換性がないときには soname のバージョンアップに対応します。pacman -Syu を実行しさえすれば、ミラーと同期して pacman が壊れていないかぎり問題が修正されます。

インストールされているパッケージのアップグレードを確認したいときは pacman-contrib パッケージに含まれている bash スクリプト checkupdates を使うことで、システムアップデートを行わずに安全に確認が行えます。

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

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

Pacman を使ってパッケージ名と説明の両方をデータベースの検索にかけるには:

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

場合によって -s の組み込みの ERE (拡張正規表現) が望まない結果を生むことがあります。そのようなときは検索対象をパッケージ名だけに絞ってみてください:

$ pacman -Ss '^vim-'

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

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

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

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

パッケージ名が分かっていれば、より詳しい情報を得ることができます:

$ pacman -Si パッケージ名

既にインストールしたパッケージの情報を得るには:

$ pacman -Qi パッケージ名

-i フラグをふたつ付けることでバックアップファイルの一覧と状態を表示できます:

$ pacman -Qii パッケージ名

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

$ pacman -Ql パッケージ名

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

$ pacman -Fl パッケージ名

あるファイルがどのパッケージによってインストールされたかを調べるには:

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

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

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

孤立した、他のパッケージに必要とされていないパッケージの一覧を得るには:

$ pacman -Qdt
ヒント: 上記のコマンドを pacman の post-transaction フックに追加することで、トランザクションによってパッケージが孤立したときに通知することができます。(明示的にインストールしたのでない限り) リポジトリから消されたパッケージはローカルでは孤児になるため、パッケージがリポジトリから消されたときに知ることができます。孤児が見つからなかったときに "failed to execute command" エラーを表示しないようにするため、フックの Exec では次のコマンドを使用してください: /usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '=> None found.'"

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

$ pacman -Qet

pacman ヒントには他の例も載っています。

Pactree

パッケージの依存のツリーを見るには:

$ pactree パッケージ名

あるパッケージを必要としている全てのパッケージを見るには pkgtoolswhoneeds を使います:

$ 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
警告:
  • インストールしたパッケージが安定していて、ダウングレードが必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損したときに古いパッケージが必要になることがあり、バージョンを戻したいと思ったときに、キャッシュに古いパッケージがないと Arch Linux Archive などから古いパッケージを取得するしか方法がなくなってしまいます。
  • pacman -Scc でキャッシュフォルダを完全に削除することも可能ですが、これはあまり推奨されてはいません。上の欠点に加えて、必要なときにキャッシュフォルダから直接パッケージを再インストールすることができなくなってしまい、再ダウンロードが強いられるためです。よっぽどディスク容量を欲しているとき以外は使うべきではありません。

上記の欠点のため、-Sc-Scc スイッチを使う代わりに、キャッシュから削除するパッケージの数をもっと細かく制御できるスクリプトを使うのが推奨されます:

  • pacman-contrib パッケージに入っている paccache コマンドは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して後を全て削除します:
    $ paccache -r
    ただし、この方法では paccache はパッケージがインストールされているかどうかを確認しないため、既にアンインストールしたパッケージも保持されます。アンインストールしたパッケージのキャッシュを全て削除するには、次のコマンドを実行する必要があります:
    $ paccache -ruk0
    他のオプションは paccache -h を見て下さい。
  • もしくは、pkgcachecleanAUR をインストールして使うこともできます:
    # pkgcacheclean
ヒント: #フックを作成して pacman の操作後に上記のコマンドを自動的に実行することができます。サンプルが こちらのスレッド に載っています。

追加コマンド

システムのアップグレードとパッケージのインストール (ワンライナー):

# 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 のキャッシュにローカルパッケージのコピーを残したいときは、次を使って下さい:
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz
警告: --force スイッチを使う時は細心の注意を払って下さい、誤って使用すると大きな問題が起こる場合があります。Arch ニュースでこのスイッチを使うように指示があってときだけ使用することを強く推奨します。

pacman で何か操作を行うときは、必ず、インストールしたり削除したりするパッケージのリストが表示され、権限が要求されます。-p を使うことで -S, -U, -R などの操作を阻止することができます。

pacman にはシステムの操作を簡単にする多数のユーティリティが入っています。それぞれのユーティリティは --help スイッチを付けて呼び出すことでコマンドオプションを表示できます。

インストール理由

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

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

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

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

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

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

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

# pacman -D --asdeps package_name

インストール理由を「明示的にインストール」に変えたいときは --asexplicit を使ってください。

ノート: pacman -Syu package_name --asdeps のように、アップグレードをするときに --asdeps--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
ヒント: cron ジョブや systemd タイマーを設定してファイルデータベースを定期的に同期させることができます。

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

設定

pacman の設定は /etc/pacman.conf に記述されています。ここで pacman がどのように動作するかを決めることができます。より詳しい情報は pacman.conf(5) にあります。

全般設定

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

カラー出力

コンソールのカラー出力#pacman を見てください。

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

pacman 6.0 はパッケージを同時にダウンロードするオプションを導入しました。この機能を使用するには、/etc/pacman.confParallelDownloads を正の整数に (例:5) など設定する必要があります。このオプションが設定されていない場合、パッケージは順番にダウンロードされます。

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

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

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB

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

ある特定のパッケージをアップデートさせないようにするには:

IgnorePkg=linux

複数のパッケージを記述するときはスペースで区切るか、IgnorePkg 行を追加してください。

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

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

IgnoreGroup=gnome

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

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

NoUpgrade=path/to/file
ノート: パスはパッケージ内のファイルを参照します。したがって、一番最初のスラッシュは必要ありません。

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

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

NoExtract=usr/lib/systemd/system/*

もしくは localepurgeAUR と同じように、英語以外のローカライゼーションのインストールを止めるには:

NoExtract = usr/share/help/* !usr/share/help/en*
NoExtract = usr/share/locale/* !usr/share/locale/en* !usr/share/locale/locale.alias
NoExtract = usr/share/man/* !usr/share/man/man*
NoExtract = usr/share/vim/vim74/lang/*

後ろのルールは前のルールを上書きします。また、! でルールを打ち消すことで、必要なロケールだけを維持できます。

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

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

設定ファイルが複数あって (メインの設定と testing リポジトリを有効にした設定がある場合など)、設定ファイルのオプションを共有したい場合、設定ファイルで Include オプションを宣言することができます。例:

Include = /path/to/common/settings

/path/to/common/settings は共有したいオプションが存在するファイルに置き換えてください。

フック

pacman/usr/share/libalpm/hooks/ ディレクトリのフックを処理の前後に実行することができます。さらに pacman.confHookDir オプションでフックディレクトリを指定できます (デフォルトは /etc/pacman.d/hooks です)。フックファイルの名前には必ず .hook を後ろに付ける必要があります。

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

alpm のフックに関する詳細は alpm-hooks(5) の man ページを参照。

リポジトリ

/etc/pacman.conf に書かれているように、Repositories セクションではどのリポジトリを使うか定義します。リポジトリはここで直接設定することもできますし、他のファイル (/etc/pacman.d/mirrorlist) から読み込ませることもできます。ただしどれかひとつのファイルを使うようにしてください。ミラーの設定はここを見て下さい。

警告: [testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている arch-dev-public メーリングリスト を購読するのをお薦めします。

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

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 --overwrite glob パッケージ名 で pacman に glob に一致するファイルを上書きさせることができます。

警告: 一般的に --overwrite スイッチの使用は避けてください。

パッケージのインストール時にこんなエラーが出ました: "not found in sync db"

まず、パッケージが本当に存在しているか確認しましょう(打ち間違いも見逃さずに!)。パッケージが存在しているのなら、あなたのパッケージリストが古くなっているかリポジトリが正しく設定されていない可能性があります。pacman -Syy で全てのパッケージリストを更新してください。

パッケージをインストールする時にエラーが表示されます: "target not found"

まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。pacman -Syy を実行して強制的に全てのパッケージリストを更新してみましょう。

また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは multilib リポジトリにあるが、multilibpacman.conf で有効になっていないということが考えられます。

pacman の手動再インストール

pacman-static を使用

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

固定コメントと PKGBUILD は、バイナリを直接ダウンロードする方法を提供し、 pacman を再インストールしたり、部分的なアップグレードの場合にシステム全体をアップグレードしたりするために使用できます。

外部の pacman を使用する

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

手動で抽出する

警告: 以下の方法でシステムをさらに再起不能にまで壊してしまう可能性があります。#アップグレード中に Pacman がクラッシュしましたに書かれている方法で直らない場合の最後の手段として使ってください。

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

  1. インストールするパッケージを確認
  2. 適当なミラーからパッケージをそれぞれダウンロード
  3. パッケージをルートディレクトリに展開
  4. pacman -S --force でパッケージを再インストールしてパッケージデータベースを更新
  5. フルシステムアップグレードを実行

問題なく動く 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 がクラッシュする場合:

  1. Arch インストールメディアを使って起動してください。
  2. root でルートファイルシステムをマウントします (mount /dev/sdaX /mnt)。df -h で十分な空き容量があることを確認してください。
  3. proc, sys, dev ファイルシステムもマウントしてください: mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
  4. システムがデフォルトのデータベースとディレクトリの場所を使っている場合、root で pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syyu を実行することでシステムの "pacman" データベースを更新してアップグレードすることができます。
  5. アップグレード後、アップグレードがないことと壊れているパッケージを確認してください: find /mnt/usr/lib -size 0
  6. pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package で壊れているパッケージを再インストールしてください。

pacman: command not found

pacmanのキャッシュディレクトリをシンボリックリンクしてはいけません。 代わりに別のキャッシュディレクトリを構成するか、バインドマウントを使用してください。 [1]

"make install" を使ってソフトウェアをインストールしましたが、ファイルがどのパッケージにも属していません

"conflicting files" エラーが出る場合、--force スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします (pacman -S --force)。ファイルシステム中の所有されていないファイルを検索するスクリプトについては Pacman ヒント#ファイルがどのパッケージにも所有されていないことを確認 を見て下さい。

警告: --force スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch ニュースで使うように指示が出ている時にだけ使うことを推奨します。

システムをアップグレードした後、再起動すると "unable to find root device" エラーが出て起動できません

おそらく initramfs がカーネルアップデート中に破損しています(不正に --force オプションを使うと起こりえます)。2つの解決方法があります:

1. Fallback エントリを試す:

ヒント: いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に Tab キー (Syslinux の場合) や e (GRUBsystemd-boot の場合) を押して、initramfs-linux-fallback.img に名前を変更して Enterb を押して(ブートローダによる)新しいパラメータを使って起動できます。

システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの linux カーネル用)を入力して initramfs イメージを再生成します:

# mkinitcpio -p linux

2. それが機能しない場合は、現在の Arch リリース (CD/DVDまたはUSBスティック) から、ルートパーティションとブートパーティションをマウントします。次に、chroot します。

# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
ノート:
  • もしあなたが現在のリリースを持っていなかったり、他の "Live" Linux ディストリビューションを持っていないなら、昔ながらの方法で chroot することができます。もちろん、単に arch-chroot スクリプトを実行するよりも、より多くの入力が必要になります。
  • "pacman" が Could not resolve host で失敗した場合は、 接続の確認 をクリックしてください。
  • arch-chroot または chroot 環境に入れないが、パッケージを再インストールする必要がある場合は、ルートパーティションで "pacman" コマンド pacman--sysroot/mnt-Syu foo bar を使用できます。

カーネル (linux パッケージ) を再インストールすると、自動的に mkinitcpio-p linux で initramfsイメージが再生成されます。これを個別に行う必要はありません。

その後、exitumount/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 -qghwclock -w を root で実行して下さい。

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

/var/cache/pacman/pkg にある *.part ファイル (部分ダウンロードファイル) を探して、ファイルを削除して下さい (pacman.confXferCommand を設定しているとこのエラーがよく起こります)。

# find /var/cache/pacman/pkg/ -iname "*.part" -exec rm {} \;

pacman を使うたびにエラーが表示されます: 'warning: current locale is invalid; using default "C" locale'

そのエラーは、あなたの locale が正しく設定されていないと言っています。ロケールを見て下さい。

pacman でプロキシ設定を使うにはどうすればいいですか?

環境変数 ($http_proxy, $ftp_proxy など) を使って下さい。sudo と一緒に Pacman を使う時は、環境変数を pacman に渡すように sudo を設定してください。

明示的にインストールしたか依存でインストールしたかの情報を保ちながら、全てのパッケージを再インストールするにはどうすればいいですか

ネイティブのパッケージを全て再インストールするには: pacman -Qnq | pacman -S - (-S オプションはデフォルトでインストールの理由を維持します)。

次に自分で作成したパッケージを全て再インストールしてください、pacman -Qmq でパッケージを確認できます。

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

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

Failed retrieving file 'core.db' from mirror

ミラーを正しく設定しているのにこのエラーメッセージが表示される場合、ネームサーバを設定してみてください。

参照