Yumに替わる新たなパッケージマネージャ・DNFの覚書

#linux

Fedora 22より、デフォルトのパッケージマネージャが変更されるらしい。 RedHat系のパッケージマネージャといえばYumだったが、これからは DNF (Dandified yum) という次世代パッケージマネージャに替わる。

Fedoraを使ったことが無かったので全く知らなかったのだが、以下の象徴的なタイトルのブログを契機に知ることが出来た。

Yum is dead, long live DNF | DNF

この記事が出た理由は、ブログ投稿と同日の2015/05/11に、DNF 1.0がリリースされたことだろう。 既存の要件を満たし、いよいよ乗り換え準備が出来たというメッセージだ。

DNF 1.0 and DNF-PLUGINS-CORE 0.1.7 Released | DNF

何故、YumでなくDNFなのか

DNFは2012年にYumのフォークプロジェクトとして開始した 1。 何故このプロジェクトが開始したのか、Yum is dead, long live DNFによると、3つの理由があるという。

  1. Undocumented API (APIドキュメントに乏しい)
  2. Broken dependency solving algorithm (依存解決アルゴリズムが壊れている)
  3. Inability to refactor internal functions (内部関数がリファクタリング不能)

これらのような根本的な課題を解決するために、新たなパッケージマネージャの開発に乗らざるを得なかったのだろう。

また、個人的には以下の一文が結構な重みを持っているようにも感じた。

Yum would not survive the “Python 3 as default” Fedora initiative meanwhile DNF is able to run on Python 2 and Python 3.

DNFは今のところ、Python 2系、3系のそれぞれでの動作が保証されているらしい (おそらく将来的にはPython 3系のみをサポートするのだろう。)

DNFを試してみる

DockerのFedora公式パッケージはrelease 21だったので、fedora-upgradeを使ってrelease 22にアップグレードした。

yumコマンドはdeprecatedに

Fedora 22でyumコマンドを使おうとすると、以下のような警告が最初に表示された (ちなみにFedora 22をclean installすると、yumコマンドそのものが無いらしい。)

# yum
Yum command has been deprecated, redirecting to '/usr/bin/dnf '.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

yumで出来ることのほとんどはdnfでも出来る

まあ当たり前といえば当たり前で、dnfにしたからといってユーザ側が特に構えるところは無さそう。

Changes in DNF plugins compared to Yum pluginsChanges in DNF plugins compared to Yum utilitiesを見る限り、プラグインやユーティリティ群の移行も進んでいるようなので、Yumで使ってたプラグインが使えなくなった!という心配も少なそう。

# dnf
You need to give some command
usage: dnf [options] COMMAND

List of Main Commands

autoremove
check-update              Check for available package upgrades
clean                     Remove cached data
distro-sync               Synchronize installed packages to the latest available versions
downgrade                 downgrade a package
group                     Display, or use, the groups information
help                      Display a helpful usage message
history                   Display, or use, the transaction history
info                      Display details about a package or group of packages
install                   Install a package or packages on your system
list                      List a package or groups of packages
makecache                 Generate the metadata cache
provides                  Find what package provides the given value
reinstall                 reinstall a package
remove                    Remove a package or packages from your system
repolist                  Display the configured software repositories
repository-packages       Run commands on top of all packages in given repository
search                    Search package details for the given string
updateinfo                Display advisories about packages
upgrade                   Upgrade a package or packages on your system
upgrade-to                Upgrade a package on your system to the specified version

List of Plugin Commands

migrate                   migrate yum's history, group and yumdb data to dnf

強いて言えば、Ansible, Chef, Puppetのような構成管理ツールの側でこの変更による対応がいずれ迫られるかもしれないということ。 そしてこれら構成管理ツールの利用者は、対応が完了するまでOSの移行がちょっとしづらくなる、ということだろうか。

終わりに

変更点やそれによる恩恵はたくさんありそうだが、APIドキュメントの充実がプラグインの開発環境を良くすることや、予期せぬの依存解決の破損が解消されるなど、コマンド名を除けばユーザにとってのメリットは多そうだという印象。

いずれはCentOS等にも乗っかってくるだろうけど、まだまだ先のことだろうか。