LPIC-1 - 101試験 - 102:Linuxのインストールとパッケージ管理 - 102.5 RPMおよびYUMパッケージ管理を使用する

Last Update : September 18 2014 21:34:22

     

a. RPMによるパッケージ管理

RPM(RedHat Package Manager)はレッドハットが開発したパッケージ管理のためのソフトウェアです。 RPMでは、関連したファイルはソフトウェアの種類ごとにグループ化されてパッケージとしてまとめられ、パッケージ単位で検索、インストール、アップグレード、アンインストール、検査などの管理ができます。
RPMには重要な機能の1つとして、パッケージ間の依存関係のチェック機能があります。

  • パッケージAのインストール時、パッケージAに必要なパッケージBがまだインストールされていない場合は、その旨表示します
  • パッケージAのアンインストール時、パッケージAを必要とするほかのパッケージBがある場合はその旨表示します

RPMはシステムにインストールされたパッケージの情報を/var/lib/rpmディレクトリの下のBerkeley DBで管理しています。このBerkeley DBの検索インデックスが一部壊れることがあり、その場合の修復オプションを覚えておくと役に立ちます。
修復コマンド: rpm --rebuilddb

パッケージには、パッケージのダイジェストとパッケージの情報を保持するヘッダのダイジェストが含まれており、この値と計算したダイジェストを比較すると、パッケージ内容の改ざんの有無を検査できます。

また、作成者の秘密鍵でパッケージとヘッダに署名することができます。パッケージの利用者は作成者が署名した秘密鍵と対の公開鍵により、署名が本物かどうかを調べ、パッケージが正当なものであるかどうかを検証できます。署名に使用する秘密鍵/公開鍵はGPGにより生成、管理されます。
(注)GPG(GNU Privacy Guard)は、公開鍵暗号PGP(Pretty Good Privacy)の標準仕様であるOpenPGPのGNUによる実装です。 デフォルトでは、パッケージのインストール時にダイジェストのチェックと署名チェックが行われます。

RPMパッケージのパッケージファイル名は、
  パッケージ名-バージョン-リリース番号.アーキテクチャ.拡張子
となります
例えば、
zsh-4.2.6-1.i386.rpm
となります。


1.RPMコマンドを用いたパッケージ管理

パッケージのインストールやアンインストールを行うには、 rpm コマンドを使用します。インストールの際は依存関係のあるパッケージ(動作に必要な他のパッケージ)を調べ、もしシステムにそれらパッケージが存在しない場合は、そのことをユーザーに通知します。また、アンインストールする際に、そのパッケージが他パッケージと依存関係がある(他のパッケージの動作に必要とされる)場合には、アンインストールできない旨を通告します。さらに、既にシステムにインストール済みのパッケージをチェックすることも可能です。
パッケージのインストール、アンインストール、アップデートには管理者権限が必要です。


● rpm コマンド構文
  rpm [オプション] [パッケージファイル名]

● 基本オプション
 -i パッケージのインストール
 -U パッケージのアップグレード
 -e, --erase=<package>+ パッケージの削除(アンインストール)
 -V, --verify パッケージの検証
 -q パッケージ情報の表示

● 全モード共通オプション
 -v, --verbose より詳細な出力を提供します。
 --quiet 詳細でない出力を提供します
 --version 使用している rpm のバージョンを表示します。

● インストール(-i)/アップグレード(-U)/アンインストール(-e) オプション
 --force 強制的にパッケージを上書きする
 --oldpackage 古いパッケージに置き換える
 --nodeps パッケージの依存関係の検証を行いません
 --test テストインストールする(実際にインストールは行わない)
 --replacefiles ファイルが既に存在する場合、置き換える
 --noscripts パッケージ指定のスクリプトを実行しない
 --root --root <ディレクトリ名>で、作業ディレクトリを指定する
 --prefix --prefix <ディレクトリ名>でパッケージをインストールするディレクトリを指定する
 --reLocate --reLocate <旧ディレクトリ名=新ディレクトリ名>で、インストール済みのパッケージをディレクトリを変更して再インストールする(i と併用)
 -F, --freshen=<packagefile>+ 既にインストール済みの場合のみアップグレード
 -h, --hash パッケージをインストールにつれて '#' を表示します (-v と使用する)
 --nomd5 MD5チェックサムによるファイル改竄の可能性の有無をチェックしません(Vと併用)

● 問い合わせオプション(-q)
 -c, --configfiles 全ての設定ファイルを列挙します
 -d, --docfiles 全てのドキュメントファイルを列挙します
 --dump 基本的なファイル情報をダンプします
 -l, --list パッケージ中のファイルを列挙します
 -R, --requires 指定されたパッケージが依存しているパッケージを表示する。
 -a, --all インストールされている全てのパッケージを一覧で表示する。
 -p 未インストールのパッケージファイルに対して問合せを行なう。

● 検証オプション(-V)
 --nofiles パッケージ中のファイルを検証しません
 --nodeps パッケージの依存関係を検証しません
 --nomd5
 --nofiledigest
ファイルダイジェストの検証をしません


2.RPMパッケージの新規インストール「-ivh」

rpmパッケージを新規インストールするには「-i 」(install)オプションを使用します。「-v 」(Verbose)はインストールの詳細情報を表示させるオプション、「-h」(hash)は進捗状況をハッシュマーク(#)で表示してくれます。 なお、「-vv」とvを2つ使用することによってさらに詳細な進捗状況を表示させることができます。

# rpm -ivh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


3.RPMパッケージのアップグレード「-Uvh」

RPMパッケージのアップグレードを行う場合は、「-U」(Upgrade)オプションを使用します。対象とするパッケージがインストールされているかわからない場合には、「-U」を「-i 」の代用として使用します。なお、旧バージョンに戻したい場合には「--oldpackage」オプションを用いて、
「rpm -Uvh --oldpackage 旧パッケージ名」のようにします。-U はシステムに同じパッケージが存在しない場合には、通常のインストールを行います。-F オプションと区別して使用するようにします。

# rpm -Uvh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


4.RPMパッケージのアップグレード「-Fvh」

-U オプション同様RPMパッケージのアップグレードを行いますが、システムに同じパッケージが存在しない場合は、インストールを行いません。-U オプションと区別して使用するようにします。

# rpm -Fvh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


5.RPMパッケージのバージョンを表示する「-q」

RPMパッケージのバージョンを表示したい場合には、「-q」」(query)オプションを使用します。全てのインストール済みのパッケージを表示させるには「-qa」オプションを用います。

# rpm -q telnet
telnet-0.17-23


6.RPMパッケージの詳細情報を表示する「-qi」

RPMパッケージの詳細な情報を表示したい場合には、「-i 」(Infomation)オプションを併用し、
-qi」のように使用します。なお、-qip とすることでインストール前のRPMパッケージの詳細情報が表示されます。表示される情報は、-qi 実行時と同様のものです。

# rpm -qi samba
Name : samba Relocations: (not relocatable) Version : 3.6.9 Vendor: CentOS Release : 151.el6 Build Date: 2013年02月22日 13時03分33秒 Install Date: 2013年04月02日 12時45分57秒 Build Host: c6b7.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: samba-3.6.9-151.el6.src.rpm Size : 18533164 License: GPLv3+ and LGPLv3+ Signature : RSA/SHA1, 2013年02月24日 02時53分34秒, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.samba.org/ Summary : Server and Client software to interoperate with Windows machines Description : Samba is the suite of programs by which a lot of PC-related machines share files, printers, and other information (such as lists of available files and printers). The Windows NT, OS/2, and Linux operating systems support this natively, and add-on packages can enable the same thing for DOS, Windows, VMS, UNIX of all kinds, MVS, and more. This package provides an SMB/CIFS server that can be used to provide network services to SMB/CIFS clients. Samba uses NetBIOS over TCP/IP (NetBT) protocols and does NOT need the NetBEUI (Microsoft Raw NetBIOS frame) protocol.


7.インストールされたRPMパッケージのディレクトリを調べる「-ql」

「-l 」(list)オプションをつけると、インストールされたRPMパッケージに含まれるファイルを調べることができます。インストールする前に予め、どのようなファイルがインストールされるかを調べるには、-ql とします。

# rpm -ql telnet-server
/etc/xinetd.d/telnet /usr/sbin/in.telnetd /usr/share/man/man5/issue.net.5.gz /usr/share/man/man8/in.telnetd.8.gz /usr/share/man/man8/telnetd.8.gz


8.インストールされたRPMパッケージの設定ファイルを調べる「-qc」

「-c 」オプションをつけると、RPMパッケージのインストールに同時にインストールされた設定ファイルを調べることができます。

# rpm -qc samba
/etc/logrotate.d/samba /etc/pam.d/samba /etc/samba/smbusers


9.RPMパッケージのアンインストール「-e」

RPMパッケージをアンインストールするには、「-e」(erase)オプションを使用します。アンインストールする際に、依存関係を無視して削除する場合は、「--nodeps」オプションを付け加えます。

# rpm -e telnet-0.17-23


10.RPMパッケージファイルの検証「-V」

パッケージのインストール後にパッケージのファイルをどのように書き換えたかを検証するには「-V」オプションを使用します。問題がなければ、「.......」のようにドットで表示されます。-V オプションを利用することでRPMデータベースに記録されている内容と実際にインストールされているファイルが一致しているかどうか調べることができるので、ファイルが改竄されていないかどうか、しかるべきファイルサイズでインストールされているかどうかをチェックすることができるので重宝します。また、インストール時にあったファイルが見つからない場合は、missing と表示されます。インストールされている全てのパッケージを検査するには、-Va オプションを使用します。

# rpm -V telnet-server S.5....T c /etc/xinetd.d/telnet

なお、変更が加えられていない場合は、「.......」のように表示されますが、変更が加えられている場合には、「S」や「T」、「5」のような検証コードが表示されます。以下にこれら検証コードの意味について記載しておきます。

 S ファイルサイズが異なっている
 5 MD5チェックサムが異なる
 L シンボリックリンクが変更されている
 T ファイルの更新時刻が変更されている
 D デバイスファイルが変更されている
 U ファイルの所有者が変更されている
 G ファイルの所有グループが変更されている
 M ファイルのパーミッションが変更されている


11.指定されたファイルのパッケージを表示する「-qf」

# rpm -qf /etc/rndc.key bind-9.2.1-16


12.RPMパッケージからファイルを抽出する

RPMから特定のファイルを抽出できるコマンドとして、rpm2cpio があります。これを使うことでインストールせずに必要なファイルを抽出して利用したり、ディレクトリ構成が前もって把握できるのでとても重宝します。以下のコマンドでは、どのようなファイルが格納されているかを調べます。rpm -qlp と同様の意味になります。

# rpm2cpio mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio --list

実際に抽出するには以下のようにします。まず、ディレクトリを作成し、そこを作業用ディレクトリとします。コマンド実行後は階層ごとにファイルが抽出されます。

# mkdir mt-daap # cd mt-daap # rpm2cpio ~/mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio -id



b. yumによるパッケージ管理

yum コマンドはパッケージがアップロードされているサーバーに問い合わせて、パッケージのダウンロードからインストールまでを自動的に実施するコマンドです。また、依存関係があるパッケージ(動作に必要な他のパッケージ)も自動的に入手してインストールします。システムにインストール済みのパッケージのアップデートも可能です。CentOSやFedora Coreなどでも標準として採用されています。

1.yum のインストール

yum はFedora Core にデフォルトでインストールされています。インストールされていない場合はダウンロードしてきてください。

# rpm -q yum yum-2.0.7-1.1


2.yum の前準備

yum を使う前に前もって/etc/yum.conf を編集しておきます。この設定ファイルでは、yum でパッケージをダウンロードしてくる際に接続するサーバー名を指定します。出来る限り日本にあるサーバーで回線速度の速いサーバー(KDDI や理研、IIJ など)を指定するべきです(※FC3 になると、/etc/yum.conf は直接編集せずとも、/etc/yum.repos.d/ 以下にオリジナルなファイルを作成し、そこにサーバー名を記述しておけば良いようになっています。)

# vi /etc/yum.conf
[base] name=Fedora Core $releasever - $basearch - Base baseurl=http://ftp.kddilabs.jp/Linux/packages/fedora/core/$releasever/$ARCH/os/ ftp://ftp.riken.go.jp/fedora/core/$releasever/$ARCH/os/ ftp://ftp.iij.ad.jp/pub/linux/fedora/core/$releasever/$ARCH/os/ [updates-released] baseurl=http://ftp.kddilabs.jp/Linux/packages/fedora/core/updates/$releasever/$ARCH/ ftp://ftp.riken.go.jp/fedora/core/updates/$releasever/$ARCH/ ftp://ftp.iij.ad.jp/pub/linux/fedora/core/updates/$releasever/$ARCH/


3.GPGキーチェック

Fedora Core 3 ではじめてパッケージをインストールしようとした場合、以下のようなエラーが発生します。これは、FC 3ではパッケージのGPGキーチェックがデフォルトでオンになっているためです。

# yum install telnet
You have enabled checking of packages via GPG keys. This is a good thing. However, you do not have any GPG public keys installed. You need to download the keys for packages you wish to install and install them. You can do that by running the command:rpm --import public.gpg.key For more information contact your distribution or package provider.

yumコマンドを実行する前に、以下のコマンドを実行してGPGキーをインストールしておきます。

rpm --import /usr/share/rhn/RPM-GPG-KEY-fedora


4.yum の基本的な使用法

yum の使い方は簡単です。ソフトウェアをインストールするには、以下のコマンドを実行します。

# yum install パッケージ名

削除する場合は、

# yum remove パッケージ名

インストールされているパッケージ全てをまとめてアップデートするには、yum updateを実行します(注:カーネルもアップグレードされます)。このとき、-y オプションをつけると途中で現れるメッセージに対して全て「Yes」で答えるようになります。予め全てのパッケージをアップグレードすることが決定しているような場合にはつけたほうが良いでしょう。なお、前もってアップデートパッケージがあるかどうかを確認する場合には、yum check-updateを実行します。

# yum check-update
Gathering header information file(s) from server(s) Server: Fedora Core 3 - i386 - Base Server: Fedora Core 3 - i386 - Released Updates Finding updated packages Downloading needed headers Name Arch Version Repo ---------------------------------------------------------- arts i386 8:1.4.2-0.fc3.3 updates-released cups i386 1:1.1.22-0.rc1.8.6 updates-released cups-libs i386 1:1.1.22-0.rc1.8.6 updates-released vim-common i386 1:6.3.086-0.fc3.1 updates-released vim-enhanced i386 1:6.3.086-0.fc3.1 updates-released vim-minimal i386 1:6.3.086-0.fc3.1 updates-released
# yum update or # yum -y update

特定のパッケージのみをアップデートする場合は、以下のようにします。

# yum update telnet


5.yum update でアップデートを除外したいパッケージの指定

yum update でまとめてupdate したいけれど特定のパッケージだけはアップデートを除外したいというような場合もあります。その場合は、/etc/yum.conf の[main] に以下のような行を追加します。

# vi /etc/yum.conf
[main] exclude= gcc* kde* openssh* kernel-smp*


6.yum のキャッシュをクリアする [ yum clean ]

長い間、yum を使用しているとダウンロードしたアップデートパッケージ等のキャッシュ用のファイルも溜まってきます。yum のキャッシュは/var/cache/yum に格納されており、現在どのぐらいの容量を占有しているかdu で確認しておきます。必要なければ、yum clean でダウンロードしたパッケージや古いヘッダを削除します。

# du -sh /var/cache/yum/
32M /var/cache/yum/
# yum clean


7.パッケージの検索 [ yum search ]

パッケージの検索を行いたい場合は、yum search を実行します。検索の対象となるは、RPMファイルの「Name」、「Packager」、「Dummary」、「Description」の各フィールドです。

# yum search telnet
Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirror.fairway.ne.jp * extras: mirror.fairway.ne.jp * updates: www.ftp.ne.jp ============================= N/S Matched: telnet ============================== perl-Net-Telnet.noarch : Net-Telnet Perl module telnet.i686 : The client program for the Telnet remote login protocol telnet-server.i686 : The server program for the Telnet remote login protocol krb5-appl-clients.i686 : Kerberos-aware telnet, ftp, rcp, rsh and rlogin clients krb5-appl-servers.i686 : Kerberos-aware telnet, ftp, rcp, rsh and rlogin servers tn5250.i686 : 5250 Telnet protocol and Terminal Name and summary matches only, use "search all" for everything.


8.利用可能なパッケージの一覧を表示 [ yum list ]

# yum list
xmms-skins i386 1:1.2.10-9 base xojpanel i386 0.91-9 base xorg-x11-Xdmx i386 6.8.2-1.FC3.13 updates-released xorg-x11-Xnest i386 6.8.2-1.FC3.13 updates-released ・・・

インストール済みのパッケージ一覧を表示するには、yum list installed を実行します。その他にも、available(インストール可能なパッケージのリストを表示する)、updates(アップデート可能なパッケージのリストを表示する)、recent(最近追加されたパッケージのリストを表示する)のオプションをつけることができます。

# yum list installed


9.指定したパッケージの情報を表示 [ yum info ]

パッケージの情報を表示するには、「yum info パッケージ名」を実行します。yum info だけだと、利用可能な全パッケージの情報が全て表示されてしまいます。その他にも、available(インストール可能なパッケージのリストを表示する)、updates(アップデート可能なパッケージのリストを表示する)、recent(最近追加されたパッケージのリストを表示する)のオプションをつけることができます。

# yum info openssh
省略 Name : openssh Arch : i386 Version : 3.9p1 Release : 8.0.2 Size : 730.83 kB Group : アプリケーション/インターネット Repo : Locally Installed Summary : SSHプロトコルのバージョン1と2のOpenSSH 実装 Description: OpenSSHはSSH (Secure SHell)プロトコルのOpenBSDによる実装です。SSHは rlogin や rsh の代わりに使用するプログラムで、 信頼性の低い 2 台のホストの間で安全でないネットワークを経由して、 暗号化された安全な通信を実行できます。X11 接続および任意の TCP/IP ポートも安全なチャネル経由で転送できます。共有鍵認証でサーバにパスワード なしでアクセスすることもできます。 このパッケージには、OpenSSH のクライアントとサーバーの両方に必要なコアファイルが 含まれています。このパッケージを利用するには、openssh-clients または openssh-server、あるいはその両方をインストールする必要があります。


10.特定のファイルが提供されているパッケージ名を調べる [ yum provides ]

パッケージをインストールしようとした際に、特定のライブラリが開けない(存在しない)ために、インストールできなかったり、コンパイルエラーになったりすることはよくある話しです。そこで存在しないと言われているそのファイルがどのパッケージに含まれているかを調べることで、どのパッケージをインストールすればいいのかがすぐにわかります。

# yum provides libg2c.so.0
省略 Looking in available packages for a providing package No packages found Looking in installed packages for a providing package Installed package: libf2c.i386 0:3.4.4-2.fc3 matches with /usr/lib/libg2c.so.0 Installed package: libf2c.i386 0:3.4.4-2.fc3 matches with /usr/lib/libg2c.so.0.0.0 Installed package: libf2c.i386 0:3.4.4-2.fc3 matches with libg2c.so.0 3 results returned


11.FC3 でyumがアクセスするサーバを指定する

FC3からは、/etc/yum.conf のデフォルトの記述方法が変更されており、/etc/yum.repos.d/ 以下にオリジナルのファイルを作成し、そこにyum でアクセスするためのサーバーを指定すればいいようになっています。まずは、base 用とupdates 用の2つのオリジナルファイルを作成します。

# vi /etc/yum.repos.d/local-base
http://ftp.kddilabs.jp/Linux/packages/fedora/core/$releasever/$ARCH/os/ ftp://ftp.riken.go.jp/fedora/core/$releaseve/$ARCH/os/ ftp://ftp.iij.ad.jp/pub/linux/fedora/core/$releaseve/$ARCH/os/
# vi /etc/yum.repos.d/local-updates
http://ftp.kddilabs.jp/Linux/packages/fedora/core/updates/$releaseve/$ARCH/ ftp://ftp.riken.go.jp/fedora/core/updates/$releaseve/$ARCH/ ftp://ftp.iij.ad.jp/pub/linux/fedora/core/updates/$releaseve/$ARCH/

次に、/etc/yum.repos.d/fedora.repoと/etc/yum.repos.d/fedora-updates.repoを以下のように編集しておきます。

# vi /etc/yum.repos.d/fedora.repo
[base] name=Fedora Core $releasever - $basearch - Base #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/ #mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever mirrorlist=file:///etc/yum.repos.d/local-base enabled=1 gpgcheck=1
# vi /etc/yum.repos.d/fedora-updates.repo
[updates-released] name=Fedora Core $releasever - $basearch - Released Updates #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/ #mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever mirrorlist=file:///etc/yum.repos.d/local-updates enabled=1 gpgcheck=1

● yum コマンド構文
  yum [オプション] [パッケージファイル名]

● yum コマンドオプション
 コマンド 説明
 check-update アップデート可能なパッケージの一覧を表示
 clean ダウンロードしたパッケージと古いヘッダを削除する
 clean-oldheaders 古いヘッダを削除
 clean packages ダウンロードしたパッケージを削除
 info 利用可能なパッケージの一覧を表示
 info <パッケージ名> 指定したパッケージの情報を表示
 install <パッケージ名> 指定したパッケージのインストール
 list 利用可能なパッケージの一覧を表示
 list installed インストール済みのパッケージ一覧を表示
 list updates アップデート可能なパッケージの一覧を表示
 provides <パッケージ名> パッケージに含まれるファイルの一覧を表示
 remove <パッケージ名> 指定したパッケージをアンインストールする
指定したパッケージの依存関係があるパッケージは削除するかどうか確認を求める
 search <キーワード> キーワードでパッケージを検索する
 update アップデート可能な全パッケージをアップデート
 update <パッケージ名> 指定したパッケージをアップデート


z. 出題範囲概要

●説明 RPMおよびYUMのツールを使用してパッケージ管理を行う。
●主要な知識範囲
RPMおよびYUMを使用してパッケージのインストール、再インストール、アップグレード、削除を行う
RPMパッケージのバージョン、状態、依存関係、整合性と署名などの情報を取得する
パッケージがどのファイルを提供するか、また、特定のファイルがどのパッケージから提供されるかを判断する
●重要なファイル、用語、ユーティリティ
rpm, rpm2cpio, /etc/yum.conf, /etc/yum.repos.d/, yum, yumdownloader


  [ 例題 ] 
  1. 101:102.5 問01  yumコマンド
  2. 101:102.5 問02  yumコマンド
  3. 101:102.5 問03  パッケージに関する情報を調べる
  4. 101:102.5 問04  rpmでインストールされた設定ファイル
  5. 101:102.5 問05  rpmでアンインストール
  6. 101:102.4 問05  apt-getのアップグレード
  7. 101:102.5 問06  rpmインストール
  8. 101:102.5 問07  yumでのアップデート情報の確認
  9. 101:102.5 問08  yumインストール
  10. 101:102.5 問09  rpmインストール失敗
  11. 101:102.5 問10  rpm
  12. 101:102.5 問11  RPMパッケージの依存関係
  13. 101:102.5 問12  yumアップデート


     

www.it-shikaku.jp