Difference between revisions of "XELK-AN-003: Package Management with Yocto"

From DAVE Developer's Wiki
Jump to: navigation, search
(Configuring the webserver)
(16 intermediate revisions by 4 users not shown)
Line 3: Line 3:
 
{{AppliesToAxelEsatta}}
 
{{AppliesToAxelEsatta}}
 
{{AppliesToAxelLite}}
 
{{AppliesToAxelLite}}
{{AppliesToAXEL Lite AN}}
 
{{Applies To Yocto}}
 
 
{{InfoBoxBottom}}
 
{{InfoBoxBottom}}
{{WarningMessage|text=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.}}
 
 
==History==
 
==History==
  
Line 20: Line 17:
 
|First release
 
|First release
 
|-
 
|-
|1.0.1
 
|November 2016
 
|[[Axel_Embedded_Linux_Kit_(XELK)#XELK_software_components|2.2.0]]
 
|Add SMART commands examples
 
|-
 
|3.0.1
 
|November 2017
 
|[[Axel_Embedded_Linux_Kit_(XELK)#XELK_software_components|3.0.1]]
 
|Add SMART commands output
 
 
|}
 
|}
  
Line 45: Line 33:
  
 
<pre>
 
<pre>
IMAGE_FEATURES += " package-management"
+
IMAGE_FEATURES += "package-management"
 
</pre>
 
</pre>
  
Line 125: Line 113:
  
 
<pre>
 
<pre>
smart channel --add cortexa9hf_vfp_neon type=rpm-md baseurl=http://myyocto.example.com/cortexa9hf_vfp_neon
+
smart channel --add xelk-2.2.0-cortexa9hf type=rpm-md baseurl=http://myyocto.example.com/xelk-2.2.0/cortexa9hf_vfp_neon
 
</pre>
 
</pre>
  
 
Where:
 
Where:
* <code>cortexa9hf_vfp_neon</code> is the name of the channel
+
* <code>xelk-2.2.0-cortexa9hf</code> is the name of the channel
* <code>http://myyocto.example.com/cortexa9hf_vfp_neon</code> is the URL of the webserver
+
* <code>http://myyocto.example.com/xelk-2.2.0/cortexa9hf_vfp_neon</code> 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:
 
 
 
<pre class="board-terminal">
 
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
 
</pre>
 
 
 
For example:
 
'''
 
<pre class="board-terminal">
 
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
 
</pre>
 
  
 
You can also add a ''local'' directory, for example mounted via NFS directly on target, with the following command:
 
You can also add a ''local'' directory, for example mounted via NFS directly on target, with the following command:
Line 161: Line 129:
 
After you configure the channel and/or update packages feed on server, you need to update smart database:
 
After you configure the channel and/or update packages feed on server, you need to update smart database:
  
<pre class="board-terminal">
+
<pre>
root@imx6qxelk:~# smart update
+
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:~#
 
 
</pre>
 
</pre>
  
Finally you can install the packages on the target with the following command:
+
Finally you can install the packages (and all its dependencies) on the target with the following command:
  
 
<pre>
 
<pre>
Line 188: Line 139:
 
</pre>
 
</pre>
  
For example:
+
E.g.
<pre class="board-terminal">
 
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%]
 
</pre>
 
 
 
The package dependencies will be resolved automatically.
 
 
 
== Other useful SMART commands ==
 
 
 
A brief guide to SMART command line interface is [http://labix.org/smart/user-guide/Command%20Line%20Interface here]. In the next section we'll show some example of SMART usage.
 
 
 
=== Gathering statistics ===
 
 
 
To view some information on repositories use <code>smart stats</code>
 
 
 
<pre>
 
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
 
</pre>
 
 
 
=== List installed packages ===
 
 
 
User can see the list of installed packages with <code>smart query --installed</code>
 
 
 
<pre>
 
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
 
[...]
 
</pre>
 
 
 
=== List available packages ===
 
 
 
To list the available packages into the current configured channels use <code>smart query</code>
 
 
 
Please note that this will show all package, it's usually more useful to give it a pattern, e.g.:
 
  
 
<pre>
 
<pre>
root@axel:~# smart query '*httpd*'
+
smart install emacs
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
 
[...]
 
 
</pre>
 
</pre>
  

Revision as of 12:02, 14 October 2016

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 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 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]