TipsAndTricks/EnablingAPackageFeed: Difference between revisions

From Yocto Project
Jump to navigationJump to search
Line 10: Line 10:


== Know Your Package Architectures ==
== Know Your Package Architectures ==
Your OS image will be comprised of a number of different package architectures. The package feed needs to know what they are so look in tmp/deploy/rpm
Your OS image will be comprised of a number of different package architectures.  
=== From the build system view ===
The package feed needs to know what they are so look in tmp/deploy/rpm
  $ ls tmp/deploy/rpm/
  $ ls tmp/deploy/rpm/
  all  core2_32  edison  x86_64_nativesdk
  all  core2_32  edison  x86_64_nativesdk
You can exclude anything starting with x86_64. This means you architectures are: <tt>all  core2_32  edison</tt>
You can exclude anything starting with x86_64. This means the  architectures on the target are: <tt>all  core2_32  edison</tt>
=== From target system view ===
$ rpm -ql
look at the endings of the various packages.  For example , if you build for qemux86-64 the suffix will be core2_64


== Select Your Package Feed URL ==
== Select Your Package Feed URL ==

Revision as of 21:46, 15 June 2017

Caveat

This article is based on work done a few years ago with fido (1.8) and only covers using smart with rpm. Needs some testing and extended to cover using dnf.

Instructions assume you have had at least one successful build of your target image.

Select Your Package Format

package format is set via variable PACKAGE_CLASSES, typically in local.conf. Look for line like

PACKAGE_CLASSES ?= "package_rpm"

This means you're using rpm.

Know Your Package Architectures

Your OS image will be comprised of a number of different package architectures.

From the build system view

The package feed needs to know what they are so look in tmp/deploy/rpm

$ ls tmp/deploy/rpm/
all  core2_32  edison  x86_64_nativesdk

You can exclude anything starting with x86_64. This means the architectures on the target are: all core2_32 edison

From target system view

$ rpm -ql

look at the endings of the various packages. For example , if you build for qemux86-64 the suffix will be core2_64

Select Your Package Feed URL

Is this example we'll use http://my-server.com/repo

Add Package Manager to Build

Smart package manager is in oe-core, so need to add any extra layers

IMAGE_INSTALL += "python-smartpm"
EXTRA_IMAGE_FEATURES += " package-management "

Configure Package Feed in Build

Now you have the information to create a package feed, ideally you add details in your distro conf file. If you are not using your own distro, you can set the following in local.conf

PACKAGE_FEED_URIS = "http://my-server.com/repo"
PACKAGE_FEED_BASE_PATHS = "rpm"
PACKAGE_FEED_ARCHS = "all edison core2_32" 

Create Package Feed

  • Re-build image so it includes smart and the package feed info
  • Update repo package indices (this step can be excluded in later versions of Yocto)
bitbake package-index
  • Copy packages to server. This sample script assumes files are served from /var/www/html/repo
rsync -r -u --exclude 'x86_64*' tmp/deploy/rpm/* /var/www/html/repo
for d in /var/www/html/repo/*
do
 if [ -d $d ]; then
    createrepo -q $d
 fi
done  

Run Package Manager on Target

  • Make sure network is up and sync with package feed.
smart update
  • Install my-package
smart search my-package
smart install my-package

Recover Package Feed Config On Target

Smart does not have a config file, so config must be done via command line. This script re-creates the config set by distro in example above

feed_url="http://my-server.com/repo"
platform="my-platform"
repo_name="my-repo"
smart channel --remove-all
for arch in all edison core2_32; do
    smart channel --add $platform-$arch type=rpm-md name="$repo_name"  baseurl=$feed_url/$arch -y 
done

Further Reading