XELK-AN-003: Package Management with Yocto

From DAVE Developer's Wiki
Revision as of 11:58, 14 October 2016 by U0002 (talk | contribs) (Introduction)

Jump to: navigation, search
Info Box
Axel-04.png Applies to Axel Ultra
Axel-02.png Applies to AXEL ESATTA
Axel-lite 02.png Applies to Axel Lite

History[edit | edit source]

Version Date XELK version Notes
1.0.0 October 2016 2.2.0 First release

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 uses 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 configured layer 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.

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 Ubuntu networking properly 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 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 xelk-2.2.0-cortexa9hf type=rpm-md baseurl=http://myyocto.example.com/xelk-2.2.0/cortexa9hf_vfp_neon

Where:

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:

smart update

Finally you can install the packages (and all its dependencies) on the target with the following command:

smart install PACKAGE_NAME

E.g.

smart install emacs

References[edit | edit source]