Yocto Project 1.4 (dylan) will be coming out with a new package manager, dumping zypper for smart package manager. Smart is written in python, and has nicer transactions when doing upgrades which does not leave the system in unrecoverable state if anything goes wrong with an update.

By default, one adds the package-management to image features:

IMAGE_FEATURES += "package-management"

On the device itself smart is available now and we need to configure channels. The channels can live remotely on some http server and smart is able to install the channels from the network.

The channel file looks like this:


[Updates]
type = rpm-md
baseurl = http://myserver.company.com/feeds/rpm/

On the device:

smart channel -y --add http://myserver.company.com/feeds/updates.repo

This should now set the channel for updates.

Update metadata using this command:

smart update

Some interesting common operations are:

$ smart search
$ smart install
$ smart info

Installing multilib components

If your image is multilibbed (i.e. it has both 32bit and 64bit runtimes and packages), you might want to install the 32bit version of a library. To do that, suffix it with '@'. E.g if you want to install 32bit version of eglibc on an x86_64 system, you would do the following:

smart install eglibc@lib32_x86

Sometimes its hard to guess the multilib architectures. You can just do something like:


root@localhost:~# smart install eglibc@
Loading cache...
Updating cache... ######################################## [100%]

error: 'eglibc@' matches no packages. Suggestions:
error: libc6-2.17-r3.1@ppc64e5500
error: eglibc-2.17-r3.1@lib32_ppce5500
error: libc6-2.17-r3.0@ppc64e5500
error: eglibc-2.17-r3.0@lib32_ppce5500
error: libc6-2.17-r3.3@ppc64e5500
error: eglibc-2.17-r3.3@lib32_ppce5500
error: libc6-2.17-r3.2@ppc64e5500
error: eglibc-2.17-r3.2@lib32_ppce5500

Now you have nice suggestions and you know the appropriate multilib architecture.