dnfとは
dnf は yum の後継となるパッケージ管理コマンドです。
Dandified Yum の略で yum から派生して速度の改善がされていたり、モジュールの切り替えの簡易化などの機能が追加されています。
実際に使ってみる
今回はRedHat UBIで環境を構築して、新しいバージョンのphpを使えるようにしました。
そのままのリポジトリだとPHPのバージョンが7なので、dnfを使用して8系をインストールします。
dockerコンテナを準備する
docker hub から redhat/ubi8 のコンテナを取得
docker pull redhat/ubi8:latestコンテナを起動してシェルスクリプトに入る
docker run -it redhat/ubi8:latestdnfを使ってパッケージの確認
phpがインストールされているか確認する
dnf list installedインストールされていなかったので、いまのリポジトリで使えるPHPを確認する
dnf list php*7.2.24 はありますが、新しいバージョンである8はありませんでした。
8をインストールをするためにリポジトリを追加します。
現在のリポジトリを確認
dnf repolist --all今回使いたいリポジトリは epel と remi。
現在のリポジトリには含まれていなかったのでリポジトリを追加します。
epelリポジトリを追加。
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpmremiリポジトリを追加。
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm改めて追加したリポジトリも含めて使えるPHPを確認する
dnf list php*結果
5.6
7.2
7.3
7.4
8.0
8.1
8.2
8.38.3までのバージョンが使えるようになりました。
バージョンを指定してモジュール形式でインストール
ここで yum であればそのまま
yum install php83のコマンドを入力してパッケージを追加しますが、追加したremiリポジトリからのインストールだと通常時と違いremiフォルダにインストールされます。
今後のことを考えるとフォルダが違うのはあまり望ましくありません。
そこでdnf にはモジュールとして、パッケージのバージョンを指定する方法があります。
モジュールとパッケージのリストを表示
dnf module list php下記のようなリポジトリとパッケージのリストが表示されます。
現在は7.2に[d]がついているので、基本リポジトリの7.2がデフォルトとなっています。
Remi's Modular repository for Enterprise Linux 8 - aarch64
Name                            Stream                              Profiles                                              Summary
php                             remi-7.2                            common [d], devel, minimal                            PHP scripting language
php                             remi-7.3                            common [d], devel, minimal                            PHP scripting language
php                             remi-7.4                            common [d], devel, minimal                            PHP scripting language
php                             remi-8.0                            common [d], devel, minimal                            PHP scripting language
php                             remi-8.1                            common [d], devel, minimal                            PHP scripting language
php                             remi-8.2                            common [d], devel, minimal                            PHP scripting language
php                             remi-8.3                            common [d], devel, minimal                            PHP scripting language
Red Hat Universal Base Image 8 (RPMs) - AppStream
Name                            Stream                              Profiles                                              Summary
php                             7.2 [d]                             common [d], devel, minimal                            PHP scripting language
php                             7.3                                 common [d], devel, minimal                            PHP scripting language
php                             7.4                                 common [d], devel, minimal                            PHP scripting language
php                             8.0                                 common [d], devel, minimal                            PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledremiリポジトリの8.3のモジュールをインストールします。
dnf module install php:remi-8.3インストール結果の確認
現在のモジュールとパッケージのリストを表示
dnf module list phpremiリポジトリの8.3に[e][i]がついていいます。
Remi's Modular repository for Enterprise Linux 8 - aarch64
Name                          Stream                                Profiles                                                Summary
php                           remi-7.2                              common [d], devel, minimal                              PHP scripting language
php                           remi-7.3                              common [d], devel, minimal                              PHP scripting language
php                           remi-7.4                              common [d], devel, minimal                              PHP scripting language
php                           remi-8.0                              common [d], devel, minimal                              PHP scripting language
php                           remi-8.1                              common [d], devel, minimal                              PHP scripting language
php                           remi-8.2                              common [d], devel, minimal                              PHP scripting language
php                           remi-8.3 [e]                          common [d] [i], devel, minimal                          PHP scripting language
Red Hat Universal Base Image 8 (RPMs) - AppStream
Name                          Stream                                Profiles                                                Summary
php                           7.2 [d]                               common [d], devel, minimal                              PHP scripting language
php                           7.3                                   common [d], devel, minimal                              PHP scripting language
php                           7.4                                   common [d], devel, minimal                              PHP scripting language
php                           8.0                                   common [d], devel, minimal                              PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledバージョンを表示。
php -v8.3がインストールされてることが確認できます。
PHP 8.3.3 (cli) (built: Feb 13 2024 15:41:14) (NTS gcc aarch64)
Copyright (c) The PHP Group
Zend Engine v4.3.3, Copyright (c) Zend Technologiesdnfのメリット
phpだけではなくapache、nginx、php-fpmなど他のパッケージでもモジュールでインストールすることができます。
本番環境の構築だけでなく、他の環境をPCでローカル環境として再現する場合などdnfは便利なパッケージ管理コマンドです。
また、モジュール形式でインストールすると有効なバージョンの切り替えもできるらしいので、これはありがたい機能。
dnf module switch-to module:version 
             
                      
                    



