RPMによるパッケージ管理を理解する:実践でも役立つLPICドリル(2)(3/3 ページ)
本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。
問題3
rpmコマンドを-qaなどの検索オプションを付けて実行し、インストールされているパッケージを表示しようとすると途中で止まってしまいます。RPMデータベースに不具合があると思われるため、修復することにしました。実行すべき手順はどれですか?(1つ選択)
[試験対策の重要度:(level1)* (level2)-]
a.rm /var/lib/rpm/__db.* ; rpm --initdb
b.rm /var/lib/rpm/__db.* ; rpm --rebuilddb
c.rpm -i --force rpmパッケージファイル名
d.rpm -i --nodeps rpmパッケージファイル名
b
RPMは、システムにインストールされたパッケージの情報を/var/lib/rpmディレクトリの下の次のファイル名であるBerkeley DBファイルで管理しています。
Basenames Group Providename Requireversion Conflictname Installtid Provideversion Sha1header Dirnames Name Pubkeys Sigmd5 Filemd5s Packages Requirename Triggername
これらのデータベースファイルに、システム管理者など書き込み権を持ったユーザーがアクセスする場合は、RPMは排他制御のため、次のようなファイル名のファイルを作成し、その中にデータベースのロックを作ります。
__db.000 __db.001 __db.002 __db.003
データベースが壊れたときはこのロックが残ったままになることが多く、その状態で--rebuildオプションを付けて実行しても修復できない(書き込みできない)ので、このファイルを削除してから実行するとうまくいきます。
“rpm --rebuilddb”を実行すると、RPMは、/var/libの下にテンポラリディレクトリを作り、各データベースファイルのインデックスを再構築します。
“rpm --initdb”を実行すると、Packagesファイルがない場合は、中身が空のPackagesデータベースを作成します。
問題4
パッケージの署名チェックに関する問題です。
[試験対策の重要度:(level1)*** (level2)-]
(設問1)パッケージAの署名チェックをするため、rpmにあるオプションを付けて実行したところ、次のように表示されました。
パッケージAのファイル名: (sha1) dsa sha1 md5 gpg OK
この表示についての正しい説明はどれですか?(1つ選択)
a.“rpm --checksig パッケージAのファイル名”を実行した結果である。パッケージの署名は改ざんではなく本物である
b.“rpm --checksig パッケージAのファイル名”を実行した結果である。パッケージには署名がない
c.“rpm --verify パッケージA”を実行した結果である。パッケージの署名は改ざんではなく本物である
d.“rpm --verify パッケージA”を実行した結果である。パッケージには署名がない
(設問2)パッケージBについて、設問1と同じオプションを付けて実行したところ次のように表示されました。
パッケージBのファイル名:(SHA1) DSA sha1 md5 (GPG) OK ではありません。(見つからない鍵: GPG#4f2a6fd2)
この表示についての正しい説明はどれですか?(1つ選択)
a.パッケージBには署名がない
b.パッケージBは署名はあるが、不正な署名である
c.パッケージBに署名した秘密鍵のペアである公開鍵がシステムにインストールされていないので、署名チェックができない
d.パッケージBに署名した公開鍵のペアである秘密鍵がシステムにインストールされていないので、署名チェックができない
(設問3)パッケージBを設問2の状態のまま-iオプションでインストールするとどうなりますか?(1つ選択)
a.インストールできない
b.パッケージAをインストールするときと同様にインストールされる
c.警告“... signature: NOKEY, key ID 4f2a6fd2”が表示され、インストールは行われる
d.--force オプションを追加して実行した場合のみ、警告“... signature: NOKEY, key ID 4f2a6fd2”が表示されるが、インストールはできる
(設問4)パッケージBの署名キーGPG KeyID 4f2a6fd2が、ファイルシステムにRPM-GPG-KEY-xxというファイル名で存在することが分かりました。すでにシステムにインストールされているキーを表示し確認のうえ、このキーを追加インストールする手順はどれですか?(1つ選択)
a.rpm -q KeyID; rpm -i RPM-GPG-KEY-xx
b.rpm -q KeyID; rpm --export RPM-GPG-KEY-xx
c.rpm -qa | grep gpg-pubkey; rpm --import RPM-GPG-KEY-xx
d.rpm -qi gpg-pubkey; rpm -i RPM-GPG-KEY-xx
(設問1) a
(設問2) c
(設問3) c
(設問4) c
(設問1)パッケージファイルのダイジェストと署名のチェックは、“rpm --checksig パッケージファイル名”で行います。
(sha1) dsa sha1 md5 gpg OK
上記の表示の意味は、左から
ハッシュ関数(SHA1)を使ったDSAキーによるヘッダの署名は正しい
(署名は本物)
ハッシュ関数SHA1によるヘッダのダイジェスト値は正しい
(改ざんはなし)
ハッシュ関数MD5によるパッケージのダイジェスト値は正しい
(改ざんはなし)
パッケージのGPG署名(ヘッダの署名と同じDSAキーを使用)は正しい
(署名は本物)
です。この4つがいずれも正しい場合にOKと表示されます。
(設問2)パッケージ作成者が署名した秘密鍵に対応する公開鍵がシステムにインストールされていない場合は、
OKではありません。(見つからない鍵:GPG#xxx)
と、表示されます。GPG#xxxは署名に使われた鍵のID番号です。
(設問3)署名の鍵と同じ鍵がシステムにインストールされていない場合は、パッケージのインストール時に NOKEY という警告メッセージが表示されますが、インストールは行われます。
(設問4)システムにインストールされているGPG鍵を表示するには次のようにします。
# rpm -qa | grep gpg-pubkey
gpg-pubkey-4f2a6fd2-3f9d9d3b
キーの値などのキー情報を表示するには次にようにします。
# rpm -qi gpg-pubkey-4f2a6fd2-3f9d9d3b
Linuxディストリビューションに含まれているGPG鍵はディストリビューションのCD-ROM/DVDのトップディレクトリに次のようなファイル名で置かれています。
RPM-GPG-KEY RPM-GPG-KEY-fedora
これらの鍵はファイルシステム内にコピーされています。
CentOS4.4の場合: /usr/share/rhn/ Fedora8の場合: /etc/pki/rpm-gpg/
GPG鍵をシステムにインストールするには次のようにします。
# rpm --import RPM-GPG-KEY
大問4問お疲れさまでした。次回は「ファイルシステム」の問題を出題します。
著者紹介
大竹龍史
有限会社ナレッジデザイン 代表取締役。1980年代に日本コンピュータビジョン社にてサン・マイクロシステムズのWorkstation、Sun2に出合って以来、サン関連のサポート、社内教育、ユーザー教育に従事。1998年、Netscape(現在はサンのSJESプロダクトに引き継がれている)とLinuxのトレーニングを提供する有限会社ナレッジデザインを設立。現在はLinuxとSolarisのシステム管理、ネットワーク管理、サーバ構築を担当。
Copyright © ITmedia, Inc. All Rights Reserved.