[CentOS8] yum を愛するあなたに送る、 dnf 乗り換え講座


こんにちは。
開発チームのワイルド担当、まんだいです。

少し前の話になりますが、 CentOS8 がリリースされましたね。

株式会社ビヨンドは一般的には MSP の会社( MSP 以外の事業もあります! ビヨンドのサービス案内 | 株式会社ビヨンド を見てください!)なので、 Linux ディストリビューションの新バージョンが出たとなれば、触らなければ。

今回は、 CentOS を使うならみんな使っている yum コマンドがなくなるよ、というお話をします。

yum コマンドが廃止になります

これはご存じの方ならばやっとかといったところかも知れませんが、 yum コマンドが廃止されます。
パッケージはどうやって管理するんだ、というところが心配になりますが、安心してください。
ちゃんと後継のパッケージ管理システムがちゃんと用意されています!

その後継ツールが dnf です。

dnf に聞き覚えがない方もおられるかも知れません。
ですが、ぽっと出のツールではないことだけお伝えしておきましょう。

dnf は同じRedhat 互換の Fedora というディストリビューションで使われてきているパッケージ管理システムで、これが CentOS にも導入されたというわけです。

なぜ変えたのか。
yum は python2 系なのでいつまでも使い続けられない、という問題があります。

dnf は python3 系で動くため、 CentOS8 はシステムが利用する python のバージョンも python3 系に上がっています。
OS インストール直後は platform-python というシステム用途の python だけがインストールされている状態なので、ユーザーが利用する python は改めてインストールする必要があるようです。

 

dnf コマンドを理解したいので yum でよくやるコマンドを dnf でやってみました

パッケージ管理でよくやる処理を、 dnf コマンドでやってみました。

 

パッケージのリストを見る

パッケージを探すときは yum list | grep [パッケージ名] でいつも探しています。

yum list を dnf でやるとどうなるかというと

dnf list

 

yum の名前が変わっただけですね。

ちなみにインストール済みのパッケージリストを見る場合も

dnf list installed

 

で確認できます。

 

パッケージをインストールする

それでは、パッケージをインストールする場合はどうでしょう。

yum install を dnf でやるとどうなるかというと

dnf install [パッケージ名]

 

こちらも yum が dnf になっただけですね。

 

パッケージをアンインストールする

そろそろ分かってきた頃かも知れませんが、 yum remove を dnf でやるとどうなるかというと

dnf remove [パッケージ名]

 

どうも基本的な使い方はそう変わらないということが分かってきましたね!

 

epel リポジトリを使いたい

epel リポジトリを使う場合はどうでしょうか?

epel リポジトリをインストールするには、次のコマンドでインストールします。

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

# もしくは

dnf install epel-release

 

リポジトリの設定が書いてある epel.repo ファイルはというと、ここまでの流れから dnf 用のディレクトリが /etc 以下にありそうですね。

ls -al /etc/dnf
total 16
drwxr-xr-x.  8 root root  128 Nov 17 05:03 .
drwxr-xr-x. 80 root root 8192 Nov 25 01:18 ..
drwxr-xr-x.  2 root root    6 May 13  2019 aliases.d
-rw-r--r--.  1 root root   82 May 13  2019 dnf.conf
drwxr-xr-x.  2 root root   59 Nov 25 01:18 modules.d
drwxr-xr-x.  2 root root    6 May 13  2019 modules.defaults.d
drwxr-xr-x.  3 root root   89 Nov 17 05:04 plugins
drwxr-xr-x.  2 root root   59 Nov 17 05:04 protected.d
drwxr-xr-x.  2 root root   37 Nov 17 05:03 vars

 

ん? repos.d のようなディレクトリは見当たりません。
それもそのはず。

なんと、 repo ファイル用のディレクトリは、変わらず /etc/yum.repos.d なのでした。
ややこしい!

ls -al /etc/yum.repos.d/
total 84
drwxr-xr-x.  2 root root 4096 Nov 17 05:15 .
drwxr-xr-x. 80 root root 8192 Nov 25 01:18 ..
-rw-r--r--.  1 root root  731 Nov 17 05:15 CentOS-AppStream.repo
-rw-r--r--.  1 root root  712 Nov 17 05:15 CentOS-Base.repo
-rw-r--r--.  1 root root  798 Nov 17 05:15 CentOS-centosplus.repo
-rw-r--r--.  1 root root 1357 Nov 17 05:08 CentOS-CR.repo
-rw-r--r--.  1 root root  668 Aug 14 06:42 CentOS-Debuginfo.repo
-rw-r--r--.  1 root root  756 Nov 17 05:15 CentOS-Extras.repo
-rw-r--r--.  1 root root  356 Nov 17 05:08 CentOS-fasttrack.repo
-rw-r--r--.  1 root root  976 Nov 17 05:08 CentOS-Media.repo
-rw-r--r--.  1 root root  736 Nov 17 05:15 CentOS-PowerTools.repo
-rw-r--r--.  1 root root 1382 Aug 14 06:42 CentOS-Sources.repo
-rw-r--r--.  1 root root   78 Nov 17 05:08 CentOS-Vault.repo
-rw-r--r--.  1 root root 1400 Nov 17 05:08 epel-playground.repo
-rw-r--r--.  1 root root 1249 Oct 10 16:15 epel-playground.repo.rpmnew
-rw-r--r--.  1 root root 1206 Nov 17 05:15 epel.repo
-rw-r--r--.  1 root root 1104 Oct 10 16:15 epel.repo.rpmnew
-rw-r--r--.  1 root root 1354 Nov 17 05:08 epel-testing.repo
-rw-r--r--.  1 root root 1203 Oct 10 16:15 epel-testing.repo.rpmnew

 

といった感じで、repo ファイルを見つけることができました。

ファイルの中身は以前と変わらないようです。

ちなみに、リポジトリの有効 / 無効をコマンドで指定する場合の --enablerepo / --disablerepo オプションの使い方は yum と変わらないようです。

PHPer が大好きな(と勝手に思っている) remi リポジトリは、 epel リポジトリをインストールした上で、以下のコマンドでインストールできます。

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

 

remi リポジトリのサイトに書いてあったことですが、 yum と少し違ったインストール方法ができるようです。

dnf にはモジュールという概念が追加され、 PHP と指定しただけで、 php-cli 、 php-common 、 php-fpm 、 php-json 、 php-mbstring 、 php-xml と基本的なパッケージがインストールされました。
マルチバイト圏に済んでいる我々には当たり前のことですが php-mbstring もデフォルトでインストールされるようになったのはちょっと意外。

なお、このモジュールが導入されたことによる恩恵が、複数バージョンのパッケージの入れ替えが簡単になったこと。

dnf module reset php:remi-7.3
dnf module install php:remi-7.2

 

とすると、サクッとバージョンが変わります。
普段使いすることはないでしょうか、知っておくといざという時何かの役に立つかも知れません。

また、 CentOS8 の AppStream リポジトリに登録されている PHP のバージョンも7.2 に上がっているのでそこまで使う頻度が高くなさそう。
ただし PHP7.2 もセキュリティアップデートが 2020年11月いっぱいまでなので、そう長い間使っていられない事情もあります。

 

まとめ

今回は、 CentOS8 で初めて搭載された dnf というパッケージ管理ツールをご紹介しました。
概ね yum と変わらない印象で、読んでいただいた皆さんの心理的障壁を少しでも下げられたら幸いです。

CentOS7 に systemd がやってきた時のゾッとした気持ちを思い出したもんですが、 dnf はとっつきやすくていいですね。

最後に一言、すぐに yum が使えなくなるわけではなく CentOS8 でも yum コマンドは健在です。

ただ、CentOS8 の yum は dnf のラッパーコマンドのようなものになっていて、 /usr/bin/yum の中でもキーボード入力の処理と dnf のモジュール呼び出ししかしていません。

すでにこの状況ですので、近い将来 yum コマンドは消えていくのは間違いないでしょう。
その時は、この世から消えてなくなったパッケージ管理システムを偲ぶ記事でも書きたいですね。

以上です。


この記事をかいた人

About the author