こんにちは。サイオステクノロジー OSS サポート担当 山本 です。
今回は前回お話ししたソフトウェアのインストールや管理をいい感じにしてくれる “パッケージ管理システム” の RPM…をより容易に使えるようにしてくれる DNF (Dandified YUM)を見ていきたいと思います。
■そもそもこれは何をするもの?
DNF は先述のとおり、パッケージ管理システムである RPM による管理などをよりいい感じにできるようにサポートしてくれるものです。
DNF 自体もまた、パッケージ管理システムの一つと扱われたりもします。
その性質上、DNF は RPM を使用しているシステム上でのみ使用されます。
類似するソフトウェアとしては、dpkg に対する apt や、DNF の前身である YUM などがあります。
DNF は RPM に関連する様々な機能…特にインストールに関する機能を提供しますが、そのメリットが最もわかりやすい例の一つとしてはパッケージのインストールでしょう。
例えばですが、RPM コマンドでパッケージファイルを使ってパッケージをインストールする場合、
1. 何らかの手段 (該当パッケージファイルを探してダウンロードなど) でパッケージファイルを入手する
2. RPM コマンドでインストールを試みる
3-1-n. 依存性の解決に必要なパッケージを確認する
3-2-n. 何らかの手段で依存性解決に必要なパッケージファイルを入手する
3-3-n. 依存性解決に必要なパッケージのインストールを試みる
4. インストール完了!
のような作業を全て手動でやっていくことになるかと思いますが、DNF ならコマンド一つでこの一連の操作を行なってくれます。
■DNF の基本的な使い方
ここからは、DNF の使用方法の一例を見ていきたいと思います。
今回の例では RedHat Enterprise Linux 9 を使用しますが、こちらは OS インストール時にデフォルトで DNF が使用可能な状態になっているはずです。
DNF を使用できる他の Linux のディストリビューションでも、基本的にはデフォルトで DNF が使用可能なハズです。
■パッケージのインストール:dnf install
DNF で RPM パッケージをインストールする場合は、以下のようなコマンドを実行します。
先述のとおり、RPM のパッケージファイルを事前に準備する必要などはありません。
$ sudo dnf install
一例として、”postfix” というパッケージをインストールしたいなら以下のようになります。
見てのとおり、依存性の解決が必要な場合には自動的に必要なパッケージを探し出してまとめてインストールしてくれます。
インストール内容に問題がなければ、“y” を入力するとインストール処理が行われます。
インストールしたくない場合は “N” を入力します。
$ sudo dnf install postfix : Dependencies resolved. ======================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================== Installing: postfix x86_64 2:3.5.9-19.el9 rhel-9-appstream-rhui-rpms 1.5 M Installing dependencies: libicu x86_64 67.1-9.el9 rhel-9-baseos-rhui-rpms 9.6 M Transaction Summary ======================================================================================================================== Install 2 Packages Total download size: 11 M Installed size: 37 M Is this ok [y/N]:
■DNF はどこからパッケージファイルを持ってくるのか
このように DNF では事前に RPM のパッケージファイルを用意しておかなくてもパッケージをインストールしてくれますが、これは自動的にパッケージファイルを入手してインストールしてくれるだけであって、パッケージファイルが不要というわけではありません。
さて、では DNF が使用するパッケージファイルはどこから出てくるのでしょうか?
その答えは…大体想像はつくかと思いますが、ネットワーク上からです。
DNF を十全に利用するには、通常(※) “RPM のパッケージファイル置き場” と言える “リポジトリ” というページが必要になります。
また、当然ながら使用するリポジトリの URL へアクセス可能なネットワーク環境も必要になります。
使用するリポジトリの URL は、/etc/yum.repos.d (または /etc/dnf/dnf.conf) 内の “baseurl” “metalink” または “mirrorlist” のいずれかで指定します。
DNF は指定したリポジトリからのみパッケージファイルを取得するため、リポジトリに存在していないパッケージファイルのパッケージはインストールすることはできません。(※)
他方、リポジトリからパッケージファイルを取得する都合上、DNF で使用するリポジトリは管理元・管理方針などを確認の上、信頼できると判断したもののみを使用するようにしてください。
前回お話ししたとおり、悪意あるスクリプトが含まれるパッケージファイルにより、様々な問題が発生しないとは言い切れないためです。
※ 予めパッケージファイルを用意しておけば、必ずしもリポジトリは必要というわけではありません。
事前に用意したパッケージファイルを使用する場合、”sudo dnf install ” でインストール処理を行うことができます。
■パッケージのアップデート:dnf upgrade
インストール済みのパッケージをアップデートしたい場合は、以下のようなコマンドを実行します。
$ sudo dnf upgrade
上記コマンドでは、インストール済みの全てのパッケージを可能な限り最新のバージョンにアップデートしようとします。
以前にもお話ししたとおり、パッケージを最新の状態に保つのは脆弱性対策の観点において非常に重要であり、それをコマンド一つで一括で行うことができる “dnf upgrade” コマンドは非常に有用です。
$ sudo dnf upgrade : Dependencies resolved. ======================================================================================================================== Package Arch Version Repository Size ======================================================================================================================== Installing: kernel x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 1.9 M kernel-core x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 46 M kernel-modules x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 34 M Upgrading: NetworkManager x86_64 1:1.40.0-1.el9 rhel-9-baseos-rhui-rpms 2.2 M NetworkManager-cloud-setup x86_64 1:1.40.0-1.el9 rhel-9-appstream-rhui-rpms 71 k :
アップデートがあるかの確認だけをまず行いたい場合は、”check-update” を使うこともできます。
$ sudo dnf check-update
他方、パッケージ名を指定することで指定したパッケージのみをアップデートしたり、
パッケージ名とバージョン番号を合わせて指定することで、指定したバージョンへアップデートを行うことも可能です。
$ sudo dnf upgrade (インストール済みのものより古いバージョンに変更したい場合は以下。※ ダウングレードは一般的に非推奨です) $ sudo dnf downgrade
$ sudo dnf upgrade kernel-5.14.0-162.12.1.el9_1 : Dependencies resolved. ======================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================== Installing: kernel x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 1.9 M kernel-core x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 46 M kernel-modules x86_64 5.14.0-162.12.1.el9_1 rhel-9-baseos-rhui-rpms 34 M Transaction Summary ======================================================================================================================== :
■パッケージファイルのダウンロード:dnf download
何らかの理由でパッケージファイルのダウンロードのみを行いたい場合、以下のようなコマンドを使用できます。
$ sudo dnf download
(このコマンドに限らずですが)バージョンを指定しない場合、原則としてそのパッケージで利用可能な最新版が対象になります。
■特定の要素が含まれるパッケージの確認:dnf provides
$ sudo dnf provides
上記のようなコマンドで、インストール済みパッケージまたはリポジトリ上から指定した要素に関連するパッケージを探すことができます。
指定できるのは例えばコマンドやファイル・ディレクトリ、依存性の名前などがあります。
$ sudo dnf provides cd : bash-5.1.8-4.el9.x86_64 : The GNU Bourne Again shell Repo : @System Matched from: Filename : /usr/bin/cd bash-5.1.8-4.el9.x86_64 : The GNU Bourne Again shell Repo : rhel-9-baseos-rhui-rpms Matched from: Filename : /usr/bin/cd bash-5.1.8-5.el9.x86_64 : The GNU Bourne Again shell Repo : rhel-9-baseos-rhui-rpms Matched from: Filename : /usr/bin/cd bash-5.1.8-6.el9_1.x86_64 : The GNU Bourne Again shell Repo : rhel-9-baseos-rhui-rpms Matched from: Filename : /usr/bin/cd [ec2-user@ip-172-31-8-243 ~]$ sudo dnf provides "libicuuc.so.67()(64bit)" : libicu-67.1-9.el9.x86_64 : International Components for Unicode - libraries Repo : rhel-9-baseos-rhui-rpms Matched from: Provide : libicuuc.so.67()(64bit) $
■パッケージの更新履歴:dnf history
$ sudo dnf history
上記コマンドにより、DNF を使って行なったインストール・アップデートなどの履歴を表示することができます。
$ sudo dnf history : ID | Command line | Date and time | Action(s) | Altered ------------------------------------------------------------------------------------------------------------------------ 1 | install postfix | 2023-02-06 05:37 | Install | 2
この更新履歴は更に、”dnf history info” や “dnf history rollback” など更新履歴を介した操作に使うことができます。
■最後に
今回は DNF について見てきました。
ここで紹介したコマンドはごく一部ですが、主に RPM のパッケージのインストールに関わる部分を強力にサポートしてくれるものであることはなんとなく感じてもらえるかと思います。
DNF でインストールするパッケージは RPM のパッケージであるため、DNF でインストールしたパッケージも前回お話しした RPM コマンドで操作・確認することができます。
そう頻繁にパッケージを操作することはあまりないかもしれませんが、前回の RPM も合わせて実はかなり様々な操作や情報確認ができるんだ、ということは頭の片隅に置いておくと何かの役に立つかもしれません。
特に、”dnf upgrade” コマンドは定期的に実行しておきたいですね。
(他の回)
わからないなりに理解したい RPM