DNF: An Experimental Replacement For YUM
What is DNF?
DNF is a package manager which is an experimental replacement for YUM. It is based on yum and libsolv. This is a preview of the next major version of Yum. It does package management using RPM, libsolv and hawkey libraries. For metadata handling and package downloads it utilizes librepo. To process and effectively handle the comps data we have libcomps.
What is YUM?
As you may know, YUM (Yellowdog Updater, Modified) is a popular package manager for RPM based systems. It automatically computes dependencies and figures out what things should occur to install packages. It makes it easier to maintain groups of machines without having to manually update each one using rpm. Yum has a plugin interface for adding simple features. Yum can also be used from other python programs via its module interface.
The rise of DNF project
After the unfortunate death of the YUM project lead developer Mr. Seth Vidal on July 8, 2013, DNF project got much attention on Fedora team. You can read news about the loss of Seth Vidal here. Probably, YUM will be abandoned and completely replaced by DNF in future Fedora releases. But this is my personal assumption only, the final decision is up to Fedora development team.
DNF is only approved for inclusion in Fedora 18 and later, as it does not have feature-parity with Yum and is still in heavy development. It will live in parallel to YUM, and Yum will remain the default package manager, and may for several more releases.
The latest version DNF 0.4.7 has been released on November 8, 2013.
DNF and all its dependencies are available in Fedora 18 and later, including the rawhide Fedora.
To install DNF on Fedora 18 and later, run the following command in Terminal:
sudo yum install dnf
dnf [options] <command> [<args>...]
DNF usage is very similar to YUM.
For example, to install a new package using YUM, we enter the following command:
sudo yum install <package-name>
Just like YUM, we can install package using DNF as the way we do using YUM.
To install a package using DNF:
sudo dnf install <package-name>
To remove package:
sudo dnf remove <package-name>
To update system:
sudo dnf update
sudo dnf upgrade
DNF Complete list of available Commands
Available commands are:
check-update clean dist-sync distribution-sync downgrade erase group help history info install list makecache provides reinstall repolist search update update-to upgrade upgrade-to
Just like YUM, we can use options to perform a particular action while using DNF commands.
The list of available options are:
--assumeno answer no for all questions
--best Try the best available package versions in transactions.
-C, --cacheonly Run entirely from system cache, don’t update cache
-c <config file>, --config=<config file> config file location
-d <debug level>, --debuglevel=<debug level> Debugging output level.
--disableexcludes=[all|main|<repoid>] Disable the config file excludes. Takes one of three options: - all, disables all config file excludes - main, disables excludes defined in the [main] section - repoid, disables excludes defined for the given repo
-e <error level>, --errorlevel=<error level> Error output level.
-x <package-spec>, --exclude=<package-spec> Exclude packages specified by a name or a glob from the operation.
-h, --help Shows the help.
--installroot=<path> set install root
--nogpgcheck skip checking GPG signatures on packages
-q, --quiet quiet operation
-R <minutes>, --randomwait=<minutes> maximum command wait time
--releasever=<release> configure DNF as if the distribution release was <release>.
--rpmverbosity=<debug level name> debugging output level for rpm
--showduplicates show duplicates, in repos, in list/search commands
-v, --verbose verbose operation, show debug messages.
--version show Yum version and exit
-y, --assumeyes answer yes for all questions
To see the reference for each command, please visit here.
By default, DNF uses the global configuration file at /etc/dnf/dnf.conf and all *.repo files found under /etc/yum.repos.d directory.
The contents of dnf.conf file.
sudo nano /etc/dnf/dnf.conf
[main] keepcache=0 gpgcheck=1 plugins=0 installonly_limit=3 clean_requirements_on_remove=true
There are two types of sections in the configuration files: main and repository.
The main section defines all global configuration options. There should be only one main section.
The repository sections define the configuration for each (remote or local) repository.
For more details about DNF Configuration, please refer here.
DNF in Action On Fedora 19
Let me install a package (ex.httpd) using DNF to view how it looks in action.
As you see in the above picture, there is nothing change and difficult to install a package using DNF. We replaced the word “yum” with “dnf”. The remaining parts exactly same as the way we use in YUM.
Among popular package managers such as APT-GET, YUM and ZYPPER, DNF is very new to the show. As i noted above, DNF isn’t mature yet to fully replace the YUM package manager. It is under heavy development right now and we have to wait for sometime to know what it is going to offer us over YUM.
References: DNF Documentation