第18回 AlmaLinuxのdnfコマンドについて

rpmからyumそしてdnfへ

AlmaLinuxのようなRHEL系のLinuxでは、パッケージをインストールする際にrpm形式というファイルが使われています。このrpm形式のファイルは、コマンドやライブラリーをインストールする際に、パッケージとしてコマンドライブラリー設定ファイルドキュメントなどを1つのファイルにまとめたものとなっています。さらに、最近ではパッケージ間の依存関係も管理する様になって来ていますので、非常に便利なものです。

このrpm形式のファイルを管理するためのコマンドが、rpmコマンドとして使われていました。その後、yumになり、現在ではdnfコマンドが使われるようになっています。現在のAlmaLinuxでは、dnfコマンドが使われていますが、yumrmpを使うこともできるようになっています。

なお、Raspberry Pi OSの場合には、Debian系としてDebian、Ubuntuと同じようにdeb形式のファイルをaptコマンドで管理する方式となっています。

リポジトリーの管理

RHEL系のdnfコマンドでは、/etc/yum.repos.dディレクトリーにrepoファイルが作成されてリポジトリーを管理しています。

$ ls /etc/yum.repos.d
almalinux-appstream.repo  almalinux-highavailability.repo  almalinux-sap.repo
almalinux-baseos.repo   almalinux-plus.repo   almalinux-saphana.repo
almalinux-crb.repo   almalinux-raspberrypi.repo   epel-testing.repo
almalinux-extras.repo   almalinux-resilientstorage.repo  epel.repo

上記の例では、epel-testing.repoepel.repoが追加されていますが、これはAlmaLinuxにepel-releaseを追加しているためです。

一例として、almalinux-baseos.repoの最初の部分をみると、次の内容になっています。

$ cat almalinux-baseos.repo 
[baseos]
name=AlmaLinux $releasever - BaseOS
mirrorlist=https://mirrors.almalinux.org/mirrorlist/$releasever/baseos
# baseurl=https://repo.almalinux.org/almalinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
metadata_expire=86400
enabled_metadata=1

これがRaspberry Pi OSの場合には、Debian系として/etc/aptディレクトリーが使われていてリポジトリーはsources.listファイルと/etc/apt/sources.list.dディレクトリーに作成した*.listファイルで管理されています。

一例としてsources.listファイルは、次の様な内容になっています。

$ cat sources.list
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free

rpm形式のrepoファイルと比べると非常にシンプルな形式になっています。なお、ここではコメントアウトされている行を省略しています。

これらのファイルを使用して、実際にダウンロードするパッケージのURLを指定していることがわかります。そのため、例えば日本国内のミラーサイトを指定することで早くダウンロードできるようにすることなども行われています。

dnfコマンドの使い方

それでは、実際にdnfコマンドの使い方を見ていきましょう。dnf --helpでヘルプを参照したり、man dnfでマニュアルを参照したりすることが出来ます。ヘルプは、日本語で表示されますがマニュアルは英語のままで表示されていました。

$ dnf --help
$ man dnf

また、コマンドを指定してヘルプを表示することも出来ます。

$ dnf list --help

上記の例では、dnf listに関するヘルプを表示しています。

以下では、dnfコマンドの使い方を簡単にまとめてご紹介していきます。

dnfの履歴を表示する
$ dnf history
履歴の詳細情報を表示する
$ dnf history info <ID番号>
キャッシュをクリアーする
$ sudo dnf clean all
$ sudo dnf clean packages
ソースをダウンロードする
$ dnf download raspberrypi2-kernel4 --source

ここでは、例としてAlmaLinuxのカーネルソースをダウンロードしています。

ダウンロードするURLを表示する
$ dnf download raspberrypi2-kernel4 --source --url

ここでは、例としてダウンロードするAlmaLinuxのカーネルソースのURLを表示しています。現時点では、次のように表示されました。

http://repo.almalinux.org/vault/9.2/raspberrypi/Source/Packages/raspberrypi2-6.1.31-v8.1.el9.src.rpm
パッケージのインストール
$ sudo dnf install -y <パッケージ名またはパッケージファイル名>
$ sudo dnf update -y [<パッケージ名またはパッケージファイル名>]
パッケージの削除
$ sudo dnf remove -y <パッケージ名>
指定した文字列が名前や概要に含まれているパッケージを表示する
$ dnf search <文字列>
キャッシュを更新してから、パッケージを検索する
$ dnf search --refresh <文字列>
指定した名前のパッケージを表示する
$ dnf list <パッケージ名>
インストール済みのパッケージを表示する
$ dnf list --installed
名前の末尾が指定した文字列のインストール済みパッケージを表示する
$ dnf list --installed "*.sh"

この場合には、末尾が”sh”で終わるインストール済みのパッケージを表示します。

具体的には、次のように実行されています。

$ dnf list --installed "*sh"
インストール済みパッケージ
bash.aarch64                         5.1.8-6.el9_1                         @baseos
dracut-squash.aarch64                057-21.git20230214.el9                @baseos
libdhash.aarch64                     0.5.0-53.el9                          @baseos
libssh.aarch64                       0.10.4-8.el9                          @baseos
openssh.aarch64                      8.7p1-30.el9_2                        @baseos
パッケージの情報を表示する
$ dnf info <パッケージ名>
指定したファイルを含むパッケージを探す
$ dnf repoquery -f /usr/sbin/ifconfig
$ dnf provides /usr/sbin/ifconfig

上記の例では、いずれも/usr/sbin/ifconfigコマンドを含むパッケージを表示しています。

パッケージ内のファイルを一覧表示する
$ dnf repoquery -l net-tools

上記の例では、net-toolsパッケージに含まれているファイルを一覧表示します。

グループ数を表示する
$ dnf group

この例としては、次のように応答が返されました。

インストール済みのグループ: 1
利用可能なグループ: 14
グループの一覧を表示する
$ env LANG=C dnf group list

この例では、強制的に英語で表示しています。

グループの情報を表示する
$ dnf group info "Secutiry Tools"
パッケージグループをインストールする
$ sudo dnf group install -y "Security Tools"
パッケージグループを削除する
$ sudo dnf group remove -y "Security Tools"
リポジトリーの一覧を表示する
$ dnf repolist

例として、AlmaLinuxにepel-releaseを追加している場合には、次のように表示されます。

repo id                repo の名前
appstream              AlmaLinux 9 - AppStream
baseos                 AlmaLinux 9 - BaseOS
epel                   Extra Packages for Enterprise Linux 9 - aarch64
extras                 AlmaLinux 9 - Extras
raspberrypi            AlmaLinux 9 - Raspberry Pi
現在無効になっているリポジトリーを表示する
$ dnf repolist --disabled
指定したリポジトリーを有効にする
$ sudo dnf config-manager --enable <リポジトリー名>
名前がraspから始まるリポジトリーを有効にする
$ sudo dnf config-manager --enable "rasp*"

このコマンドを実行した後で、raspberrypiを含むパッケージを検索すると次のようになりました。

$ dnf search raspberrypi
========================= 名前 & 概要 一致: raspberrypi ==========================
raspberrypi2-kernel4-devel-debuginfo.aarch64 : Debug information for package
                                             : raspberrypi2-kernel4-devel
============================= 名前 一致: raspberrypi =============================
almalinux-release-raspberrypi.aarch64 : Raspberry Pi support packages from the
                                      : AlmaLinux Core SIG repository
almalinux-release-raspberrypi.src : Raspberry Pi support packages from the
                                  : AlmaLinux Core SIG repository
linux-firmware-raspberrypi.noarch : Supplemental firmware used by Linux kernel for
                                  : some Raspberry Pi models
linux-firmware-raspberrypi.src : Supplemental firmware used by Linux kernel for
                               : some Raspberry Pi models
raspberrypi2.src : Specific kernel and bootcode for Raspberry Pi
raspberrypi2-firmware.aarch64 : GPU firmware for the Raspberry Pi computer
raspberrypi2-kernel4.aarch64 : The Linux kernel
raspberrypi2-kernel4-devel.aarch64 : Development package for building kernel
                                   : modules to match the kernel
リポジトリーを追加する
$ sudo dnf config-manager --add-repo=<リポジトリー設定ファイル名>
$ sudo dnf config-manager --add-repo=myrepository.repo
$ sudo dnf config-manager --add-repo=http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
パッケージを使ってリポジトリーを追加する
$ sudo dnf install -y epel-release
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.2.rpm

上記の1行目では、「第11回 EPELとneofetchについて」でも紹介しているEPEL用のリポジトリーを追加しています。2行目では、RemiリポジトリーをURLから追加しています。Remiリポジトリーについては、Remi’s RPM repositoryを参照して下さい。

指定したパッケージを更新する
$ sudo dnf upgrade <パッケージ名>

パッケージ名は複数指定することが可能です。また、”*”を使って指定することも出来ます。

ここで、dnf installではパッケージのインストールまたは更新を実行して、dnf upgradeでは更新のみが実行されます。

インストールされているすべてのパッケージを更新する
$ sudo dnf upgrade
指定したグループを更新する
$ sudo dnf group upgrade <グループ名>

また、upgradeの代わりにupdateを指定することもでき、両者は同じ意味になります。

パッケージを1つ前のバージョンにダウングレードする
$ sudo dnf downgrade -y <パッケージ名>
リポジトリーにあるパッケージの全バージョンを表示する
$ dnf --showduplicates list docker-ce

この例ではdocker-ceパッケージの全バージョンを表示します。

指定したバージョンにダウングレードする
$ sudo dnf downgrade -y <パッケージ名>-<バージョン番号>
パッケージファイルを使用してダウングレードする
$ sudo dnf downgrade <RPMパッケージ名>

ちなみに、インストールされているすべてのrpmを確認するためには次のコマンドも実行出来ます。

$ rpm -qa

まとめ

AlmaLinuxの様なRHEL系のLinuxのパッケージを管理していくためには必須となるdnfコマンドについて紹介して来ました。

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!
目次