概要
本章では zypper と RPM について説明しています。これらはいずれも
ソフトウエアを管理するためのコマンドラインツールです。
本章で使用する用語 (たとえば リポジトリ
,
修正
, 更新
など) については、
5.1項 「用語定義」 をお読みください。
zypper はパッケージをインストールしたり更新したり、削除したりすること ができるほか、リポジトリの管理を行なうこともできるコマンドラインの パッケージマネージャです。 特にシェルスクリプトなどを利用して、遠隔からのソフトウエア管理処理を 行なうのに便利な機能が用意されています。
zypper の一般的な書式は下記のとおりです:
zypper[グローバルオプション]
コマンド
[コマンドオプション]
[パラメータ]
...
角括弧で括られた部分は任意入力の部分です。 zypper を最も簡単に使用する には、 zypper に続いてコマンド名を入力することです。たとえばお使いの システムに必要な、全ての修正を適用するには下記のように入力します:
zypper patch
コマンドの前には 1 つ以上のグローバルオプションを指定することが
できます。たとえば --non-interactive
は、コマンドを
実行している間に何も問い合わせを表示させない、という意味になります
(自動で既定の回答を行なったものと見なす):
zypper --non-interactive patch
また、特定のコマンドに固有のオプションを使用するには、コマンドの後ろ
にそれらを入力します。たとえば --auto-agree-with-licenses
は、ライセンス同意の確認を行なうことなく、お使いのシステムに必要な
全ての修正を適用する、という意味になります (ライセンス同意は自動的に
受け入れられたものと見なします):
zypper patch --auto-agree-with-licenses
コマンドによっては 1 つ以上のパラメータを必要とするものがあります。 たとえば install コマンドでは、インストールしたいパッケージを 1 つ 以上指定します:
zypper install mplayer
オプションによってもパラメータを必要とする場合があります。下記の コマンドは、既知の全てのパターンを表示します:
zypper search -t pattern
今までに説明した項目については、これらを全て組み合わせることができ
ます。たとえば下記のコマンドでは、 factory
リポジトリに限定して mplayer
と
amarok
パッケージをインストールし、その際
に冗長な出力を行なうことを意味します:
zypper -v install --from factory mplayer amarok
--from
オプションはすべてのリポジトリを有効にしたまま
に設定 (依存関係の解決のため) し、特定のリポジトリに対してパッケージを
要求する意味です。
zypper -v install --repo factory mplayer amarok
さらに、多くの zypper コマンドには dry-run
と
呼ばれるオプションがあります。これは与えられたコマンドについて
シミュレーションを行なう機能を提供します。シミュレーションである
ため、実際にはシステムに対して何も変更を加えません。
zypper remove --dry-run MozillaFirefox
パッケージをインストールしたり削除したりするには、下記のコマンドを 入力します:
zypper installパッケージ名
zypper removeパッケージ名
zypper では、インストールと削除のコマンドを利用して様々な方法での パッケージの指定を行なうことができます:
zypper install MozillaFirefox
または
zypper install MozillaFirefox-3.5.3
zypper install mozilla:MozillaFirefox
ここで、 mozilla
はインストール元のリポジトリ
別名とします。
下記のコマンドは、 「Moz」 で始まる全てのパッケージを インストールします。特にパッケージを削除する場合など、ご利用に あたってはご注意ください。
zypper install 'Moz*'
たとえば Perl のモジュールをインストールしたい場合で、モジュール の名前がわからないような場合は、能力設定での指定を行なうことも できます:
zypper install 'perl(Time::ParseDate)'
能力設定のほか、アーキテクチャ (i586
や
x86_64
など) の指定を追加したり、バージョンの
指定を追加したりすることもできます。バージョンの指定は、下記の
ような比較演算子をあわせて指定します:
<
(より小さい), <=
(等しいか、より小さい), =
(等しい),
>=
(等しいか、より大きい),
>
(より大きい)
zypper install 'firefox.x86_64' zypper install 'firefox>=3.5.3' zypper install 'firefox.x86_64>=3.5.3'
パッケージとして、ローカルまたはリモートのパスを指定することも できます:
zypper install /tmp/install/MozillaFirefox.rpm
zypper install Firefox RPM の URL
ここで、 Firefox RPM の URL
の箇所は、
たとえば
http://download.opensuse.org/repositories/mozilla/SUSE_Factory/x86_64/MozillaFirefox-3.5.3-1.3.x86_64.rpm
のように、実際のダウンロード URL に置き換えてください。
さらに、パッケージのインストールや削除は +
や -
の修飾子を指定することができます。
たとえば emacs
をインストールして
vim
を削除するには、下記のように
入力します:
zypper install emacs -vim
emacs
を削除し、同時に
vim
をインストールするには、
下記のように入力します:
zypper remove emacs +vim
なお、 -
で始まるパッケージの指定が、コマンド
オプションとして解釈されてしまうことを防ぐため、これらの指定は
2 つめ以降のパラメータで指定してください。それができない場合は
--
を指定し、コマンドオプションの終了を宣言
してください:
zypper install -emacs +vim # 間違い zypper install vim -emacs # 正しい zypper install -- -emacs +vim # 上記と同じ zypper remove emacs +vim # 上記と同じ
また、特定のパッケージを削除する際、不要となったパッケージについても合わせて
自動的に削除するには、 --clean-deps
オプションを利用します:
rm package_name
--clean-deps
何も指定しない場合、 zypper は選択したパッケージをインストールしたり
削除したりする際、および何らかの問題が発生した際にそれぞれ確認メッセージを
表示します。この動作を無効化するには、 --non-interactive
オプションを指定します。このオプションは実際のコマンドよりも前に指定して
おく必要があります ((install, remove,
patch) など) 。下記のようになります:
zypper--non-interactive
installパッケージ名
このオプションを使用すると、スクリプトや cron ジョブなどから zypper を 利用できるようになります。
必要不可欠なパッケージの削除について | |
---|---|
|
ある特定のパッケージに対するソースパッケージをインストールするには、 下記のように入力します:
zypper source-install パッケージ名
このコマンドを実行すると、指定したパッケージを構築する際に必要となる
パッケージについてもインストールを行ないます。このような動作を行ない
たくない場合は、 -D
スイッチを追加してください。
また、構築する際に必要なパッケージだけをインストールしたい場合は、
-d
をお使いください。
zypper source-install -Dパッケージ名
# ソースパッケージのみ zypper source-install -dパッケージ名
# 構築時に必要なもののみ
もちろんこの機能は、有効に設定しているリポジトリの中にソース パッケージを提供するものがあった場合に動作します (ソース パッケージのリポジトリは既定で追加されるようになっていますが、有効に は設定されません) 。リポジトリの管理について、詳しくは 9.1.4項 「zypper を利用したリポジトリ管理」 をお読みください。
お使いのリポジトリ内で提供されている、全てのソースパッケージの一覧を 表示するには、下記のように入力します:
zypper search -t srcpackage
全てのパッケージ間の依存関係が満たされているかどうかを確認し、満たされて いない場合に修復処理を行なうには、下記のように入力します:
zypper verify
パッケージ間の依存関係は正しく解決されていなければならないほか、パッケージによっては 他のパッケージを 「推奨」 している場合があります。これらの推奨 パッケージは、それらが利用可能でインストールできるものであった場合にのみ インストールされます。ある特定のパッケージが推奨パッケージを指定していて、 それらのパッケージがインストールされた後で推奨パッケージが利用できるように なった場合は、下記のように入力します:
zypper install-new-recommends
このコマンドは Web カメラや無線 LAN デバイスを接続したような場合にとても 便利です。これにより、利用可能であればデバイスドライバや関連ソフトウエアが インストールされます。ドライバや関連ソフトウエアは、対応している特定の ハードウエア依存関係が満たされた場合にのみインストールできます。
zypper を利用したソフトウエア更新には、修正のインストール、最新バージョン のインストール、ディストリビューション全体の更新、と 3 種類の方法が あります。ディストリビューション全体の更新は、 16.1項 「システムのアップグレード」 で示されている zypper dist-upgrade コマンドで行ないます。
お使いのシステムに適用可能な全ての公式リリース修正をインストールするには、 下記のように入力します:
zypper patch
この場合、お使いのリポジトリ内にある全ての修正は適合性についてチェックが 行なわれ、必要と判断すればインストールが行なわれます。 上記のコマンドは必要なものを全てインストールする際に入力するコマンドです。
また、 zypper では 3 種類の方法で修正の存在可否を問い合わせることが できます:
必要な修正 (お使いのシステムにインストールする必要があるが、 まだインストールしていないもの) の数を表示します。
~ # zypper patch-check リポジトリのデータを読み込んでいます... インストール済みのパッケージを読み込んでいます... 5 個の修正が必要です (1 個のセキュリティ修正)
必要な修正 (お使いのシステムにインストールする必要があるが、 まだインストールしていないもの) について一覧を表示します。
~ # zypper list-patches リポジトリのデータを読み込んでいます... インストール済みのパッケージを読み込んでいます... リポジトリ | 名前 | バージョン | カテゴリ | 状態 -----------------------------------+--------------------------------+------------+-------------+----- openSUSE 11.3 11.3-1.82 向けの更新 | lxsession | 2776 | security | 必要
openSUSE 向けに公開されている全ての修正を一覧表示します。 ただし既にインストールされているものや、インストールする必要のない ものについても表示します。
特定の発信番号に関連する修正を一覧表示したりインストールしたりすることが できます。特定の修正を一覧表示するには、 zypper list-patches コマンドを利用して下記のようなオプションを指定します:
--bugzilla[=番号
]
Bugzilla による発信情報に対する修正を一覧表示します。任意でバグ番号を 指定し、特定のバグに対する修正一覧を表示することもできます。
--cve[=番号
]
CVE (脆弱性情報データベース) による発信情報に対する修正を一覧表示 します。任意で CVE 番号を指定し、特定の番号に対する修正一覧を表示する こともできます。
特定の Bugzilla または CVE 発信情報に対する修正をインストールするには、 下記のように入力します:
zypper patch --bugzilla=番号
or
zypper patch --cve=番号
たとえば CVE 番号 CVE-2010-2713
に対するセキュリティ
修正をインストールするには、下記のように入力します:
zypper patch --cve=CVE-2010-2713
リポジトリには新しいパッケージが存在していてもそれらが修正の機能を 提供しない場合は、 zypper patch コマンドを 実行しても更新を行ないません。 全てのインストール済みパッケージについて、利用可能な最新バージョン に更新するには、下記のように入力します:
zypper update
個別のパッケージについて更新を行なうには、 update または install の角コマンドに続けてパッケージ名を指定してください:
zypper updateパッケージ名
zypper installパッケージ名
また、インストール可能なすべての更新パッケージ一覧は、下記のコマンドで 表示することができます:
zypper list-updates
なお、このコマンドでは下記の条件に該当するパッケージのみが一覧表示されます:
既にインストール済みのパッケージと製造元が同じもの
既にインストール済みのパッケージと同じ優先度か、もしくはそれにより高い 優先度が設定されているリポジトリからのもの
インストール可能なもの (すべての依存関係が満たせるもの)
すべてのパッケージを (インストール可能かどうかは考慮せず) 一覧表示するには、 下記のように入力します:
zypper list-updates --all
新しいパッケージがなぜインストールできないのかを知るには、単純に zypper install または zypper update を利用してパッケージ名を指定してください。
お使いの環境を新しい製品バージョンに簡単にアップグレードする (たとえば openSUSE 11.4 から openSUSE 12.1 など) ためには、まずお使いのリポジトリを新しい openSUSE リポジトリに設定 する必要があります。詳しくは 9.1.4項 「zypper を利用したリポジトリ管理」 を お読みください。その後、必要なリポジトリに対して zypper dist-upgrade コマンドを利用してください。このコマンドにより、 現在有効化されているすべてのリポジトリからインストール済みのパッケージを 更新します。詳しい手順については 16.1.4項 「zypper を利用したディストリビューションアップグレード」 をお読みください。
ディストリビューションのアップグレードを、その他のリポジトリに対する依存関係が
満たされる限り、特定のリポジトリに限って実施したい場合は、
--from
オプションを指定して別名または番号、もしくは URI
でリポジトリを指定してください。
zypper update と zypper dist-upgrade の違い | |||||
---|---|---|---|---|---|
zypper update は、お使いのシステムの一貫性を 保ちながら、新しいバージョンのパッケージをインストールしたい場合に 使用します。 zypper update では下記のルールを 厳守します:
zypper dist-upgrade を実行した場合、その時点で有効に 設定されている全リポジトリからのパッケージがインストールされます。 このルールは強制的なもので、パッケージの製造元やアーキテクチャが変更される 場合があるほか、場合によってはダウングレードが行なわれる場合があります。 また、依存関係が満たされていないすべてのパッケージは、アップグレード後も インストールされないままになります。 |
zypper でのインストールコマンドや修正コマンドは、それを実行する時点で 設定されているリポジトリから行ないます。システムに設定済みのリポジトリ について、一覧を表示するには下記のように入力します:
zypper repos
実行すると、下記のように出力されます:
例9.1 zypper—既知のリポジトリの一覧表示¶
# | 別名 | 名前 | 有効 | 更新 --+---------------------------+-----------------------+------------+----------- 1 | Updates | Updates | はい (Y) | はい (Y) 2 | openSUSE 11.2-0 | openSUSE 11.2-0 | いいえ (N) | いいえ (N) 3 | openSUSE-11.2-Debug | openSUSE-11.2-Debug | いいえ (N) | はい (Y) 4 | openSUSE-11.2-Non-Oss | openSUSE-11.2-Non-Oss | はい (Y) | はい (Y) 5 | openSUSE-11.2-Oss | openSUSE-11.2-Oss | はい (Y) | はい (Y) 6 | openSUSE-11.2-Source | openSUSE-11.2-Source | いいえ (N) | はい (Y)
様々なコマンドでリポジトリを指定する際は、上記の別名や URI のほか、 zypper repos の出力結果であるリポジトリ番号 (一番左の項目) でも指定することができます。また、リポジトリの別名とは リポジトリ名を使いやすく短縮したものです。なお、リポジトリ番号は リポジトリの修正を行なうと番号が変わる場合がありますのでご注意 ください。別名については、あえて変更しない限り変わることは ありません。
既定では URI やリポジトリの優先度など、詳細については表示されません。 全ての詳細を表示するには、下記のコマンドを入力します:
zypper repos -d
リポジトリを追加するには、下記のように入力します:
zypper addrepoURI
別名
ここで、 URI
はインターネット上のリポジトリを
指す場所でもかまいませんし、ネットワークやディレクトリ、 CD や DVD など
でもかまいません (詳しくは http://ja.opensuse.org/Libzypp/URI
をお読みください) 。また、 別名
はリポジトリに
対するユニークな短縮名を指定します。別名は他の別名と重複しない限り、どの
ような名前でもかまいません。他の別名と重複する場合は、 zypper が警告
メッセージを表示します。
一覧からリポジトリを削除したい場合は zypper removerepo コマンドを使用します。このコマンドの後に続けて削除したいリポジトリの別名や リポジトリ番号を指定します。たとえば 例9.1「zypper—既知のリポジトリの一覧表示」 の 例で 3 番目のリポジトリを削除するには、下記のコマンドを入力します:
zypper removerepo 3
リポジトリの有効/無効を切り替えるには、 zypper modifyrepo コマンドを使用します。これ以外にも、リポジトリの設定 (更新可否, 名前, 優先度) についても修正することができます。たとえば下記の例では、 「updates」 という名前のリポジトリについて、有効に設定して自動更新を行なうようにし、 かつ優先度を 20 にします:
zypper modifyrepo -er -p 20 'updates'
リポジトリの修正は 1 つのリポジトリに対して行なうこともできますが、 一括で指定することもできます:
-a : 全てのリポジトリ |
-l : ローカルリポジトリ |
-t : リモートリポジトリ |
-m : 特定の種類の
リポジトリ (種類 には下記のような条件を
指定します: http , https ,
ftp , cd , dvd ,
dir , file , cifs ,
smb , nfs , hd ,
iso ) |
リポジトリの別名を変更するには、 renamerepo
コマンドを
使用します。下記の例では、 Mozilla Firefox
という別名を、
単に firefox
という別名に変更します:
zypper renamerepo 'Mozilla Firefox' firefox
zypper ではリポジトリやパッケージに対して様々な問い合わせを行なうことが できます。製品、パターン、パッケージ、修正について、利用可能な全てのものを 表示するには、下記のように入力します:
zypper products zypper patterns zypper packages zypper patches
全てのリポジトリに対して特定のパッケージを問い合わせるには、
search
コマンドを使用します。通常はパッケージ名を対象に
して検索を行ないますが、オプション指定で概要と説明を対象に
含めることもできます。また、 *
や ?
のワイルドカードを使用することもできます。検索は通常、大文字と小文字を
区別せずに行ないます。
zypper search firefox # 単純に "firefox" を検索 zypper search "*fire*" # ワイルドカードを使用 zypper search -d fire # パッケージの説明と概要を検索対象に含む zypper search -u firefox # 未インストールのパッケージだけを表示
ある特定の機能を提供するパッケージを検索するには、 what-provides
コマンドを利用します。たとえば Perl のモジュール SVN::Core
を提供するパッケージを検索したい場合は、下記のように入力します:
zypper what-provides 'perl(SVN::Core)'
単一のパッケージを問い合わせるには、パラメータに正確なパッケージ名を指定して
info コマンドを実行します。これにより、そのパッケージ
の詳細情報が表示されます。また、このパッケージが何を必要としているのか、
もしくは何を推奨しているのかについて表示するには、 --requires
と --recommends
のオプションをそれぞれ指定します:
zypper info --requires MozillaFirefox
what-provides
コマンドは、 rpm -q --whatprovides パッケージ名
パッケージ名
に似ていますが、 rpm は RPM データベース (全てのインストール済みパッケージ
に関する情報を保持しているデータベース) に対して問い合わせるだけである
のに対して、 zypper はインストールされていないものに対しても問い合わせる
ことができます。
zypper には設定ファイルが存在していて、 zypper の動作を恒久的に変更すること
ができるようになっています (システム全体で設定できるほか、ユーザ単位でも設定
できます) 。システム全体での設定については /etc/zypp/zypper.conf
ファイルを編集してください。また、ユーザ独自の変更を行ないたい場合は、
~/.zypper.conf
ファイルを編集してください。なお、
~/.zypper.conf
ファイルが存在しない場合は、
/etc/zypp/zypper.conf
ファイルをテンプレートとして
お使いください。左記のファイルを ~/.zypper.conf
にコピーし、必要に応じて修正を行なってください。詳しい設定内容や利用可能な
オプションについては、ファイル内のコメント文をお読みください。
設定済みのリポジトリからのパッケージにアクセスする際、何らかの問題が発生した 場合 (たとえば確かにリポジトリ内に存在するパッケージであるにも関わらず、 zypper がそれを発見できない場合など) は、下記のコマンドでリポジトリの更新を 行なうことができます:
zypper refresh
これでもうまく動作しない場合は、下記をお試しください:
zypper refresh -fdb
これにより生のメタデータを強制的にダウンロードし、データベースの再構築を 行なって完全な更新を行ないます。
ルートパーティションに対して btrfs ファイルシステムを使用しているシステム の場合、 snapper コマンドをインストールしていれば、 zypper はファイルシステムに対して変更を加える際、自動的に (snapper でインストールされるスクリプトを経由して) snapper を呼び出し、ファイルシステムのスナップショットを 採取します。これらのスナップショットは zypper で行なわれた変更を元に戻す際に 使用できるものです。 snapper について、詳しくは man snapper で表示されるマニュアルページをお読みください。
zypper (および YaST) は、現時点ではルートファイルシステムのスナップ ショットのみを採取します。それ以外のサブボリュームについては設定することが できません。また、この機能は既定のファイルシステムではサポートされていません。
コマンドラインからのソフトウエア管理について、さらに詳しい情報は
zypper help または zypper help
コマンド
と入力することで表示される
ヘルプをお読みいただくか、もしくは zypper(8)
のマニュアルページをお読みください。 コマンドについて
完全かつ詳細なリファレンスのほか、 チートシート
と
呼ばれる最も重要なコマンドについての情報、および zypper をスクリプトや
アプリケーションから使用する方法については、
http://ja.opensuse.org/SDB:Zypper_usage をお読みください。
また、 openSUSE の最新バージョンについて変更点の一覧を読むには、
http://ja.opensuse.org/openSUSE:Zypper versions
をご覧ください。
RPM (RPM パッケージマネージャ) はソフトウエアパッケージの管理ツールです。 主なコマンドは rpm と rpmbuild の 2 つがあります。パワフルな RPM データベースの仕組みが存在するため、ユーザ からでもシステム管理者からでも、さらにいえばパッケージ構築者からでも、 インストール済みのソフトウエアについて詳細な情報を問い合わせることが できます。
rpm コマンドは基本的に 5 つのモードから構成されています: ソフトウエアのインストール, ソフトウエアのアンインストール (または更新), RPM データベースの再構築, RPM データベースや RPM パッケージへの問い合わせ, パッケージの一貫性確認と署名確認 の 5 つです。また、 rpmbuild コマンドは、ソースコードからインストール可能な パッケージを構築するために使用します。
インストール可能な RPM アーカイブは、特別なバイナリフォーマットの形式になって
います。これらのアーカイブにはインストール対象のプログラムのほか、
インストール時に rpm コマンドがソフトウエアパッケージを
設定する際に使用するデータや、ドキュメンテーション化を目的とした RPM データベース
のメタデータなどが含まれています。 RPM アーカイブは、通常
.rpm
の拡張子を持っています。
ソフトウエア開発パッケージ | |
---|---|
ソフトウエア開発を行なう際に必要なパッケージ (ライブラリ、ヘッダファイル
など) については、本体とは別途のパッケージで提供されています。これらの
パッケージは、ソフトウエアのコンパイルをご自身で行ないたい場合にのみ必要
となります (たとえば最新の GNOME パッケージなど) 。これらは本体の
パッケージ名の後ろに |
RPM パッケージには GPG による署名が付与されています。 RPM パッケージの
署名を検証するには、 rpm
--checksig package
-1.2.3.rpm
のように入力し、 Novell/SUSE やその他の信頼のおける発信元から提供された
ものであるかどうか確認してください。
これは特にインターネット経由でパッケージの更新を行なう場合にお勧めです。
通常の場合、 RPM アーカイブのインストールは非常に簡単です:
rpm -i パッケージ
.rpm と
入力するだけです。このコマンドでインストールを行なうことができるのは、
このパッケージに対する依存関係が満たされ、他のパッケージとの矛盾が発生
しない場合のみです。依存関係で満たされない点があり、追加でインストール
しておくべきソフトウエアが存在している場合、 rpm
はエラーメッセージを表示してインストールを中止します。また同時に RPM
データベースでは、矛盾が発生しないかどうかを確認します。この矛盾確認
では、ある特定のファイルが複数のパッケージに属すことにならないかどうか
を確認します。なお、オプションを指定することで rpm
コマンドに対してこれらの振る舞いを行なわないようにさせることも
できますが、これは熟練者のみが使用すべきオプションです。知識や経験の
ある方でなければ、システムの一貫性についてリスクを追うことに
なりますし、システムの更新ができなくなってしまう場合もあります。
オプション設定 -U
または --upgrade
と、
-F
または --freshen
は、いずれも
パッケージの更新を行なうためのコマンドです (たとえば rpm -F
パッケージ名
.rpm のように実行
します) 。このコマンドは古いバージョンのファイルを削除し、その後すぐに
新しいファイルをインストールする動作をします。また、これら 2 種類の
コマンドの違いは、 -U
がお使いのシステムに存在
していなかったパッケージについてはインストールを行ないますが、
-F
ではそのようなパッケージはインストールせず、更新を
行なうだけになります。また更新の際、 rpm コマンドは
下記の方針で注意を払いながら、設定ファイルの更新を行ないます:
設定ファイルを管理者が変更していない場合、 rpm は 設定ファイルの最新版をそのままインストールします。システム管理者側で 行なうべき作業はありません。
更新を行なう前にシステム管理者が設定ファイルを書き換えていた場合、
rpm はその変更されたファイルを
.rpmorig
または .rpmsave
(バックアップファイル) の拡張子を付けて保存し、新しいほうのパッケージ
から新しい設定ファイルをインストールします (ただし元々インストール
されていた設定ファイル (システム管理者が書き換える前のもの) と、
新たにインストールしようとしている設定ファイルが異なる場合のみ) 。
この場合は、バックアップファイル (.rpmorig
または
.rpmsave
) と新たにインストールされたファイルを
比較し、新しいファイルに対して書き換えていた部分を反映してください。
その後、今後の更新で問題が発生しないようにするため、それぞれ
.rpmorig
や .rpmsave
の
ファイルを削除してください。
なお、 .rpmnew
ファイルが作成される場合も
あります。これは設定ファイルが既に存在していて、 かつ
そのファイルが .spec
ファイル内で
noreplace
(置き換えを行なわない) ラベルが
設定されている場合に作成されます。
更新作業ののち、設定ファイルの比較と修正が終わったら、
.rpmsave
と .rpmnew
ファイルは
削除しておいてください。これらのファイルは今後の更新を阻害する可能性が
あるためです。また、 .rpmorig
ファイルは、
RPM データベースで認識されていなかったファイルの場合に付与されます。
それ以外の場合には .rpmsave
の拡張子が使用されます。
言い換えれば、 .rpmorig
は RPM の管理対象外のファイル
であった場合にのみ生成されます。また .rpmsave
は
古いバージョンの RPM から新しいバージョンのものに更新した場合に、
.rpmnew
はシステム管理者が設定ファイルに変更を行なった
かどうかが不明である場合に生成されます。これらのファイルの一覧は、
/var/adm/rpmconfigcheck
から取得できます。設定ファイル
によっては (たとえば /etc/httpd/httpd.conf
) 、
動作を継続させるために上書きを行なわない場合もあります。
なお、 -U
スイッチでの処理は、 -e
で
いったんアンインストールしてから -i
でインストールする
のとは 処理が異なります 。可能な限り
-U
をお使いください。
パッケージを削除するには、 rpm -e パッケージ名
と入力します。 rpm は未解決の依存関係がなければ、
そのままパッケージだけを削除します。たとえば Tcl/Tk の削除のように、他の
アプリケーションがそれを必要としている場合は、削除は不可能です。この
場合でも、 RPM はデータベースの助けを借りて処理を行ないます。もしも
何らかの理由で、依存関係の問題が 無い にも関わらず
削除ができない場合は、 RPM データベースを --rebuilddb
で構築し直すことで解決するかもしれません。
差分 RPM パッケージ (deltarpm) には、古いバージョンの RPM パッケージと 新しいバージョンの RPM パッケージの差分が含まれています。古いほうの RPM に対して差分 RPM を適用すると、新しいバージョンの RPM を作成すること ができるという仕組みです。また差分 RPM は、インストール済みの古いパッケージ からでも作成できる機能を備えています。そのため、古いほうの RPM について RPM ファイルそのもののコピーを保管しておく必要がありません。また、差分 RPM パッケージは修正 RPM よりもさらに小さいサイズになっているため、 インターネットを介して転送するのに都合の良いものになっています。逆に 差分 RPM での更新処理は、通常の RPM や修正 RPM よりも CPU 処理を多く 要してしまうという欠点があります。
それぞれ makedeltarpm, applydelta
バイナリは、差分 RPM を扱うためのソフトウエア
一式 (deltarpm
パッケージ) で、差分 RPM を作成したり
適用したりすることができます。たとえば下記のコマンドでは、
new.delta.rpm
という名前の差分 RPM を生成します。
それぞれ old.rpm
と new.rpm
が
存在していることを前提にしています:
makedeltarpm old.rpm new.rpm new.delta.rpm
上記のようにファイルを作成したら、古いパッケージがインストールされている環境 で applydeltarpm を実行すると、新しい RPM を生成することが できます:
applydeltarpm new.delta.rpm new.rpm
ファイルシステムを利用せず、古い RPM パッケージを直接指定するには、
-r
オプションを利用します:
applydeltarpm -r old.rpm new.delta.rpm new.rpm
技術的な詳細は、 /usr/share/doc/packages/deltarpm/README
をお読みください。
rpm コマンドで -q
を使用すると、 RPM
アーカイブ内 (-p
オプションで指定します) や RPM データベース
内を対象にして問い合わせを行なったり、調査を行なったりすることができます。
スイッチによっては情報の種類を指定する必要がある場合もあります。詳しくは
表9.1「最も重要な RPM 問い合わせオプション」 をお読みください。
表9.1 最も重要な RPM 問い合わせオプション¶
|
パッケージ情報。 |
|
ファイル一覧。 |
|
指定したファイルを含むパッケージ名。
ここで、 |
|
状態情報付きのファイル一覧 ( |
|
ドキュメンテーションファイルのみの一覧表示 ( |
|
設定ファイルのみの一覧表示 ( |
|
完全な詳細情報を含んだファイル一覧 ( |
|
他のパッケージから |
|
パッケージが必要とする機能の一覧。 |
|
インストール時のスクリプト (preinstall (インストール前), postinstall (インストール後), uninstall (アンインストール時)) |
たとえば rpm -q -i wget というコマンドを入力すると、 例9.2「rpm -q -i wget」 のように出力が行なわれます。
例9.2 rpm -q -i wget¶
Name : wget Relocations: (not relocatable) Version : 1.11.4 Vendor: openSUSE Release : 1.70 Build Date: Sat 01 Aug 2009 09:49:48 CEST Install Date: Thu 06 Aug 2009 14:53:24 CEST Build Host: build18 Group : Productivity/Networking/Web/Utilities Source RPM: wget-1.11.4-1.70.src.rpm Size : 1525431 License: GPL v3 or later Signature : RSA/8, Sat 01 Aug 2009 09:50:04 CEST, Key ID b88b2fd43dbdc284 Packager : http://bugs.opensuse.org URL : http://www.gnu.org/software/wget/ Summary : A Tool for Mirroring FTP and HTTP Servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. [...]
また -f
オプションは、完全なファイル名としてフルパス
(絶対パス) で指定した場合にのみ動作します。複数のファイルを指定することも
できます。たとえば下記のコマンドでは、
rpm -q -f /bin/rpm /usr/bin/wget
以下のような結果になります:
rpm-4.8.0-4.3.x86_64 wget-1.11.4-11.18.x86_64
ファイル名の一部だけがわかっているような場合は、下記 (例9.3「パッケージの検索スクリプト」) に示すようなシェルスクリプトをご利用 ください。スクリプトのパラメータとしてファイル名の一部を与えると動作します。
例9.3 パッケージの検索スクリプト¶
#! /bin/sh for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo "" done
また、 rpm -q --changelog rpm コマンドを利用すると、指定
したパッケージ (この場合は rpm
パッケージ) について詳しい
変更情報を、日付順に表示することもできます。
インストール済みの RPM データベースを利用することで、検証作業を行なうことが
できます。それぞれ -V
または
--verify
を指定してください。これらのオプションを
指定すると、 rpm は各パッケージに含まれるファイルについて、
インストール後に変更されたものを一覧表示します。なお、何が変更されたのかに
ついては、 8 文字のシンボルで表示します。それぞれ下記のような意味になって
います:
表9.2 RPM 検証オプション¶
|
MD5 チェックサムの相違 |
|
ファイルサイズの相違 |
|
シンボリックリンクの相違 |
|
更新日時の相違 |
|
メジャー/マイナーデバイス番号の相違 |
|
所有者の相違 |
|
グループの相違 |
|
モード (パーミッションとファイル種類) の相違 |
対象が設定ファイルである場合は、 c
も合わせて表示されます。
たとえば /etc/wgetrc
ファイルが変更されている場合
(wget
パッケージ) は、下記のように
表示されます:
rpm -V wget S.5....T c /etc/wgetrc
RPM データベースは、 /var/lib/rpm
ディレクトリ内に
ファイルで保存されています。たとえば /usr
パーティションが
1 GB (ギガバイト) のサイズであった場合、特に完全な更新を行なったりした場合
は、データベースがおおよそ 30 MB 程度のサイズになります。もしも
データベースが本来よりもずっと大きくなってしまったような場合は、
--rebuilddb
オプションを利用してデータベースの再構築を行なう
ことができます。なお、この作業を行なう場合は、事前に古いデータベースの
バックアップを採取しておいてください。 cron コマンドの
スクリプトである cron.daily では、データベースを日次で
バックアップし (gzip 圧縮) 、それらを /var/adm/backup/rpmdb
内に保存するようになっています。コピーを保持しておく数については、
/etc/sysconfig/backup
の設定ファイル内の
MAX_RPMDB_BACKUPS
変数で設定することができます
(既定値: 5
) 。バックアップ 1 つごとに /usr
ディレクトリ 1 GB (ギガバイト) あたり 1 MB (メガバイト) 程度が
必要です。
全てのソースパッケージには、 .src.rpm
という拡張子
(ソース RPM という意味) が付けられています。
ソースパッケージのインストール状態について | |
---|---|
ソースパッケージは、 YaST を利用してインストールメディアからお使いの
ハードディスクにコピーし、展開することができます。ただし、パッケージ
マネージャ側ではインストール済み ( |
rpm コマンドや rpmbuild コマンドでは、
/usr/src/packages
ディレクトリ以下の下記のサブ
ディレクトリを使用します (/etc/rpmrc
ファイルのような
形で別途設定した場合を除きます):
YaST を利用してソースパッケージをインストールすると、全ての必要な
コンポーネントが /usr/src/packages
以下にインストール
されます: ソースコードと細かい調整などが SOURCES
サブディレクトリに、関連する .spec
ファイルが
SPECS
サブディレクトリにインストールされます。
システムコンポーネント ( |
下記の例は、 wget.src.rpm
パッケージを利用した場合の
例です。ソースパッケージをインストールすると、下記のようなファイルが
それぞれ存在しているはずです:
/usr/src/packages/SOURCES/wget-1.11.4.tar.bz2 /usr/src/packages/SOURCES/wgetrc.patch /usr/src/packages/SPECS/wget.spec
ここから rpmbuild -bX
/usr/src/packages/SPECS/wget.spec と実行すると、コンパイル作業を
行なうことができます。 X
には、構築処理の様々な
段階を指定します。それぞれ下記のように指定します:
-bp
ソースコードを /usr/src/packages/BUILD
ディレクトリ
以下に展開し、修正を適用します。
-bc
-bp
に加え、コンパイル作業までを行ないます。
-bi
-bp
に加え、構築済みのソフトウエアのインストールを行ない
ます。 注意: パッケージが BuildRoot 機能に対応していない場合は、
既存の設定ファイルを上書きしてしまう可能性があります。
-bb
-bi
に加え、バイナリパッケージの作成作業を行ないます。
コンパイルが成功すると、バイナリは /usr/src/packages/RPMS
ディレクトリ内に作成されます。
-ba
-bb
に加え、ソース RPM の作成作業を行ないます。
コンパイルが成功すると、ソース RPM は
/usr/src/packages/SRPMS
ディレクトリ内に作成されます。
--short-circuit
いくつかの手順を飛ばします。
バイナリ RPM を作成すると、 rpm -i
や
rpm -U
コマンドを利用してインストール
することができるようになります。インストール後は、 RPM データベース内に
登録されるようになります。
多くのパッケージをコンパイルするにあたって危険となるのは、構築処理の
最中に実行中のシステムに対し、予期しないファイルが追加されてしまう
ことです。これを防ぐため、パッケージを構築するための設定済み環境を
構築するための build
をお使いください。
この chroot 環境を確立するため、 build スクリプトを
完全なパッケージツリーを指定して実行してください。このツリーはハード
ディスクや NFS, DVD から利用することができます。 build --rpms
ディレクトリ
のようにして実行して
ください。なお rpm とは異なり、 build
コマンドは .spec
ファイルをソースディレクトリ内で検索します。
たとえば /media/dvd
以下にマウントされた DVD の
システムで上記の例のように wget
を構築するには、
下記のコマンドを root
で実行します:
cd /usr/src/packages/SOURCES/ mv ../SPECS/wget.spec . build --rpms /media/dvd/suse/ wget.spec
上記を実行すると、最小限の環境が /var/tmp/build-root
ディレクトリ以下に構築され、パッケージはその環境下でコンパイルされます。
作業が完了すると、作成されたパッケージは
/var/tmp/build-root/usr/src/packages/RPMS
ディレクトリに置かれます。
また、 build スクリプトは複数の追加オプションを設定する
ことができます。たとえばスクリプトに対して自身の RPM を使用するよう指定
したり、構築環境の初期化を省略したり、 rpm コマンドに
ついて上記に示した各段階のいずれかを実行させたりすることができます。
さらなる情報については、 build --help
コマンドを実行して表示するか、 build のマニュアルページ
をお読みください。
Midnight Commander (mc) では、 RPM アーカイブの内容を
表示したり、それらの一部をコピーしたりすることができます。このソフトウエア
ではアーカイブを仮想的なファイルシステムとしてアクセスすることができるため、
Midnight Commander で実行できる全てのメニューを RPM アーカイブの内容に対して
実行することができます。 F3 で HEADER
ファイルの表示を行なうことができるほか、カーソルキーと Enter
キーでアーカイブ構造を閲覧したりすることができます。
また、 F5 でアーカイブの内容をコピーすることもできます。
また、完全機能のパッケージマネージャを必要とする場合は、 YaST モジュール (第5章 ソフトウエアのインストールと削除 をお読みください) をお使いください。