OpenEmbedded/Ångström New Package Workflow (eyeOS)
This article is to detail the typical workflow I use when I am adding a new application recipe to OpenEmbedded from scratch. In this case it will be the open source cloud computing application called eyeos.
During this article reference to the OE wiki especially the styleguide for new recipes is highly recommended.
The first step is to locate the software we are going to add and the version number of that software. In this case it the software is called eyeos and it is version 1.8.7.1. Also at this stage check the license of the software in this case AGPL3.
Create a directory in the metadata to hold the new software.
mkdir recipes/eyeos
Use an editor to create the recipe file for the new application. The general form of the filename is application_version.bb so in this case edit.
vi recipes/eyeos/eyeos_1.8.7.1.bb
Fill the beginning of the recipe with the informational fields.
DESCRIPTION = "The Open Source Clouds Web Desktop"
HOMEPAGE = "http://eyeos.org/"
LICENSE = "AGPL3"
The next step is to locate the download URL for the new recipe. In this case eyeos is hosted in a sourceforge project so the download URL is.
http://sourceforge.net/projects/eyeos/files/eyeos/1.8.7.1/eyeOS_1.8.7.1.zip/download
OpenEmbedded actually has sourceforge mirror handling build in. So when the SRC_URI is constructed for the reciped a shortcut can be taken. OpenEmbedded also creates a variable ${PV} from the filename of the recipe. It is recommended to use this in the SRC_URI as it saves typing when later upgrading to later versions of the software. It also creates a ${PN} variable from the package name. But in this case this is not used as it differs in case in the URL.
SRC_URI = "${SOURCEFORGE_MIRROR}/eyeos/eyeOS_${PV}.zip"
At this stage there is enough recipe to attempt a download and check that there are no mistakes so far.
bitbake eyeos
This build is expected to fail as the OE metadata does not yet have the MD5/SHA256 checksums for the download yet.
NOTE: Missing checksum
ERROR: eyeos-1.8.7.1: http://downloads.sourceforge.net/eyeos/eyeOS_1.8.7.1.zip has no checksum defined, cannot check archive integrity
ERROR: Error in executing: /home/graeme/openembedded/org.openembedded.dev/recipes/eyeos/eyeos_1.8.7.1.bb
ERROR: Exception: Message:1
ERROR: Printing the environment of the function
ERROR: Error in executing: /home/graeme/openembedded/org.openembedded.dev/recipes/eyeos/eyeos_1.8.7.1.bb
ERROR: Exception: Message:1
ERROR: Printing the environment of the function
ERROR: Build of /home/graeme/openembedded/org.openembedded.dev/recipes/eyeos/eyeos_1.8.7.1.bb do_fetch failed
ERROR: Task 2 (/home/graeme/openembedded/org.openembedded.dev/recipes/eyeos/eyeos_1.8.7.1.bb, do_fetch) failed
NOTE: Tasks Summary: Attempted 445 tasks of which 444 didn't need to be rerun and 1 failed.
ERROR: '/home/graeme/openembedded/org.openembedded.dev/recipes/eyeos/eyeos_1.8.7.1.bb' failed
OE helpfully generates the checksums it expected to see so these can be added to the meta data easilly. The cat just appends the new checksum to the end of the file. The next python command then calls a script to sort the checksums into the recommended format.
cat tmp/checksums.ini >>~/oe/org.openembedded.dev/conf/checksums.ini
python contrib/source-checker/oe-checksums-sorter.py -i conf/checksums.ini
To check this worked then re-issue the bitbake command.
bitbake eyeos
In this case the command will succeed but builds no useful package. Depending on the application it will probably fail. This is not a problem at this stage as it is still work in progress and debugging these failures is what gives the information for the rest of the recipe.
At this stage the contents of the zip file can be checked. The eyeos zip unpacks to a directory which is called eyeOS which is different from OEs guessed at directory of eyeos-1.8.7.1 so the recipe needs updated to tell OE the real directory.
S = "${WORKDIR}/eyeOS"
Being a web application eyeOS doesnt have Makefile or autotools based installation so the compile/install stages will have to be hand written for this recipe.
The eyeOS installation is really simple from the OE point of view.
do_install() {
install -d ${D}/www/pages/eyeos
cp -r ${S}/* ${D}/www/pages/eyeos
}
There are two final things to do now before the recipe is finished. OE needs to be told which directories to package. It has some built in defaults like /bin /usr/bin /lib /usr/lib but our eyeOS install is outside these areas. We also need to tell OE that there is no CPU dependant code in the packages this recipe generates.
PACKAGE_ARCH = "all"
FILES_${PN} += "/www/pages/eyeos"
All these steps give up a complete recipe that reads as follows.
DESCRIPTION = "The Open Source Clouds Web Desktop"
HOMEPAGE = "http://eyeos.org/"
LICENSE = "AGPL3"
SRC_URI = "${SOURCEFORGE_MIRROR}/eyeos/eyeOS_${PV}.zip"
S = "${WORKDIR}/eyeOS"
do_install() {
install -d ${D}/www/pages/eyeos
cp -r ${S}/* ${D}/www/pages/eyeos
}
PACKAGE_ARCH = "all"
FILES_${PN} += "/www/pages/eyeos"
So the final stage the final packages can be built fromt the recipe. First a clean to make sure anything worked on is gone then a build.
bitbake eyeos -c clean
bitbake eyeos
The package produced from this recipe is now ready to be installed on target for testing.
Leave a Reply