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:latest
dnfを使ってパッケージの確認
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.rpm
remiリポジトリを追加。
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.3
8.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]nstalled
remiリポジトリの8.3
のモジュールをインストールします。
dnf module install php:remi-8.3
インストール結果の確認
現在のモジュールとパッケージのリストを表示
dnf module list php
remiリポジトリの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 -v
8.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 Technologies
dnfのメリット
phpだけではなくapache、nginx、php-fpmなど他のパッケージでもモジュールでインストールすることができます。
本番環境の構築だけでなく、他の環境をPCでローカル環境として再現する場合などdnfは便利なパッケージ管理コマンドです。
また、モジュール形式でインストールすると有効なバージョンの切り替えもできるらしいので、これはありがたい機能。
dnf module switch-to module:version