Red Hat Certified System Administrator (RHCSA) #8 パッケージと repository: dnf、modules、AppStream
#7 ファイルシステム まででストレージとマウントを終えました。システムを運用するにはその上にソフトウェアを載せる必要があり、RHEL でソフトウェアを扱う標準ツールが dnf です。今回は dnf でパッケージをインストール・削除・検索する基本から、repository を追加する方法、RHEL 8 以降に登場した AppStream の module stream と profile、そして dnf の下にある rpm を直接扱う方法 までを整理します。
RHCSA でパッケージの領域は作業数こそ多くありませんが、確実に点数を取れる領域 です。「特定の repository を追加してそこからパッケージをインストールせよ」「特定の module stream を有効化してインストールせよ」といった問題が定番で出るので、コマンドを手に覚えておくと短い時間で点数を確保できます。
dnf と rpm の関係 #
RHEL のパッケージは rpm 形式であり、個別の rpm ファイルをインストールする低レベルツールが rpm コマンドです。ただし rpm は依存関係を自動で解決してくれません。あるパッケージをインストールしようとして別のパッケージが必要な場合、その依存パッケージを自分で探して一緒にインストールしなければなりません。
その不便を解決する上位ツールが dnf です。dnf は repository からメタデータを受け取って依存関係を自動で解決し、必要なパッケージを一緒にダウンロードしてインストールします。RHEL 7 まで使っていた yum の後継であり、RHEL 8 からは yum が dnf のエイリアスとして動作します。したがって試験では dnf を使いますが、手に馴染んだ yum を使っても結果は同じです。
| ツール | 役割 |
|---|---|
rpm | 個別の rpm ファイルのインストール・照会・検証。依存関係の自動解決なし |
dnf | repository ベース。依存関係の自動解決、検索、グループ、module 管理 |
整理すると、日常のインストールは dnf で行い、インストール済みのパッケージを照会したり検証したりするときに rpm を併用する流れです。
dnf 基本コマンド #
インストール、削除、アップデート #
最も基本となる 3 つです。
dnf install httpd # パッケージのインストール
dnf install httpd mod_ssl # 複数パッケージを一度に
dnf install -y httpd # 確認プロンプトを自動承認
dnf remove httpd # 削除
dnf update # システム全体のアップデート
dnf update httpd # 特定パッケージだけアップデート試験では確認プロンプトに一つずつ答えるより、-y オプションで自動承認するほうが速いです。
検索と情報照会 #
パッケージ名を正確に知らないときに検索します。
dnf search web server # キーワードでパッケージを検索
dnf info httpd # バージョン、要約、ライセンスなどの詳細
dnf list available # インストール可能なパッケージ一覧
dnf list installed # インストール済みのパッケージ一覧provides でファイルの出所パッケージを探す #
RHCSA で特に有用なコマンドです。「あるコマンドやファイルがどのパッケージに入っているか」がわからないとき、provides で逆引きします。
# 特定のコマンドを提供するパッケージを探す
dnf provides /usr/sbin/semanage
# パスにワイルドカードも可能
dnf provides */htpasswdたとえば semanage が必要なのにコマンドがない場合、上のコマンドで policycoreutils-python-utils パッケージがそのコマンドを提供しているという事実を見つけ、インストールできます。
パッケージグループ #
複数のパッケージをまとめた単位が グループ です。開発ツールやサーバー環境のように一度にインストールするパッケージの集まりをグループで扱います。
dnf group list # グループ一覧
dnf group list hidden # 隠れたグループまで
dnf group info "Development Tools" # 含まれるパッケージを確認
dnf group install "Development Tools" # グループのインストール
dnf group remove "Development Tools" # グループの削除グループ名に空白があるので引用符で囲む必要があります。dnf groupinstall のようにつなげて書く古い表記も動作しますが、RHEL 9 では dnf group install が推奨されます。
dnf history #
dnf はすべてのトランザクションを記録します。この記録で過去の作業を確認し、間違えたインストールを丸ごと元に戻せます。
dnf history # トランザクション履歴
dnf history info 5 # 特定トランザクションの詳細
dnf history undo 5 # 該当トランザクションを元に戻す
dnf history undo last # 最後の作業を元に戻すインストール作業を間違えたとき、undo でそのトランザクションが触れたパッケージを一度に整理できて便利です。
repository を扱う #
dnf がパッケージを探す場所が repository です。設定ファイルは /etc/yum.repos.d/ 下の .repo ファイルに入っています。
現在の repository を確認 #
dnf repolist # 有効な repository 一覧
dnf repolist all # 無効を含む全一覧config-manager で repository を追加 #
URL 形式の repository を追加する最も簡単な方法が dnf config-manager です。
dnf config-manager --add-repo https://example.com/repo/myrepo.repo # URL 追加
dnf config-manager --set-enabled myrepo # 有効化
dnf config-manager --set-disabled myrepo # 無効化config-manager がなければ dnf install -y dnf-plugins-core でインストールできます。
.repo ファイルを直接作成 #
試験では baseurl と gpgcheck を直接指定する問題がよく出ます。/etc/yum.repos.d/ 下に .repo ファイルを作って次のように書きます。
[myrepo]
name=My Custom Repository
baseurl=http://content.example.com/rhel9/BaseOS
enabled=1
gpgcheck=0各項目の意味は次のとおりです。
| キー | 意味 |
|---|---|
[myrepo] | repository 識別子 (ID)。角括弧の中の短い名前 |
name | 人が読む説明 |
baseurl | パッケージがある場所。http://、https://、file:// が可能 |
enabled | 有効化の可否。1 なら使用 |
gpgcheck | パッケージ署名の検証の可否。1 なら検証、0 なら省略 |
gpgcheck を 1 にすると gpgkey= に鍵の場所を一緒に指定しなければなりません。試験で鍵情報が与えられなければ gpgcheck=0 にしておくほうが安全です。
# .repo ファイルを作った後、認識を確認
dnf repolist
dnf install -y mypackageローカル repository #
マウントした ISO やローカルディレクトリを repository として使うときは baseurl に file:// を使います。
[localmedia]
name=Local Media
baseurl=file:///mnt/repo/BaseOS
enabled=1
gpgcheck=0上のようにしておくとインターネットなしでローカルパスからパッケージをインストールできます。インターネットが遮断された試験環境の特性とつながっているので、覚えておく価値があります。
AppStream と module #
RHEL 8 から既定の repository が 2 つに分かれます。
| repository | 内容 |
|---|---|
| BaseOS | OS の中核構成要素。カーネル、基本ツールなど |
| AppStream | アプリケーションとランタイム。データベース、言語、Web サーバーなど |
AppStream の中核は module です。1 つのソフトウェアを複数のバージョンで提供するための構造であり、次の 2 つの概念が重要です。
- stream: 同じソフトウェアのバージョンの枝分かれ。たとえば
nodejsの18stream と20stream - profile: その stream をどんな構成でインストールするか。たとえば
common、minimal、development
module 一覧と情報 #
dnf module list # 全 module 一覧
dnf module list nodejs # 特定 module の stream と profile
dnf module info nodejs # module の詳細情報dnf module list nodejs の出力で stream の横の [d] は既定 (default) stream を、[e] は有効 (enabled) stream を、[i] はインストール (installed) 表示を意味します。
stream の有効化とインストール #
特定のバージョンを使うには、その stream を有効化してからインストールします。
dnf module enable nodejs:18 # 特定 stream の有効化
dnf module install nodejs:18 # stream を明示してインストール (enable+install)
dnf module install nodejs:18/minimal # profile まで明示dnf module install nodejs:18 のように stream を明示すると enable と install が一緒に処理されるので、試験ではこの 1 行で済ませるほうが速いです。
stream の切り替え #
すでに別の stream がインストールされた状態でバージョンを変えるには、reset で初期化してから望む stream をインストールします。
dnf module reset nodejs # 現在の有効/インストール module を初期化
dnf module install nodejs:20 # 望む stream をインストール
dnf module list nodejs # 切り替え結果を確認1 つの module で 2 つの stream を同時に有効化することはできません。そのためバージョンの切り替えは常に reset 後に再インストールする流れに従います。試験で「既存のバージョンを削除して別の stream に変えよ」という問題が出たら、この順序を覚えておけば大丈夫です。
rpm を直接扱う #
dnf でインストールした後に状態を確認したり、個別の rpm ファイルを扱ったりするときに rpm コマンドを使います。照会 (query) オプションをまとめて覚えておくとよいです。
rpm -qa # インストール済みの全パッケージ一覧
rpm -q httpd # 特定パッケージのインストール有無
rpm -qf /etc/httpd/conf/httpd.conf # ファイル -> 所属パッケージ
rpm -ql httpd # パッケージ -> インストールファイル一覧
rpm -qi httpd # パッケージの説明情報
rpm -qc httpd # 設定ファイルだけ抽出
rpm -qd httpd # ドキュメントファイルを見る-qf と -ql は方向が逆です。-qf はファイルからパッケージを探し、-ql はパッケージからファイルを並べます。混同しやすいので「f は file で問う、l は list で広げる」で区別すれば大丈夫です。
rpm -V で変更を検証 #
インストール後にファイルが変わったかを検証するときに -V (verify) を使います。
rpm -V httpd # 特定パッケージの整合性検証
rpm -Va # 全パッケージの検証出力に何もなければ変更がないという意味で、変更があれば各行にどの属性が変わったかをフラグで表示します。
| フラグ | 意味 |
|---|---|
S | ファイルサイズの変更 |
M | 権限 (mode) の変更 |
5 | MD5 チェックサムの変更 (内容の変更) |
T | 修正時刻 (mtime) の変更 |
c | 該当ファイルが設定ファイルであること |
たとえば S.5....T. c /etc/httpd/conf/httpd.conf は設定ファイルのサイズと内容、時刻が変わったことを意味します。設定を自分で直したなら自然な結果です。
ローカル rpm ファイルのインストール #
dnf でもローカルファイルをインストールでき、この方法は依存関係も一緒に処理するのでより安全です。
dnf install ./mypackage-1.0.rpm # 依存関係の自動解決
rpm -ivh mypackage-1.0.rpm # 依存関係の解決なし可能なら dnf でインストールして依存関係の問題を避けるほうがよいです。
試験ポイント #
- 特定の repository を追加してそこからインストール が定番の出題です。
/etc/yum.repos.d/に.repoファイルを作ってbaseurlとgpgcheck=0を指定した後、dnf repolistで認識されるか確認してインストールします。 - repository の追加は
dnf config-manager --add-repo URLでも可能ですが、baseurl を直接指定せよという問題は.repoファイルを手で書くほうが正確です。 - module stream のインストールと切り替え もよく出ます。
dnf module install 名前:ストリームの 1 行で enable と install を処理し、バージョンを変えるときはdnf module reset後に再インストールします。 - コマンドやファイルの出所パッケージを探すときは
dnf provides パスを使います。必要なコマンドがないとき、この方法でインストールするパッケージを逆引きします。 rpm -qf(ファイルからパッケージ) とrpm -ql(パッケージからファイル) の方向を混同しないようにします。- パッケージのインストール作業は再起動と無関係に即座に永続適用されますが、repository 設定ファイルが
.repoとしてディスクに残るかは確認します。
まとめ #
この記事で押さえたこと:
- dnf は依存関係を自動で解決する上位ツール であり、rpm は個別ファイルを扱う低レベルツールです。
- dnf の基本コマンド。
install・remove・update・search・info・provides、グループはgroup install、履歴はhistory undoで元に戻します。 - repository は
/etc/yum.repos.d/の.repoファイルで管理し、baseurlとgpgcheckを指定します。ローカルパスはfile://を使います。 - AppStream の module は stream と profile でバージョンを選びます。
dnf module install 名前:ストリームでインストールし、切り替えはreset後に再インストールします。 - rpm の照会。
-qa・-qf・-ql・-Vでインストール状態と整合性を確認します。
次へ: システム運用 #
パッケージでソフトウェアを載せたので、次はそのシステムを運用するツールを扱います。
#9 システム運用: chronyd、journald、cron、systemd timer、tuned では、chronyd で時刻を同期し、journald でログを見て、cron と systemd timer で作業を予約し、tuned で性能プロファイルを適用する作業を自分で打ち込みながら整理します。