pacman (日本語)

From ArchWiki
Jump to: navigation, search

概括
Pacman は Arch Linux の パッケージマネージャです。パッケージマネージャはソフトウェアのインストール・アップグレード・削除に使われます。この記事では基本的な使い方とトラブルシューティングについて記述します。
概要
Arch Linux のパッケージは makepkg と、それぞれのパッケージにあわせたカスタムビルドスクリプト (PKGBUILD) でビルドされています。パッケージングされたソフトウェアは pacman でインストールして管理することができます。公式レポジトリにあるソフトウェアの PKGBUILD は ABS ツリーから入手できます。そして、さらに多くの PKGBUILD が(非公式の) Arch User Repository にあります。
関連記事
Downgrading Packages (日本語)
Improve Pacman Performance (日本語)
Pacman GUI Frontends (日本語)
Pacman Rosetta (日本語)
Pacman Tips (日本語)
Pacman package signing
FAQ (日本語)#パッケージ管理
pacman-key (日本語)
Pacnew and Pacsave Files (日本語)
資料
libalpm(3) Manual Page
pacman(8) Manual Page
pacman.conf(5) Manual Page
repo-add(8) Manual Page

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

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

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

Tip: 公式の pacman パッケージには他にも有用なツールが含まれています。makepkg, pactree, vercmp など。ツールの一覧を見るには pacman -Ql pacman | grep bin を実行してください。

Contents

設定

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

全般設定

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

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

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

IgnorePkg=linux

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

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

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

IgnoreGroup=gnome

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

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

NoExtract=usr/lib/systemd/system/*

Repositories

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

/etc/pacman.conf
#[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

# 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
Warning: [testing] リポジトリを使う場合には注意が必要です。このリポジトリにあるパッケージは活発に開発が進んでいるため、更新したら動かなくなるものもあります。testing リポジトリを使う場合は、最新情報が流れている arch-dev-public mailing list を購読するのをお薦めします。

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

Pacman 4 は署名済みのパッケージをサポートしていて、パッケージに追加のセキュリティレイヤーを加えています。SigLevel を使うことでリポジトリ毎に(もしくは全体的に)セキュリティレベルを設定することが可能です。デフォルトの設定では
/etc/pacman.conf
SigLevel = Required DatabaseOptional
によって全てのリポジトリで全てのパッケージの署名検証が有効にされています。上述したようにリポジトリ毎に SigLevel を使うことでこの設定を上書きすることができます。パッケージに署名する方法や署名の検証について詳しくは、ここを見て下さい。

使い方

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

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

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

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

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

異なるリポジトリにそれぞれ同じ名前のパッケージが存在することがあります(例:[extra] リポジトリと [testing] リポジトリ)。このような場合、どちらをインストールするかを明示してください:

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

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

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

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

Note: グループの中にインストール済みのパッケージがある場合でも、グループにあわせて再インストールされます。--needed オプションを使うことで無視できます。
Warning: パッケージのインストールをする際に、アップグレードをせずにパッケージリストを更新しないでください (つまり pacman -Sy パッケージ名 をしてはいけない)。これをすると依存問題がおこる可能性があります。#部分的なアップグレードはサポートされていませんhttps://bbs.archlinux.org/viewtopic.php?id=89328 を参照。

パッケージの削除

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

# pacman -R パッケージ名

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

# pacman -Rs パッケージ名

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

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

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

# pacman -Rdd パッケージ名

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

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

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

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

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

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

Tip: Pacman からの出力は /var/log/pacman.log に記録されています。

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

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

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

-Q フラグを使って Pacman からローカルデータベースを問い合わせます:

$ pacman -Q --help

同期しているデータベースに問い合わせるには -S フラグを使います:

$ pacman -S --help

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

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

既にインストールしたパッケージ内を検索するには:

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

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

$ pacman -Si パッケージ名

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

$ pacman -Qi パッケージ名

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

$ pacman -Qii パッケージ名

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

$ pacman -Ql パッケージ名

インストールされていないパッケージには pkgfile を使って下さい。

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

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

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

$ pacman -Qdt

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

$ pactree パッケージ名

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

$ whoneeds パッケージ名

追加コマンド

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

# 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
Tip: pacman のキャッシュにローカルパッケージのコピーを残したいときは、次を使って下さい:
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz

現在インストールされていない、パッケージのキャッシュ (/var/cache/pacman/pkg) を削除:

Warning: インストールしたパッケージが安定していて、ダウングレードが必要ないときだけ行なって下さい。この操作をするとキャッシュフォルダから全ての古いバージョンを削除するため、現在インストールされているバージョンのパッケージだけが残ります。将来のアップグレードでパッケージが破損した場合、今現在動作しているパッケージだけがインストールできます。
# pacman -Sc

パッケージのキャッシュを全て削除:

Warning: この操作は全てのキャッシュを掃除します。これはバッドノウハウであり、後でダウングレードしたいと思っても、キャッシュフォルダからはできなくなってしまいます。そうなった場合は Arch Rollback Machine を使わなくてはなりません。
# pacman -Scc
Tip: -Sc-Scc スイッチを使う代わりに、pacmanpaccache を使うことができます。どのキャッシュをどのように削除するかより細かく操作できます。詳しくは paccache -h をしてください。

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

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

つまり部分的なサポートはサポートされていませんpacman -Sy package や、それと同等の pacman -Sy からの pacman -S package などをしないでください。いつでも、パッケージをインストールする前にアップグレードしてください -- 特に pacman が同期レポジトリを更新する時は。同じ理由から、IgnorePkgIgnoreGroup は気をつけて扱って下さい。

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

トラブルシューティング

Q: パッケージ XYZ にアップデートしたらシステムが壊れました!

A: Arch Linux はローリングリリースで最前線のディストリビューションです。一般的な使用については安定していると判断されるとすぐにパッケージがアップデートされます。しかしながら、アップデートにユーザーの介入が必要になるときが時々あります: 設定ファイルをアップデートしたり、追加の依存パッケージを変更したりなど。

一番重要なことは"やみくもに" Arch のシステムをアップデートしないということです。常時、アップデートされるパッケージの一覧を読みましょう。"重要な"パッケージ (linux, xorg-server など) がアップデートされるのか確認しましょう。もしそうであれば、https://www.archlinux.org/ でニュースをチェックしたり最近のフォーラムの投稿を見て同じ問題が発生している人がいないか確認したりするのが大抵の場合役に立ちます。

パッケージをアップデートすると問題が発生することを予期される・知られている場合は、パッケージ作成者はパッケージがアップデートされた時、pacman が正しいメッセージを表示しているか確認します。アップデート後に問題がおこった時は、pacman の出力をログ (/var/log/pacman.log) を見て再チェックしてください。

この段階で pacman から何も有用な情報が得られなく、https://www.archlinux.org/ に関連するニュースもなく、フォーラムにもそのアップデートに関連する投稿がされていない時は、助けを求めるのにフォーラムや IRC を使ったり問題のあるパッケージをダウングレードしてください。

Q: パッケージ ABC のアップデートが公開されているはずなのに、pacman はシステムは最新だと言っています!

A: Pacman のミラーはすぐに同期されるわけではありません。あなたのアップデートが有効になるまで 24 時間以上かかることもあります。おとなしく待つか他のミラーを使ってください。MirrorStatus にミラーの更新状況がのっています。

Q: アップデートでこんなエラーが出ました: "file exists in filesystem"

A: 関連: 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 はしないでください。

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

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

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

A: まず、パッケージが本当に存在するか確認してください (typo がないかよく見てください)。確かにパッケージが存在する場合、パッケージリストが古くなっていたりあなたの使っているリポジトリが正しく設定されていない可能性があります。pacman -Syy を実行して強制的に全てのパッケージリストを更新してみましょう。
また、パッケージが含まれているリポジトリがあなたのシステムで有効になっていないのかもしれません。例えば、パッケージは multilib リポジトリにあるが、multilibpacman.conf で有効になっていないということが考えられます。

Q: Pacman が何度も同じパッケージをアップグレードします!

A: それは /var/lib/pacman/local/ に二重のエントリがあるためです。pacman -Qi は正しいバージョンを示しますが、pacman -Qu は古いバージョンだと認識してアップグレードしようとします。

解決法: /var/lib/pacman/local/ の問題のあるエントリを削除してください。

Note: Pacman は version 3.4 から二重のエントリの場合はエラーを表示するため、この質問と回答はすでに不要になっているはずです。

Q: アップグレード中に Pacman がクラッシュしました!

A: パッケージの削除・再インストール・アップグレード中に "database write" エラーを残して pacman がクラッシュする場合:
  1. Arch インストールメディアを使って起動してください
  2. root ファイルシステムをマウントします
  3. pacman -Syy を使って pacman のデータベースを更新します
  4. pacman -r /path/to/root -S package で壊れたパッケージを再インストールしてください

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

A: "conflicting files" エラーが出る場合、--force スイッチをつけると pacman が手動でインストールしたソフトウェアを上書きします (pacman -S --force)。ファイルシステム中の所有されていないファイルを検索するスクリプトについては Pacman Tips (日本語)#ファイルがどのパッケージにも所有されていないことを確認 を見て下さい。
Warning: --force スイッチを使う時は気をつけてください。間違った使用で重大な問題が発生することがあります。Arch news で使うように指示が出ている時にだけ使うことを推奨します。

Q: 特定のファイルをもったパッケージが必要です。どのパッケージがそのファイルを持っているかわかりますか?

A: 全てのファイルと関連パッケージの分割データベースを使う pkgfile をインストールしてください。

Q: Pacman が完全に壊れました!どうやったら再インストールできますか?

A: 修復できないほど pacman が壊れてしまった場合、手動で必要なパッケージ (openssl, libarchive, pacman) をダウンロードして root に展開してください。pacman バイナリはデフォルト設定ファイルと一緒に復帰します。その後、pacman によってパッケージを再インストールしてパッケージデータベースを完全に整備してください。詳しい情報や自動で行うためのサンプルスクリプトがここにあります。

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

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

1. Fallback エントリを試す。

Tip: いずれの理由でエントリを削除した場合でも、ブートローダのメニューが表示された時に Tab キー (for Syslinux) や e (for GRUB) を押して、initramfs-linux-fallback.img に名前を変更して Enterb を押して(ブートローダによる)新しいパラメータを使って起動できます。
システムが起動したら、コンソールかターミナルから次のコマンド (持ち合わせの linux カーネル用)を入力して initramfs イメージを再生成します:
# mkinitcpio -p linux

2. 動かない場合、2012 Arch release (CD/DVD または USB スティック) から起動する:

Note: 2012 release を持っていなかったり他の "live" Linux ディストリビューションしかないときは、代わりに古い方法である chroot が使えます。arch-chroot スクリプトを入らせるよりは多くのタイピングが必要です。
# 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 と実行してください。

Q: "User <email@gmail.com>" の署名が unknown trust でインストールできません

A: pacman-key (日本語)#全てのキーのリセット に従って下さい。または手動で archlinux-keyring パッケージをアップグレードしてください、pacman -S archlinux-keyring

Q: エラーが発生して
error: PackageName: signature from "User <email@archlinux.org>" is invalid
error: failed to commit transaction (invalid or corrupted package (PGP signature))
パッケージがアップグレードされません。

A: システム時刻が間違っていることが原因です。時刻を設定してパッケージをインストール・アップグレードする前に次を実行してください:
# hwclock -w

Q: "failed to commit transaction (invalid or corrupted package)" エラーが出ます

A: /var/cache/pacman/pkg にある *.part ファイル(部分ダウンロードファイル)を見つけたらそれらを削除します (pacman.confXferCommand を設定しているとよく起こります)。

Q: pacman を使うたびにエラーがでます 'warning: current locale is invalid; using default "C" locale' どうすればいいですか?

A: そのエラーは、あなたの locale が正しく設定されていないと言っています。Locale (日本語) を見て下さい。

Q: Pacman にプロクシ設定を使うようにするにはどうすればいいですか?

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

Q: How do I reinstall all packages, retaining information on whether something was explicitly installed or as a dependency?

A: To reinstall all the native packages: pacman -S $(pacman -Qnq) (the -S option preserves the installation reason by default).
You will then need to reinstall all the foreign packages, which can be listed with pacman -Qmq.

関連項目