2014年11月30日日曜日

pacmanの使い方 | Arch Linux, pacman, オプション, パッケージ管理

Arch Linuxのpacmanでパッケージ管理
Arch Linuxのパッケージ管理はpacmanで行う。他のLinuxディストリビューションでは使われていない独自のアプリケーションなので、オプションなど使い方を覚えないといけない。ただし、よく使うオプションさえ覚えてしまえば、使い方は難しくない。パッケージ管理に便利なオプションが用意されているので、pacmanを使えばパッケージ管理に必要な情報を知ることができ、pacmanからほぼ一括でパッケージ管理できるようになっている。

pacmanの設定ファイル
pacmanの主な設定ファイル、ログファイルは以下のとおり。
  • /etc/makepkg.conf
  • /etc/pacman.conf
  • /etc/pacman.d/mirrorlist
  • /var/log/pacman.log


/etc/pacman.conf
pacman.confはリポジトリの設定をする。使用したいリポジトリのコメントアウトを解除する(先頭の#を消す)か、自分で追加する。例えば、[multilib] リポジトリを有効にすることで、64ビット環境の Arch Linux で32ビットアプリケーションの動作・ビルドができるようになる。自分は、32ビットアプリケーションを使っていないので、[multilib]はコメントアウトしたままにしている。

Arch User Repository (AUR, 公式リポジトリには登録されていない様々パッケージが登録されている) はを使うため、[archlinuxfr]リポジトリを有効にしている。pacman.confに下記の3行を追加する。AURからのパッケージのインストールはyaourtの使い方または、packerの使い方を参照。
#vim /etc/pacman.conf

...
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

リポジトリの変更をした時は、パッケージリストを更新する。
# pacman -Syy

:: Synchronizing package databases...
 core                                             116.1 KiB   829K/s 00:00 [##########################################] 100%
 extra                                           1807.0 KiB  4.17M/s 00:00 [##########################################] 100%
 community                                          2.4 MiB  3.29M/s 00:01 [##########################################] 100%
 multilib-testing                                 879.0   B  0.00B/s 00:00 [##########################################] 100%
 archlinuxfr


/etc/pacman.d/mirrorlist
/etc/pacman.d/mirrorlistはpacmanで使うリポジトリミラーサーバを設定する。リストの上に書くほど、優先的に使われる。/etc/pacman.d/mirrorlistを変更する前に、念の為バックアップする。
# mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bk

Pacman Mirrorlist Generatorからミラーリストを生成する。

Country: Allを選択して、httpsとUse mirror statusにチェックする。

Generate Listをクリックして、リストを生成する。

生成したリストを/etc/pacman.d/mirrorlistに書き込む。
# vim /etc/pacman.d/mirrorlist

##
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2014-11-30
##

## Score: 0.3, France
#Server = http://arch.tamcore.eu/$repo/os/$arch
## Score: 0.3, Germany
#Server = http://mirror.gnomus.de/$repo/os/$arch
...

sedコマンドで、行頭の#を1つ消す。
# sed '/^#\S/ s|#||' -i /etc/pacman.d/mirrorlist

日本のリポジトリを上位に持ってくる。日本のリポジトリは速度は早いため。
# vim /etc/pacman.d/mirrorlist

#
# Arch Linux repository mirrorlist
# Sorted by mirror score from mirror status page
# Generated on 2014-11-30
#

# Score: 1.7, Japan
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
# Score: 20.3, Japan
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
# Score: 0.3, France
Server = http://arch.tamcore.eu/$repo/os/$arch
# Score: 0.3, Germany
Server = http://mirror.gnomus.de/$repo/os/$arch
...

日本のリポジトリが繋がらなくなった場合も考えて、他のリポジトリも活かしておいたほうがいい気がする。ミラーリストの変更をした時も、パッケージリストを更新する。
# pacman -Syy

:: Synchronizing package databases...
 core                                             116.1 KiB   829K/s 00:00 [##########################################] 100%
 extra                                           1807.0 KiB  4.17M/s 00:00 [##########################################] 100%
 community                                          2.4 MiB  3.29M/s 00:01 [##########################################] 100%
 multilib-testing                                 879.0   B  0.00B/s 00:00 [##########################################] 100%
 archlinuxfr

パッケージアップデートをするとたまに、ミラーリストファイルが更新される時がある。pacmanでは、このようにファイルのアップデートがあった時、/etc/pacman.d/mirrorlist.pacnewのように.pacnewがついたファイル名でアップデートファイルが保存される。

アップデートファイルと元のファイルを見比べてミラーサーバのアドレスが変わった時は逐次変更する。ただし、ほとんど上位にのサーバは生きているので、たまにmirrorlist generatorを使って上位サーバのアドレスを確認して、アドレスが変わっていなければ問題ない気がする。

/etc/makepkg.conf
自分でパッケージをbuild(makepkg)するときの設定をする。yaourtやpackerなどを使って、AURリポジトリからパッケージをインストールするときもローカルでbuildしはじめるので、自分のCPUに最適なバイナリファイルを作りたい人は、設定を最適化する。自分は、まだいじっていない。詳細はここを参照 [2]
pacmanでよく使うオプション
データベースの更新(-Sy, -Syy)
-Sy:リモートに更新があればローカルも更新する
-Syy: ローカルのデータベースを強制的に更新
リポジトリのリストの更新やmirrorlistの更新をした時は、-Syyとして、そのような更新がないときは-Syでよい。

# pacman -Syy

:: Synchronizing package databases...
 core                                             116.1 KiB   829K/s 00:00 [##########################################] 100%
 extra                                           1807.0 KiB  4.17M/s 00:00 [##########################################] 100%
 community                                          2.4 MiB  3.29M/s 00:01 [##########################################] 100%
 multilib-testing                                 879.0   B  0.00B/s 00:00 [##########################################] 100%
 archlinuxfr


# pacman -Sy

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib-testing is up to date
 archlinuxfr is up to date

このオプションは、たまにリポジトリのリストの更新やmirrorlistの更新をした時に-Syyを使うだけ。その他の場合は、-Syuでパッケージのアップデートもついでにするのが普通。

リポジトリリストとパッケージのアップデート(-Syu)
リポジトリとパッケージアップデートをする。Ubuntuみたいにアップデートを自動で知らせてくれないので、気が向いた時にこのコマンドを打つ。アップデートがあるパッケージが示されるので、アップデートしてよければ"y"を入力してエンター。
# pacman -Syu

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib-testing is up to date
 archlinuxfr is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for inter-conflicts...

Packages (12): dhcpcd-6.6.4-1  expat-2.1.0-4  gnupg-2.1.0-6  libass-0.12.0-1  libmariadbclient-10.0.15-1  libsystemd-217-8
               orc-0.4.22-1  systemd-217-8  systemd-sysvcompat-217-8  texinfo-5.2-3  xf86-input-evdev-2.9.1-1  xterm-313-1

Total Download Size:    11.67 MiB
Total Installed Size:   57.70 MiB
Net Upgrade Size:       -0.71 MiB

:: Proceed with installation? [Y/n] y
...

pacmanのアップデートは一部のパッケージのみアップデートをするのに向いていない。ローリングリリースなため、全てのパッケージを足並みそろえてアップデートするのが推奨されている。なので、アップデートによる他のパッケージへの影響など考えず、とりあえず-Syuする。不具合が起こったらググって自分で治すのが基本。

大きなパッケージのアップデートがあるときは、時間の余裕があるときに行う。Arch Linuxのアップデートは重要なシステム(例えばカーネールやinitからsystemdへの移行)や大きなパッケージのアップデートが、平気に-Syuで実行される。いきなりOS立ち上がんなくなってlive CDからシステムの再インストールするハメになるとか起きる。

時間と心に余裕がないときに、やばそうなアップデートがでてきたらとりあえず"n"でアップデートを中断。1週間くらいおいて、Arch wikiとかに不具合の報告とかなければ、アップデートするのが賢明。

パッケージをインストールする(-S)
pacmanからパッケージをイントールする。
# pacman -S パッケージ名


パッケージを検索する(-Ss)
pacmanからリポジトリに登録されているパッケージを検索する。パッケージがインストールされているかどうか調べるときは、 pacman -Ss pacman | grep installedとかすればよい。($ pacman -Qs パッケージ名 でも可能。)
$ pacman -Ss pacman

core/pacman 4.1.2-7 (base base-devel) [installed]
    A library-based package manager with dependency support
core/pacman-mirrorlist 20141116-1 [installed]
    Arch Linux mirror list for use by pacman
extra/expac 4-2
    pacman database extraction utility
extra/namcap 3.2.5-2
    A Pacman package analyzer
...


パッケージの情報を調べる(-Si)
インストールするまえに、どんなパッケージなのか調べることができる。
$ pacman -Si pacman

Repository     : core
Name           : pacman
Version        : 4.1.2-7
Description    : A library-based package manager with dependency support
Architecture   : x86_64
URL            : http://www.archlinux.org/pacman/
Licenses       : GPL
Groups         : base  base-devel
Provides       : pacman-contrib
Depends On     : bash>=4.2.042-2  glibc>=2.17-2  libarchive>=3.1.2  curl>=7.19.4  gpgme  pacman-mirrorlist
                 archlinux-keyring
Optional Deps  : fakeroot: for makepkg usage as normal user
Conflicts With : pacman-contrib
Replaces       : pacman-contrib
Download Size  : 580.79 KiB
Installed Size : 3800.00 KiB
Packager       : Allan McRae 
Build Date     : 2014年11月21日 20時12分25秒
Validated By   : MD5 Sum  SHA256 Sum  Signature


パッケージのアンインストール(-Rsn)

# pacman -Rsn パッケージ名

-Rが削除のオプション。-sで削除したいパッケージと、そのパッケージだけが必要としているパッケージを一緒に削除する。また、pacman は削除するパッケージの設定ファイルを 「ファイル名.pacsave」 という名前でバックアップするが、このファイルも削除したいときに-nオプションを付ける。

インストールしたパッケージの情報を調べる(-Qi)
-Siは、パッケージがインストールされていなくても使用可能。-Qiはインストールされているパッケージのみに可能。得られる情報は少し違う。-QiだとInstall Reasonとかが分かる。
$ pacman -Qi pacman

Name           : pacman
Version        : 4.1.2-7
Description    : A library-based package manager with dependency support
Architecture   : x86_64
URL            : http://www.archlinux.org/pacman/
Licenses       : GPL
Groups         : base  base-devel
Provides       : pacman-contrib
Depends On     : bash>=4.2.042-2  glibc>=2.17-2  libarchive>=3.1.2  curl>=7.19.4  gpgme  pacman-mirrorlist
                 archlinux-keyring
Optional Deps  : fakeroot: for makepkg usage as normal user [installed]
Required By    : package-query  yaourt
Optional For   : None
Conflicts With : pacman-contrib
Replaces       : pacman-contrib
Installed Size : 3800.00 KiB
Packager       : Allan McRae 
Build Date     : 2014年11月21日 20時12分25秒
Install Date   : 2014年11月25日 21時28分14秒
Install Reason : Explicitly installed
Install Script : No
Validated By   : Signature


パッケージによってインストールされたファイルを調べる(-Ql)
パッケージをインストールしたことにより、システムにインストールされたファイルを調べることができる。例えば、
$ pacman -Ql pacman

pacman /etc/
pacman /etc/makepkg.conf
pacman /etc/pacman.conf
pacman /usr/
pacman /usr/bin/
pacman /usr/bin/bacman
pacman /usr/bin/checkupdates
pacman /usr/bin/cleanupdelta
pacman /usr/bin/makepkg
pacman /usr/bin/paccache
...


あるファイルがどのパッケージによってインストールされたのか調べる(-Qo)
何か設定ファイルとか、ライブラリとかどのパッケージをインストールした時にインストールされたのか知ることができる。何か設定ファイルをいじるときに、その設定ファイルのパスを打ってみて、どのパッケージに影響するのか調べることができる。
$ pacman -Qo /etc/pacman.conf 
/etc/pacman.conf is owned by pacman 4.1.2-7


パッケージの依存のツリーを調べる(pactree)
パッケージの依存のツリーを調べることができる。
$ pactree pacman

pacman
├─bash
│ ├─readline
│ │ ├─glibc
│ │ │ ├─linux-api-headers
│ │ │ ├─tzdata
│ │ │ └─filesystem
│ │ │   └─iana-etc
│ │ └─ncurses
│ │   └─glibc
│ └─glibc
├─glibc
├─libarchive
│ ├─acl
│ │ └─attr
│ │   └─glibc
...


パッケージキャッシュの削除(paccache)
pacman はパッケージのインストールのためにダウンロードしたファイルを /var/cache/pacman/pkg/ に保存している。これらのファイルは自動で削除されないので、定期的に手動で削除する必要がある。削除しないと/varのサイズが大きくなり、システムの空き容量を圧迫する。

paccacheは、デフォルトでそれぞれのパッケージのキャッシュで一番新しい3つのバージョンを残して、それ以外の古いファイルを削除する。アップデート後にシステムに障害が出た時、パッケージをダウングレードする必要がでてくることがある。このとき、残しておいた古いバージョンのパッケージファイルが役立つ。

/varの容量が大きくなってきたらこのコマンドを打つ。
$ paccache -r

==> Privilege escalation required
[sudo] password for username: 

==> finished: 31 packages removed (diskspace saved: 163.72 MiB)



参考:
[1]Pacman
[2]Makepkg

スポンサーリンク

スポンサーリンク

0 件のコメント:

コメントを投稿