Preface
Goal: Examine Package Manager, Focus on Command Line Interface
DNF comes, after RPM, Zypp, YUM, and URPMI.
Fedora container in Docker allow people to learn DNF more easily.
DNF is a Package Manager introduced by Fedora.
We need Rawhide
rolling release with more often update,
so that we have a chance to play more with package.
No need to wait for another six month cycle.
Test Bed
Container: Docker
Operating System: Artix (OpenRC )
Window Manager: Herbstluftwm
Since we are going to use docker again,
you can read a common overview here.
Of course you can use virtualization, the issue is distraction.
We need to avoid tendency to focus on GUI tools.
At the same time, limiting the scope to CLI tools.
Most of the time, CLI tools is considered lower level than the GUI one.
Getting Started With Docker
As usual, first, we do attach docker process.
$ docker pull fedora:rawhide
$ docker image list
--format 'table {{.Repository}}\t{{.Size}}'
REPOSITORY SIZE
opensuse/amd64 101MB
dock0/arch 870MB
gentoo/stage3-amd64 873MB
debian 100MB
fedora 232MB
$ docker run -it fedora:rawhide bash
[ root@6f45f67e56ea /]# exit
$ docker ps -a
--format 'table {{.Image}}\t{{.Names}}\t{{.Status}}'
IMAGE NAMES STATUS
opensuse/amd64:tumbleweed elegant_nightingale Exited ( 0) 5 hours ago
debian:stretch dazzling_neumann Exited ( 0) 5 days ago
dock0/arch silly_leakey Exited ( 1) 5 days ago
fedora:rawhide musing_torvalds Up 4 hours
$ docker start musing_torvalds
musing_torvalds
$ docker attach musing_torvalds
[ root@5f1ee8964269 /]#
Package Management
RPM Frontend
DNF (Dandified YUM): Fedora: Python
Get Help
Read the fine manual.
$ man dnf
Since we do need have man-db
nor less
yet.
This is what we can do.
$ dnf help | more
I cannot even be 'help | less'.
DNF Shell
Most modern package manager has shell feature,
that enable user to focus on the task of managing package.
$ dnf shell
Fedora - Rawhide - Developmental pa 168 kB/s | 66 MB 06:38
Last metadata expiration check: 0:13:32 ago on Thu Aug 24 04:58:06 2017.
> clean packages
0 files removed
> clean all
9 files removed
>
Updating System
First thing to do is updating my system as usual.
OS Release
Repository List
Upgrade
Some Extra Command
OS Release
$ cat /etc/fedora-release
Fedora release 27 ( Rawhide)
Repository List
This Fedora container size is only 232MB,
but the $ dnf repolist
command is,
ridiculously required to download 66MB.
$ dnf repolist
Fedora - Rawhide - Developmental packages fo 115 kB/s | 66 MB 09:43
Last metadata expiration check: 0:04:32 ago on Wed Aug 23 10:54:25 2017.
repo id repo name status
* rawhide Fedora - Rawhide - Developmental packages for the next Fedora 61406
[ root@5f1ee8964269 /]#
System Upgrade
update
is deprecated.
$ dnf update
Now update
is just an alias for upgrade
.
$ dnf upgrade --nogpgcheck
Last metadata expiration check: 0:16:45 ago on Wed Aug 23 10:54:25 2017.
Dependencies resolved.
====================================================================
Package Arch Version Repository
Size
====================================================================
Upgrading:
acl x86_64 2.2.52-18.fc27 rawhide 78 k
audit-libs x86_64 2.7.7-5.fc27 rawhide 108 k
basesystem noarch 11-4.fc27 rawhide 8.9 k
bash x86_64 4.4.12-9.fc27 rawhide 1.5 M
bzip2-libs x86_64 1.0.6-24.fc27 rawhide 46 k
ca-certificates noarch 2017.2.16-4.fc27 rawhide 452 k
chkconfig x86_64 1.10-3.fc27 rawhide 186 k
coreutils x86_64 8.27-15.fc28 rawhide 1.2 M
coreutils-common x86_64 8.27-15.fc28 rawhide 1.9 M
cracklib x86_64 2.9.6-9.fc28 rawhide 87 k
This is a long process with a lot of text,
that I have to put the output into four figures.
Extra Commands
Common clean up procedures.
Actual we will discuss each later.
Now I just feel the need to summarized the sequence here.
$ dnf clean packages
171 files removed
$ dnf clean all
9 files removed
$ dnf repoquery --unsatisfied
Fedora - Rawhide - Developmental pa 227 kB/s | 66 MB 04:56
Last metadata expiration check: 0:03:58 ago on Wed Aug 23 11:50:45 2017.
$ dnf repoquery --duplicated
Last metadata expiration check: 0:08:58 ago on Wed Aug 23 11:50:45 2017.
$ dnf list extras
Last metadata expiration check: 0:07:14 ago on Wed Aug 23 11:50:45 2017.
$ sudo dnf autoremove
Last metadata expiration check: 0:11:24 ago on Wed Aug 23 11:50:45 2017.
Dependencies resolved.
Nothing to do .
Package IRSIF
Install, Remove, Search, Info, File
Read the fine manual. Helpless or help more.
We need to install man
.
Package Install
I demand to read, manual pages sir!
$ dnf install man
Last metadata expiration check: 0:58:52 ago on Wed Aug 23 11:50:45 2017.
Dependencies resolved.
====================================================================
Package Arch Version Repository Size
====================================================================
Installing:
man-db x86_64 2.7.6.1-5.fc27 rawhide 881 k
Installing dependencies:
groff-base x86_64 1.22.3-11.fc27 rawhide 1.0 M
less x86_64 487-5.fc27 rawhide 159 k
libpipeline x86_64 1.4.2-3.fc27 rawhide 52 k
libstdc++ x86_64 7.1.1-7.fc27.1 rawhide 461 k
Transaction Summary
====================================================================
Install 5 Packages
Total download size: 2.5 M
Installed size: 7.9 M
Is this ok [ y/N]:
Note that I accidentaly misstype man
in command line,
rather than man-db
.
You can reinstall
.
$ dnf reinstall man-db
And you can install many packages at once too.
$ dnf install man-db nano htop ncdu fish
Package Removal
$ dnf remove less
Dependencies resolved.
=============================================================================
Package Arch Version Repository Size
=============================================================================
Removing:
less x86_64 487-5.fc27 @rawhide 309 k
Removing depended packages:
man-db x86_64 2.7.6.1-5.fc27 @rawhide 1.9 M
Removing unused dependencies:
groff-base x86_64 1.22.3-11.fc27 @rawhide 3.7 M
libpipeline x86_64 1.4.2-3.fc27 @rawhide 106 k
Transaction Summary
=============================================================================
Remove 3 Packages
Freed space: 6.0 M
Is this ok [ y/N]:
Package Query Search
$ dnf search nano
Last metadata expiration check: 1:22:32 ago on Wed Aug 23 11:50:45 2017.
======================== Name Exactly Matched: nano =========================
nano.x86_64 : A small text editor
======================= Name & Summary Matched: nano ========================
protobuf-javanano.noarch : Protocol Buffer JavaNano API
nano-debugsource.x86_64 : Debug sources for package nano
============================ Name Matched: nano =============================
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
=========================== Summary Matched: nano ===========================
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond
: precision
novprog.x86_64 : Tool to graph your progress in writing a NaNoWriMo style
: novel
Package Show Info
$ dnf info man-db
Last metadata expiration check: 1:21:47 ago on Wed Aug 23 11:50:45 2017.
Installed Packages
Name : man-db
Version : 2.7.6.1
Release : 5.fc27
Arch : x86_64
Size : 1.9 M
Source : man-db-2.7.6.1-5.fc27.src.rpm
Repo : @System
From repo : rawhide
Summary : Tools for searching and reading man pages
URL : http://www.nongnu.org/man-db/
License : GPLv2+ and GPLv3+
Description : The man-db package includes five tools for browsing man-pages:
: man, whatis, apropos, manpath and lexgrog. man formats and
: displays manual pages. whatis searches the manual page names.
: apropos searches the manual page names and descriptions.
: manpath determines search path for manual pages. lexgrog
: directly reads header information in manual pages.
Install Feature
There are DNF feature that I do not see exist in other package management.
I found this in a google plus posted by “Thorsten Leemhuis”.
The first one is, DNF install package that,
provides certain executable as below example.
$ dnf install /usr/bin/mpc
Last metadata expiration check: 0:09:22 ago on Sat Sep 16 15:04:13 2017.
Dependencies resolved.
====================================================================
Package Arch Version Repository Size
====================================================================
Installing:
mpc x86_64 0.28-5.fc27 rawhide 52 k
Installing dependencies:
libmpdclient x86_64 2.13-1.fc27 rawhide 49 k
Transaction Summary
====================================================================
Install 2 Packages
Total download size: 101 k
Installed size: 210 k
Is this ok [ y/N]:
The second is, install Perl package that provide specific library.
$ dnf install 'perl(File::Basename)'
Last metadata expiration check: 0:37:04 ago on Sat Sep 16 15:04:13 2017.
Dependencies resolved.
====================================================================
Package Arch Version Repository
Size
====================================================================
Installing:
perl-interpreter x86_64 4:5.26.0-399.fc28 rawhide 6.2 M
Installing dependencies:
perl-Carp noarch 1.42-394.fc27 rawhide 28 k
...
perl-threads-shared x86_64 1.57-4.fc27 rawhide 46 k
Transaction Summary
====================================================================
Install 17 Packages
Total download size: 8.6 M
Installed size: 21 M
Is this ok [ y/N]:
Package File List
Therefore is something similar with rpm -ql
.
$ dnf repoquery -l ncdu
Last metadata expiration check: 1:50:36 ago on Wed Sep 20 14:19:59 2017.
/usr/bin/ncdu
/usr/lib/.build-id
/usr/lib/.build-id/83
/usr/lib/.build-id/83/e67e014bbe91489897a5c369d4716734fc26e0
/usr/share/doc/ncdu
/usr/share/doc/ncdu/COPYING
/usr/share/doc/ncdu/ChangeLog
/usr/share/man/man1/ncdu.1.gz
My bad, I cannot find any reference searching files owner.
Therefore I use the lower level rpm -qf
instead.
$ rpm -qf /etc/man_db.conf
man-db-2.7.6.1-5.fc27.x86_64
What’s Next
These are just preliminary knowledge about DNF.
Consider finish reading [ Part Two ].
Thank you for reading