Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.6

2 コマンドラインツールでのソフトウエア管理 Edit source

概要

本章では、いずれもソフトウエアを管理するためのコマンドラインツールである Zypper と RPM について説明しています。なお、本章内の各種用語 (たとえば リポジトリ修正, 更新 など) については、 9.1項 「用語の定義」 をお読みください。

2.1 zypper の使用 Edit source

zypper はパッケージのインストールや更新、削除などを行うことができる、コマンドライン型のパッケージマネージャです。特にリモートからのソフトウエア管理作業や、シェルスクリプトからのソフトウエア管理に便利な仕組みです。

2.1.1 一般的な使用方法 Edit source

zypper の一般的な書式は、下記のとおりです:

zypper [--グローバルオプション] コマンド  [--コマンドオプション] [パラメータ]

[] で括られた箇所は任意指定のもので、必ずしも指定する必要があるものではありません。オプションとコマンドの一覧については、 zypper help を実行してください。また、特定のコマンドに対してヘルプを表示したい場合は、 zypper help コマンド と入力して実行してください。

zypper のコマンド

zypper で最も簡単な使用方法は、コマンドに続いて名前を入力する方法です。たとえば、システムに対して必要なすべての修正を適用するには、下記のように入力します:

> sudo zypper patch
グローバルオプション

また、コマンドの直前には 1 つ以上のグローバルオプションを指定することができます:

> sudo zypper --non-interactive patch

上記の例では --non-interactive というグローバルオプションを指定しています。これは、コマンドの実行時に一切の問い合わせを行わない (既定の回答がなされたものとして扱う) オプションです。

コマンド固有のオプション

特定のコマンドに固有のオプションを指定したい場合は、コマンドの直後に指定します:

> sudo zypper patch --auto-agree-with-licenses

上記の例では --auto-agree-with-licenses というオプションを指定しています。これは、システムに対して修正を適用する際、ライセンスの確認を行わない (ライセンスを自動的に受け入れる) オプションです。

パラメータ

コマンドによっては、 1 つ以上のパラメータを受け付けるものがあります。たとえば install というコマンドでは、 インストール したいパッケージを指定します:

> sudo zypper install mplayer

オプションによっては 1 つのパラメータを必要とするものがあります。たとえば下記のコマンドは、既知の全てのパターンを一覧表示します:

> zypper search -t pattern

これまでのオプションやパラメータは、組み合わせて指定することもできます。たとえば下記のコマンドは、 factory という名前のリポジトリから mcvim というパッケージをインストールし、インストール時に詳細な出力 (verbose) を行うようにしています:

> sudo zypper -v install --from factory mc vim

--from オプションは、依存関係の解決に際して全てのリポジトリを有効化した状態のまま、指定したリポジトリからパッケージをインストールするためのオプションです。 --repo オプションは --from オプションと同じ意味で、どちらを使用してもかまいません。

また、ほとんどの zypper コマンドには dry-run オプションが用意されています。これは、指定したコマンドの実行をシミュレーションするためのもので、テスト用に使用することができます。

> sudo zypper remove --dry-run MozillaFirefox

このほか、 zypper ではグローバルオプションとして --userdata 文字列 というものも用意されています。このオプションは、指定した文字列を zypper およびプラグイン (たとえば brtfs プラグイン) のログファイル内に書き込み、後からログファイル内を検索しやすくするためのオプションです。

> sudo zypper --userdata 文字列 patch

2.1.2 zypper のサブコマンドの使用 Edit source

zypper でのサブコマンドはそれ自身が実行ファイルの形で存在するものであり、 zypper_execdir 設定オプションで指定したディレクトリ内にあるはずのものとして処理されます。既定ではこの値は /usr/lib/zypper/commands に設定されています。サブコマンドが zypper_execdir で指定したディレクトリ内に存在しない場合、 zypper は $PATH 環境変数内の残りの箇所を自動的に検索します。これにより、独自の拡張を作成してユーザスペース内に配置することができるようになっています。

ただし、 zypper シェル内でサブコマンドを実行したり、 zypper のグローバルオプションを使用したりすることはできません。

利用可能なサブコマンドは下記のように実行することで表示することができます:

> zypper help subcommand
[...]
'/usr/lib/zypper/commands' 内で利用可能な zypper のサブコマンド

  appstream-cache
  lifecycle
  migration
  search-packages

お使いの $PATH 内の他の場所で利用可能な zypper サブコマンド

  log                   Zypper logfile reader
                            (/usr/sbin/zypper-log)

サブコマンドに対するヘルプ画面を表示するには、下記のように実行します:

> zypper help appstream-cache

2.1.3 zypper を利用したソフトウエアのインストールと削除 Edit source

パッケージをインストールしたり削除したりしたい場合は、下記のコマンドをお使いください:

> sudo zypper install パッケージ名
> sudo zypper remove パッケージ名
警告
警告: 必須パッケージの削除について

glibc, zypper , kernel など、システムにとって必須のパッケージを削除しないでください。これらを削除してしまうと、システムが不安定になったり、全く動作しなくなったりしてしまいます。

2.1.3.1 インストールまたは削除するパッケージの選択 Edit source

zypper installzypper remove のコマンドでは、様々な方法でパッケージを指定することができます。

パッケージ名のみ
> sudo zypper install MozillaFirefox
パッケージ名とバージョン番号
> sudo zypper install MozillaFirefox-52.2
リポジトリの別名とパッケージ名
> sudo zypper install mozilla:MozillaFirefox

ここで、 mozilla はインストール元となるリポジトリの別名を意味します。

ワイルドカードを使用したパッケージ名

特定の文字列で始まる、もしくは特定の文字列で終わる全てのパッケージをインストールすることができます。なお、特にパッケージを削除する際には、よく注意して使用してください。たとえば下記のコマンドを実行すると、 Moz で始まる全てのパッケージをインストールします:

> sudo zypper install 'Moz*'
ヒント
ヒント: 全ての -debuginfo パッケージの削除

何らかの問題を調査するにあたっては、実行中のプロセスから様々な情報を取得する目的で、多数の -debuginfo パッケージを一時的にインストールしなければならない場合があります。デバッグの作業が終わると、これらは不要なパッケージとなりますので、環境を元に戻すために下記のようにコマンドを実行することができます:

> sudo zypper remove '*-debuginfo'
能力による指定

パッケージ名が分からない場合は、能力による指定を行うこともできます。たとえば下記のコマンドを実行すると、 MozillaFirefox パッケージをインストールします:

> sudo zypper install firefox
能力やハードウエアアーキテクチャ、バージョンによる指定

能力とハードウエアアーキテクチャ、バージョンをそれぞれ組み合わせて指定することもできます:

  • 能力の後ろにピリオド (.) を置き、続いて必要なハードウエアアーキテクチャを指定してください。たとえば AMD64/Intel 64 アーキテクチャ (zypper では x86_64 と命名されています) を指定するには、下記のようにします:

    > sudo zypper install 'firefox.x86_64'
  • バージョン番号は文字列の末尾に指定するほか、合わせて下記のいずれかの演算子を指定します: < (より小さい), <= (より小さいか等しい), = (等しい), >= (より大きいか等しい), > (より大きい)

    > sudo zypper install 'firefox>=74.2'
  • ハードウエアアーキテクチャとバージョン番号の両方を指定することもできます:

    > sudo zypper install 'firefox.x86_64>=74.2'
RPM ファイルのパスによる指定

パッケージに対するローカルのパス、もしくはリモートのパスを指定することもできます:

> sudo zypper install /tmp/install/MozillaFirefox.rpm
> sudo zypper install http://download.example.com/MozillaFirefox.rpm

2.1.3.2 パッケージのインストールと削除の組み合わせ Edit source

パッケージのインストールと削除を同時に実施したい場合は、 +/- の修飾子を指定します。たとえば emacs パッケージをインストールし、同時に vim パッケージを削除したい場合は、下記のようにします:

> sudo zypper install emacs -vim

emacs パッケージを削除し、同時に vim パッケージをインストールしたい場合は、下記のようにします:

> sudo zypper remove emacs +vim

- でパッケージの削除を指定する場合は、これがコマンドオプションと取り違えられたりしないようにするため、 - を 2 つめ以降に指定するようにしてください。 2 つめ以降に書くことが難しい場合は、 -- でオプションの終了を表してもかまいません:

> sudo zypper install -emacs +vim       # 誤り
> sudo zypper install vim -emacs        # 正しい
> sudo zypper install -- -emacs +vim    # 正しい
> sudo zypper remove emacs +vim         # 正しい

2.1.3.3 削除したパッケージが必要としていた依存関係の清掃 Edit source

特定のパッケージ名の指定と組み合わせることで、削除後に不要となるパッケージを自動的に削除させることもできます。これを行いたい場合は、 --clean-deps オプションを指定してください:

> sudo zypper rm --clean-deps パッケージ名

2.1.3.4 スクリプト内での zypper の使用 Edit source

既定では、 zypper は選択したパッケージをインストール/削除する前、および何らかの問題が発生した場合に、確認メッセージを表示します。確認メッセージの表示は、--non-interactive オプションを指定することで省略することができます。ただし、このオプションは実際のコマンド (たとえば install, remove, patch など) よりも前に指定しなければなりません。具体的には、下記のようになります:

> sudo zypper --non-interactive install パッケージ名

このオプションを指定することで、 zypper をスクリプト内や cron のジョブ内で利用できるようになります。

2.1.3.5 ソースパッケージのインストールとダウンロード Edit source

該当するソースパッケージをインストールしたい場合は、下記のように実行します:

> zypper source-install パッケージ名

上記のコマンドを root で実行すると、ソースパッケージは既定で /usr/src/packages/ 以下にインストールされます。それ以外のユーザで実行すると、 ~/rpmbuild 以下にインストールされます。これらの設定は、 rpm の設定で変更することができます。

このコマンドは、指定したパッケージが構築時に依存するパッケージについても、インストールを行います。これを回避したい場合は、 -D スイッチを指定してください:

> sudo zypper source-install -D パッケージ名

構築時の依存関係のみをインストールしたい場合は、 -d を指定してください。

> sudo zypper source-install -d パッケージ名

もちろん、これらの処理はソースパッケージのあるリポジトリが有効化されている場合にのみ動作するものです (ソースパッケージのあるリポジトリは、既定で追加されていますが、有効化はされていません) 。リポジトリの管理について、詳しくは 2.1.6項 「zypper を利用したリポジトリの管理」 をお読みください。

お使いのリポジトリ内にある全てのソースパッケージを一覧表示するには、下記のコマンドを実行してください:

> zypper search -t srcpackage

また、インストール済みの全てのパッケージに対して、対応するソースパッケージをダウンロードすることもできます。ソースパッケージをダウンロードしたい場合は、下記のコマンドをお使いください:

> zypper source-download

既定のダウンロード先ディレクトリは /var/cache/zypper/source-download に設定されていますが、 --directory オプションを指定することで、自由に変更することができます。また、ダウンロードや削除を行うことなく、必要もしくは不要なパッケージを確認したい場合は、 --status オプションを指定してください。不要なソースパッケージを削除したい場合は、 --delete オプションを指定してください。削除を行いたくない場合は、 --no-delete を指定してください。

2.1.3.6 無効化されているリポジトリからのパッケージのインストール Edit source

通常は、パッケージをインストールしたり更新したりする場合、有効化されたリポジトリのパッケージのみを使用することができます。ですが、 --plus-content タグ オプションを指定すると、その zypper の実行時に限定して一時的にリポジトリを有効化し、インストールや交信を行うことができるようになります。 zypper のコマンドが終了すると元に戻されます (無効化されます) 。

たとえば -debuginfo-debugsource などのパッケージを提供する追加リポジトリを有効化したい場合は、 --plus-content debug オプションを指定してください。なお、 --plus-content は必要に応じて複数回指定することができます。

このような 'debug' (デバッグ) リポジトリを有効化して、特定の -debuginfo パッケージをインストールするには、下記のように実行します:

> sudo zypper --plus-content debug \
   install "debuginfo(build-id)=eb844a5c20c70a59fc693cd1061f851fb7d046f4"

ここで、 build-id 以下の文字列は、 gdb コマンドで表示される ID を指定します。

注記
注記: 無効化されているインストールメディアについて

openSUSE Leap のインストールメディアを表すリポジトリが設定されますが、無効化された状態になります。オンラインのリポジトリではなく、インストールメディアからインストールを行いたい場合は、 --plus-content オプションをお使いください。なお、 zypper コマンドを使用する際には、あらかじめドライブに DVD を挿入しておくなど、メディア側を用意してから実行してください。

2.1.3.7 ユーティリティ Edit source

依存関係が全て満たされていることを確認し、満たされていない場合は修復作業を実施したい場合は、下記のコマンドを実行します:

> zypper verify

パッケージには、満たすべき依存関係だけでなく、 推奨 という設定も用意されています。これら推奨パッケージは、利用可能でインストールできる場合にのみインストールされます。特定のパッケージをインストールした後や、ハードウエアを追加したことによって、新しく推奨されるパッケージをインストールするには、下記のコマンドを実行します:

> sudo zypper install-new-recommends

このコマンドは、たとえば Web カメラや無線 LAN デバイスを接続したような場合に有用です。これにより、デバイスを利用するためのドライバと、関連するソフトウエアがそれぞれ存在すれば、インストールされるようになります。なお、ドライバと関連ソフトウエアは、ハードウエア要件が合致した場合にのみインストールされます。

2.1.4 zypper を利用したソフトウエアの更新 Edit source

zypper では 3 種類の方法でソフトウエアを更新することができます。 1 つめの方法は修正 (パッチ) をインストールする方法で、 2 つめは同じパッケージの新しいバージョンをインストールする方法、そして最後はディストリビューション全体を更新する方法です。ディストリビューション全体を更新する場合は zypper dist-upgrade を使用しますが、こちらに関しては 第12章 「システムのアップグレードとシステムの変更 をお読みください。

2.1.4.1 必要な全パッケージのインストール Edit source

openSUSE Leap修正を適用する 作業は、インストール済みのパッケージを新しいバージョンに更新する場合の最も信頼できる方法です。必要な全てのパッケージが適切なバージョンになるよう保証し、 競合する (矛盾もしくは衝突の発生する) バージョンのパッケージは除外されるようになります。

お使いのシステムに対して、提供されている全ての修正をインストールするには、下記のコマンドを実行します:

> sudo zypper patch

お使いのコンピュータに設定されているリポジトリを利用して、提供されている全ての修正を現在のインストール状態と比較して、インストール作業を行います。これらの修正が必要なものであれば (optional (任意指定) または feature (機能追加) でなければ) 、それらを即時にインストールします。 zypper patch コマンドが正常に終了すると、敢えてインストールしないように選択したものを除いて、全てのパッケージから脆弱性が取り除かれることになります。

なお、インストールしようとしている修正がシステムの再起動を必要とするような変更を伴う場合は、その旨が事前に警告されます。

また、 zypper patch コマンドは、サードパーティ製のリポジトリが提供する修正については、適用を行いません。サードパーティ製のリポジトリについても更新を行いたい場合は、 with-update というコマンドオプションを追加してください。

> sudo zypper patch --with-update

任意指定の修正もあわせてインストールしたい場合は、下記のように実行します:

> sudo zypper patch --with-optional

特定の Bugzilla バグ番号に関連する全ての修正をインストールしたい場合は、下記のように実行します:

> sudo zypper patch --bugzilla=番号

特定の CVE データベースエントリに対応する全ての修正をインストールしたい場合は、下記のように実行します:

> sudo zypper patch --cve=番号

たとえば、 CVE 番号 CVE-2010-2713 に対応するセキュリティ修正をインストールするには、下記のように実行します:

> sudo zypper patch --cve=CVE-2010-2713

また、 zypper やパッケージ管理システム自身に対する修正のみをインストールするには、下記のように実行します:

> sudo zypper patch --updatestack-only

なお、 updatestack-only オプションを指定すると、他のリポジトリが提供する更新をあわせてインストールするようなコマンドオプションは、無効化されることに注意してください。

2.1.4.2 修正の一覧表示 Edit source

どのような修正が提供されているのかを確認するにあたって、 zypper は下記のような情報を提供します:

必要な修正の数

必要な修正の数 (お使いのシステムに適用可能で、まだインストールされていないもの) を表示するには、 patch-check コマンドを使用します:

> zypper patch-check
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...

5 個のパッチが必要です (1 個のセキュリティパッチ)

このコマンドでは、 --updatestack-only オプションをあわせて指定することができます。これを指定すると、 zypper とパッケージ管理システム自身に関わる修正のみを表示します。

必要な修正の一覧表示

必要な全ての修正 (お使いのシステムに適用可能で、まだ適用されていないもの) を一覧表示するには、 list-patches コマンドを使用します:

全ての修正の一覧表示

既に適用済みのものを含め、 openSUSE Leap に対して提供されている全ての修正を一覧表示するには、 zypper patches コマンドを使用します。

なお、特定の問題に限定して修正を一覧表示したり、インストールしたりすることもできます。特定の修正のみを一覧表示するには、 zypper list-patches に続いて下記のオプションを設定してください:

Bugzilla のバグ番号を指定する方法

特定の Bugzilla バグ番号に関連する全ての修正を一覧表示するには、 --bugzilla オプションを指定します。

特定のバグに対する修正を一覧表示するには、 --bugzilla=番号 のようにしてバグ番号を指定します。複数の Bugzilla バグに関連する修正を検索するには、バグ番号をカンマで区切って指定してください。たとえば下記のようになります:

> zypper list-patches --bugzilla=972197,956917
CVE 番号を指定する方法

CVE (Common Vulnerabilities and Exposures; 汎用脆弱性公開) データベースの項目番号に関連する全ての修正を一覧表示するには、 --cve オプションを使用します。

特定の CVE データベースエントリに対応する修正を一覧表示するには、 --cve=NUMBER のようにして CVE 番号を指定します。複数の CVE データベースエントリに関連する修正を検索するには、 CVE 番号をカンマで区切って指定してください。たとえば下記のようになります:

> zypper list-patches --cve=CVE-2016-2315,CVE-2016-2324
競合するパッケージのある修正
パッチ openSUSE-SLE-15.3-2022-333 に関する情報:
-------------------------------------------------
リポジトリ    : Update repository with updates from SUSE Linux Enterprise 15
名前          : openSUSE-SLE-15.3-2022-333
バージョン     : 1
アーキテクチャ : noarch
ベンダ         : maint-coord@suse.de
状態           : 必要
カテゴリ       : security
重要度         : important
作成日         : Fri Feb  4 09:30:32 2022
対話性         : reboot
概要           : Security update for xen
説明           :
    This update for xen fixes the following issues:

    - CVE-2022-23033: Fixed guest_physmap_remove_page not removing the p2m mappings. (XSA-393) (bsc#1194576)
    - CVE-2022-23034: Fixed possible DoS by a PV guest Xen while unmapping a grant. (XSA-394) (bsc#1194581)
    - CVE-2022-23035: Fixed insufficient cleanup of passed-through device IRQs. (XSA-395) (bsc#1194588)
提供           : patch:openSUSE-SLE-15.3-2022-333 = 1
競合           : [22]
    xen.src < 4.14.3_06-150300.3.18.2
    xen.noarch < 4.14.3_06-150300.3.18.2
    xen.x86_64 < 4.14.3_06-150300.3.18.2
    xen-devel.x86_64 < 4.14.3_06-150300.3.18.2
    xen-devel.noarch < 4.14.3_06-150300.3.18.2
[...]

上記の修正には 22 個のパッケージの特定バージョンに対して競合が設定されていますが、これらにはいずれも脆弱性が存在していたり、その脆弱性によって影響を受けたりするバージョンが指定されています。列挙されている競合のうち、いずれか 1 つでも該当するものがあると、この修正は 必要 として認識されます。 zypper patch を実行すると、必要とされる全ての修正をインストールしようとします。なお、何らかの問題が発生した場合はその旨を報告し、必要なすべての修正がインストールされていない旨を報告します。上記に示されているとおり、競合はパッケージのバージョンを上げるか、もしくはパッケージそのものを削除することで解決できます。 SUSE の更新リポジトリには、上記の競合を解決できる修正済みバージョンが提供されていることから、そのまま更新するのが一般的な方法となるわけです。なお、依存関係の問題やパッケージロック (施錠) 等によってパッケージを更新できない場合は、ユーザの承認を得てこれらを取り除こうとします。

不要な修正であるかどうかに関わらず修正を一覧表示したい場合は、 --all オプションをお使いください。たとえば CVE 番号が割り当てられている全ての修正を一覧表示するには、下記のように実行します:

> zypper list-patches --all --cve
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...

発信番号  | 番号          | パッチ            | カテゴリ     | 重要度    | 状態
---------+---------------+-------------------+-------------+-----------+----------------------------------------------------
cve      | CVE-2019-0287 | SUSE-SLE-Module.. | recommended | moderate  | 必要
cve      | CVE-2019-3566 | SUSE-SLE-SERVER.. | recommended | moderate  | 不要
[...]

2.1.4.3 新しいバージョンのパッケージのインストール Edit source

リポジトリ内に新しいバージョンのパッケージだけが用意されていて、修正としては提供していない場合、 zypper patch は何も行いません。利用可能な新しいバージョンに更新したい場合は、下記のように実行します:

> sudo zypper update
重要
重要

zypper update では問題のあるパッケージを無視するように動作します。たとえばパッケージがロック (施錠) されている場合は、より新しいバージョンが存在していても zypper update では何も行わなくなります。逆に zypper patch では、パッケージに脆弱性が含まれていると判断される場合、競合は報告されます。

個別のパッケージを更新したい場合は、 update もしくは install のコマンドでパッケージ名を指定してください:

> sudo zypper update パッケージ名
> sudo zypper install パッケージ名

インストール可能な全ての新しいパッケージを一覧表示するには、下記のように実行します:

> zypper list-updates

ただし、下記の条件に該当する新しいバージョンだけが表示されることに注意してください:

  • 既にインストールされているパッケージと同じベンダ (製造元) であること。

  • 既にインストールされているパッケージのリポジトリと同じか、もしくは高い優先順位が設定されていること。

  • インストール可能であること (全ての依存関係が満たされていること) 。

インストール可能であるかどうかにかかわらず、利用可能な 全ての 新しいパッケージを一覧表示するには、下記のように実行します:

> sudo zypper list-updates --all

なぜインストール可能であると判断されないのかについては、上述の zypper install または zypper update コマンドでパッケージ名を指定するとわかります。

2.1.4.4 孤立したパッケージの検出 Edit source

zypper を利用してリポジトリを削除したり、システムをアップグレードしたりしたあとは、いくつかのパッケージが 孤立した 状態になることがあります。これらの 孤立した パッケージは、設定されている有効なリポジトリ内には存在していないパッケージを意味します。これらは下記のコマンドを実行することで、一覧表示することができます:

> sudo zypper packages --orphaned

出力された一覧を元に、それらを現状のまま維持しておくか、不要なパッケージであるものとして安全に削除しておくことができます。

2.1.5 削除したファイルを使用しているプロセスやサービスの検出 Edit source

修正のインストールやパッケージの更新/削除などを行った場合、更新や削除によって置き換えられたり削除されたりしたファイルを、実行中のプロセスが使用したままになっていることがあります。このような状況を検出するには、 zypper ps コマンドをお使いください。これにより、削除されたファイルを使用しているプロセスを一覧で表示することができます。なお、プロセスが既知のサービスに属している場合は、サービス側から再起動することができるようにするため、サービス名もあわせて表示されます。既定では zypper ps は表形式で出力します:

> zypper ps
PID   | PPID | UID | ユーザ | コマンド      | サービス     | ファイル
------+------+-----+--------+--------------+--------------+-------------------
814   | 1    | 481 | avahi  | avahi-daemon | avahi-daemon | /lib64/ld-2.19.s->
      |      |     |        |              |              | /lib64/libdl-2.1->
      |      |     |        |              |              | /lib64/libpthrea->
      |      |     |        |              |              | /lib64/libc-2.19->
[...]
PID: そのプロセスの ID
PPID: 親プロセスの ID
UID: プロセスを実行しているユーザの ID
ユーザ: プロセスを実行しているユーザのログイン名
コマンド: プロセスで使用しているコマンド
サービス: サービス名 (コマンドがシステムサービスに属している場合のみ)
ファイル: 削除されたファイルの一覧

zypper ps の出力形式は、下記のように指定することで変更することができます:

zypper ps -s

削除されたファイルの一覧を表示せず、短い表形式にします。

> zypper ps -s
PID   | PPID | UID  | ユーザ   | コマンド     | サービス
------+------+------+---------+--------------+--------------
814   | 1    | 481  | avahi   | avahi-daemon | avahi-daemon
817   | 1    | 0    | root    | irqbalance   | irqbalance
1567  | 1    | 0    | root    | sshd         | sshd
1761  | 1    | 0    | root    | master       | postfix
1764  | 1761 | 51   | postfix | pickup       | postfix
1765  | 1761 | 51   | postfix | qmgr         | postfix
2031  | 2027 | 1000 | tux     | bash         |
zypper ps -ss

システムサービスに属しているプロセスのみを表示します。

PID   | PPID | UID  | ユーザ  | コマンド      | サービス
------+------+------+---------+--------------+--------------
814   | 1    | 481  | avahi   | avahi-daemon | avahi-daemon
817   | 1    | 0    | root    | irqbalance   | irqbalance
1567  | 1    | 0    | root    | sshd         | sshd
1761  | 1    | 0    | root    | master       | postfix
1764  | 1761 | 51   | postfix | pickup       | postfix
1765  | 1761 | 51   | postfix | qmgr         | postfix
zypper ps -sss

削除されたファイルを使用しているシステムサービスのみを表示します。

avahi-daemon
irqbalance
postfix
sshd
zypper ps --print "systemctl status %s"

再起動を必要としているサービスに対して、状態を取得するためのコマンドを表示します。

systemctl status avahi-daemon
systemctl status irqbalance
systemctl status postfix
systemctl status sshd

サービスの取り扱いについて、詳しくは 第10章 「systemd デーモン をお読みください。

2.1.6 zypper を利用したリポジトリの管理 Edit source

zypper におけるインストールや修正のインストールは、いずれもリポジトリの設定に依存しています。システムに設定されているリポジトリを一覧表示するには、下記のコマンドを実行します:

> zypper repos

出力は、たとえば下記のようになります:

例 2.1: zypper - 既知のリポジトリの一覧表示
> zypper repos
#  | 別名                  | 名前              | 有効   | GPGチェック | 更新
---+-----------------------+------------------+--------+-------------+-------
 1 | Leap-15.1-Main        | Main (OSS)       | はい    | (r ) はい  | はい
 2 | Leap-15.1-Update      | Update (OSS)     | はい    | (r ) はい  | はい
 3 | Leap-15.1-NOSS        | Main (NON-OSS)   | はい    | (r ) はい  | はい
 4 | Leap-15.1-Update-NOSS | Update (NON-OSS) | はい    | (r ) はい  | はい
[...]

様々なコマンドでリポジトリを指定する際、 zypper repos コマンドの出力で表示される別名や URI のほか、番号も指定することができます。リポジトリの別名とは、リポジトリに対して設定する短い名前で、コマンドでの指定を簡略化するための仕組みです。なお、リポジトリに対して何らかの編集作業を行うと、番号が変わることがありますので、ご注意ください。別名については、明示的に変更しない限り、変わることはありません。

既定では URI やリポジトリの優先順位は表示されません。全ての詳細情報をあわせて表示したい場合は、下記のコマンドを実行してください:

> zypper repos -d

2.1.6.1 リポジトリの追加 Edit source

リポジトリを追加するには、下記のように実行します:

> sudo zypper addrepo URI 別名

URI はインターネットリポジトリの場合は URL を、ネットワークリソースやディレクトリ、 CD や DVD の場合は、それぞれの形式で指定します (詳しくは https://ja.opensuse.org/openSUSE:Libzypp_URI をお読みください) 。 別名 はリポジトリに対して設定する、短い独自の名前を指定します。別名は自由に設定することができますが、他のリポジトリの別名とは異なるものでなければなりません。既に使用されている別名を設定しようとすると、 zypper は警告を表示します。

2.1.6.2 リポジトリの更新 Edit source

zypper は設定済みのリポジトリから、変更されたパッケージの情報を取得することができます。変更された情報を取得するには、下記のコマンドを実行します:

> sudo zypper refresh
注記
注記: zypper の既定の動作

既定では、いくつかのコマンドで refresh を自動的に実行します。そのため、このコマンドを明示的に実行する必要はありません。

また、 refresh コマンドでは、無効化されたリポジトリの変更も取得することができます。これを実行するには、 --plus-content オプションを指定します:

> sudo zypper --plus-content refresh

このオプションは、リポジトリ内の変更を取得しますが、無効化されたリポジトリは同じ状態のまま (つまり、無効化されたまま) になります。

2.1.6.3 リポジトリの削除 Edit source

一覧からリポジトリを削除するには、 zypper removerepo で削除したいリポジトリの別名または番号を指定します。たとえば 例2.1「zypper - 既知のリポジトリの一覧表示」 の状態から Non-OSS Repository リポジトリを削除するには、下記のいずれかのコマンドを実行します:

> sudo zypper removerepo 4
> sudo zypper removerepo "Non-OSS Repository"

2.1.6.4 リポジトリの修正 Edit source

zypper modifyrepo コマンドを使用することで、リポジトリを有効化したり無効化したりすることができます。このほか、このコマンドではリポジトリの設定 (自動更新や名前、優先順位など) も変更することができます。たとえば下記のコマンドを実行すると、 updates という名前のリポジトリの自動更新を有効化し、優先順位を 20 にします:

> sudo 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 という別名に変更しています:

> sudo zypper renamerepo 'Mozilla Firefox' firefox

2.1.7 zypper を利用したリポジトリやパッケージの問い合わせ Edit source

zypper では、様々な方法でリポジトリやパッケージの問い合わせを行うことができます。利用可能な全ての製品 (products) やパターン (patterns) 、パッケージ (packages) や修正 (patches) などを一覧で表示するには、下記のコマンドをお使いください:

> zypper products
> zypper patterns
> zypper packages
> zypper patches

特定のパッケージに対して全てのリポジトリを検索するには、 search を使用します。また、特定のパッケージに関する情報を取得するには、info コマンドを使用します。

2.1.7.2 特定の能力を指定する検索 Edit source

特定の能力設定を指定してパッケージを検索したい場合は、what-provides コマンドを使用します。たとえば Perl モジュールの SVN::Core を提供するパッケージを検索したい場合は、下記を実行します:

> zypper what-provides 'perl(SVN::Core)'

what-provides パッケージ名rpm -q --whatprovides パッケージ名 に似た仕組みですが、 RPM コマンドは RPM データベース (インストールされている全てのパッケージに対するデータベース) 内のみを検索するのに対して、 zypper はインストールされていないものを含めて、任意のリポジトリ内にあるパッケージを検索します。

2.1.7.3 パッケージの情報表示 Edit source

単一のパッケージの情報を表示したい場合は、 info コマンドに続いて正確なパッケージ名を指定します。これにより、指定したパッケージに対する詳細な情報が表示されます。指定したパッケージ名が、どのリポジトリ内にも見つからない場合は、パッケージ名以外を対象として検索を行い、詳細情報を表示します。また、種類を指定 (-t オプションを設定) して情報を要求した場合で、その種類が見つからない場合、詳細な情報を表示せずに該当するもののみを表示します。

また、ソースパッケージを指定すると、このコマンドはソースパッケージから構築されたバイナリパッケージを表示します。バイナリパッケージを指定した場合、このコマンドはパッケージを構築する際に使用するソースパッケージを表示します。

このパッケージが必要とするパッケージや、推奨するパッケージについても表示を行いたい場合は、それぞれ --requires (必要とするもの) または --recommends (推奨するもの) オプションを指定してください:

> zypper info --requires MozillaFirefox

2.1.8 zypper の設定 Edit source

zypper では、設定ファイルを利用することで、システム全体もしくはユーザ単位で、動作を恒久的に変更することができます。システム全体に対する変更を行いたい場合は、 /etc/zypp/zypper.conf ファイルを編集してください。また、ユーザ単位で設定を変更したい場合は、 ~/.zypper.conf ファイルを編集してください。 ~/.zypper.conf ファイルが存在しない場合は、 /etc/zypp/zypper.conf ファイルを雛形としてお使いください。具体的には、左記のファイルを ~/.zypper.conf にコピーしてから、必要な変更を行ってください。設定可能な項目について、詳しくはファイル内のコメントをお読みください。

2.1.9 トラブルシューティング Edit source

設定済みのリポジトリが提供するパッケージにアクセスできない場合 (たとえば、いずれかのリポジトリ内に存在するにもかかわらず、パッケージを見つけることができない場合) は、リポジトリを更新することで解決する場合があります:

> sudo zypper refresh

それでもうまく動かない場合は、下記をお試しください:

> sudo zypper refresh -fdb

これにより、生のメタデータを強制的にダウンロードして、完全な更新とデータベースの再構築を行います。

2.1.10 btrfs ファイルシステムにおける zypper のロールバック機能 Edit source

ルートパーティションに btrfs ファイルシステムを使用していて、かつ snapper がインストールされている場合、 zypper はファイルシステムに対して変更点をコミットする際、自動的に snapper を呼び出して、ファイルシステムのスナップショットを採取します。これらのスナップショットは、 zypper によってなされた変更点を元に戻したいような場合に利用することができます。詳しくは 第3章 「Snapper によるシステムの復元とスナップショット管理 をお読みください。

2.1.11 さらなる情報 Edit source

コマンドラインからのソフトウエア管理について詳しく調べたい場合は、 zypper help または zypper help  コマンド を実行するか、 zypper(8) のマニュアルページをお読みください。完全で詳細なコマンドリファレンスを読みたい場合や、主要なコマンドが書かれた チートシート を見たい場合、もしくは zypper をスクリプトやアプリケーション内で使用する方法について調べたい場合は、 https://ja.opensuse.org/SDB:Zypper_%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9 をお読みください。最新の openSUSE Leap でのソフトウエアの更新情報について知りたい場合は、 https://ja.opensuse.org/openSUSE:Zypper_%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3 をお読みください。

2.2 RPM パッケージマネージャ Edit source

RPM (RPM パッケージマネージャ) は、ソフトウエアパッケージを管理するために使用するツールです。主なコマンドは rpmrpmbuild です。ユーザやシステム管理者、そしてパッケージの作成者からパワフルな RPM データベースに対して問い合わせを行い、インストール済みのソフトウエアに関する詳細な情報を引き出すことができるようになっています。

rpm には 5 種類のモードが存在しています。それぞれインストールと削除 (もしくは更新) 、 RPM データベースの再構築と RPM データベースや個別の RPM 書庫に対する問い合わせ、そしてパッケージの一貫性チェックおよびパッケージへの署名の各機能です。一方の rpmbuild は、純粋なソースコードからインストール可能なパッケージを構築する機能を提供します。

インストール可能な RPM 書庫は、特殊なバイナリ形式になっています。書庫にはインストールすべきプログラムファイルのほか、インストール時に rpm が読み込んで、ソフトウエアパッケージの設定に使用するメタデータや、 RPM データベース内に保存する各種の情報などが含まれています。また、 RPM 書庫は通常、 .rpm という拡張子が設定されます。

ヒント
ヒント: ソフトウエア開発パッケージ

パッケージによっては、ソフトウエア開発に必要なコンポーネント (ライブラリ、ヘッダファイルなど) が別途のパッケージに分割されていることがあります。これらの開発用パッケージは、ソフトウエア自身 (たとえば最新の GNOME パッケージなど) をコンパイルする場合にのみ必要なものです。開発用パッケージは -devel という名前で識別できるようになっていて、たとえば alsa-develgimp-devel のような名前で提供されています。

2.2.1 パッケージの発行者の検証 Edit source

RPM パッケージには GPG の署名が付与されています。 RPM パッケージの署名を検証するには、 rpm --checksig  パッケージ名-1.2.3.rpm のように実行します。これで SUSE から提供されているパッケージなのか、それとも他の信頼できる提供元からのパッケージなのかを判別することができます。また、この仕組みはインターネット経由でパッケージを更新する場合には、特にお勧めの機能です。

2.2.2 パッケージの管理: インストール/更新/削除 Edit source

通常は、 RPM パッケージのインストールは至ってシンプルに、 rpm -i パッケージ.rpm を実行するだけで済みます。このコマンドは、依存関係が満たされていて、かつ他のパッケージとの間で矛盾が発生しない場合に限って成功します。何らかの問題が発生した場合、 rpm は依存関係を満たすために必要なパッケージを一覧で表示します。裏側では、 RPM データベースは 1 つのファイルが複数のパッケージに属してしまったりする矛盾が発生しないように処理を行います。なお、 rpm にオプションを指定することで、これらの既定値を無視して強制的にインストールすることができますが、これは知識のあるユーザ向けの機能です。これによってシステムの一貫性が損なわれたり、場合によってはシステムの更新機能を阻害してしまったりすることがあります。

また、 -U (もしくは --upgrade) と -F (もしくは --freshen) は、パッケージを更新する際に使用するオプションです (たとえば rpm -F パッケージ のように実行します) 。このコマンドは古いバージョンのファイルを削除して、即時に新しいバージョンのファイルをインストールする動作を行います。ただし、 -U を指定した場合、その時点でインストールされていないパッケージであればインストールを行うのに対し、 -F ではインストールされていないパッケージの場合は何も行いません。また、更新を行う際、 rpm は設定ファイルを下記の方式で注意深く書き換えます:

  • システム管理者側で設定ファイルを書き換えていない場合、 rpm は単純に新しいバージョンの設定ファイルを書き込みます。システム管理者側での作業は何も発生しません。

  • システム管理者側で設定ファイルを書き換えている場合、 rpm は変更したファイルを .rpmorig もしくは .rpmsave (バックアップファイル) という拡張子を付けて保存し、新しいバージョンの設定ファイルを書き込みます。これは通常、インストールされている設定ファイルと新しいバージョンの設定ファイルが異なる場合にのみ行われます。この場合は、バックアップファイル ( .rpmorig もしくは .rpmsave ) と新しくインストールされた設定ファイルとを比較して、新しい設定ファイルに必要な変更を加える作業を行うことになります。作業が終わったら、 .rpmorig.rpmsave のファイルは削除しておいてください。今後の更新の際に問題を引き起こす可能性があるためです。

  • なお、対応する .spec ファイル内に noreplace という指定があった場合、設定ファイルが書き換えられていると .rpmnew というファイルが作成されます。

更新作業後、設定ファイルの比較が終わったら .rpmsave.rpmnew ファイルは削除しておいてください。これは、今後の更新の際に問題を引き起こす可能性があるためです。なお、 .rpmorig は、対象のファイルが RPM データベース内で認識されていなかった場合に設定されます。

それ以外の場合は .rpmsave が生成されます。言い換えると、 .rpmorig は他の形式から RPM に更新した場合にのみ生成されるもので、 .rpmsave は古い RPM から新しい RPM に更新した場合に生成されます。また、 .rpmnew にはシステム管理者が変更した設定ファイルの内容は含まれていません。これらのファイルの一覧は、 /var/adm/rpmconfigcheck 内に用意されています。また、設定ファイルによっては、継続的な稼働を目的として、上書きを行わないようにしているものもあります (例: /etc/httpd/httpd.conf) 。

ちなみに、 -U スイッチでの更新は、 -e オプションでいったんパッケージを削除してから、 -i でインストールし直す処理と等価では ありません 。できる限り -U で更新することをお勧めします。

パッケージを削除するには、 rpm -e パッケージ名 を実行します。このコマンドは、パッケージの依存関係に未解決のものがない場合にのみ削除を行います。言い換えると、たとえば他のアプリケーションが Tcl/Tk を必要としている限り、理論上は Tcl/Tk を削除することができないことを意味します。この場合でも、 RPM はデータベースの支援を必要とします。もしも (依存関係に問題が内にもかかわらず) 何らかの理由で削除ができなくなってしまった場合は、 --rebuilddb オプションを使用して RPM データベースを再構築して解決を試みてください。

2.2.3 差分 (デルタ) RPM パッケージ Edit source

差分 (デルタ) RPM パッケージは、古いバージョンと新しいバージョンの RPM パッケージのうち、差異のある部分だけを保持するパッケージです。古いバージョンの RPM パッケージに対して差分 RPM を適用することで、新しいバージョンの RPM を生成することができます。差分 RPM はインストール済みの RPM に対しても適用することができますので、古いバージョンの RPM を保持しておく必要はありません。差分 RPM パッケージは修正 RPM よりもずっと小さいサイズにすることができますので、インターネットを介して更新パッケージを転送するような場合に便利な仕組みです。ただし、差分 RPM での更新処理は、純粋な RPM や修正 RPM に比べて CPU サイクルを多く消費するため、その点ではデメリットとなります。

差分 RPM スイート (deltarpm パッケージ) には、 makedeltarpmapplydelta の各コマンドが用意されていて、これらを利用することで差分 RPM パッケージを作成したり適用したりすることができるようになっています。下記のコマンドは差分 RPM を作成するためのコマンドで、 new.delta.rpm という差分 RPM を、old.rpmnew.rpm の各 RPM から作成します:

> sudo makedeltarpm old.rpm new.rpm new.delta.rpm

applydeltarpm を使用することで、インストール済みの古い RPM (old.rpm) から新しい RPM を再構築することができます:

> sudo applydeltarpm new.delta.rpm new.rpm

ファイルシステム内の古い RPM にはアクセスせずに差分 RPM を適用するには、 -r オプションを使用します:

> sudo applydeltarpm -r old.rpm new.delta.rpm new.rpm

技術的な詳細について、詳しくは /usr/share/doc/packages/deltarpm/README をお読みください。

2.2.4 RPM データベースへの問い合わせ Edit source

-q オプションを使用することで、 rpm は RPM 書庫 (-p) やインストール済みパッケージの RPM データベースに対して、問い合わせを行う機能を提供します。なお、必要な情報を取得するためのスイッチが各種用意されています。詳しくは 表2.1「RPM 検証オプション」 をご覧ください。

表 2.1: RPM 検証オプション

-i

パッケージ情報

-l

ファイル一覧

-f FILE

FILE で指定したファイルを含むパッケージ (FILE ではフルパスを指定する必要があります)

-s

ファイル一覧と状態に関する情報 (-l の機能を含みます)

-d

ドキュメンテーションファイルのみを一覧表示 (-l の機能を含みます)

-c

設定ファイルのみを一覧表示 (-l の機能を含みます)

--dump

ファイル一覧と情報 (-l , -c , -d とあわせて指定する必要があります)

--provides

他のパッケージから --requires で要求することのできる、パッケージの機能一覧

--requires , -R

パッケージが必要とする機能

--scripts

インストールスクリプト (preinstall (インストール前), postinstall (インストール後), uninstall (削除時))

たとえば rpm -q -i wget のように実行すると、 例2.2「rpm -q -i wget のような情報が表示されます。

例 2.2: rpm -q -i wget
Name        : wget
Name        : wget
Version     : 1.19.5
Release     : lp151.4.1
Architecture: x86_64
Install Date: 2019年07月30日 18時26分21秒Tue 30 Jul 2019 02:26:21 PM PDT
Group       : Productivity/Networking/Web/Utilities
Size        : 2881903
License     : GPL-3.0+
Signature   : RSA/SHA256, 2019年04月11日 18時23分42秒, Key ID b88b2fd43dbdc284
Source RPM  : wget-1.19.5-lp151.4.1.src.rpm
Build Date  : 2019年04月11日 18時23分27秒
Build Host  : cloud114
Relocations : (not relocatable)
Packager    : https://bugs.opensuse.org
Vendor      : openSUSE
URL         : https://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.
Distribution: openSUSE Leap 15.1

-f オプションで指定するファイル名は、フルパスを指定した場合にのみ動作します。また、ファイル名は必要な分だけ記述することができます。たとえば下記のようになります:

> rpm -q -f /bin/rpm /usr/bin/wget
rpm-4.14.1-lp151.13.10.x86_64
wget-1.19.5-lp151.4.1.x86_64

ファイル名の一部のみが判明している場合は、 例2.3「パッケージを検索するためのスクリプト」 で示しているようなスクリプトをお使いください。スクリプトのパラメータとしてファイル名の一部を指定して実行してください。

また、 rpm -q --changelog パッケージ名 のように実行すると、特定のパッケージに対する更新情報を、詳細な一覧形式で日付順に取得することができます。

インストール済み RPM データベースに対しては、検証作業を行うことができます。これを行うには、 -V または --verify を指定してください。このオプションを指定すると、 rpm はパッケージ内のファイルのうち、インストール時点から変更されているものを全て表示します。 rpm では、 8 文字の記号を表示して、どのような点に差異があったのかを表示します:

表 2.2: RPM 検証オプション

5

MD5 チェックサム

S

ファイルサイズ

L

シンボリックリンク

T

最終更新日時

D

メジャー/マイナーデバイス番号

U

所有者

G

グループ

M

モード (パーミッションとファイルの種類)

設定ファイルの場合は 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) 。なお、 /usr が 1 GB 程度である場合、バックアップ 1 つあたり 1 MB 程度になります。

2.2.5 ソースパッケージのインストールとコンパイル Edit source

全てのソースパッケージには .src.rpm という拡張子 (ソース RPM) が設定されます。

注記
注記: インストール済みのソースパッケージ

ソースパッケージは、 YaST を利用することでインストールメディアからハードディスクにコピーすることができます。ただし、インストールを行ってもパッケージマネージャの表示が ( [i] ) になることはありません。これは、ソースパッケージが RPM データベース内で管理されないことによるものです。 RPM データベースには、 インストール済みの オペレーティングシステムに対するソフトウエアの情報のみが書かれています。ソースパッケージについては、 インストール を行ってもシステム内にソースコードが保存されるだけです。

rpmrpmbuild で利用する目的で、/usr/src/packages 以下に下記のディレクトリが作成されます (ただし、 /etc/rpmrc のようなファイルで独自に設定した場合を除きます):

SOURCES

オリジナルのソースコード (.tar.bz2.tar.gz など) と、ディストリビューション固有の調整 (多くは .diff.patch など) が含まれます。

SPECS

.spec ファイルが配置されるディレクトリです。これは メタ Makefile と表現しうる仕組みで、 構築 処理を制御するためのファイルです。

BUILD

ソースコードの展開や修正の適用、コンパイルなどをこのディレクトリで行います

RPMS

作成されたバイナリパッケージが配置されるディレクトリです。

SRPMS

ソース RPM が配置されるディレクトリです。

YaST からソースパッケージをインストールすると、 /usr/src/packages 以下に必要な全てのコンポーネントが配置されます。具体的には、ソースコードと修正類が SOURCES に、対応する .spec ファイルが SPECS にそれぞれ配置されます。

警告
警告: システムの安定性への危険について

システムコンポーネント (例: glibc , rpm など) に対しては、下記の手順を試してはなりません。場合によってはシステムの安定性を壊してしまう危険があるためです。

下記の例は、 wget.src.rpm パッケージをインストールした場合の例です。ソースパッケージをインストールすると、下記のようなファイルが作成されます:

/usr/src/packages/SOURCES/wget-1.19.5.tar.bz2
/usr/src/packages/SOURCES/wgetrc.patch
/usr/src/packages/SPECS/wget.spec

rpmbuild -bX /usr/src/packages/SPECS/wget.spec のように実行すると、コンパイル処理が始まります。なお、 X には構築プロセスのどの段階までを実行するのかを指定します (詳しくは --help で表示されるヘルプか、 RPM のドキュメンテーションをお読みください) 。下記には概要説明を記載します:

-bp

/usr/src/packages/BUILD 以下にソースコードを展開し、必要であれば修正を適用します。

-bc

-bp までの処理に加え、追加でコンパイルまで実行します。

-bi

-bp までの処理に加え、構築済みのソフトウエアをインストールする処理まで実行します。注意: パッケージが BuildRoot 機能に対応していない場合、これを実行すると設定ファイルを上書きしてしまいます。

-bb

-bi までの処理に加え、バイナリパッケージの作成まで実行します。コンパイルが成功すれば、 /usr/src/packages/RPMS ディレクトリ内に配置されます。

-ba

-bb までの処理に加え、ソース RPM の作成まで実行します。コンパイルが成功すれば、 /usr/src/packages/SRPMS ディレクトリ内に配置されます。

--short-circuit

いくつかの手順を飛ばして実行します。

作成されたバイナリ RPM は、 rpm -i または rpm -U でインストールすることができます。 rpm でインストールを行うと、 RPM データベース内に現れるようになります。

なお、 spec ファイル内の BuildRoot ディレクティブは廃止予定としてマークされていることに注意してください。どうしてもこの機能が必要な場合は、回避策として --buildroot オプションを指定してください。

2.2.6 build を利用した RPM パッケージのコンパイル Edit source

構築処理を行うにあたっては、多くのパッケージをインストールする必要がありますが、これらはシステムを動作させるにあたっては不要なものです。不要なパッケージのインストールを回避するには、 build をお使いください。これはパッケージを構築するための環境を、現在使用中のものとは別に作成できる仕組みで、 chroot の仕組みを利用して環境の作成と構築を行います。構築環境はハードディスクのほか、 NFS や DVD を利用することができます。環境の作成元となる場所を指定するには、 build --rpms ディレクトリ のように指定してください。なお、 rpm とは異なり、 build コマンドではソースディレクトリ内に .spec を配置します。たとえば wget パッケージを /media/dvd にマウントされた DVD を利用して構築したい場合は、下記のコマンドを 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 のマニュアルページをお読みください。

2.2.7 RPM 書庫および RPM データベース向けツール Edit source

Midnight Commander ( mc ) では、 RPM 書庫の内容を表示することができるほか、一部をコピーしたりすることができます。 Midnight Commander では仮想的なファイルシステムとして表示されるため、通常のメニューオプションを全て利用することができます。また、 F3 を押すと HEADER を表示することができるほか、カーソルキーで書庫の内容を選択して Enter を押すと、内容を表示することができます。また、一部をコピーしたい場合は、 F5 を押します。

YaST モジュールには、完全機能のパッケージマネージャが用意されています。詳しくは 第9章 「ソフトウエアのインストールと削除 をお読みください。

このページを印刷