XELK-AN-003: Package Management with Yocto
Info Box
|
![]() |
This application note was validated against specific versions of the kit only. It may not work with other versions. Supported versions are listed in the History section. | ![]() |
Contents
History[edit | edit source]
Version | Date | XELK version | Notes |
---|---|---|---|
1.0.0 | October 2016 | 2.2.0 | First release |
1.0.1 | November 2016 | 2.2.0 | Add SMART commands examples |
3.0.1 | November 2017 | 3.0.1 | Add SMART commands output |
Introduction[edit | edit source]
This application note details:
- how to build packages and packages feeds with Yocto
- how to deploy your own package manager server
- how to use a package manager with a Yocto based root file system
Yocto Package Manager[edit | edit source]
The default XELK packaging system is RPM [1], which can be used with SMART [2][3][4] to install a package, with all its dependencies, from a remote repository.
To use smart, you need to be sure that the image is build with runtime package management support:
IMAGE_FEATURES += " package-management"
This is already enabled in default XELK images.
Building packages and feeds[edit | edit source]
After bootstrapping the XELK Yocto environment and build the packages you want to publish, you can create the package feeds with:
bitbake package-index
The files to deploy on server are inside $BUILD_DIR/tmp/deploy/rpm
User can also build all the recipe inside the project layers with:
bitbake -k world
Please note that, due the fact that some packages may fail to build, the -k switch is needed to tell bitbake continue even in case of failure.
It also require a lot of disk space (~60-80 GiB including work dir and intermediate files) and a long build time (both to download and compile the various packages)
Configuring the webserver[edit | edit source]
Here we give an example in how to configure the Apache webserver on a Ubuntu 14.04 LTS distribution to serve Yocto packages. We assume that you already configure the networking properly (e.g. setup public or local DNS) and that you already install Apache with its dependencies.
- Create a new virtualhost by entering the following text inside, for example,
/etc/apache2/sites-available/myyocto
<VirtualHost *:80> ServerName myyocto.example.com ServerAdmin admin@example.com DocumentRoot /var/www/yocto <Directory /var/www/yocto> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all Options +Indexes </Directory> ErrorLog ${APACHE_LOG_DIR}/yocto-error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/yocto-access.log combined </VirtualHost>
- enable the virtualhost
sudo a2ensite yocto
- apply the changes to Apache
sudo service apache2 restart
- copy the feeds and packages from your build environment into the webserver directory, e.g. via ftp or scp
scp -r $BUILD_DIR/tmp/deploy/rpm/* user@myyocto.example.com:/var/www/yocto
Installing packages on target[edit | edit source]
To use smart
at runtime first of all you need to enable a channel, which commonly is a remote webserver that provide packages feed and the binary packages itself, like the one we configured in the previous section.
On the target just run the following command:
smart channel --add cortexa9hf_vfp_neon type=rpm-md baseurl=http://myyocto.example.com/cortexa9hf_vfp_neon
Where:
cortexa9hf_vfp_neon
is the name of the channelhttp://myyocto.example.com/cortexa9hf_vfp_neon
is the URL of the webserver
We assume that network interface has been already configured for Internet access. In any case, a simple network configuration can be done directly on serial console with the following commands:
root@imx6qxelk:~# ifconfig eth0 192.168.0.94 root@imx6qxelk:~# route add default gw 192.168.0.254 root@imx6qxelk:~# echo "nameserver 8.8.8.8" > /etc/resolv.conf
For example:
root@imx6qxelk:~# smart channel --add cortexa9hf_neon type=rpm-md baseurl=http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/ Alias: cortexa9hf_neon Type: rpm-md Base URL: http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/ Include this channel? (y/N): y
You can also add a local directory, for example mounted via NFS directly on target, with the following command:
smart channel --add local type=rpm-dir name=localrpms manual=true priority=1 path=/opt/rpms -y
After you configure the channel and/or update packages feed on server, you need to update smart database:
root@imx6qxelk:~# smart update Loading cache... Updating cache... ############################################################ [100%] Fetching information for 'cortexa9hf_neon'... -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/repodata/repomd.xml repomd.xml ############################################################ [ 50%] -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/repodata/primary.xml.gz -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/repodata/filelists.xml.gz filelists.xml.gz ############################################################ [ 75%] primary.xml.gz ############################################################ [100%] Updating cache... ############################################################ [100%] Channels have 17495 new packages. Saving cache... root@imx6qxelk:~#
Finally you can install the packages on the target with the following command:
smart install PACKAGE_NAME
For example:
root@imx6qxelk:~# smart install vim Loading cache... Updating cache... ############################################################ [100%] Computing transaction... Installing packages (6): vim-7.4.769-r0@cortexa9hf_neon vim-syntax-7.4.769-r0@cortexa9hf_neon vim-common-7.4.769-r0@cortexa9hf_neon vim-tutor-7.4.769-r0@cortexa9hf_neon vim-help-7.4.769-r0@cortexa9hf_neon vim-vimrc-7.4.769-r0@cortexa9hf_neon 9.4MB of package files are needed. 26.9MB will be used. Confirm changes? (Y/n): Fetching packages... -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-vimrc-7.4.769-r0.cortexa9hf_neon.rpm vim-vimrc-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [ 16%] -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-syntax-7.4.769-r0.cortexa9hf_neon.rpm -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-tutor-7.4.769-r0.cortexa9hf_neon.rpm vim-tutor-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [ 33%] -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-7.4.769-r0.cortexa9hf_neon.rpm vim-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [ 50%] vim-syntax-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [ 66%] -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-common-7.4.769-r0.cortexa9hf_neon.rpm -> http://yocto.dave.eu/xelk-3.0.0/cortexa9hf_neon/vim-help-7.4.769-r0.cortexa9hf_neon.rpm vim-help-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [ 83%] vim-common-7.4.769-r0.cortexa9hf_neon.rpm ############################################################ [100%] Committing transaction... Preparing... ############################################################ [ 0%] 1:Installing vim-vimrc ############################################################ [ 16%] 2:Installing vim-help ############################################################ [ 33%] 3:Installing vim-tutor ############################################################ [ 50%] 4:Installing vim ############################################################ [ 66%] Output from vim-7.4.769-r0@cortexa9hf_neon: update-alternatives: Linking /bin/vi to /usr/bin/vim.vim update-alternatives: Linking /usr/bin/vim to /usr/bin/vim.vim 5:Installing vim-common ############################################################ [ 83%] 6:Installing vim-syntax ############################################################ [100%]
The package dependencies will be resolved automatically.
Other useful SMART commands[edit | edit source]
A brief guide to SMART command line interface is here. In the next section we'll show some example of SMART usage.
Gathering statistics[edit | edit source]
To view some information on repositories use smart stats
root@axel:~# smart stats Loading cache... Updating cache... ######################################## [100%] Installed Packages: 331 Total Packages: 11757 Total Provides: 27765 Total Requires: 4798 Total Upgrades: 11704 Total Conflicts: 73
List installed packages[edit | edit source]
User can see the list of installed packages with smart query --installed
root@axel:~# smart query --installed Loading cache... Updating cache... ######################################## [100%] alsa-conf-1.0.28-r0@cortexa9hf_vfp_neon alsa-conf-base-1.0.28-r0@cortexa9hf_vfp_neon alsa-state-0.2.0-r5@cortexa9hf_vfp_neon alsa-states-0.2.0-r5@cortexa9hf_vfp_neon alsa-utils-alsactl-1.0.28-r1@cortexa9hf_vfp_neon alsa-utils-alsamixer-1.0.28-r1@cortexa9hf_vfp_neon apm-3.2.2+14-r2@cortexa9hf_vfp_neon apmd-3.2.2+14-r2@cortexa9hf_vfp_neon avahi-daemon-0.6.31-r11.1@cortexa9hf_vfp_neon [...]
List available packages[edit | edit source]
To list the available packages into the current configured channels use smart query
Please note that this will show all package, it's usually more useful to give it a pattern, e.g.:
root@axel:~# smart query '*httpd*' Loading cache... Updating cache... ######################################## [100%] libmicrohttpd-bin-0.9.34-r0@cortexa9hf_vfp_neon libmicrohttpd-dbg-0.9.34-r0@cortexa9hf_vfp_neon libmicrohttpd-dev-0.9.34-r0@cortexa9hf_vfp_neon libmicrohttpd-doc-0.9.34-r0@cortexa9hf_vfp_neon libmicrohttpd10-0.9.34-r0@cortexa9hf_vfp_neon lighttpd-1.4.35-r1@cortexa9hf_vfp_neon lighttpd-1.4.35-r1@cortexa9hf_vfp_neon lighttpd-dbg-1.4.35-r1@cortexa9hf_vfp_neon lighttpd-dev-1.4.35-r1@cortexa9hf_vfp_neon lighttpd-doc-1.4.35-r1@cortexa9hf_vfp_neon lighttpd-module-access-1.4.35-r1@cortexa9hf_vfp_neon [...]