Dependency
There are two main topics in dependency, dependency itself, and reverse dependency. Beside these two, there are other topic as well, such as managing conflict that we do not cover here.
Help
DNF has a repoquery
help that show all dependency related options.
$ dnf help repoquery
search for packages matching keyword
...
--whatconflicts REQ show only results that conflict REQ
--whatobsoletes REQ show only results that obsolete REQ
--whatprovides REQ show only results that provide REQ
--whatrequires REQ shows results that requires package provides and files REQ
--whatrecommends REQ show only results that recommend REQ
--whatenhances REQ show only results that enhance REQ
--whatsuggests REQ show only results that suggest REQ
--whatsupplements REQ
...
--conflicts Display capabilities that the package conflicts with.
--enhances Display capabilities that the package can enhance.
--provides Display capabilities provided by the package.
--recommends Display capabilities that the package recommends.
--requires Display capabilities that the package depends on.
--requires-pre Display capabilities that the package depends on for
running a %pre script.
--suggests Display capabilities that the package suggests.
Dependency
Package that required by: such as man-db need less and other.
This dependency information can be achieved by repoquery --requires
command.
This will show required parts of the package.
$ dnf repoquery --requires man-db
Last metadata expiration check: 0:27:23 ago on Sat Aug 26 13:49:15 2017.
/bin/sh
coreutils
grep
groff-base
gzip
less
libc.so.6(GLIBC_2.17)(64bit)
libgdbm.so.4()(64bit)
libpipeline.so.1()(64bit)
libz.so.1()(64bit)
rtld(GNU_HASH)
Reverse Dependency
Package that require: such as less needed by man-db or other.
This reverse dependency require repoquery --whatrequires
command.
$ dnf repoquery --whatrequires less
Last metadata expiration check: 0:29:36 ago on Sat Aug 26 13:49:15 2017.
GMT-0:5.4.2-3.fc27.i686
GMT-0:5.4.2-3.fc27.x86_64
R-core-0:3.4.1-4.fc27.i686
R-core-0:3.4.1-4.fc27.x86_64
Singular-0:4.1.0p3-6.fc27.x86_64
backup-manager-0:0.7.10-22.fc27.noarch
c-graph-0:2.0-12.fc27.x86_64
colordiff-0:1.0.18-2.fc27.noarch
git-core-0:2.14.1-2.fc27.x86_64
libguestfs-1:1.37.21-2.fc28.i686
libguestfs-1:1.37.21-2.fc28.x86_64
libguestfs-tools-c-1:1.37.21-2.fc28.x86_64
man-db-0:2.7.6.1-5.fc27.x86_64
octave-6:4.2.1-4.fc27.2.i686
octave-6:4.2.1-4.fc27.2.x86_64
rpmreaper-0:0.2.0-13.fc27.x86_64
Test
Removing less
would remove man-db
.
And also remove any unused dependency.
$ 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]:
Tree
Most people love tree
This rpmreaper
is an RPM tool rather than DNF tool.
$ dnf install rpmreaper
Group
Is this docker Minimal Install ?
I always wonder what inside theis Fedora docker Container.
RPM group
help me understand this riddle.
Group List
We can see Minimal Install
group as below.
$ dnf grouplist
Last metadata expiration check: 2:12:21 ago on Wed Aug 23 11:50:45 2017.
Available Environment Groups:
Fedora Custom Operating System
Minimal Install
Fedora Server Edition
Fedora Workstation
Fedora Cloud Server
Group Info
And there is this Core
group as below.
$ dnf group info "Minimal Install"
Last metadata expiration check: 2:13:24 ago on Wed Aug 23 11:50:45 2017.
Environment Group: Minimal Install
Description: Basic functionality.
Mandatory Groups:
Core
Optional Groups:
Guest Agents
Standard
And at the most bottom, there are only Packages
as below.
$ dnf group info core
Last metadata expiration check: 2:14:07 ago on Wed Aug 23 11:50:45 2017.
Group: Core
Description: Smallest possible installation
Mandatory Packages:
audit
basesystem
bash
coreutils
cronie
curl
dhcp-client
dnf
dnf-yum
Group Install
Now we know, that not all the Core
packages are installed,
as some packages not required by the container.
$ dnf group install core
Last metadata expiration check: 2:07:09 ago on Wed Aug 23 11:50:45 2017.
No match for group package "ppc64-utils"
Dependencies resolved.
=============================================================================
Group Packages
=============================================================================
Marking packages as installed by the group:
@Core curl dnf-plugins-core dnf
sssd-common policycoreutils glibc
NetworkManager openssh-clients systemd
dracut-config-rescue openssh-server rootfiles
plymouth selinux-policy-targeted dhcp-client
Beyond Group
You can even remove group of packages as you can read in manual, or upgrade only for specific group.
Repository
A few DNF repository commands.
Repository List
$ dnf repolist
Last metadata expiration check: 0:07:48 ago on Mon Aug 28 18:12:32 2017.
repo id repo name status
*rawhide Fedora - Rawhide - Developmental packages for the next Fedora 61447
All repository.
$ dnf repolist all
Last metadata expiration check: 0:06:27 ago on Mon Aug 28 18:12:32 2017.
repo id repo name status
fedora Fedora 28 - x86_64 disabled
fedora-cisco-openh264 Fedora 28 openh264 (From Cisco disabled
fedora-cisco-openh264-debuginfo Fedora 28 openh264 (From Cisco disabled
fedora-debuginfo Fedora 28 - x86_64 - Debug disabled
fedora-source Fedora 28 - Source disabled
*rawhide Fedora - Rawhide - Development enabled: 61447
rawhide-debuginfo Fedora - Rawhide - Debug disabled
rawhide-source Fedora - Rawhide - Source disabled
updates Fedora 28 - x86_64 - Updates disabled
updates-debuginfo Fedora 28 - x86_64 - Updates - disabled
updates-source Fedora 28 - Updates Source disabled
updates-testing Fedora 28 - x86_64 - Test Upda disabled
updates-testing-debuginfo Fedora 28 - x86_64 - Test Upda disabled
updates-testing-source Fedora 28 - Test Updates Sourc disabled
Consider examine the /etc/yum.repos.d/
.
$ ls -l /etc/yum.repos.d/
total 20
-rw-r--r-- 1 root root 707 Aug 16 19:38 fedora-cisco-openh264.repo
-rw-r--r-- 1 root root 2103 Aug 16 19:38 fedora-rawhide.repo
-rw-r--r-- 1 root root 1403 Aug 16 19:38 fedora-updates-testing.repo
-rw-r--r-- 1 root root 1345 Aug 16 19:38 fedora-updates.repo
-rw-r--r-- 1 root root 1332 Aug 16 19:38 fedora.repo
Repository Info
$ dnf repoinfo
Last metadata expiration check: 0:08:34 ago on Mon Aug 28 18:12:32 2017.
Repo-id : rawhide
Repo-name : Fedora - Rawhide - Developmental packages for the next Fedora
: release
Repo-revision: 1503851723
Repo-updated : Sun Aug 27 16:35:23 2017
Repo-pkgs : 61447
Repo-size : 59 G
Repo-metalink: https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64
Updated : Mon Aug 28 18:12:32 2017
Repo-baseurl : http://ftp.jaist.ac.jp/pub/Linux/Fedora/development/rawhide/Everything/x86_64/os/
: (13 more)
Repo-expire : 21600 second(s) (last: Mon Aug 28 18:12:32 2017)
Repo-filename: /etc/yum.repos.d/fedora-rawhide.repo
or just
$ dnf repoinfo rawhide
Consider inspect the /fedora-rawhide.repo
$ cat /etc/yum.repos.d/fedora-rawhide.repo
# These packages are untested and still under development. This
# repository is used for development of new releases.
...
[rawhide]
name=Fedora - Rawhide - Developmental packages for the next Fedora release
...
[rawhide-debuginfo]
name=Fedora - Rawhide - Debug
...
[rawhide-source]
name=Fedora - Rawhide - Source
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-source&arch=$basearch
enabled=0
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
Now you know that you can edit directly.
Repository Packages
You can use repo-pkgs
,
it is just an alias to repository-packages
.
$ dnf repository-packages rawhide list installed
Installed Packages
bc.x86_64 1.07.1-3.fc27 @rawhide
fish.x86_64 2.3.1-6.fc27 @rawhide
groff-base.x86_64 1.22.3-11.fc27 @rawhide
htop.x86_64 2.0.2-4.fc27 @rawhide
less.x86_64 487-5.fc27 @rawhide
libpipeline.x86_64 1.4.2-3.fc27 @rawhide
libstdc++.x86_64 7.1.1-7.fc27.1 @rawhide
man-db.x86_64 2.7.6.1-5.fc27 @rawhide
nano.x86_64 2.8.6-3.fc27 @rawhide
ncdu.x86_64 1.12-5.fc27 @rawhide
rpmreaper.x86_64 0.2.0-13.fc27 @rawhide
Or even disabled repository.
$ dnf repository-packages rawhide-source list | grep herbstluftwm
herbstluftwm.src 0.6.2-8.fc27 rawhide-source
And info for each repository
$ dnf repository-packages rawhide info | less
Last metadata expiration check: 0:14:24 ago on Mon Aug 28 18:12:32 2017.
Installed Packages
Name : bc
Version : 1.07.1
Release : 3.fc27
Arch : x86_64
Size : 225 k
Source : bc-1.07.1-3.fc27.src.rpm
Repo : @System
From repo : rawhide
Summary : GNU's bc (a numeric processing language) and dc (a calculator)
URL : http://www.gnu.org/software/bc/
License : GPLv2+
...
enablerepo Directive
You can use --enablerepo
to operate on a single command without permanently enable the repository.
The same rule applies to --disablerepo
temporarily.
$ dnf info herbstluftwm.src
Last metadata expiration check: 0:09:50 ago on Sat Sep 2 17:47:44 2017.
Error: No matching Packages to list
$ dnf info herbstluftwm.src --enablerepo=rawhide-source
Last metadata expiration check: 0:06:44 ago on Sat Sep 2 17:50:56 2017.
Available Packages
Name : herbstluftwm
Version : 0.6.2
Release : 8.fc27
Arch : src
Size : 228 k
Source : None
Repo : rawhide-source
Mirror
There is no need to explicitly specify mirror,
in Fedora since DNF utilize metalink.
As you can see in previous figure dnf repoinfo
,
the rawhide repo is already use ftp.jaist.ac.jp
.
$ dnf repoinfo rawhide
...
Repo-baseurl : http://ftp.riken.jp/Linux/fedora/development/rawhide/Everything/x86_64/os/
If you wish you can inspect what is in there.
Consider grab the metalink from yum.repos.d
.
$ cat /etc/yum.repos.d/fedora-rawhide.repo
...
[rawhide]
name=Fedora - Rawhide - Developmental packages for the next Fedora release
failovermethod=priority
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/development/rawhide//Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch
...
Now see what is it in the metalink.
$ curl -L "https://mirrors.fedoraproject.org/mirrorlist?repo=rawhide&arch=x86_64"
# repo = rawhide arch = x86_64 country = JP country = PH country = CN country = KR country = TH
https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/fedora/linux/development/rawhide/Everything/x86_64/os/
http://ftp.jaist.ac.jp/pub/Linux/Fedora/development/rawhide/Everything/x86_64/os/
http://ftp.riken.jp/Linux/fedora/development/rawhide/Everything/x86_64/os/
http://ftp.kaist.ac.kr/fedora/development/rawhide/Everything/x86_64/os/
https://mirrors.ustc.edu.cn/fedora/development/rawhide/Everything/x86_64/os/
https://mirror.pregi.net/fedora/development/rawhide/Everything/x86_64/os/
http://mirror2.totbb.net/fedora/linux/development/rawhide/Everything/x86_64/os/
Now we can explicity use ftp.riken.jp
.
$ nano /etc/yum.repos.d/fedora-rawhide.repo
baseurl=http://ftp.riken.jp/Linux/fedora/development/rawhide/Everything/x86_64/os/
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/development/rawhide//Everything/$basearch/o$
metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch
Check what happened to the rawhide repository
$ dnf repoinfo rawhide
Fedora - Rawhide - Developmental packages for the nex 976 kB/s | 66 MB 01:09
Last metadata expiration check: 0:00:23 ago on Sat Sep 9 11:49:43 2017.
...
Repo-baseurl : http://ftp.riken.jp/Linux/fedora/development/rawhide/Everything/x86_64/os/
This is all about repository for now.
What’s Next
These are just preliminary knowledge about DNF. Consider finish reading [ Part Three ].
Thank you for reading