以下の内容はhttps://let.blog.jp/tag/dnfより取得しました。


dnf5 速い
昔はそんなに気にならなかったのですが 最近って dnf がすごく重たく感じます
特に各コマンドの前に行われるリポジトリの更新に時間がかかってます
ダウンロードは仕方ないとして それの前後で固まってる時間があります
パッケージ数が少ない AlmaLinux だとそれほどかかりませんが fedora ではかなり待たされるときがあります

どうにかしたいと思っていたら dnf5 が使えるようです
fedora だと dnf で dnf5 というパッケージをインストールすれば使えます
今の最新の fedora は 39 ですが 38 でもインストールできました
まだ dnf5 は正式ではないようで別パッケージとしてインストールが必要という状況だからか AlmaLinux の方には dnf5 パッケージとしては提供されてないようです

少し使ってみた感じ 同じように使えました
そして高速です
体感で結構変わります
ただ出力の見た目が変わっていて 個人的には今の dnf のほうが見やすくて好きです

実際の処理時間を比較してみました

fedora38 の Docker コンテナ環境に git をインストールします

dnf install git -y
dnf5 install git -y

事前にキャッシュはそれぞれクリアしておきます

dnf clean all
dnf5 clean all

キャッシュの管理は別になってるようです

結果は

dnf
real    1m1.498s
user 0m38.245s
sys 0m2.827s

dnf5
real    0m32.621s
user 0m13.929s
sys 0m2.522s

実時間 (real) で約 2 倍の差です
これは早く dnf5 がデフォルトになって欲しいですね

一応詳細なコマンドの実行ログはここにおいてます
https://gist.github.com/61edfbf85d436a9ac941770499e96e34
dnf install 時の GPG キーのインポートに失敗する
dnf でパッケージをインストールしようとしたらこんなエラーが出ました

Signature not supported. Hash algorithm SHA1 not available.

最近の AlmaLinux9 環境だと SHA1 を使った署名はサポートされてないようです
しかしパッケージは SHA1 なのでエラーになってインストールできません

完全なエラーはこんな感じ

Importing GPG key 0x9B1BE0B4:
Userid : "NSolid <nsolid-gpg@nodesource.com>"
Fingerprint: 6F71 F525 2828 41EE DAF8 51B4 2F59 B5F9 9B1B E0B4
From : /etc/pki/rpm-gpg/NODESOURCE-NSOLID-GPG-SIGNING-KEY-EL
Is this ok [y/N]: y
warning: Signature not supported. Hash algorithm SHA1 not available.
Key import failed (code 2). Failing package is: nodejs-2:20.10.0-1nodesource.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/NODESOURCE-NSOLID-GPG-SIGNING-KEY-EL
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: GPG check FAILED

とはいえインストールする必要があります
古いアルゴリズムも許可するには

update-crypto-policies --set LEGACY

を使えば良いみたいです
このあとで再度インストールしようとするとエラーがなく実行できます

もとに戻すにはこれです

update-crypto-policies --set DEFAULT

古いアルゴリズムを許可するのではなくそもそもチェック自体をスキップするという方法もあります
こっちは dnf install に 「--nogpgcheck」 オプションをつけるだけです
インストールしたいコマンドのパッケージ名がわからないとき
ps コマンドってデフォルトで入ってないこともあって 追加でインストールしたいことがあります
ps コマンドをインストールするのに必要なパッケージは RPM だと

procps-ng

です

多くのコマンドはコマンド名のままなのに特殊過ぎます
覚えられません

そういうときはインストールするコマンドのパスを指定すればいいです

dnf install /usr/bin/ps

これで procps-ng がインストールできます
大抵のコマンドは /usr/bin にインストールされるので困ったときはやってみるといいです
Node.js のリポジトリで Invalid configuration value: failovermethod=priority エラーが出てた
AlmaLinux に nodesource から nodejs のリポジトリを追加すると failovermethod=priority が不正な設定値というエラーが出てた
install でも info でも何かの dnf コマンドを実行すると毎回表示される

# dnf install nodejs
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/nodesource-el8.repo; Configuration: OptionBinding with id "failovermethod" does not exist
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/nodesource-el8.repo; Configuration: OptionBinding with id "failovermethod" does not exist
Last metadata expiration check: 0:00:36 ago on Thu Jan 27 03:21:10 2022.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
nodejs x86_64 2:16.13.2-1nodesource nodesource 30 M
Installing dependencies:
platform-python-pip noarch 9.0.3-20.el8 baseos 1.7 M
python3-pip noarch 9.0.3-20.el8 appstream 19 k
python3-setuptools noarch 39.2.0-6.el8 baseos 162 k
python36 x86_64 3.6.8-38.module_el8.5.0+2569+5c5719bc appstream 18 k
Enabling module streams:
python36 3.6

Transaction Summary
========================================================================================================================
Install 5 Packages

Total download size: 32 M
Installed size: 92 M
Is this ok [y/N]:


# dnf info nodejs
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/nodesource-el8.repo; Configuration: OptionBinding with id "failovermethod" does not exist
Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/nodesource-el8.repo; Configuration: OptionBinding with id "failovermethod" does not exist
Last metadata expiration check: 0:01:03 ago on Thu Jan 27 03:21:10 2022.
Available Packages
Name : nodejs
Epoch : 2
Version : 16.13.2
Release : 1nodesource
Architecture : x86_64
Size : 30 M
Source : nodejs-16.13.2-1nodesource.src.rpm
Repository : nodesource
Summary : JavaScript runtime
URL : http://nodejs.org
License : MIT and ASL 2.0 and ISC and BSD
Description : Node.js is a platform built on Chrome's JavaScript runtime
: for easily building fast, scalable network applications.
: Node.js uses an event-driven, non-blocking I/O model that
: makes it lightweight and efficient, perfect for data-intensive
: real-time applications that run across distributed devices.

dnf では failovermethod オプションは削除されて使えないからみたい
https://bugzilla.redhat.com/show_bug.cgi?id=1961083

設定ファイルはこんな感じなので failovermethod の行を 2 箇所消せばこのエラー表示は消える

# cat /etc/yum.repos.d/nodesource-el8.repo
[nodesource]
name=Node.js Packages for Enterprise Linux 8 - $basearch
baseurl=https://rpm.nodesource.com/pub_16.x/el/8/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL

[nodesource-source]
name=Node.js for Enterprise Linux 8 - $basearch - Source
baseurl=https://rpm.nodesource.com/pub_16.x/el/8/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
gpgcheck=1

リポジトリを追加した手順は nodesource のリポジトリに書かれてる方法
https://github.com/nodesource/distributions#rpm

curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -

サポート対象に CentOS8, RHEL8, AlmaLinux, RockyLinux, Fedora35 などがあるので dnf を対象にしてるはずなのに・・・

探すと issue はあったけどまだ対応されてないみたい
https://github.com/nodesource/distributions/issues/1311

そもそも CentOS8 からは dnf module が使えて リポジトリの追加は必須じゃない
リポジトリ追加してない状態で 「dnf module list nodejs」 の結果

Name                Stream              Profiles                                          Summary
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
nodejs 12 common [d], development, minimal, s2i Javascript runtime
nodejs 14 common [d], development, minimal, s2i Javascript runtime
nodejs 16 common [d], development, minimal, s2i Javascript runtime

10~16 までの LTS はどれでも選べる
CentOS7 だとリポジトリ追加が必要だったから移行時に 8 系の AlmaLinux でも追加してたけど こういうこともあるし追加無しで良さそう
dnf の使い方サンプル
なにかおかしいとき

dnf clean all


履歴の一覧

sudo dnf history


履歴一覧から指定パッケージを含むものだけ

sudo dnf history git

upgrade もでてくる


履歴の詳細

sudo dnf history info 1

履歴の番号を指定する
スペース区切りで複数指定できる


指定のパッケージを含む履歴の詳細

sudo dnf history info python3

パッケージを含む履歴番号が複数あるなら全部表示される


ユーザがインストールしたものだけ

sudo dnf history userinstalled

依存関係で入ったのが出てこないので別環境に移行するときになにをインストールするか考えるときに便利
自分でインストールしてないのも少しある kernel, grub2, lvm2, xfsprogs など


パッケージの詳細

dnf info nano


指定パスのファイルを含むパッケージの詳細

dnf info /usr/bin/zsh


パッケージのインストール

sudo dnf install v8


指定パスのファイルを含むパッケージのインストール

sudo dnf install /usr/bin/fish


URL の rpm をインストール

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-28.noarch.rpm


ローカルの rpm をインストール

sudo dnf install /tmp/download/dmd-2.080.0-0.fedora.x86_64.rpm


グループをインストール

sudo dnf install @GNOME
sudo dnf group install GNOME

install からグループをインストールするには @ が必要
group install に @ つけるとグループが見つからない


グループのサマリー

dnf group


グループの一覧

dnf group list


グループの詳細

dnf group info KDE


パッケージの再インストール

sudo dnf reinstall sqlite


指定パスのファイルを含むパッケージの再インストール

sudo dnf reinstall /var/lib/pgsql


パッケージのアンインストール

sudo dnf remove php


指定パスのファイルを含むパッケージのアンインストール

sudo dnf remove /var/lib/mysql


パッケージすべてをアップグレード

sudo dnf upgrade


指定のパッケージをアップグレード

sudo dnf upgrade kernel


アップグレードのあるパッケージ一覧

dnf list upgrades


全パッケージの一覧

dnf list


パッケージ検索

dnf list fire\*
dnf search fire\*

list だとパッケージ名から検索する
インストール済みや利用可能などにわけられてる
search だと名前と概要から検索する
インストール済みかどうかは見えない


指定パスのファイルを含むパッケージを検索

dnf list /usr/bin/irb
dnf provides /usr/bin/irb

表示のされ方が違うけど結果は同じ


最近更新のあったパッケージ一覧

dnf list recent

最近がどれくらいなのかは知らない


インストール済みパッケージ一覧

dnf list installed
rpm -qa


リポジトリ一覧

dnf repolist
dnf repolist --all

--all があると有効無効も表示される


リポジトリの詳細

dnf repoinfo


指定リポジトリの詳細

dnf repoinfo fedora


アップデート情報

dnf updateinfo

アップデートの内容のサマリー
セキュリティ通知が 5 件 バグ修正通知が 20 件 みたいな情報が表示される


指定パッケージのアップデート情報

dnf updateinfo nginx


指定パッケージを必要としているパッケージを検索

dnf repoquery --whatrequires nodejs


指定パッケージをレコメンドするパッケージを検索

dnf repoquery --whatrecommends npm

npm なら nodejs がでてくる


パッケージの中のファイル一覧を表示

dnf repoquery -l micro
rpm -ql micro


インストールする rpm の場所(URL)を表示

dnf repoquery --location clang


エイリアスみたいなもの

dnf repoquery --whatprovides python

python をインストールすると実際にインストールされるパッケージを見れる
python2 が表示される
mysql だと community-mysql と mariadb の 2 つがあるけど実際にインストールされるのは mariadb のほう


OS アップグレード

プラグイン dnf-plugin-system-upgrade を入れて

sudo dnf system-upgrade download --releasever=28
sudo dnf system-upgrade reboot

ダウンロード後に reboot でアップグレードされる


nevra

name, epoch, version, release, arch のこと

httpd-0:2.4.33-5.fc28.x86_64

名前         : httpd
バージョン : 2.4.33
リリース : 5.fc28
アーキテクチ : x86_64
dnf のパッケージ関係がよくわかんない
repoquery に
--whatdepends <capability>
--whatconflicts <capability>
--whatenhances <capability>
--whatobsoletes <capability>
--whatprovides <capability>
--whatrecommends <capability>
--whatrequires <capability>
--whatsuggests <capability>
--whatsupplements <capability>

とかいろいろあるけどそれぞれが具体的にどういうものなのかドキュメントに書いてないしよくわからない
recommends と suggests とか何が違うの?
requires と recommends だと言いたいことはなんとなくはわかるけど recommends のものでも 拒否する選択肢出てこないし違いがわからない
recommends のパッケージは必須ではないから recommend されたパッケージを後から消しても元パッケージは消えない?

一番上の whatdepends はドキュメントにあるのに実際に使うと そんなオプションないってエラーでるし
usage のオプション一覧だと載ってない
同じバージョンのはずなのに



以上の内容はhttps://let.blog.jp/tag/dnfより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14