Dandified Yum

**Dandified Yum**（ダンディファイド ヤム、略して**DNF**）は、RPMベースのパッケージ管理システムを採用しているLinuxディストリビューション用のパッケージマネージャであるYum 3.4のフォークであり、Yumの事実上の後継バージョン。

DNFは、Fedora 18より試験的に導入が開始され、Fedora 22のバージョンからデフォルトのパッケージ管理システムとして採用されている。dnfパッケージは、Fedoraの（試験的に採用されていた）18以降21以前のバージョンやEPEL 7にも存在する為、Fedora 19の成果を活用しているRHEL 7やCentOS 7などでも使用することができる。

## Yumの抱える問題点
Yumは下記に挙げる欠点を抱えていた。
* ドキュメント化されていない
* 依存関係解決アルゴリズムが壊れている
* 内部関数をリファクタリングすることが不可能

また、YumはPython 2で書かれており、パフォーマンス面で遅くメモリを大量に消費してメモリーリークを引き起こしがちになるなどの問題もあった。

## Yumの後継パッケージ管理システム「Dandified Yum」
DNFは、Yumに替わる後継パッケージ管理システムを期待され、最先端のSATベースの依存関係リゾルバを搭載して、2015年5月26日にリリースされたFedora 22の標準パッケージマネージャとして採用された。Python 3にも対応した。

Yumの問題点は下記のように対処された。
* API ドキュメントの整備。テスト環境の改善。
* より堅固なアルゴリズムと効率的なメモリ消費を兼ね備えた（openSUSEのZYppのために開発された) **libsolv** によって、依存性を解決する。
* Pythonに大きく依存していた点を、 (C言語およびPythonのラッパーである) **hawkey** ライブラリによるPythonとC言語との包括的なAPIに改めて、他言語からも扱いやすくした。
* メモリ消費量低減やメタデータ同期の効率化。

DNFは、RPMに加えlibsolvとhawkeyのライブラリを用いるパッケージ管理システムとなった。 **librepo** を利用して、メタデータやパッケージダウンロードの操作をする。 **libcomps** によって、comps dataの処理や効果的な操作を行う。

パフォーマンス面でも、Yumと比較して速度が改善したとの報告がある。

2016年12月20日、Yumとの互換性の改善を重視した「 DNF-2.0 」がリリースされた。

2018年6月27日、バージョン3の安定版である「DNF-3.0.1」がリリースされた。

2018年12月17日、バージョン4の安定版である「DNF-4.0.9.1」がリリースされた。

## ドキュメント
* http://dnf.readthedocs.org/en/latest/
* https://github.com/rpm-software-management/dnf/wiki/
* `[http://linuxmanpages.net/manpages/fedora20/man8/dnf.8.html/ dnf (8)]`
* `[http://linuxmanpages.net/manpages/fedora20/man8/dnf.conf.8.html/ dnf.conf (8)]`

## 依存関係
### libsolv
* https://github.com/openSUSE/libsolv
* SAT的なアルゴリズムの利用を通してパッケージの依存関係の解決
* パッケージ管理とリポジトリの購読
* C言語、修正BSDライセンス

### hawkey
* https://github.com/rpm-software-management/hawkey
* libsolvライブラリ用の高レベルなAPI
* libsolvに最適のシンプルなC言語とPythonによって書かれたAPI
* C言語、LGPLv2+

### librepo
* https://github.com/tojaj/librepo
* Linuxのリポジトリのメタデータとパッケージをダウンロードする為の(libcURLライクな) APIのライブラリはC言語とPythonから成っている。
* C言語、LGPLv2+

### libcomps
* https://github.com/midnightercz/libcomps
* Libcompsは、Yumの 「yum.comps library」 に替わるものである。そのライブラリは、C言語にPython 2とPython 3を組み合わせて書かれている。
* C言語、LGPLv2+

## コマンド
* `dnf install パッケージ名` : 指定されたパッケージ(および必要に応じてその依存関係)をインストールする
* `dnf remove パッケージ名` : 指定されたパッケージ(および関連する依存関係)を削除する
* `dnf check-update` : 更新可能なパッケージを表示する(実際のアップデートはしない)
* `dnf update` : インストールされている全てのプログラムを更新する
* `dnf upgrade パッケージ名` : パッケージを更新する(パッケージ名を指定していない場合、インストール済パッケージで更新可能な全パッケージを更新する)
* `dnf search キーワード` : キーワードでパッケージを検索する
* `dnf provides パッケージ名` :  指定されたパッケージの依存関係を表示する
* `dnf provides ファイル名` :  指定されたファイルを提供するパッケージを検索する

## 採用例
DNFは、2015年5月にリリースされたFedoraのバージョン22より標準のパッケージ管理システムとして採用されている。

## 出典
* DNF, which may or may not replace Yum 2012-06-27
* DNF and Yum in Fedora 2014-01-15
* Why write a new package manager anyway? 2014-01-16
* https://github.com/rpm-software-management/dnf
* http://www.linux-magazine.com/Online/Features/Will-DNF-Replace-Yum
* http://fedoraproject.org/wiki/Features/DNF
* http://fedoraproject.org/wiki/Changes/ReplaceYumWithDNF Make it default in Fedora 22
* DNF: The New Package Manager Of Fedora 18 2012-06-22
* YUM Will Be Replaced With DNF On Fedora 22 And Later Versions 2014-06-18

## 脚注

## 関連項目
* Yellowdog Updater Modified (Yum)
* RPM Package Manager

## 外部リンク
* 
*