Linux の 101 試験対策: RPM および YUM によるパッケージ管理

新しいソフトウェアを追加して、システムを最新の状態に維持する

Linux システム上でパッケージをインストール、アップグレード、そして管理する方法を学んでください。このチュートリアルで焦点とするパッケージ管理ツールは、Red Hat によって開発された RPM (Red Hat Package Manager) と、当初はデューク大学物理学部で Red Hat Linux システムを管理するために開発された YUM (Yellowdog Updater Modified) です。このチュートリアルの内容は、Linux のシステム管理者として認定するための LPI 101 試験に備えて勉強するために利用することも、単に新しいソフトウェアを追加してシステムを最新の状態に維持する最善の方法を探るために利用することもできます。

Ian Shields, Linux Author, Freelance

Ian ShieldsIan Shields は、Linux のフリー・ライターです。ノースカロライナ州 Research Triangle Park にある IBM を退職した彼が、オーストラリアのキャンベラにある IBM にシステム・エンジニアとして入社したのが 1973年であり、それ以降、カナダのモントリオールやノースカロナイナ州 Research Triangle Park でシステム・エンジニアリングとソフトウェア開発の両方に携わってきました。1990年代後半からは、Linux を使用して Linux 上で開発を行うとともに、Linux に関する執筆も行ってきました。彼は、オーストラリア国立大学で純粋数学および哲学の学士号を取得し、ノースカロライナ州立大学でコンピューター・サイエンスの修士号と博士号を取得しています。普段はオリエンテーリングを楽しんでおり、旅行に行くのも好きです。


developerWorks 貢献著者レベル

2016年 7月 07日 (初版 2010年 5月 11日)

より詳しく学び、さらなる開発を行い、より多くの人とつながる

新たに登場した developerWorks Premium メンバーシップ・プログラムでは、メンバーになると、強力な開発ツールのほか、Safari Books Online を通じて提供される最もホットな 500 タイトルの技術書 (Java 開発者向けのものが大量にあります) を含む各種のリソースをすべて自由に利用できるようになります。さらに、主要な開発者向けイベントの登録料の大幅な割引や、最新の O'Reilly カンファレンスの全容を閲覧できる再生動画など、その他にもさまざまな特典が提供されます。今すぐサインアップしてください

概要

このチュートリアルでは、Linux システム上で RPM および YUM ツールを使用してパッケージを管理する方法を学びます。このチュートリアルで説明する内容は以下のとおりです。

  • RPM および YUM を使用してパッケージをインストール、再インストール、アップグレード、および削除する方法
  • RPM パッケージに関する情報 (バージョン、ステータス、依存関係、完全性、署名など) を取得する方法
  • パッケージが提供するファイルを判別する方法と、特定のファイルが含まれるパッケージを見つける方法

このチュートリアルは、Linux Professional Institute Junior Level Administration (LPIC-1) 101 試験の主題 102 の 102.5 の試験対策に役立ちます。この試験項目の重要度は 3 です。


パッケージの管理について

かつて、Linux プログラムの多くはソース・コードとして配布されていました。このソース・コードを、ユーザーが必要な man ページ、構成ファイルなどと併せてビルドして 1 つのプログラム、あるいは一連のプログラムに組み込むという仕組みでしたが、最近では、ほとんどの Linux ディストリビューターが事前にビルドされたプログラムを使用しています。これらのプログラムのセットが、「パッケージ」と呼ばれるものです。パッケージは、該当するディストリビューションにすぐにインストールできる状態で配送されます。このチュートリアルでは、パッケージのインストール、更新、削除を支援するパッケージ管理ツールについて説明します。このチュートリアルで焦点とするのは、RPM (Red Hat Package Manager) および YUM (Yellowdog Updater Modified) です。RPM は Red Hat によって開発されたパッケージ管理ツールで、YUM は当初、デューク大学物理学部で Red Hat Linux システムを管理するために開発されました。この連載の別のチュートリアル「Linux の 101 試験対策: Debian によるパッケージ管理」では、Debian システムで使用するパッケージ管理ツールについて説明しています。

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、Linux Professional Institute の LPIC-1: Linux Server Professional Certification 試験に備えるための教材にもなります。

連載の各チュートリアルに関する説明とリンクについては、developerWorks の「Linux の 101 試験対策: LPIC-1 のロードマップ」を参照してください。現在進行中のこのロードマップは、2015年 4月 15日に更新された LPIC-1 試験の項目のバージョン 4.0 を反映しています。完成したチュートリアルは、その都度ロードマップに追加されていきます。

ユーザーの目から見ると、基本的なパッケージ管理機能は一連のコマンドで提供されています。Linux の使い易さを向上させようとする Linux 開発者たちの努力の末、基本ツールは他のツールによって補完されるようになりました。その一例は GUI ツールです。GUI ツールによって、基本ツールの複雑さはある程度、エンド・ユーザーから隠されます。このチュートリアルと Debian のパッケージ管理について説明しているチュートリアルでは基本ツールを焦点としていますが、基本ツール以外のツールについても、皆さんが詳しく調べられるように取り上げています。

前提条件

この連載のチュートリアルを最大限に活用するには、Linux の基礎知識と、チュートリアルに記載されたコマンドを演習できる実際の Linux システムが必要です。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。特に、記載する出力のほとんどは、お使いのシステムにインストールされているパッケージによって大きく左右されます。出力がかなり違っているとしても、重要な共通点は認識できるはずです。このチュートリアルの例では、特に記載がない場合は Fedora 20 システムを使用しています。


パッケージ・マネージャー

RPM、YUM、および APT (Debian システム用) には多くの共通点があります。具体的に言うと、この 3 つではすべて、パッケージのインストールと削除を行うことが可能で、インストールされているパッケージに関する情報はデータベースに保持されます。さらに、いずれも基本的なコマンドライン機能を備えていると同時に、ツールを追加することによって、よりユーザー・フレンドリーなインターフェースを提供することができます。また、インターネットからパッケージを取得できるという共通点もあります。

Linux システムをインストールするときには、さまざまなパッケージをインストールするのが通常です。インストールする一連のパッケージは、システムの用途 (サーバー、デスクトップ、または開発者のワークステーションなど) に合わせてカスタマイズすることができます。そしてある時点で、機能を追加するために新しいパッケージをインストールしなければならなくなったり、既存のパッケージの更新や、不要になったパッケージの削除や、新しいパッケージがリリースされたことで廃止されたパッケージの削除が必要になったりすることがあります。以降のセクションでは、これらのタスクを行う方法を説明するとともに、特定のコマンドが含まれている可能性のあるパッケージを見つけるなどといった、タスクに関連する課題に取り組みます。

RPM

Red Hat が 1995年に導入した RPM は、現在 LSB (Linux Standard Base) でパッケージ形式として使用されているパッケージ管理システムです。rpm コマンドのオプションは、以下の用途によって 3 つのグループに分けられます。

  • パッケージに対する問い合わせと検証
  • パッケージのインストール、アップグレード、および削除
  • その他の関数の実行

上記の 3 つのグループのうち、このチュートリアルでは最初の 2 つのグループに分類されるコマンドのオプションに焦点を絞ります。その他の関数についての情報は、RPM の man ページを調べてください。

rpm は、RPM で使用する主要なコマンドのコマンド名であり、.rpm は RPM ファイルに使用する拡張子であることに注意してください。従って一般に、「rpm ファイル」や「xxx rpm」と記述されている場合は RPM ファイルを意味し、単独で rpm と記述されている場合はコマンドを意味します。

YUM

YUM は RPM システムに自動更新機能と、依存関係の管理を含めたパッケージ管理機能を追加します。YUM はシステムにインストールされているパッケージを把握することに加え、「リポジトリー」と連動するという点では Debian の APT (Advanced Packaging Tool) に似ています。リポジトリーとはパッケージの集合のことで、通常はネットワーク接続を介してアクセスすることができます。


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

例えば、Fortran のプログラムをコンパイルしたいというあなたに、同僚たちが gfortran コマンドを使用するように提案したとします。そこであなたは、gfortran –helpwhich gfortran、あるいは type gfortran を使ってみることにしました。けれどもシステムが gfortran を見つけられないとすると、リスト 1 のような出力が表示されます。

リスト 1. 見つからない gfortran コマンド
[ian@attic-f21 ~]$ gfortran --help
bash: gfortran: command not found

[ian@attic-f21 ~]$ gfortran --help
bash: gfortran: command not found...
Install package 'gcc-gfortran' to provide command 'gfortran'? [N/y] n


[ian@attic-f21 ~]$ which gfortran
/usr/bin/which: no gfortran in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:
/home/ian/.local/bin:/home/ian/bin)

[ian@attic-f21 ~]$ type gfortran
bash: type: gfortran: not found

リスト 1 の 2 番目のコマンドによる出力から、有用なサジェスチョンが得られなかった場合には、同僚のところに戻って、どのパッケージをインストールしたらよいかを尋ねるか、あるいは単純に、gfortran コマンドは gfortran パッケージの中にあるだろうと見当をつけることでしょう。大抵、この見当は外れませんが、いつも当たるとは限らず、今回は当たりませんでした。正しいパッケージを見つける方法については後で説明します。gfortran コマンドが実際には gcc-gfortran パッケージの中にあることがわかっていて、そのパッケージをすでにダウンロードしてあるか、それ以外の方法で入手済みだとすると、パッケージをインストールするには -i (install の略) オプションを指定して rpm コマンドを実行します (リスト 2 を参照)。

リスト 2. rpm コマンドを使用した gcc-gfortran のインストール (テイク 1)
[root@attic-f21 ~]# rpm -i  gcc-gfortran-4.9.2-6.fc21.x86_64.rpm 
error: Failed dependencies:
	libquadmath-devel = 4.9.2-6.fc21 is needed by gcc-gfortran-4.9.2-6.fc21.x86_64

rpm コマンドは、このパッケージに依存関係があることを把握しますが、残念ながら依存関係を解決することまではしません。そのため、依存パッケージを取得してからもう一度インストールし、他にもまだ依存関係があるかどうかを確認するという作業を、すべての依存関係が満たされるまで繰り返す必要があります。1 つの利点は、インストールするパッケージのリストを rpm コマンドで指定すると、すべての依存関係が満たされている場合には、すべてのパッケージが正しい順序でインストールされることです。従って、少なくともパッケージを手作業で 1 つひとつ正しい順序でインストールする必要はありません。

Debian の APT を使ったことがあれば、RPM にも apt-get コマンドのような機能があればいいのにと思っていることでしょう。apt-get コマンドは、依存関係を含め、必要なパッケージを探してインストールしてくれます。RPM ベースのシステムの場合、このような機能を提供するのは YUM (Yellowdog Updater Modified) です。リスト 3 に、install オプションを指定して yum コマンドを使って、gcc-gfortran とこのパッケージに必要な前提条件をインストールする方法を示します。: 依存関係は、システムに何をインストール済みであるかによって異なる可能性があります。

リスト 3. yum コマンドを使用した gcc-gfortran のインストール
[root@attic-f21 ~]# yum install gcc-gfortran
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be installed
--> Processing Dependency: libquadmath-devel = 4.9.2-6.fc21 for package: gcc-gfortran-4.9.2-6.fc21.x86_64
--> Running transaction check
---> Package libquadmath-devel.x86_64 0:4.9.2-6.fc21 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                 Arch         Version               Repository     Size
================================================================================
Installing:
 gcc-gfortran            x86_64       4.9.2-6.fc21          updates       7.7 M
Installing for dependencies:
 libquadmath-devel       x86_64       4.9.2-6.fc21          updates        37 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 7.7 M
Installed size: 18 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): libquadmath-devel-4.9.2-6.fc21.x86_64.rpm            |  37 kB  00:00     
(2/2): gcc-gfortran-4.9.2-6.fc21.x86_64.rpm                 | 7.7 MB  00:04     
--------------------------------------------------------------------------------
Total                                              1.6 MB/s | 7.7 MB  00:04     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
  Installing : libquadmath-devel-4.9.2-6.fc21.x86_64                        1/2 
  Installing : gcc-gfortran-4.9.2-6.fc21.x86_64                             2/2 
  Verifying  : libquadmath-devel-4.9.2-6.fc21.x86_64                        1/2 
  Verifying  : gcc-gfortran-4.9.2-6.fc21.x86_64                             2/2 

Installed:
  gcc-gfortran.x86_64 0:4.9.2-6.fc21                                            

Dependency Installed:
  libquadmath-devel.x86_64 0:4.9.2-6.fc21                                       

Complete!

リスト 3 の出力に示されているように、YUM は「updates」という名前のリポジトリー (後で説明します) 内に gcc-gfortran と libquadmath-devel の x86_64 版があるのを検出し、ダウンロードの合計サイズを決定しています。「y」で応答してトランザクションに同意すると、YUM はこの 2 つのパッケージをダウンロードした後、依存関係をインストールし、それから gcc-gfortran をインストールします。依存関係については、後で詳しく説明します。

: リスト 3 で YUM が検出した最新版の gcc-gfortran パッケージは、リスト 2 でインストールを試みた gcc-gfortran パッケージと偶然同じレベル (4.9.2-6) になっています。通常はパッケージの最新バージョンが必要になるはずですが、以前のバージョンが必要な場合や、x86_64 版ではなく i686 版が必要な場合には、追加条件として以前のバージョンを指定することもできます。詳しくは yum コマンドの man ページで、パッケージ名の指定に関するセクションを参照してください。


パッケージの保管場所

前のセクションで RPM パッケージをインストールする方法を学びましたが、パッケージはどこにあるのでしょうか? yum はどうやってパッケージをダウンロードしてくる場所を知るのでしょうか?その場所を知るための出発点は、/etc/yum.repos.d/ ディレクトリーです。通常は複数の repo ファイルが格納されているこのディレクトリーは、リポジトリー情報が保管されるデフォルトの場所となりますが、YUM 構成ファイル (通常は /etc/yum.conf) に他の場所を指定することもできます。リスト 4 に、前の手順で Fedora 21 システムにインストールした gcc-gfortran の保管場所に対応する fedora-updates.repo を示します。

典型的な repo ファイルは、標準パッケージ用、デバッグ・パッケージ用、そしてソース・パッケージ用の 3 つのセクションに分かれています。一般にディストリビューションのパッケージは、異なる保管場所 (ミラー) からそれぞれにコピーを入手することができます。そのため repo ファイルは yum に対し、セクションごとのミラーの最新リストを検索する場所を伝えるというわけです。ディストリビューションのリリース・レベルとマシンのアーキテクチャーはパラメーター化されていることに注意してください。従って、この例の場合、yum は x86_64 Fedora 21 システム用のリストを https://mirrors.fedoraproject.org/metalink?repo=updates-released-f21&arch=x86_64 からダウンロードします。

repo ファイルにはリポジトリーの場所の他、特定のリポジトリーが有効化されているかどうか、そしてダウンロードしたパッケージをチェックするために GPG 署名を使用する必要があるかどうかも指定されます。

リスト 4. /etc/yum.repos.d/*.repo
[ian@attic-f21 ~]$ cat /etc/yum.repos.d/fedora-updates.repo
[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$
basearch
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&
arch=$basearch
enabled=0
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates-source]
name=Fedora $releasever - Updates Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/SRPMS/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f$releasever&
arch=$basearch
enabled=0
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

YUM と RPM は、ローカル・データベースを使用してインストール済みのパッケージを判断します。ローカル・データベースに保管されたパッケージに関するメタデータは、有効化されたリポジトリーから取得されます。ローカル・データベースについて考慮しなければならないことはめったにありませんが、ローカル側に保管された情報を部分的に消去するには yum clean コマンドを使用し、有効にされた repo の情報をローカル・データベースに作成するには yum makecache を使用します。これらのコマンドを使用する可能性があるのは、例えば repo 構成を変更する場合です。


RPM パッケージの削除

パッケージを削除したい場合には、yumremove オプションか、または rpm-e オプションを使用することができます。リスト 5 は、rpm -e を使用した gcc-gfortran の削除操作のテストです。パッケージを削除できる場合には、出力が表示されません。

リスト 5. gcc-gfortran の削除テスト
[root@attic-f21 ~]# rpm -e --test gcc-gfortran
[

apt-get を使った Debian パッケージの削除をシミュレーションする場合とは異なり、RPM システムは自動的に追加されたパッケージに関する情報を維持しないため、パッケージと一緒に削除される依存関係を容易に調べる方法はありません。けれども、1 つのコマンドに複数のパッケージを削除対象として指定すると、依存関係を持たないパッケージが削除されてから、依存関係を持つパッケージが削除されます。

rpm を使用してパッケージを削除すると、パッケージをインストールする場合とは異なり、削除の確認を求めるプロンプトが出されることなく、パッケージが削除されます。ただし、他のパッケージに必要なパッケージを削除しようとすると、削除操作は実行されません。代わりに、リスト 6 に示すエラー・メッセージが表示されます。

リスト 6. rpm で依存パッケージを削除する場合
[root@attic-f21 ~]# rpm -e libquadmath-devel
error: Failed dependencies:
	libquadmath-devel = 4.9.2-6.fc21 is needed by (installed) gcc-gfortran-4.9.2-6.fc21.x86_64

一方、yum remove を使用する場合には、トランザクション・テストが行われた後にプロンプトが出されます。インストールされている他のパッケージが、削除しようとしているパッケージに依存している場合、YUM は、削除対象のパッケージと共に、そのパッケージに依存するパッケージも削除するかどうかを尋ねるプロンプトを出します (リスト 7 を参照)。

リスト 7. yum で依存パッケージを削除する場合
[root@attic-f21 ~]# yum remove libquadmath-devel
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package libquadmath-devel.x86_64 0:4.9.2-6.fc21 will be erased
--> Processing Dependency: libquadmath-devel = 4.9.2-6.fc21 for package: gcc-gfortran-4.9.2-6.fc21.x86_64
--> Running transaction check
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                 Arch         Version              Repository      Size
================================================================================
Removing:
 libquadmath-devel       x86_64       4.9.2-6.fc21         @updates        18 k
Removing for dependencies:
 gcc-gfortran            x86_64       4.9.2-6.fc21         @updates        18 M

Transaction Summary
================================================================================
Remove  1 Package (+1 Dependent package)

Installed size: 18 M
Is this ok [y/N]: n
Exiting on user command
Your transaction was saved, rerun it with:
 yum load-transaction /tmp/yum_save_tx.2015-07-27.22-01.amzaZh.yumtx

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

RPM をインストールする方法と削除する方法がわかったところで、今度は RPM パッケージを新しいレベルにアップグレードする方法を説明します。更新操作では、yum update を使用してシステム全体を更新することも、単一のパッケージ、またはワイルドカードを指定して更新することもできます。リスト 8 は、名前が「pop」で始まるすべてのパッケージを更新する方法です。アポストロフィーを使用して、シェルが「*」を展開しないようにしている点に注意してください。

リスト 8. yum update による更新
[root@attic-f21 ~]# yum update 'pop*'
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package poppler.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler.x86_64 0:0.26.2-9.fc21 will be an update
---> Package poppler-data.noarch 0:0.4.7-1.fc21 will be updated
---> Package poppler-data.noarch 0:0.4.7-2.fc21 will be an update
---> Package poppler-glib.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler-glib.x86_64 0:0.26.2-9.fc21 will be an update
---> Package poppler-utils.x86_64 0:0.26.2-3.fc21 will be updated
---> Package poppler-utils.x86_64 0:0.26.2-9.fc21 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================
 Package             Arch         Version             Repository     Size
==========================================================================
Updating:
 poppler             x86_64       0.26.2-9.fc21       updates       798 k
 poppler-data        noarch       0.4.7-2.fc21        updates       2.2 M
 poppler-glib        x86_64       0.26.2-9.fc21       updates       141 k
 poppler-utils       x86_64       0.26.2-9.fc21       updates       171 k

Transaction Summary
==========================================================================
Upgrade  4 Packages

Total download size: 3.2 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs reduced 3.1 M of updates to 315 k (89% saved)
(1/4): poppler-data-0.4.7-1.fc21_0.4.7-2.fc21.noarch. |  70 kB  00:00     
(2/4): poppler-0.26.2-3.fc21_0.26.2-9.fc21.x86_64.drp | 208 kB  00:00     
(3/4): poppler-glib-0.26.2-3.fc21_0.26.2-9.fc21.x86_6 |  36 kB  00:00     
(4/4): poppler-utils-0.26.2-9.fc21.x86_64.rpm         | 171 kB  00:00     
Finishing delta rebuilds of 3 package(s) (3.1 M)
--------------------------------------------------------------------------
Total                                        142 kB/s | 486 kB  00:03     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
  Updating   : poppler-data-0.4.7-2.fc21.noarch                       1/8 
  Updating   : poppler-0.26.2-9.fc21.x86_64                           2/8 
  Updating   : poppler-glib-0.26.2-9.fc21.x86_64                      3/8 
  Updating   : poppler-utils-0.26.2-9.fc21.x86_64                     4/8 
  Cleanup    : poppler-utils-0.26.2-3.fc21.x86_64                     5/8 
  Cleanup    : poppler-glib-0.26.2-3.fc21.x86_64                      6/8 
  Cleanup    : poppler-0.26.2-3.fc21.x86_64                           7/8 
  Cleanup    : poppler-data-0.4.7-1.fc21.noarch                       8/8 
  Verifying  : poppler-data-0.4.7-2.fc21.noarch                       1/8 
  Verifying  : poppler-glib-0.26.2-9.fc21.x86_64                      2/8 
  Verifying  : poppler-0.26.2-9.fc21.x86_64                           3/8 
  Verifying  : poppler-utils-0.26.2-9.fc21.x86_64                     4/8 
  Verifying  : poppler-data-0.4.7-1.fc21.noarch                       5/8 
  Verifying  : poppler-utils-0.26.2-3.fc21.x86_64                     6/8 
  Verifying  : poppler-glib-0.26.2-3.fc21.x86_64                      7/8 
  Verifying  : poppler-0.26.2-3.fc21.x86_64                           8/8 

Updated:
  poppler.x86_64 0:0.26.2-9.fc21                                          
  poppler-data.noarch 0:0.4.7-2.fc21                                      
  poppler-glib.x86_64 0:0.26.2-9.fc21                                     
  poppler-utils.x86_64 0:0.26.2-9.fc21                                    

Complete!

RPM ファイルの保管場所を知っている場合、または RPM ファイルをダウンロード済みの場合には、rpm コマンドを使ってそれらのファイルを更新することもできます。このコマンドでの更新操作はインストールする場合と同様ですが、-i オプションの代わりに、-U または -F オプションを使用します。この 2 つのオプションの違いは、-U オプションはパッケージが存在する場合はパッケージをアップグレードし、インストールされていない場合はパッケージをインストールする一方、-F オプションはインストール済みのパッケージのみをアップグレードつまり最新のものにするという点です。このことから、特にコマンドラインに RPM のリストが入力されている場合をはじめとして、-U オプションがよく使われています。このオプションを使用すれば、アンインストールされたパッケージはインストールされ、インストール済みのパッケージはアップグレードされます。その他のオプションには、進捗状態を表示するために度々使用される、-v (verbose の略) と -h (hash mark の略) の 2 つがあります。リスト 9 に、rpm コマンドを使って、cairo パッケージとその cairo-gobject 依存関係を更新する方法を示します。cairo の rpm は root のホーム・ディレクトリーにダウンロード済みですが、cairo-gobject パッケージについては更新ミラーのうちの 1 つから取得しています。

リスト 9. rpm によるパッケージの更新
[root@attic-f21 ~]# ls *.rpm
cairo-1.14.2-1.fc21.x86_64.rpm
[root@attic-f21 ~]# rpm -Uvh *.rpm \
> http://download.fedoraproject.org/pub/fedora/linux/updates/21/\
> x86_64/c/cairo-gobject-1.14.2-1.fc21.x86_64.rpm
Retrieving http://download.fedoraproject.org/pub/fedora/linux/updates/21/x86_64/c/cairo-g
object-1.14.2-1.fc21.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:cairo-1.14.2-1.fc21              ################################# [ 25%]
   2:cairo-gobject-1.14.2-1.fc21      ################################# [ 50%]
Cleaning up / removing...
   3:cairo-gobject-1.13.1-0.4.git337ab################################# [ 75%]
   4:cairo-1.13.1-0.4.git337ab1f.fc21 ################################# [100%]

RPM パッケージに対する問い合わせ

これまでのサンプル・コードに記載されていたように、rpm コマンドを使って rpm をインストールする場合には、パッケージ・ファイルの完全な名前 (または URL) を使用しなければなりません (gcc-gfortran-4.9.2-6.fc21.x86_64.rpm など)。その一方、yum を使用する場合には、rpm をインストールするにも、削除するにも、必要なのはパッケージ名 (例えば、gcc-gfortran) だけです。APT の場合と同じく、RPM はインストール済みパッケージの内部データベースを維持するため、パッケージ名を使用してインストール済みパッケージを操作することができます。このセクションでは、rpm コマンドの -q (query の略) オプション、または関連する yum クエリーを使って、このデータベースから取得できる情報を調べます。

例を提供するために、gcc-gfortran パッケージは再インストールします。

基本的なクエリーは、パッケージがインストールされているかどうかを尋ねて、インストールされている場合にはパッケージのバージョンを尋ねるというだけの単純なものです。そこに -i オプションを追加すると、パッケージに関する情報が表示されます。パッケージをインストール、アップグレード、または削除するには root 権限が必要ですが、rpm データベースに対するクエリーは、root 以外のユーザーでも実行できることに注意してください。

リスト 10. gcc-gfortran に関する情報の表示
[ian@attic-f21 ~]$ yum list gcc-gfortran
Loaded plugins: langpacks
Installed Packages
gcc-gfortran.x86_64                    4.9.2-6.fc21                     @updates
Available Packages
gcc-gfortran.i686                      4.9.2-6.fc21                     updates 

[ian@attic-f21 ~]$ rpm -q gcc-gfortran
gcc-gfortran-4.9.2-6.fc21.x86_64

[ian@attic-f21 ~]$ yum info gcc-gfortran
Loaded plugins: langpacks
Installed Packages
Name        : gcc-gfortran
Arch        : x86_64
Version     : 4.9.2
Release     : 6.fc21
Size        : 18 M
Repo        : installed
From repo   : updates
Summary     : Fortran support
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and
            : LGPLv2+ and BSD
Description : The gcc-gfortran package provides support for compiling Fortran
            : programs with the GNU Compiler Collection.

Available Packages
Name        : gcc-gfortran
Arch        : i686
Version     : 4.9.2
Release     : 6.fc21
Size        : 7.5 M
Repo        : updates/21/x86_64
Summary     : Fortran support
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and
            : LGPLv2+ and BSD
Description : The gcc-gfortran package provides support for compiling Fortran
            : programs with the GNU Compiler Collection.

[ian@attic-f21 ~]$ rpm -qi gcc-gfortran
Name        : gcc-gfortran
Version     : 4.9.2
Release     : 6.fc21
Architecture: x86_64
Install Date: Mon 27 Jul 2015 09:36:14 PM EDT
Group       : Development/Languages
Size        : 19126083
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Signature   : RSA/SHA256, Fri 13 Feb 2015 09:02:15 PM EST, Key ID 89ad4e8795a43f54
Source RPM  : gcc-4.9.2-6.fc21.src.rpm
Build Date  : Thu 12 Feb 2015 07:40:58 AM EST
Build Host  : buildhw-08.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://gcc.gnu.org
Summary     : Fortran support
Description :
The gcc-gfortran package provides support for compiling Fortran
programs with the GNU Compiler Collection.

詳細な情報が示されているリストのほうには、RPM パッケージに関連付けることのできるタグのいくつかが示されています。上記を見るとわかるように、rpmyum とでは、表示する情報とフォーマットが多少異なります。このチュートリアルでは一貫して標準コマンド・オプションによって表示される基本出力に従うので、rpm --queryformat オプションを使用してカスタム・クエリー出力を作成したい場合には man ページを参照してください。また、お使いの rpm バージョンでサポートされているすべてのタグを調べるには、rpm --querytags を実行してみてください。

リスト 10 に示されているように、yum によってインストール済みのパッケージと使用可能なパッケージをリストアップすることができます。ここでは x86_64 (64-bit) 版をインストールしましたが、i686 (32-bit) 版を使用することもできます。また、更新を入手可能なパッケージをリストアップすることや、他の特徴を持つパッケージ (例えば、サポートが中止されたパッケージや、最近リポジトリーに追加されたパッケージなど) をリストアップすることもできます。さらに、パッケージを検索するのにも yum を使用することができます。リスト 11 を見ると、texmacs パッケージはインストールされていないこと、ただし fedora リポジトリーから入手できることが示されています。「texmacs」を検索すると、一致結果として 4 つのパッケージが表示されます。TeXmacs* パッケージが検出された理由はすぐにわかるはずです。pydot パッケージも同じく一致結果として表示されている理由を調べるには、「yum info pydot」と入力してください。

リスト 11. texmacs に関する情報の表示
[ian@attic-f21 ~]$ yum list texmacs
Loaded plugins: langpacks
Available Packages
TeXmacs.x86_64                      1.0.7.19-4.fc20                       fedora
[ian@attic-f21 ~]$ yum search texmacs
Loaded plugins: langpacks
============================= N/S matched: texmacs =============================
TeXmacs-devel.i686 : Development files for TeXmacs
TeXmacs-devel.x86_64 : Development files for TeXmacs
sympy-texmacs.noarch : TeXmacs integration for sympy
texmacs-fedora-fonts.noarch : Fonts for TeXmacs
TeXmacs.x86_64 : Structured WYSIWYG scientific text editor

  Name and summary matches only, use "search all" for everything.

以降に記載するクエリーの例では、広範なオプションがある rpm を主に使用します。記載する例の多くでは yum を使うこともできます。yum には、基本的な rpm オプションにはない機能があります。詳細については、man ページを参照してください。

RPM パッケージとその中に含まれているファイルの表示

パッケージに含まれているファイルや、特定のファイルがどのパッケージに属しているかを調べなければならないことはよくあります。gcc-gfortran パッケージに含まれるファイルを表示するには、-ql オプションを使用します (リスト 12 を参照)。このパッケージには多数のファイルが含まれているので、以下に記載する出力にはその一部だけを示します。

リスト 12. gcc-gfortran パッケージに含まれるファイルの表示
[ian@attic-f21 ~]$ rpm -ql gcc-gfortran
/usr/bin/f95
/usr/bin/gfortran
/usr/lib/gcc
/usr/lib/gcc/x86_64-redhat-linux
/usr/lib/gcc/x86_64-redhat-linux/4.9.2
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libcaf_single.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.so
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortranbegin.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.f90
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.h
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.mod
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib_kinds.mod
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libcaf_single.a
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.so
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.spec
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortranbegin.a
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.9.2
/usr/libexec/gcc/x86_64-redhat-linux/4.9.2/f951
/usr/share/doc/gcc-gfortran
/usr/share/doc/gcc-gfortran/ChangeLog-2002.bz2
/usr/share/doc/gcc-gfortran/ChangeLog-2002.libgfortran.bz2
...
usr/share/doc/gcc-gfortran/ChangeLog.bz2
/usr/share/doc/gcc-gfortran/ChangeLog.libgfortran.bz2
/usr/share/doc/gcc-gfortran/ChangeLog.ptr.bz2
/usr/share/info/gfortran.info.gz
/usr/share/man/man1/gfortran.1.gz

クエリーに -c オプションを追加すると、表示されるファイルを構成ファイルだけに制限することができます。同様に、-d オプションを追加すると、マニュアルのファイルだけが表示されます。

パッケージ・ファイルの問い合わせ

上記のパッケージ・コマンドは、RPM データベースに対してインストール済みパッケージを問い合わせています。その一方、ダウンロードしただけのパッケージに関して同じような情報が必要な場合には、クエリーで (パッケージ・ファイルに対して) -p オプションと (パッケージをインストールする場合と同じく) パッケージ・ファイルの名前を指定します。リスト 13 では、前にダウンロードした 2 つの vim パッケージに関する情報を求めて、クエリーを実行しています。このクエリーを root として実行した理由は、ファイルが root のホーム・ディレクトリーにあったからにすぎません。他に追加できるクエリー・オプションには、ファイルを一覧表示する -l や、情報を表示する -i などがあります。

リスト 13. 2 つの vim パッケージに関するパッケージ・ファイル情報の表示
[ian@attic-f21 ~]$ # Query vim packages
[ian@attic-f21 ~]$ rpm -qp *.rpm
vim-common-7.4.475-2.fc21.x86_64
vim-enhanced-7.4.475-2.fc21.x86_64
[ian@attic-f21 ~]$ # Query vim configuration files
[ian@attic-f21 ~]$ rpm -qpc *.rpm
/etc/vimrc
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh

インストールされているすべてのパッケージの問い合わせ

-a オプションは、インストールされているすべてのパッケージにクエリーを適用します。このオプションを指定すると大量の出力が生成される可能性があるため、大抵は 1 つ以上のフィルターと一緒に使用します。例えば、リストをソートする sort、ページを移動する more または less、パッケージまたはファイルのカウントを取得する wc、名前に確信が持てないパッケージを検索する grep などのフィルターです。リスト 14 では、以下のクエリーを行っています。

  1. システム上の全パッケージをソートしたリスト
  2. システム上のパッケージの合計数
  3. システム上の全パッケージに含まれるファイルの合計数
  4. RPM によってインストールされたマニュアル・ファイルの合計数
  5. 名前に「gcc-gfortran」(大/小文字の区別なし) が含まれる全パッケージの検索
リスト 14. すべてのパッケージに対するクエリー
[ian@attic-f21 ~]$ rpm -qa | sort | more
aaajohan-comfortaa-fonts-2.004-4.fc21.noarch
aalib-libs-1.4.0-0.26.rc5.fc21.x86_64
abattis-cantarell-fonts-0.0.16-2.fc21.noarch
abrt-2.3.0-8.fc21.x86_64
abrt-addon-ccpp-2.3.0-8.fc21.x86_64
abrt-addon-kerneloops-2.3.0-8.fc21.x86_64
abrt-addon-pstoreoops-2.3.0-8.fc21.x86_64
abrt-addon-python-2.3.0-8.fc21.x86_64
abrt-addon-python3-2.3.0-8.fc21.x86_64
abrt-addon-vmcore-2.3.0-8.fc21.x86_64
abrt-addon-xorg-2.3.0-8.fc21.x86_64
abrt-cli-2.3.0-8.fc21.x86_64
abrt-dbus-2.3.0-8.fc21.x86_64
abrt-desktop-2.3.0-8.fc21.x86_64
abrt-gui-2.3.0-8.fc21.x86_64
abrt-gui-libs-2.3.0-8.fc21.x86_64
abrt-java-connector-1.1.0-2.fc21.x86_64
abrt-libs-2.3.0-8.fc21.x86_64
abrt-plugin-bodhi-2.3.0-8.fc21.x86_64
abrt-python-2.3.0-8.fc21.x86_64
abrt-python3-2.3.0-8.fc21.x86_64
abrt-retrace-client-2.3.0-8.fc21.x86_64
abrt-tui-2.3.0-8.fc21.x86_64
--More--
[[ian@attic-f21 ~]$ rpm -qa | wc -l
1540
[ian@attic-f21 ~]$ rpm -qal | wc -l
179111
[ian@attic-f21 ~]$ rpm -qad | wc -l
47711
[ian@attic-f21 ~]$ rpm -qa | grep -i fortran
gcc-gfortran-4.9.2-6.fc21.x86_64
libgfortran-4.9.2-6.fc21.x86_64

rpm -qa を使用することで、複数のシステムを容易に管理できるようになります。ソートされた出力をあるマシン上のファイルにリダイレクトし、同じ操作を別のマシンでも行えば、diff プログラムを使って差分を検出することができます。

特定のファイルが含まれるパッケージを検索する

すべてのパッケージと、パッケージに含まれるすべてのファイルを一覧表示することができるとすれば、ある特定のファイルを所有するパッケージを検索するために必要な情報はすべて揃っていることになります。その一方で rpm コマンドには、インストール済みのファイルを所有するパッケージを見つけるために指定できる -f(または --file) オプションがあります。例えば前に記載した 2 つの vim パッケージのうち、どちらのパッケージに vim コマンドがあるのかを知りたいとします。その場合には、ファイルのフル・パスを指定する必要があります。リスト 15 を見ると、which コマンドを使用して vim コマンドへのフル・パスを取得する方法、そしてこの出力を rpm -qf コマンドの入力として使うための秘訣がわかります。`which vim` は、バックティック記号で括られていることに注意してください。Bash シェルでは、バックティック記号の代わりに $(which vim) を使用することができます。

リスト 15. vim 実行可能ファイルを提供するパッケージの検索
[ian@attic-f21 ~]$ which vim
/usr/bin/vim
[ian@attic-f21 ~]$ rpm -qf `which vim`
vim-enhanced-7.4.475-2.fc21.x86_64
[ian@attic-f21 ~]$ rpm -qf $(which vim)
vim-enhanced-7.4.475-2.fc21.x86_64

RPM の依存関係

前に、libquadmath-devel パッケージを消去しようとしても、依存関係が原因で消去できない例を記載しました。RPM パッケージにはファイルだけでなく、他のパッケージが依存する可能性のある任意の機能が含まれていることがあります。

前述の例でもそうだったように、大抵、依存関係の問題は何とか解決します。複数のパッケージを一度にまとめてインストールしなければならない場合、そのうちのいくつかが他のパッケージに依存している可能性があるとしたら、単純に yum を使用するか、あるいは別の方法として、rpm -Uvh コマンドに全パッケージのリストを指定すると、このコマンドが依存関係を分析して正しい順序でインストールしてくれます。

パッケージをインストールまたは消去しようとしてエラー・メッセージを受け取る他にも、パッケージに必要な、またはパッケージが依存するファイルや機能を見つける方法はいくつかあります。

rpm コマンドには、インストールされているパッケージやパッケージに含まれるファイルを問い合わせ、依存する機能や必要な機能を見つけるためのオプションがあります。それが、--requires オプションです。このオプションは、-R に省略することもできます。リスト 16 に、gcc-gfortran が必要とする機能が示されています。RPM データベースではなく、パッケージ・ファイルに対してクエリーを実行する場合には、-p オプションを追加して完全な RPM ファイル名を指定してください。

リスト 16. gcc-gfortran に必要な機能の検索
[ian@attic-f21 ~]$ rpm -qR gcc-gfortran
/bin/sh
/bin/sh
/sbin/install-info
/sbin/install-info
gcc = 4.9.2-6.fc21
ld-linux-x86-64.so.2()(64bit)
ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgfortran = 4.9.2-6.fc21
libgfortran.so.3()(64bit)
libgmp.so.10()(64bit)
libm.so.6()(64bit)
libmpc.so.3()(64bit)
libmpfr.so.4()(64bit)
libquadmath = 4.9.2-6.fc21
libquadmath-devel = 4.9.2-6.fc21
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
rtld(GNU_HASH)

機能と、その機能を提供するパッケージとを突き合わせるとなると、多少手が込んできます。そこで役立つのが、deplist オプションを指定した yum コマンドです。このコマンドに、バージョン番号を含まないパッケージ名を渡すだけで、既知のバージョンのリストが表示されます。リスト 17 に、インストールされている gcc-gfortran のバージョンだけの依存関係リストを取得する方法を示します。

リスト 17. yum deplist を使用した gcc-gfortran の依存関係の検索
[ian@attic-f21 ~]$ rpm -q gcc-gfortran
gcc-gfortran-4.9.2-6.fc21.x86_64
[ian@attic-f21 ~]$ yum deplist $(rpm -q gcc-gfortran)
Loaded plugins: langpacks
package: gcc-gfortran.x86_64 4.9.2-6.fc21
  dependency: /bin/sh
   provider: bash.x86_64 4.3.39-1.fc21
  dependency: /sbin/install-info
   provider: info.x86_64 5.2-5.fc21
  dependency: gcc = 4.9.2-6.fc21
   provider: gcc.x86_64 4.9.2-6.fc21
  dependency: ld-linux-x86-64.so.2()(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: libgfortran = 4.9.2-6.fc21
   provider: libgfortran.x86_64 4.9.2-6.fc21
   provider: libgfortran.i686 4.9.2-6.fc21
  dependency: libgfortran.so.3()(64bit)
   provider: libgfortran.x86_64 4.9.2-6.fc21
  dependency: libgmp.so.10()(64bit)
   provider: gmp.x86_64 1:6.0.0-9.fc21
  dependency: libm.so.6()(64bit)
   provider: glibc.x86_64 2.20-8.fc21
  dependency: libmpc.so.3()(64bit)
   provider: libmpc.x86_64 1.0.2-3.fc21
  dependency: libmpfr.so.4()(64bit)
   provider: mpfr.x86_64 3.1.2-8.fc21
  dependency: libquadmath = 4.9.2-6.fc21
   provider: libquadmath.x86_64 4.9.2-6.fc21
   provider: libquadmath.i686 4.9.2-6.fc21
  dependency: libquadmath-devel = 4.9.2-6.fc21
   provider: libquadmath-devel.x86_64 4.9.2-6.fc21
   provider: libquadmath-devel.i686 4.9.2-6.fc21
  dependency: libz.so.1()(64bit)
   provider: zlib.x86_64 1.2.8-7.fc21
  dependency: rtld(GNU_HASH)
   provider: glibc.x86_64 2.20-8.fc21
   provider: glibc.i686 2.20-8.fc21

上記のリストには、機能ごとに、その機能を提供可能なパッケージも示されています。ご覧のように、ほとんどの依存関係の場合、それを提供するパッケージのレベルは 1 つだけではありません。例えば libquadmath は、libquadmath パッケージの 32-bit 版または 64-bit 版のいずれかから提供することができます。この出力は、少し独創力を効かせたフィルタリングによってパッケージ名だけのリストに縮小することができます (リスト 18 を参照)。

リスト 18. パッケージ名のみをリストするように縮小された yum deplist の出力
[ian@attic-f21 ~]$ yum deplist $(rpm -q gcc-gfortran) | awk '/provider:/ { print $2 }'|sort|uniq
bash.x86_64
gcc.x86_64
glibc.i686
glibc.x86_64
gmp.x86_64
info.x86_64
libgfortran.i686
libgfortran.x86_64
libmpc.x86_64
libquadmath-devel.i686
libquadmath-devel.x86_64
libquadmath.i686
libquadmath.x86_64
mpfr.x86_64
zlib.x86_64

どのパッケージをインストールする必要があるのかだけを知りたい場合は、yum install を実行すれば、インストールの推奨案を受け入れるかどうかを尋ねるプロンプトが出される前に、パッケージのリストを確認することができます。

パッケージに必要な機能を調べる場合とは別に、特定の機能を提供するパッケージを見つけなければならない場合もあります。特定のファイルを所有するパッケージを検索する方法は前に説明しましたが、今度はリスト 19 に、rpm または yum を使用して、ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) 機能を提供するパッケージを検索する方法を示します。この機能を提供するインストール済みパッケージに関する情報の他に、YUM はリポジトリー内にあるパッケージまたはバージョンも示します。具体的には、fedora リポジトリーには元の 2.20-5 バージョンがある一方、更新された 2.20-8 バージョンは updates リポジトリーから入手することができます。

リスト 19. ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) 機能を提供するパッケージの検索
[ian@attic-f21 ~]$ rpm -q --whatprovides
'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)'
glibc-2.20-8.fc21.x86_64
[ian@attic-f21 ~]$ yum whatprovides 'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)'
Loaded plugins: langpacks
glibc-2.20-5.fc21.x86_64 : The GNU libc libraries
Repo        : fedora
Matched from:
Provides    : ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)



glibc-2.20-8.fc21.x86_64 : The GNU libc libraries
Repo        : updates
Matched from:
Provides    : ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)



glibc-2.20-8.fc21.x86_64 : The GNU libc libraries
Repo        : @updates
Matched from:
Provides    : ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)

RPM パッケージ・ファイルの完全性

RPM パッケージには、その完全性を確実にするために MD5 や SHA1 などのダイジェストが組み込まれています。通常、これらのダイジェストにはデジタル署名が付与されています。デジタル署名付きのパッケージを検証するには、公開鍵が必要です。RPM パッケージ・ファイルの完全性を確認するには、rpm--checksig (省略形は -K) オプションを使用します。さらに -v オプションを追加すると、詳細な出力が表示されるので参考になります。リスト 20 に、vim-enhanced RPM の完全性を検証する例を記載します。

リスト 20. vim-enhanced パッケージ・ファイルの完全性の確認
[ian@attic-f21 ~]$ rpm -vK vim-enhanced-7.4.475-2.fc21.x86_64.rpm
vim-enhanced-7.4.475-2.fc21.x86_64.rpm:
    Header V3 RSA/SHA256 Signature, key ID 95a43f54: OK
    Header SHA1 digest: OK (696e492a4ee7a672cb3851d220de804dce0c9484)
    V3 RSA/SHA256 Signature, key ID 95a43f54: OK
    MD5 digest: OK (6bc225b37f43e7e7075668d04a73b9ea)

リスト 21 に示すような出力行が表示されることがあります。これは、署名付きパッケージがある一方、必要な公開鍵が RPM データベース内にないことを意味します。RPM のバージョンが異なると、この検証を異なる形で表示する場合があります。

リスト 21
[ian@attic-f21 ~]$ rpm -K audacity-freeworld-2.1.1-1.fc21.x86_64.rpm 
audacity-freeworld-2.1.1-1.fc21.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: 
(MD5) PGP#6446d859) 
[ian@attic-f21 ~]$ rpm -vK audacity-freeworld-2.1.1-1.fc21.x86_64.rpm 
audacity-freeworld-2.1.1-1.fc21.x86_64.rpm:
    Header V3 RSA/SHA256 Signature, key ID 6446d859: NOKEY
    Header SHA1 digest: OK (231ac5339a8084ba84a4a25d2a996f5d52434935)
    V3 RSA/SHA256 Signature, key ID 6446d859: NOKEY
    MD5 digest: OK (188d9cc3bfa2ac9b87483e387c8e74b6)

このケースでは、rpmfusion リポジトリーから audacity パッケージをダウンロードしましたが、私のシステムにはこのリポジトリーや鍵をインストールしてはいません。

署名付きのパッケージを署名に照らし合わせて検証したい場合には、該当する署名ファイルを見つけて、そのファイルを RPM データベースにインポートする必要があります。その場合、最初に鍵をダウンロードして、そのフィンガープリントをチェックしてから、rpm --import コマンドを使ってインポートしてください。詳細は RPM の man ページに記載されています。また、RPM ホーム・ページには署名付きバイナリーに関する詳細も記載されています (リンクについては「参考文献」を参照)。


インストール済みパッケージの検証

rpm の完全性の確認と同じく、rpm -V を使用することで、インストール済みファイルの完全性を確認することも可能です。このコマンドにより、ファイルが rpm からインストールされた時点から変更されていないことを確認することができます。リスト 22 に示すように、パッケージに完全性の問題がなければ、このコマンドからの出力はありませんが、-v オプションを追加した場合にはもっと詳細な出力が表示されます。

リスト 22. インストール済み vim-common パッケージの検証
[ian@attic-f21 ~]$ rpm -V vim-common

ここで、root ユーザーになって、vim-common パッケージの内容を変更するために /usr/bin/xxd を削除し、/usr/share/vim/vim74/syntax/bindzone.vim を /bin/bash で置き換えてください。この変更を加えた後にもう一度パッケージを検証すると、リスト 23 の結果となります。

リスト 23. vim-common パッケージの変更
[root@attic-f21 ~]# rpm -qf /usr/bin/xxd /usr/share/vim/vim74/syntax/bindzone.vim
vim-common-7.4.475-2.fc21.x86_64
vim-common-7.4.475-2.fc21.x86_64
[root@attic-f21 ~]# rm /usr/bin/xxd
rm: remove regular file ‘/usr/bin/xxd’? y
[root@attic-f21 ~]# cp /bin/bash /usr/share/vim/vim74/syntax/bindzone.vim
cp: overwrite ‘/usr/share/vim/vim74/syntax/bindzone.vim’? y
[root@attic-f21 ~]# rpm -V vim-common
missing     /usr/bin/xxd
S.5....T.    /usr/share/vim/vim74/syntax/bindzone.vim

上記の出力から、/usr/share/vim/vim74/syntax/bindzone.vim ファイルが MD5 チェックサム、ファイル・サイズ、そして mtime テストに失敗したことがわかります。この問題を解決する 1 つの方法は、パッケージを削除してからインストールし直すことですが、vim-common パッケージに依存しているパッケージや、インストールされていて問題のないままのパッケージが他にもあります。これを解決する方法は、rpm--force オプション、または yumreinstall 関数を使用して、パッケージを強制的に再インストールすることです。リスト 24 では、yum を使って再インストールした後、パッケージに問題がなくなり、削除されたファイルが回復されたことを検証しています。

リスト 23. vim-common パッケージの再インストール
[root@attic-f21 ~]# yum reinstall vim-common
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package vim-common.x86_64 2:7.4.475-2.fc21 will be reinstalled
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package           Arch          Version                    Repository     Size
================================================================================
Reinstalling:
 vim-common        x86_64        2:7.4.475-2.fc21           fedora        5.9 M

Transaction Summary
================================================================================
Reinstall  1 Package

Total download size: 5.9 M
Installed size: 21 M
Is this ok [y/d/N]: y
Downloading packages:
vim-common-7.4.475-2.fc21.x86_64.rpm                        | 5.9 MB  00:03     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction (shutdown inhibited)
  Installing : 2:vim-common-7.4.475-2.fc21.x86_64                           1/1 
  Verifying  : 2:vim-common-7.4.475-2.fc21.x86_64                           1/1 

Installed:
  vim-common.x86_64 2:7.4.475-2.fc21                                            

Complete!
[root@attic-f21 ~]# rpm -V vim-common
[root@attic-f21 ~]# ls /usr/bin/xxd
/usr/bin/xxd

さらに強制的に行う必要がある場合

通常、パッケージ管理システムはパッケージを順序正しく維持します。けれども、パッケージの重要な部分である何らかのファイルを思いがけずに削除してしまった場合には (パッケージを削除しないで再インストールしても、この問題は修正されません)、パッケージを削除してから再インストールしなければなりません。そのような場合、既存のコピーを削除して再インストールする際に、そのコピーに依存するすべてのパッケージをアンインストールしてから再インストールするという作業は行いたくないはずです。そこで利用できるのが、rpm コマンドの --nodeps オプションです。このオプションを指定すると、パッケージを削除する際に依存関係のチェックは省略されます。リスト 25 に一例として、vim-common パッケージに含まれる /usr/bin/xxd ファイルを誤って削除してしまった場合にパッケージを更新する方法を示します。

リスト 25. rpm によるパッケージの更新
[root@attic-f21 ~]# rm /usr/bin/xxd
rm: remove regular file ‘/usr/bin/xxd’? y
[root@attic-f21 ~]# # Oops! we needed that file
[root@attic-f21 ~]# rpm -Fvh vim-common-7.4.475-2.fc21.x86_64.rpm 
[root@attic-f21 ~]# ls /usr/bin/xxd
ls: cannot access /usr/bin/xxd: No such file or directory
[root@attic-f21 ~]# # Oh! Freshening the package didn't replace the missing file
[root@attic-f21 ~]# rpm -e vim-common
error: Failed dependencies:
	vim-common = 2:7.4.475-2.fc21 is needed by (installed) vim-enhanced-2:7.4.475-2.fc21.x86_64
[root@attic-f21 ~]# # Can't remove vim-common because vim-enhanced needs it
[root@attic-f21 ~]# rpm -e --nodeps vim-common
warning: file /usr/bin/xxd: remove failed: No such file or directory
[root@attic-f21 ~]# # Bypassing the dependency check allowed removal
[root@attic-f21 ~]# # No surprise that /usr/bin/xxd was not found
[root@attic-f21 ~]# # Update (or install) vim-common again
[root@attic-f21 ~]# rpm -Uvh vim-common-7.4.475-2.fc21.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:vim-common-2:7.4.475-2.fc21      ################################# [100%]
[root@attic-f21 ~]# ls /usr/bin/xxd
/usr/bin/xxd
[root@attic-f21 ~]# # And /usr/bin/xxd is back

これで、問題が発生して通常の更新プロセスが失敗した場合に、パッケージを更新または修正する方法がわかったはずです。注意する点として、依存関係のチェックは RPM をインストールする際にも省略することができますが、一般的に言って、それは賢明なことではありません。


リポジトリーからの RPM のダウンロード

yum は自動的にリポジトリーからパッケージを取得するものの、例えば RPM をネットワークに接続されていないシステムにインストールする場合や、RPM の内容を検討したいなどの理由から、自分で RPM をダウンロードして保存しなければならないこともあります。そのような場合に使用するのが、yumdownloader コマンドです (リスト 26 を参照)。以下の例では、gcc-gfortran.x86_64 パッケージはすでにインストールされているため、追加でダウンロードされるパッケージはありません。

リスト 26. gcc-gfortran パッケージのダウンロード
[ian@attic-f21 ~]$ yumdownloader --resolve gcc-gfortran.x86_64
Loaded plugins: langpacks
--> Running transaction check
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be reinstalled
--> Finished Dependency Resolution
gcc-gfortran-4.9.2-6.fc21.x86_64.rpm                       | 7.7 MB  00:04

yumdownloader--resolve オプションによって、他の必要なパッケージもダウンロードされます。これについて説明するために、リスト 27 に gcc-gfortran をダウンロードする際に --resolve オプションを使用することでダウンロードしたファイルを示します。アーキテクチャー (x86_64 または i686) は指定しなかったので、デフォルトでダウンロードされるのは i686 版であることに注意してください。

リスト 27. gcc-gfortran パッケージのダウンロード
[ian@attic-f21 ~]$ yumdownloader --resolve gcc-gfortran
Loaded plugins: langpacks
updates/21/x86_64/metalink                                 |  14 kB  00:00     
--> Running transaction check
---> Package gcc-gfortran.i686 0:4.9.2-6.fc21 will be installed
--> Processing Dependency: libz.so.1(ZLIB_1.2.3.3) for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libz.so.1 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libmpfr.so.4 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libmpc.so.3 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libm.so.6 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libgmp.so.10 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libgfortran.so.3 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libdl.so.2(GLIBC_2.1) for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libdl.so.2(GLIBC_2.0) for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libdl.so.2 for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libc.so.6(GLIBC_2.4) for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: ld-linux.so.2(GLIBC_2.3) for package: gcc-gfortran-4.9.2-6.fc21.i686
--> Processing Dependency: ld-linux.so.2 for package: gcc-gfortran-4.9.2-6.fc21.i686
---> Package gcc-gfortran.x86_64 0:4.9.2-6.fc21 will be reinstalled
--> Running transaction check
---> Package glibc.i686 0:2.20-8.fc21 will be installed
--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.20-8.fc21.i686
--> Processing Dependency: libfreebl3.so for package: glibc-2.20-8.fc21.i686
---> Package gmp.i686 1:6.0.0-9.fc21 will be installed
--> Processing Dependency: libstdc++.so.6(GLIBCXX_3.4.11) for package: 1:gmp-6.0.0-9.fc21.i686
--> Processing Dependency: libstdc++.so.6(GLIBCXX_3.4) for package: 1:gmp-6.0.0-9.fc21.i686
--> Processing Dependency: libstdc++.so.6(CXXABI_1.3) for package: 1:gmp-6.0.0-9.fc21.i686
--> Processing Dependency: libstdc++.so.6 for package: 1:gmp-6.0.0-9.fc21.i686
--> Processing Dependency: libgcc_s.so.1(GCC_3.0) for package: 1:gmp-6.0.0-9.fc21.i686
--> Processing Dependency: libgcc_s.so.1 for package: 1:gmp-6.0.0-9.fc21.i686
---> Package libgfortran.i686 0:4.9.2-6.fc21 will be installed
--> Processing Dependency: libquadmath.so.0(QUADMATH_1.0) for package: libgfortran-4.9.2-6.fc21.i686
--> Processing Dependency: libquadmath.so.0 for package: libgfortran-4.9.2-6.fc21.i686
---> Package libmpc.i686 0:1.0.2-3.fc21 will be installed
---> Package mpfr.i686 0:3.1.2-8.fc21 will be installed
---> Package zlib.i686 0:1.2.8-7.fc21 will be installed
--> Running transaction check
---> Package libgcc.i686 0:4.9.2-6.fc21 will be installed
---> Package libquadmath.i686 0:4.9.2-6.fc21 will be installed
---> Package libstdc++.i686 0:4.9.2-6.fc21 will be installed
---> Package nss-softokn-freebl.i686 0:3.19.2-1.0.fc21 will be installed
--> Finished Dependency Resolution
(1/12): gcc-gfortran-4.9.2-6.fc21.i686.rpm                 | 7.5 MB  00:04     
(2/12): glibc-2.20-8.fc21.i686.rpm                         | 4.1 MB  00:02     
(3/12): gmp-6.0.0-9.fc21.i686.rpm                          | 420 kB  00:01     
(4/12): libgcc-4.9.2-6.fc21.i686.rpm                       |  97 kB  00:00     
(5/12): libgfortran-4.9.2-6.fc21.i686.rpm                  | 270 kB  00:00     
(6/12): gcc-gfortran-4.9.2-6.fc21.x86_64.rpm               | 7.7 MB  00:09     
(7/12): libmpc-1.0.2-3.fc21.i686.rpm                       |  56 kB  00:01     
(8/12): libquadmath-4.9.2-6.fc21.i686.rpm                  | 243 kB  00:00     
(9/12): mpfr-3.1.2-8.fc21.i686.rpm                         | 211 kB  00:00     
(10/12): libstdc++-4.9.2-6.fc21.i686.rpm                   | 314 kB  00:00     
(11/12): nss-softokn-freebl-3.19.2-1.0.fc21.i686.rpm       | 195 kB  00:00     
(12/12): zlib-1.2.8-7.fc21.i686.rpm                        |  97 kB  00:00

ダウンロードしたパッケージのリストを、リスト 18 で作成したリストに含まれる 64-bit のエントリーと比較してください。


rpm2cpio の使用

RPM をインストールするのではなく、ダウンロードしてパッケージの内容を調べる必要がある場合には、rpm2cpio コマンドを使用してパッケージの内容を cpio アーカイブに変換すれば、その後に cpio コマンドを使って個々のファイル、またはパッケージに含まれるすべてのファイルを解凍することができます。リスト 28 では、この処理を gcc-gfortran パッケージに対して行った後、パッケージから解凍されたファイル (およびディレクトリー) の一部を表示しています。rpm2cpio および cpio コマンドについての詳細は、それぞれの man ページを参照してください。

リスト 28. rpm2cpio による gcc-gfortran-selinux パッケージの解凍
[[ian@attic-f21 ~]$ mkdir gcc-gfortran
[ian@attic-f21 ~]$ cd gcc-gfortran
[ian@attic-f21 gcc-gfortran]$ rpm2cpio ../gcc-gfortran-4.9.2-6.fc21.x86_64.rpm | cpio -idv
./usr/bin/f95
./usr/bin/gfortran
./usr/lib/gcc
./usr/lib/gcc/x86_64-redhat-linux
./usr/lib/gcc/x86_64-redhat-linux/4.9.2
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/32
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libcaf_single.a
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.a
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortran.so
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/32/libgfortranbegin.a
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.f90
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.h
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.mod
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib_kinds.mod
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/libcaf_single.a
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.so
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortran.spec
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/libgfortranbegin.a
./usr/libexec/gcc
./usr/libexec/gcc/x86_64-redhat-linux
./usr/libexec/gcc/x86_64-redhat-linux/4.9.2
./usr/libexec/gcc/x86_64-redhat-linux/4.9.2/f951
./usr/share/doc/gcc-gfortran
./usr/share/doc/gcc-gfortran/ChangeLog-2002.bz2
./usr/share/doc/gcc-gfortran/ChangeLog-2002.libgfortran.bz2
...
./usr/share/doc/gcc-gfortran/ChangeLog.bz2
./usr/share/doc/gcc-gfortran/ChangeLog.libgfortran.bz2
./usr/share/doc/gcc-gfortran/ChangeLog.ptr.bz2
./usr/share/info/gfortran.info.gz
./usr/share/man/man1/gfortran.1.gz
37373 blocks
[ian@attic-f21 gcc-gfortran]$ find . | head
.
./usr
./usr/lib
./usr/lib/gcc
./usr/lib/gcc/x86_64-redhat-linux
./usr/lib/gcc/x86_64-redhat-linux/4.9.2
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/libcaf_single.a
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.h
./usr/lib/gcc/x86_64-redhat-linux/4.9.2/finclude/omp_lib.mod

RPM の検索

前に説明したように、YUM が提供する検索機能は、パッケージの説明とパッケージ名を検索します。まだインストールしていないプログラムが含まれるパッケージを検索するには、以下の方法があります。

  • プログラムが含まれている可能性のあるパッケージを推測し、パッケージをインストールせずにダウンロードだけして、ダウンロードしたパッケージに対してクエリーを実行する。
  • インターネットを検索する。
  • 以下に説明する command-not-found 機能を使用する。

特定の RPM をシステム・ツールで見つけられない場合に重宝するインターネット・リソースは、Rpmfind.Net サーバーです (リンクについては「参考文献」を参照)。

command-not-found 機能

Bash シェルでコマンドを検索すると、コマンドが見つからない場合には、このシェルが command_not_found_handle というシェル関数を検索します。command_not_found_handle 関数が存在する場合には、引数として元のコマンドと元の引数を指定してこの関数が呼び出され、関数の終了ステータスがシェルの終了ステータスになります。この関数が定義されていなければ、Bash シェルはエラー・メッセージを出力し、終了ステータス 127 を返します。通常、この関数が設定されるのはシステムの /etc/bash.bashrc ファイルか、/etc/profile.d/PackageKit.sh などの別のプロファイル・ファイルです。リスト 29 に、command-not-found 機能を検索する方法を示します。command-not-found 機能がシステム上にインストールされていない方も、これでインストール方法がわかるはずです。

リスト 29. command-not-found 機能の検索およびインストール
[ian@attic-f21 ~]$ yum search command-not-found
Loaded plugins: langpacks
======================= N/S matched: command-not-found ========================
PackageKit-command-not-found.x86_64 : Ask the user to install command line
                                    : programs automatically

  Name and summary matches only, use "search all" for everything.

リスト 30 に、PackageKit-command-not-found がインストールされた後、この関数のハンドルがどのように定義されるかを示します。関数が検索を実行できない場合には、標準のシステムの振る舞いを模倣して終了ステータス 127 を返します。

リスト 30. command_not_found_handle
[ian@attic-f21 ~]$ type command_not_found_handle
command_not_found_handle is a function
command_not_found_handle () 
{ 
    local runcnf=1;
    local retval=127;
    [[ $- =~ i ]] || runcnf=0;
    [ ! -S /var/run/dbus/system_bus_socket ] && runcnf=0;
    [ ! -x /usr/libexec/packagekitd ] && runcnf=0;
    if [ $runcnf -eq 1 ]; then
        /usr/libexec/pk-command-not-found "$@";
        retval=$?;
    else
        echo "bash: $1: command not found";
    fi;
    return $retval
}

このチュートリアルの始めでは、gfortran –help による 2 つの異なる出力を示しました。1 つ目は、command_not_found_handle 関数が無効な状態での応答で、2 つ目はこの関数が有効な状態での応答でした。上に戻ってリスト 1 を見返して、その違いを確認してください。


その他のツール

ディストリビューションによっては yumrpm の他にも、リポジトリーからパッケージをインストールするためのツールや、システム全体を更新するためのツールが提供されています。これらのツールは、グラフィックまたはコマンドライン、あるいはその両方を使用します。例えば、以下のツールがあります。

  • YaST (SUSE)
  • up2date (Red Hat)
  • Mandrake Software Management (Mandriva)

一般に、これらのツールは複数のパッケージ更新を自動または半自動で処理します。さらに、リポジトリーの内容を表示する機能や、パッケージを検索する機能を提供する場合もあります。詳細については、お使いのディストリビューションのマニュアルを調べてください。

dnf

Red Hat は Fedora 22 で、昔ながらの yum を (洗練された yum (dandified yum) を意味する) dnf という名前の新しいツールで置き換えました。dnf は Fedora 18 以降、テック・プレビューとして Fedora パッケージに含まれています。このプロジェクトのページには、以下のように書かれています。

DNF プロジェクトを開始した理由は、Yum には 3 つの大きな落とし穴があるからです。その 3 つとは、API がドキュメント化されていないこと、アルゴリズムを解決するための依存関係が壊れていること、そして内部関数をリファクタリングできないことが挙げられます。最後に挙げた問題は、ドキュメントがないことと関係しています。

dnf のコマンドライン・インターフェースのほとんどは、yum と似ているかまったく同じであり、dnf のツールも yum と似ているか同等のものになっています。dnf を使用するシステム上で yum コマンドを使用すると、通常は機能するはずですが、yum コマンドは非推奨であるため、dnf を使用するよう促す警告が表示されます。

dnf はまだ LPI の試験項目には含まれていませんが、yum を置き換えるものとして認識しておくとよいでしょう。


PackageKit

パッケージのインストールについての説明を締めくくるには、PackageKit を話題にしないわけにはいきません。PackageKit はソフトウェアを簡単にインストール、更新できるようにするために設計されたシステムで、さまざまなディストリビューションで使用されているソフトウェア・グラフィカル・ツールをまとめて 1 つに統合することを目的としています。PackageKit は、システムが起動したデーモンを使用します。つまり、デーモンは必要なときにだけ起動されるということです。PackageKit には Gnome 対応のバージョン (gnome-packagekit) と KDE 対応のバージョン (KPackageKit) があります。PackageKit には、上記で説明した command-not-found ハンドルの他、コンソールからパッケージ管理関数を実行する pkcon コマンド、パッケージ・キットのアクティビティーをモニターする pkmon コマンドがあります。また、ソフトウェア・パッケージの追加やシステムの更新に使えるグラフィカル・ツールも組み込まれています。図 1 は、Gnome PackageKit (/usr/bin/gpk-application) のグラフィカル・インターフェースの一例です。

図 1. Fedora 21 での Gnome PackageKit のグラフィカル・インターフェース
Fedora 21 での Gnome PackageKit のグラフィカル・インターフェースのスクリーンショット

このチュートリアルを作成している時点での Fedora の最新リリースでは、PackageKit が gnome-software という新しいソフトウェア・パッケージで置き換えられています。このプロジェクトでは以下のように説明されています。

gnome-software という新しいツールは、最初から、アプリケーションをインストールする目的で設計されました。このツールは、パッケージに関係する情報 (依存関係、パッケージ・サイズ、ファイル・リスト、・・・) の代わりに、ユーザーに関係する情報 (アイコン、スクリーンショット、レビュー、説明、評価、・・・) をアプリケーションに表示します。

このツールは、すべてのパッケージと連動するわけではありません。また、特定のスケジュールで更新をチェックするのみであり、不要なリブートを要求します。なぜこのように設計されているかは、Bug 1064717 の説明を参照してください。gnome-packagekit-installer パッケージと gnome-packagekit-updater パッケージをインストールすれば、PackageKit の機能を入手することができます。

このチュートリアルでは、RPM および YUM パッケージ管理システムのほんの一部を説明しただけにすぎません。詳細な情報へのリンクについては、「参考文献」を参照してください。

参考文献

学ぶために

  • developerWorks Premium のメンバーになると、強力なツールや Safari Books Online から集めて管理する技術ライブラリーをすべて自由に利用できるほか、カンファレンスの割引を受けることや、カンファレンスの記録を閲覧することができ、さらには SoftLayer や Bluemix を利用できるクレジットが提供されるなど、さまざまな特典があります。
  • 2015年 4月時点での LPI のバージョン 4.0 の試験項目に基づく LPIC-1 認定に備えて勉強するのに役立つ developerWorks のチュートリアルを見つけるには、developerWorks の LPIC-1 ロードマップを利用してください。
  • Linux Professional Institute の Web サイトで、LPIC の詳細な試験項目、課題のリスト、例題を調べてください。特に以下のページを参照してください。 必ず Linux Professional Institute の Web サイトで最新の項目を参照してください。
  • RPM ソフトウェア・パッケージング・ツールに関する最新情報、そして RPM の詳細を調べられるリンクについては、RPM ホーム・ページにアクセスしてください。
  • Maximum RPM』では、RPM が持つすべての側面を包括的かつ体系的に説明しています。この本は、印刷版およびオンライン版で用意されています。
  • DNF (Dandified Yum) について詳しく調べてください。
  • 新しいアプリケーション・インストーラー (gnome-software) について詳しく調べてください。
  • LSB (Linux Standard Base) のホームで LSB について学んでください。LSB は、標準バイナリー・オペレーティング環境の開発を目的とする FSG (Free Standards Group) プロジェクトです。
  • PackageKit について詳しく学ぶには、PackageKit ホーム・ページにアクセスしてください。
  • Linux JF (Japanese FAQ) Project には、Linux に関する HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • さまざまな IBM 製品や IT 業界のトピックに焦点を絞った developerWorks テクニカル・イベントで最新の技術情報を入手してください。
  • Twitter で developerWorks をフォローしてください。

製品や技術を入手するために

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1034664
ArticleTitle=Linux の 101 試験対策: RPM および YUM によるパッケージ管理
publish-date=07072016