|
|
(26 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| == Caveat ==
| | This is now covered in the [https://docs.yoctoproject.org/dev-manual/common-tasks.html#using-runtime-package-management documentation]. |
| 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: <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 ==
| |
| Is this example we'll use <tt>http://my-server.com/repo</tt>
| |
| | |
| == 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
| |
| <pre>
| |
| 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
| |
| </pre>
| |
| | |
| == 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
| |
| <pre>
| |
| 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
| |
| </pre>
| |
| | |
| == Further Reading ==
| |
| * [http://labix.org/smart/user-guide Smart online user guide]
| |
| * [https://www.fujitsu.com/jp/group/fct/documents/events/2016/A_Smart_Way_to_Manage_Packages_in_Yocto_Project.pdf Fujitsu ELC 2016 Presentation]
| |