DESK-MX6-L-AN-0003: Package Management with Yocto and DNF

From DAVE Developer's Wiki
Revision as of 09:07, 13 April 2022 by U0007 (talk | contribs) (DNF)

Jump to: navigation, search
Info Box


200px-Emblem-important.svg.png

This application note has been validated using the kit version in the History table.

History[edit | edit source]

Version Date Development Kit version
1.0.0 Oct 2021 DESK-MX6UL-L 1.0.1
1.0.1 Apr 2022 Upated info for DESK-MX6UL-L-3.0.0 and DESK-MX6-L-3.0.0

Introduction[edit | edit source]

Since Pyro (2.3) Yocto release, DNF is the default package manager for installing packages in the DUT (target machine).

The Dandified Packaging Tool (DNF) performs runtime package management of RPM packages. In order to use DNF for runtime package management, you must perform an initial setup on the target machine for cases where the PACKAGE_FEED_* variables were not set as part of the image that is running on the target.

This application note details how to use DNF for installing packages with a Yocto based root file system

DNF[edit | edit source]

DNF is a software package manager that installs, updates, and removes packages on RPM-based Linux distributions. It automatically computes dependencies and determines the actions required to install packages. DNF also makes it easier to maintain groups of machines, eliminating the need to manually update each one using rpm. Introduced in Fedora 18, it has been the default package manager since Fedora 22.

More information can be found on Fedora's wiki DNF page

Configuring the DNF repository[edit | edit source]

It is possibile to add and configure DNF repositories using additional .repo files: it is recommended to define individual repositories in new or existing .repo files in the /etc/yum.repos.d/ directory.

More information in the Configuring DNF and DNF_Repositories Fedora's page.

Here below an example on how to create the .repo with the proper setting options using DAVE's Yocto server and AXEL ULite package repositories:

root@desk-mx6ul-axelulite:~# mkdir -p /etc/yum.repos.d 
root@desk-mx6ul-axelulite:~# 
{
  echo [cortexa7hf_neon]
  echo name=desk-mx6ul-cortexa7hf
  echo enabled=1                                                    
  echo gpgcheck=0                                                  
  echo baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/cortexa7hf_neon/
} | tee > /etc/yum.repos.d/dave.repo
root@desk-mx6ul-axelulite:~# 
{
  echo [cortexa7t2hf_neon]
  echo name=desk-mx6ul-cortexa7t2hf_neon
  echo enabled=1                                                    
  echo gpgcheck=0                                                  
  echo baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/cortexa7t2hf_neon/
} | tee >> /etc/yum.repos.d/dave.repo
root@desk-mx6ul-axelulite:~# 
{
  echo [noarch]
  echo name=desk-mx6ul-noarch
  echo enabled=1                                                    
  echo gpgcheck=0                                                  
  echo baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/noarch/
} | tee >> /etc/yum.repos.d/dave.repo
root@desk-mx6ul-axelulite:~# 

This allows to configure threee DNF repositories available on DAVE's Yocto package server:

root@desk-mx6ul-axelulite:~# cat /etc/yum.repos.d/dave.repo
[cortexa7hf_neon]
name=desk-mx6ul-cortexa7hf
enabled=1
gpgcheck=0
baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/cortexa7hf_neon/
[cortexa7t2hf_neon]
name=desk-mx6ul-cortexa7t2hf_neon
enabled=1
gpgcheck=0
baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/cortexa7t2hf_neon/
[noarch]
name=desk-mx6ul-noarch
enabled=1
gpgcheck=0
baseurl=http://yocto.dave.eu/desk-mx6ul-l-3.0.0/noarch/
root@desk-mx6ul-axelulite:~#

Other DAVE repositories[edit | edit source]

Here below the repositories directories for the DESK-MX6-L:

http://yocto.dave.eu/desk-mx6-l-3.0.0/cortexa9hf_neon/

http://yocto.dave.eu/desk-mx6-l-3.0.0/cortexa9t2hf_neon/

http://yocto.dave.eu/desk-mx6-l-3.0.0/noarch/

Installing packages on target[edit | edit source]

We assume that network interface has been already configured for Internet access. In any case, a simple network configuration can be done according to the How to configure the network interfaces wiki page:

root@desk-mx6ul-axelulite:~# cat /etc/systemd/network/eth0.network
[Match]
Name=eth0

# Prevent the interface loading if the kernel boots from nfs
KernelCommandLine=!nfsroot

[Network]
Address=192.168.0.90
Gateway=192.168.0.254
DNS=192.168.0.1
root@desk-mx6ul-axelulite:~#

Then, for installing a package, it is enough to invoke dnf with the install parameter, for example:

root@desk-mx6ul-axelulite:~# dnf install lighttpd
Last metadata expiration check: 0:02:21 ago on Tue Oct  5 08:30:43 2021.
Dependencies resolved.
================================================================================
 Package                      Arch              Version      Repository    Size
================================================================================
Installing:
 lighttpd                     cortexa7hf_neon   1.4.48-r0    cortexa7hf   103 k
Installing dependencies:
 lighttpd-module-dirlisting   cortexa7hf_neon   1.4.48-r0    cortexa7hf    15 k
 lighttpd-module-indexfile    cortexa7hf_neon   1.4.48-r0    cortexa7hf   9.3 k
 lighttpd-module-staticfile   cortexa7hf_neon   1.4.48-r0    cortexa7hf   9.1 k
Installing weak dependencies:
 lighttpd-module-access       cortexa7hf_neon   1.4.48-r0    cortexa7hf   9.2 k
 lighttpd-module-accesslog    cortexa7hf_neon   1.4.48-r0    cortexa7hf    14 k

Transaction Summary
================================================================================
Install  6 Packages

Total download size: 160 k
Installed size: 315 k
Is this ok [y/N]: y
Downloading Packages:
(1/6): lighttpd-module-indexfile-1.4.48-r0.cort  67 kB/s | 9.3 kB     00:00
(2/6): lighttpd-module-dirlisting-1.4.48-r0.cor  90 kB/s |  15 kB     00:00
(3/6): lighttpd-1.4.48-r0.cortexa7hf_neon.rpm   513 kB/s | 103 kB     00:00
(4/6): lighttpd-module-staticfile-1.4.48-r0.cor 145 kB/s | 9.1 kB     00:00
(5/6): lighttpd-module-access-1.4.48-r0.cortexa 169 kB/s | 9.2 kB     00:00
(6/6): lighttpd-module-accesslog-1.4.48-r0.cort 364 kB/s |  14 kB     00:00
--------------------------------------------------------------------------------
Total                                           558 kB/s | 160 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : lighttpd-module-staticfile-1.4.48-r0.cortexa7hf_neon   1/6
  Running scriptlet: lighttpd-module-staticfile-1.4.48-r0.cortexa7hf_neon   1/6
  Installing       : lighttpd-module-indexfile-1.4.48-r0.cortexa7hf_neon    2/6
  Running scriptlet: lighttpd-module-indexfile-1.4.48-r0.cortexa7hf_neon    2/6
  Installing       : lighttpd-module-dirlisting-1.4.48-r0.cortexa7hf_neon   3/6
  Running scriptlet: lighttpd-module-dirlisting-1.4.48-r0.cortexa7hf_neon   3/6
  Installing       : lighttpd-1.4.48-r0.cortexa7hf_neon                     4/6
  Running scriptlet: lighttpd-1.4.48-r0.cortexa7hf_neon                     4/6
Created symlink /etc/systemd/system/multi-user.target.wants/lighttpd.service \u2192 /lib/systemd/system/lighttpd.service.
  Installing       : lighttpd-module-accesslog-1.4.48-r0.cortexa7hf_neon    5/6
  Running scriptlet: lighttpd-module-accesslog-1.4.48-r0.cortexa7hf_neon    5/6
  Installing       : lighttpd-module-access-1.4.48-r0.cortexa7hf_neon       6/6
  Running scriptlet: lighttpd-module-access-1.4.48-r0.cortexa7hf_neon       6/6
  Verifying        : lighttpd-1.4.48-r0.cortexa7hf_neon                     1/6
  Verifying        : lighttpd-module-dirlisting-1.4.48-r0.cortexa7hf_neon   2/6
  Verifying        : lighttpd-module-indexfile-1.4.48-r0.cortexa7hf_neon    3/6
  Verifying        : lighttpd-module-staticfile-1.4.48-r0.cortexa7hf_neon   4/6
  Verifying        : lighttpd-module-access-1.4.48-r0.cortexa7hf_neon       5/6
  Verifying        : lighttpd-module-accesslog-1.4.48-r0.cortexa7hf_neon    6/6

Installed:
  lighttpd.cortexa7hf_neon 1.4.48-r0
  lighttpd-module-access.cortexa7hf_neon 1.4.48-r0
  lighttpd-module-accesslog.cortexa7hf_neon 1.4.48-r0
  lighttpd-module-dirlisting.cortexa7hf_neon 1.4.48-r0
  lighttpd-module-indexfile.cortexa7hf_neon 1.4.48-r0
  lighttpd-module-staticfile.cortexa7hf_neon 1.4.48-r0

Complete!
root@desk-mx6ul-axelulite:~#

Other useful DNF commands[edit | edit source]

List of configured software repositories[edit | edit source]

root@desk-mx6ul-axelulite:~# dnf repolist
repo id                               repo name
cortexa7hf_neon                       desk-mx6ul-cortexa7hf
cortexa7t2hf_neon                     desk-mx6ul-cortexa7t2hf_neon
noarch                                desk-mx6ul-noarch

Search for packages[edit | edit source]

To search for an available package into the current configured channels use dnf repoquery

Please note that this will show all packages, it's usually more useful to give it a pattern, e.g.:

root@desk-mx6ul-axelulite:~# dnf repoquery *fb*
desk-mx6ul-cortexa7hf                18 kB/s | 3.8 kB      00:00
desk-mx6ul-cortexa7t2hf_neon         693 kB/s | 2.9 MB     00:04
desk-mx6ul-noarch                    442 kB/s | 123 kB     00:00
fb-test-0:1.1.0-r0.cortexa7t2hf_neon
fb-test-dbg-0:1.1.0-r0.cortexa7t2hf_neon
fb-test-dev-0:1.1.0-r0.cortexa7t2hf_neon
fbida-0:2.14-r0.cortexa7t2hf_neon
fbida-dbg-0:2.14-r0.cortexa7t2hf_neon
fbida-dev-0:2.14-r0.cortexa7t2hf_neon
fbida-doc-0:2.14-r0.cortexa7t2hf_neon
fbida-src-0:2.14-r0.cortexa7t2hf_neon
fbset-0:2.1-r4.cortexa7t2hf_neon
fbset-dbg-0:2.1-r4.cortexa7t2hf_neon
fbset-dev-0:2.1-r4.cortexa7t2hf_neon
fbset-doc-0:2.1-r4.cortexa7t2hf_neon
libharfbuzz-bin-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-dbg-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-dev-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-icu-dev-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-icu0-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-src-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz-subset0-0:2.7.4-r0.cortexa7t2hf_neon
libharfbuzz0-0:2.7.4-r0.cortexa7t2hf_neon
root@desk-mx6ul-axelulite:~#

List of installed packages[edit | edit source]

User can see the list of installed packages with dnf repoquery --installed

root@desk-mx6ul-axelulite:~# dnf repoquery --installed
acl-0:2.2.53-r0.cortexa7t2hf_neon
acl-dev-0:2.2.53-r0.cortexa7t2hf_neon
alsa-conf-0:1.2.4-r0.cortexa7t2hf_neon
alsa-state-0:0.2.0-r5.desk_mx6ul_lynx
alsa-states-0:0.2.0-r5.desk_mx6ul_lynx
alsa-tools-0:1.2.2-r0.cortexa7t2hf_neon
...
...
which-0:2.21-r3.cortexa7t2hf_neon
which-dev-0:2.21-r3.cortexa7t2hf_neon
wireless-regdb-static-0:2020.11.20-r0.noarch
wireless-tools-1:30.pre9-r0.cortexa7t2hf_neon
wl18xx-firmware-0:R8.5+git0+02df01f8b9-r0.noarch
wpa-supplicant-0:2.9-r0.cortexa7t2hf_neon
wpa-supplicant-cli-0:2.9-r0.cortexa7t2hf_neon
wpa-supplicant-passphrase-0:2.9-r0.cortexa7t2hf_neon
xinetd-0:2.3.15.4-r0.cortexa7t2hf_neon
xorgproto-dev-0:2020.1-r0.cortexa7t2hf_neon
xz-0:5.2.5-r0.cortexa7t2hf_neon
xz-dev-0:5.2.5-r0.cortexa7t2hf_neon
root@desk-mx6ul-axelulite:~#

DNF activity history[edit | edit source]

User can see the activity on packages with dnf history

root@desk-mx6ul-axelulite:~# dnf history
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     3 | install lighttpd         | 2021-10-05 08:33 | Install        |    6 EE
     2 | -y -c /home/jenkins/work | 2021-06-16 15:49 | Install        |   14
     1 | -y -c /home/jenkins/work | 2021-06-16 15:47 | Install        | 1128 EE
root@desk-mx6ul-axelulite:~#

References[edit | edit source]