rpmからyumそしてdnfへ
AlmaLinuxのようなRHEL系のLinuxでは、パッケージをインストールする際にrpm
形式というファイルが使われています。このrpm
形式のファイルは、コマンドやライブラリーをインストールする際に、パッケージとしてコマンド
、ライブラリー
、設定ファイル
、ドキュメント
などを1つのファイルにまとめたものとなっています。さらに、最近ではパッケージ間の依存関係も管理する様になって来ていますので、非常に便利なものです。
このrpm
形式のファイルを管理するためのコマンドが、rpm
コマンドとして使われていました。その後、yum
になり、現在ではdnf
コマンドが使われるようになっています。現在のAlmaLinuxでは、dnf
コマンドが使われていますが、yum
、rmp
を使うこともできるようになっています。
なお、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.repo
とepel.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
コマンドについて紹介して来ました。