はじめに
RHEL系のLinuxを使っていると、日常的に dnf install を叩きますが、その裏で何が起きているか意識することは少ないのではないでしょうか。
本記事では、dnf install 実行時の内部フローを 1枚の図 で整理し、各ステップを簡潔に補足します。
全体フロー
各ステップの補足
1. リポジトリの探索(libdnf)
dnf install を実行すると、まず libdnf が /etc/yum/repos.d/*.repo を読み込み、有効なRPMリポジトリの一覧を取得します。
/etc/yum/repos.d/
├── base.repo
├── epel.repo
└── appstream.repo
2. パッケージ情報(メタデータ)の取得
リポジトリからパッケージのメタデータ(名前・バージョン・依存関係など)をダウンロードし、指定されたパッケージとその依存パッケージを特定します。
3. RPMパッケージのダウンロードと依存解決
必要な *.rpm ファイルをリポジトリから取得します。依存関係がある場合は、芋づる式に必要なパッケージもすべてダウンロードされます。
4. インストール(librpm)
ダウンロードされたRPMパッケージは librpm によってインストールされます。RPMパッケージはいわば「アーカイブ(圧縮ファイル)」で、中身が解凍されて各ディレクトリに配置されます。
| 配置先 | 内容 |
|---|---|
/usr/bin/, /usr/sbin/
|
実行ファイル |
/etc/ |
設定ファイル |
/usr/share/ |
ドキュメント・リソース |
5. メタデータの記録
最後に、インストールしたパッケージの情報が RPMデータベース(/var/lib/rpm/)に記録されます。これにより rpm -qa での一覧表示や、アンインストール・アップデート時の管理が可能になります。
DNFとRPMの役割の違い
ひとことで整理すると、こうなります。
- DNF(libdnf) ― リポジトリ管理・依存解決・ダウンロードを担当する「司令塔」
- RPM(librpm) ― パッケージの展開・配置・DB記録を担当する「実行部隊」
dnf は内部的に rpm の機能を呼び出しているため、rpm -ivh で直接インストールすることも可能ですが、その場合は依存解決を自分で行う必要があります。
まとめ
dnf install の一連の流れを改めて整理すると、次のようになります。
-
/etc/yum/repos.d/*.repoからリポジトリを特定 - メタデータを取得して依存関係を解決
- RPMパッケージをダウンロード
- librpmがファイルを各ディレクトリに展開・配置
-
/var/lib/rpm/にメタデータを記録
普段何気なく使っているコマンドの裏側を知っておくと、パッケージのトラブルシューティング時にも役立つはずです。
