<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Lbt&amp;feed=atom&amp;limit=50&amp;target=Lbt&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Lbt&amp;feed=atom&amp;limit=50&amp;target=Lbt&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Lbt"/>
		<updated>2013-05-22T15:56:04Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/ARM/N950</id>
		<title>ARM/N950</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N950"/>
				<updated>2011-11-17T22:12:59Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo 1.3 Community Edition (and [http://wiki.merproject.org/wiki/Nemo Nemo]) installation for N950 =&lt;br /&gt;
&lt;br /&gt;
(Basic information as copied from https://meego.com/community/device-program/devices/nokia-n9-devkit)&lt;br /&gt;
&lt;br /&gt;
The Nokia N950 is a platform available now for developers targeting the Nokia N9 and MeeGo handset apps in general. Technical details are available at http://developer.nokia.com/swipe. Questions &amp;amp; comments: http://forum.meego.com/showthread.php?t=3597.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: commercial developers are encouraged to apply directly at http://developer.nokia.com - thank you for your understanding.&lt;br /&gt;
&lt;br /&gt;
== How to use Community Edition on N950 ==&lt;br /&gt;
&lt;br /&gt;
'''THIS IS IMPORTANT: Assumption: you have Nokia N950 device with the Beta2 release (firmware version *must be* at 34-2 1.2011.34-2_PR_RM680, update using the OneClickFlasher if not). You should also have the skills required, similar to what is required for using N900 CE: http://wiki.meego.com/ARM/N900/GettingStarted. These instructions also assume that you are using Linux as OS on your computer. If you have upgraded over-the-air from beta2, these instructions may not work. Also, you can't flash back to Harmattan as there is no OCF for the updated release!!!'''&lt;br /&gt;
&lt;br /&gt;
'''The procedures described here will void any warranty (if there was any), and will destroy your Harmattan setup, losing any data you have there.''' However, you can always go back to a fresh Harmattan installation with the OneClickFlasher package available at: http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html (note - please login to https://www.developer.nokia.com first or you'll get redirection errors)&lt;br /&gt;
&lt;br /&gt;
=== Downloading the MeeGo Community Edition release ===&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #000; padding: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Image&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Description&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| Release date&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/n900-de/archive/1.2.90.5.0.20110927.81.CE.2011-09-27.1/images/mg-handset-armv7nhl-n950-ce-testing/ Fall Release]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| v1.3 Handset image for Fall 2011&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| 28.9.2011&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/Nemo/ Weekly image]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| From here, you can find the weekly and daily builds.&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flasher for N950 ===&lt;br /&gt;
Download Harmattan flasher from [http://tablets-dev.nokia.com/maemo-dev-env-downloads.php here].&lt;br /&gt;
&lt;br /&gt;
Before you proceed make sure that &amp;quot;Device lock&amp;quot; is not enabled in Harmattan (In Settings \ Security \ Device Lock \ Autolock: off). If you have an Mail-for-Exchange account configured, you may need to delete it before you can disable device lock.&lt;br /&gt;
&lt;br /&gt;
If flasher bombs out with &amp;quot;Devicelock ON: cannot flash unsigned image&amp;quot;, then you didn't, go back and disable it.&lt;br /&gt;
&lt;br /&gt;
If the beta2 flasher errors with &amp;quot;bb5_rdc_cert_read&amp;quot; or [http://www.martindengler.com/proj/n950-flasher-beta1#failure a few other errors], try the [http://www.martindengler.com/proj/n950-flasher-beta1 beta1 flasher].&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Bootloader (Moslo) ===&lt;br /&gt;
&lt;br /&gt;
In order to boot MeeGo on N950, the default OS, Harmattan, must be replaced with MOSLO, the Meego OS LOader.&lt;br /&gt;
Moslo can be flashed as a fiasco image, available at: http://tablets-dev.nokia.com/moslo.php. Moslo source repository is located at: https://gitorious.org/meego-developer-edition-for-n900/moslo). Current moslo fiasco image for N950 is moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin&lt;br /&gt;
&lt;br /&gt;
Nokia N9 similarly will need its own Moslo.&lt;br /&gt;
&lt;br /&gt;
* IMPORTANT: before installing Moslo, boot into Harmattan at least once and wait for a few minutes.&lt;br /&gt;
* Power off the device, disconnect usb or changer.&lt;br /&gt;
* Run flasher:&lt;br /&gt;
  sudo flasher -F moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin  -f&lt;br /&gt;
Flasher now waits for a device to connect.&lt;br /&gt;
* Connect your N950 and wait for flashing to finish.&lt;br /&gt;
* Do not disconnect. Read on.&lt;br /&gt;
&lt;br /&gt;
=== Write CE to device ===&lt;br /&gt;
&lt;br /&gt;
After flashing MOSLO, boot the device by disconnecting and re-connecting the USB cable to the PC. You will see a warning and a disclaimer screen for 10 seconds followed by green text based MOSLO welcome screen. Wait for the text &amp;quot;Rootfs now exported via USB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you don't get the MOSLO screen after successfully flashing MOSLO, then let the device finish booting into harmattan and reboot it. It can take several full reboots of the device to fully enable MOSLO.&lt;br /&gt;
&lt;br /&gt;
If you have automount enabled in your Linux system, the device may appear as a normal USB drive to your desktop. Automount may not show the drive at first because it is in vfat format. Automount will typically use volume ID as mountpoint name.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: On some systems (Ubuntu) automounting may have too restrictive options. Manual mounting is recommended.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: Although the '''drive exported by device via MOSLO to the host PC it appears as /dev/sdX, inside the device it is a partition''', instead of a full drive.&lt;br /&gt;
&lt;br /&gt;
At first MOSLO connection, the partition has to be reformatted. Make sure it is unmounted (if necessary umount it '''do not 'eject' it via UI!'''):&lt;br /&gt;
 sudo umount /dev/sdX&lt;br /&gt;
 sudo mkfs.ext4 /dev/sdX&lt;br /&gt;
You will see warning: &amp;quot;/dev/sdX is entire device, not just one partition! Proceed anyway? (y,n)&amp;quot;. This is expected. Just make sure you got the right device node and say &amp;quot;y&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
For mounting the MeeGo rootfs manually:&lt;br /&gt;
 sudo mkdir -p /media/&amp;lt;choose mountpoint name for your N950&amp;gt;&lt;br /&gt;
 sudo mount /dev/sdX /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you already had an MeeGo image on the partition, it can be erased by running:&lt;br /&gt;
 sudo rm -rf /media/&amp;lt;mountpoint of your N950&amp;gt;/*&lt;br /&gt;
&lt;br /&gt;
Extract the Community Edition .tar.bz2 to the mounted rootfs partition with:&lt;br /&gt;
 sudo tar --numeric-owner -xf &amp;lt;path&amp;gt;/&amp;lt;CE_package&amp;gt;.tar.bz2 -C /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the extraction is ready, unmount/remove safely/eject the partition before disconnecting from usb:&lt;br /&gt;
 sudo umount /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boot to CE ===&lt;br /&gt;
&lt;br /&gt;
* The device should start booting to MeeGo right after disconnecting the USB.&lt;br /&gt;
* Otherwise start normally by holding power key for 2-4 seconds.&lt;br /&gt;
* First you should see the disclaimer screen.&lt;br /&gt;
* Next you see a green-on-black Moslo bootscreen.&lt;br /&gt;
* The last line should say: &amp;quot;Running Meego Kernel&amp;quot; (it is shown very briefly)&lt;br /&gt;
* Then wait patiently for desktop to come up.&lt;br /&gt;
&lt;br /&gt;
Shutting down is done simply by holding the power key until either a shut down graphic or a red screen is shown.&lt;br /&gt;
Check that screen back light goes out. If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
This will force HW shut down. Note: using forceful shut down might corrupt the filesystem, leading to a non-bootable setup.&lt;br /&gt;
&lt;br /&gt;
====Trouble starting?====&lt;br /&gt;
&lt;br /&gt;
If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
&lt;br /&gt;
In case battery is very low, the screen may stay black even if booting continues, or the device may shutdown (and likewise stay black).&lt;br /&gt;
* Connect usb or charger and let Moslo charge the battery at least for a few &amp;lt;del&amp;gt;minutes&amp;lt;/del&amp;gt; tens of minutes.&lt;br /&gt;
* Then disconnect usb/charger and device should continue booting to MeeGo.&lt;br /&gt;
* You can reconnect usb/charger after a few seconds. Latest at the Meego splash screen.&lt;br /&gt;
&lt;br /&gt;
Don't panic - try again, check the steps and finally ask for advice at #meego-arm IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== How to remove MeeGo/Moslo and restore Harmattan ===&lt;br /&gt;
In order to boot Harmattan again, MeeGo and Moslo must be removed.&lt;br /&gt;
This can be done by using OneClickFlasher available here:&lt;br /&gt;
http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html&lt;br /&gt;
&lt;br /&gt;
Running the OneClickFlasher will overwrite MeeGo/Moslo with Harmattan. All personal settings will be lost.&lt;br /&gt;
It will take about 15-30 minutes.&lt;br /&gt;
&lt;br /&gt;
== Open issues ==&lt;br /&gt;
&lt;br /&gt;
* How about dual boot with Harmattan?&lt;br /&gt;
** Not possible with current Moslo release. Community is encouraged to find a way, with modified Moslo or some other means eg. u-boot.&lt;br /&gt;
* Will this work in N9?&lt;br /&gt;
** Not at the moment. We are working to make a N9 release as well, stay tuned for more information.&lt;br /&gt;
&lt;br /&gt;
=== Reporting bugs against Community Edition ===&lt;br /&gt;
&lt;br /&gt;
* File a bug report on [http://bugs.meego.com/ bugs.meego.com]&lt;br /&gt;
* Use '''[CE]''' in the summary&lt;br /&gt;
* Add the '''N950''' and '''N900CE''' keywords to the bug report&lt;br /&gt;
* Select from Platform '''N900''', if bug can be reproduced with N900 also.&lt;br /&gt;
&lt;br /&gt;
*Notice:&lt;br /&gt;
** If bug is producible with MeeGo image also, remove the [CE] prefix from the summary. It's used only for the Community Edition specific bugs.&lt;br /&gt;
** Feel free to suggest MeeGo_N900CE_Release_Blocker.&lt;br /&gt;
** '''If bug is for application''', check if there's a '''upstream link''' for direct reporting in [[/AppsInCE | CE application list]]. If there's a link, please report to upstream, if not, then to the MeeGo Bugzilla.&lt;br /&gt;
** If you found a bug when using MeeGo 1.2 '''Harmattan''', please file the bug to the [http://www.developer.nokia.com/bugs/ http://www.developer.nokia.com/bugs/]&lt;br /&gt;
&lt;br /&gt;
= More info =&lt;br /&gt;
&lt;br /&gt;
More information can be found in [[N950 landing page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:N950]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-11-02T23:02:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
In order to keep the docs up-to-date they are now integrated into the code and can be found here: &lt;br /&gt;
http://autodoc.meego.com/mint/imager/&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
&lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the web client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication &lt;br /&gt;
: BOSS process or Web UI&lt;br /&gt;
&lt;br /&gt;
IMG consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP using a RabbitMQ server.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== Example Use ==&lt;br /&gt;
&lt;br /&gt;
A typical individual user would follow steps like this:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application.&lt;br /&gt;
# The IMG django application receives the request and saves the information&lt;br /&gt;
# A message containing the details for the required image is sent via BOSS to the image creation worker.&lt;br /&gt;
# The progress and status is noted on the WebUI&lt;br /&gt;
# When complete a link to the build log and the image is provided.&lt;br /&gt;
&lt;br /&gt;
== Behind the scenes ==&lt;br /&gt;
# The webui launches a simple BOSS process with the selected ks&lt;br /&gt;
# The process asks build_ks to modify the ks file and prepare for image building&lt;br /&gt;
# Then build_image is asked to create an image&lt;br /&gt;
## The build_image worker that picks up the request commences image creation&lt;br /&gt;
## A Virtual Machine disk image containing mic2 is started (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
# Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## The worker copies the image from the virtual machine to either a local or nfs-shared www-root&lt;br /&gt;
## If there is an error, only a message about it is sent via BOSS.&lt;br /&gt;
# When mic2 has finished, the virtual machine is shut down by the worker and the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
== Using IMG from BOSS ==&lt;br /&gt;
&lt;br /&gt;
This is an example workflow in BOSS. The &lt;br /&gt;
&lt;br /&gt;
      # Prepare a ks&lt;br /&gt;
      build_ks&lt;br /&gt;
      # Register the job with the web ui&lt;br /&gt;
      # image.kickstart and image.name must be set here&lt;br /&gt;
      request_image&lt;br /&gt;
      # Build image&lt;br /&gt;
      # image.kickstart, image.name, image.arch etc must be set by&lt;br /&gt;
      # this point : see http://autodoc.meego.com/mint/imager/participants/build_image.html&lt;br /&gt;
      build_image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installation for IMG can be found at: http://autodoc.meego.com/mint/imager/install.html&lt;br /&gt;
&lt;br /&gt;
Note that IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Whether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-10-24T08:07:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: add link to autodoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
In order to keep the docs up-to-date they are now integrated into the code and can be found here: &lt;br /&gt;
http://autodoc.meego.com/mint/imager/&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.4.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.4/meego-tools.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4/devel:languages:python.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
Worker:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-worker&lt;br /&gt;
&lt;br /&gt;
Web UI:&lt;br /&gt;
  zypper in img-web&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Whether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-10-24T08:05:12Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.4.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.4/meego-tools.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4/devel:languages:python.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
Worker:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-worker&lt;br /&gt;
&lt;br /&gt;
Web UI:&lt;br /&gt;
  zypper in img-web&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Whether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-10-24T08:04:58Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: add python repo for suse11.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.4.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.4/meego-tools.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4/devel:languages:python.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
Worker:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-boss&lt;br /&gt;
&lt;br /&gt;
Web UI:&lt;br /&gt;
  zypper in img-web&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Whether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Image_Creation</id>
		<title>Image Creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Image_Creation"/>
				<updated>2011-10-24T08:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Binary Package installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the main Image Creator developer's guide.  For a more simplistic, step-by-step document, go to: [[Image Creation For Beginners]].&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The tool used to create MeeGo images is called &amp;quot;MIC2&amp;quot; (to distinguish from obsolete MIC - Moblin Image Creator). MIC is composed of a series of tools to create images, convert images, chroot, etc. MIC2 is primarily based on Fedora livecd-tools and appliance-tools.&lt;br /&gt;
&lt;br /&gt;
With MIC2 tools, users can create different types of images for different purposes, including live CD images, live USB images, raw images for KVM, VMDK images for Vmware, vdi images for VirtualBox, loop images for IVI platforms, NAND images for Moorestown platforms, ubi images for N900, fs image for MeeGo developers. Also, users can use MIC2 tools to manipulate images, like transforming an image from a virtual machine to a live image, and providing a chroot environment based on an existing live image. With these features, developers can do development work on a host virtual machine running MeeGo or a Meego chroot environment, and transfer the resulting new live image to a target device for final debug/verification.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
MIC2 offers these major tools:&lt;br /&gt;
* mic-image-creator: create images. &lt;br /&gt;
* mic-image-convertor: convert a raw/vmdk/vdi/live image into a live image. &lt;br /&gt;
* mic-chroot: provide a MeeGo environment from a live/loop image for development, it also can translate that chroot file system into a live image.&lt;br /&gt;
* mic-image-writer: write a MeeGo image to a USB disk. This is a safe alternative to dd.&lt;br /&gt;
&lt;br /&gt;
The following support is provided:&lt;br /&gt;
&lt;br /&gt;
* Supports mainstream Linux distros. MIC2 has been thoroughly tested on these distributions:&lt;br /&gt;
** Meego&lt;br /&gt;
** Fedora (Fedora 13 and above)&lt;br /&gt;
** Opensuse (&amp;gt; OpenSUSE 11.3)&lt;br /&gt;
** Ubuntu &amp;gt; 10.04&lt;br /&gt;
* Supports various types of images: livecd, liveusb, loop, raw, vmdk, nandmrst, vdi, fs, ubi&lt;br /&gt;
* Supports image coversion from virtual machine/live images to live images.&lt;br /&gt;
* Uses kickstart (.ks) files for image creation. Through this, users can specify which software repositories to use, which packages to install, and basic system configuration directives.  Please refer to http://fedoraproject.org/wiki/Anaconda/Kickstart for more information about kickstart configuration files.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
We currently build MIC2 binary rpms/debs for many popular Linux distributions, including Fedora 13, Fedora 14, Fedora15, Ubuntu 10.04, Ubuntu 10.10, OpenSUSE 11.3, OpenSUSE 11.4, and Debian 5.0. Please go to http://repo.meego.com/tools/repos/ to get a repository URL corresponding to your Linux distribution, then add it into your repo or package source for installation and update later. If your distribution isn't in the support list, please install MIC2 from git source.&lt;br /&gt;
&lt;br /&gt;
=== Installation Requirements ===&lt;br /&gt;
&lt;br /&gt;
To use MIC2, your host machine (that will run mic2) must have Intel* Atom* or Intel* Core* 2 CPU (support for SSSE3), this is a hard requirement (ARM image is exceptional).&lt;br /&gt;
&lt;br /&gt;
On Fedora, openSUSE and MeeGo, mic2 depends directly on the following packages (they will be automatically installed on installing mic2):&lt;br /&gt;
&lt;br /&gt;
* util-linux&lt;br /&gt;
* coreutils&lt;br /&gt;
* python &amp;gt;= 2.5&lt;br /&gt;
* e2fsprogs&lt;br /&gt;
* dosfstools &amp;gt;= 2.11-8&lt;br /&gt;
* yum &amp;gt;= 3.2.24&lt;br /&gt;
* pykickstart &amp;gt;= 0.96&lt;br /&gt;
* python-iniparse&lt;br /&gt;
* syslinux &amp;gt;= 3.82&lt;br /&gt;
* curl&lt;br /&gt;
* kpartx&lt;br /&gt;
* parted&lt;br /&gt;
* device-mapper&lt;br /&gt;
* zlib&lt;br /&gt;
* rsync&lt;br /&gt;
* /usr/bin/mkisofs&lt;br /&gt;
* wget&lt;br /&gt;
* cpio&lt;br /&gt;
* isomd5sum&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* squashfs-tools &amp;gt;= 4.0&lt;br /&gt;
* btrfs-progs&lt;br /&gt;
* python-zypp &amp;gt;= 0.5.7&lt;br /&gt;
&lt;br /&gt;
On Debian and Ubuntu, mic2 depends on or recommands or suggests the following packages (they will be automatically installed if possible on installing mic2):&lt;br /&gt;
&lt;br /&gt;
Depends:&lt;br /&gt;
&lt;br /&gt;
* bzip2&lt;br /&gt;
* curl&lt;br /&gt;
* dbus&lt;br /&gt;
* dmsetup&lt;br /&gt;
* dosfstools&lt;br /&gt;
* e2fsprogs (&amp;gt;= 1.41),&lt;br /&gt;
* genisoimage&lt;br /&gt;
* kpartx&lt;br /&gt;
* parted&lt;br /&gt;
* psmisc&lt;br /&gt;
* python-iniparse&lt;br /&gt;
* python-pykickstart (&amp;gt;= 0.96) | pykickstart (&amp;gt;= 0.96),&lt;br /&gt;
* python-urlgrabber&lt;br /&gt;
* rsync&lt;br /&gt;
* squashfs-tools (&amp;gt;= 4.0)&lt;br /&gt;
* syslinux (&amp;gt;= 3.82)&lt;br /&gt;
* yum (&amp;gt;= 3.2)&lt;br /&gt;
&lt;br /&gt;
Recommends:&lt;br /&gt;
&lt;br /&gt;
* binfmt-support&lt;br /&gt;
* btrfs-tools&lt;br /&gt;
* extlinux&lt;br /&gt;
* qemu-user-static&lt;br /&gt;
* udisks | hal&lt;br /&gt;
&lt;br /&gt;
Suggests:&lt;br /&gt;
&lt;br /&gt;
* python-zypp&lt;br /&gt;
&lt;br /&gt;
For source installation, these two packages are necessary:&lt;br /&gt;
&lt;br /&gt;
* zlib-devel(for compiling)&lt;br /&gt;
* python-devel(for installation) &lt;br /&gt;
&lt;br /&gt;
You should load these modules, as well, if they're not loaded automatically by the kernel:&lt;br /&gt;
&amp;lt;br&amp;gt;(Use &amp;lt;code&amp;gt;lsmod&amp;lt;/code&amp;gt; to list modules.)&lt;br /&gt;
&lt;br /&gt;
* squashfs&lt;br /&gt;
* squashfs-tools&lt;br /&gt;
* dm_snapshot&lt;br /&gt;
* loop &lt;br /&gt;
&lt;br /&gt;
Specific packages for Ubuntu 8.10:&lt;br /&gt;
&lt;br /&gt;
* python-celementtree&lt;br /&gt;
* python-elementtree&lt;br /&gt;
* dmsetup&lt;br /&gt;
&lt;br /&gt;
=== Installing requirements for Ubuntu 10.10 ===&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install yum rpm kpartx parted syslinux isomd5sum kvm zlib1g-dev squashfs-tools python2.6-dev qemu-arm-static python-urlgrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Binary Package installation ===&lt;br /&gt;
&lt;br /&gt;
* '''Installation Steps For Fedora 13, Fedora 14, and Fedora 15'''&lt;br /&gt;
&lt;br /&gt;
1. Add MIC2 repo as user root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat &amp;lt;&amp;lt;REPO &amp;gt; /etc/yum.repos.d/meego-tools.repo&lt;br /&gt;
[meego-tools]&lt;br /&gt;
name=MeeGo Tools for Fedora&lt;br /&gt;
baseurl=http://repo.meego.com/MeeGo/tools/repos/fedora/\$releasever&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-meego&lt;br /&gt;
REPO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Add gpg key as user root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# gpg2 --keyserver subkeys.pgp.net --recv 0BC7BEC479FC1F8A&lt;br /&gt;
# gpg2 --export --armor 0BC7BEC479FC1F8A &amp;gt; /etc/pki/rpm-gpg/RPM-GPG-KEY-meego&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Install mic2 as user root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# yum install mic2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if you get asked to import the key do so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 79fc1f8a: NOKEY&lt;br /&gt;
meego-fedora/gpgkey                                                                        | 3.3 kB     00:00 ... &lt;br /&gt;
Importing GPG key 0x79FC1F8A:&lt;br /&gt;
 Userid: &amp;quot;Moblin Build (Moblin Build User) &amp;lt;build@moblin.org&amp;gt;&amp;quot;&lt;br /&gt;
 From  : /etc/pki/rpm-gpg/RPM-GPG-KEY-meego&lt;br /&gt;
Is this ok [y/N]: y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Update Steps For Fedora 13, Fedora 14, and Fedora 15'''&lt;br /&gt;
&lt;br /&gt;
You can use the below command to get the latest mic2 package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# yum update mic2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Installation Steps For Ubuntu 10.04, Ubuntu 10.10, and Debian 5.0'''&lt;br /&gt;
&lt;br /&gt;
1. Add package source&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 10.04, add the below line to /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.04/ /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Ubuntu 10.10, add the below line to /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.10/ /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For Debian 5.0, add the below line to /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://repo.meego.com/MeeGo/tools/repos/debian/5.0/ /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mic2 is also available in Debian Testing, which will become Debian 6.0. &lt;br /&gt;
&lt;br /&gt;
2. sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
You should see the following error:&lt;br /&gt;
W: GPG error: http://repo.meego.com  Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0BC7BEC479FC1F8A&lt;br /&gt;
&lt;br /&gt;
To add the repository public key use the following command:&lt;br /&gt;
:gpg --keyserver subkeys.pgp.net --recv 0BC7BEC479FC1F8A&lt;br /&gt;
:gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Note: Often the port used by gpg is blocked in companies, so gpg will time out. You can install it manually; this example is for Ubuntu 10.10:&lt;br /&gt;
:wget http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.10/Release.key&lt;br /&gt;
Open System-&amp;gt;Administrator-&amp;gt;Software Sources. Under the Authentication tab, import the key.&lt;br /&gt;
&lt;br /&gt;
Now redo sudo apt-get update&lt;br /&gt;
&lt;br /&gt;
3. sudo apt-get install mic2&lt;br /&gt;
&lt;br /&gt;
* '''Installation Steps For OpenSUSE 11.3, and OpenSUSE 11.4'''&lt;br /&gt;
&lt;br /&gt;
1. Add repos&lt;br /&gt;
&lt;br /&gt;
For OpenSUSE 11.3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo zypper addrepo http://repo.meego.com/MeeGo/tools/repos/opensuse/11.3/ meego-tools&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For OpenSUSE 11.4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo zypper addrepo http://repo.meego.com/MeeGo/tools/repos/opensuse/11.4/ meego-tools&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. sudo zypper install mic2&lt;br /&gt;
&lt;br /&gt;
* '''Install Steps For OpenSUSE 11.3, and OpenSUSE 11.4'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo zypper install mic2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See the #bootstrap section for opensuse - you may need to run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mic-create-bootstrap -n trunk -k /var/cache/mic -r http://repo.meego.com/MeeGo/builds/trunk/latest/repos/oss/ia32/packages/ -o /var/cache/meego-bootstrap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== From Stable Git Source Releases ===&lt;br /&gt;
&lt;br /&gt;
You can get the latest stable release of MIC2 from the tag section in http://meego.gitorious.org/meego-developer-tools/image-creator.  Click on the &amp;quot;Source tree&amp;quot; link on the top of the screen.  There will be a list of tags on the right hand side.&lt;br /&gt;
&lt;br /&gt;
You should follow the below steps to install it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/meego-developer-tools/image-creator.git&lt;br /&gt;
cd image-creator&lt;br /&gt;
git checkout 0.17  #check Gitorious for the most recent tag&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== From Development Git Tree ===&lt;br /&gt;
&lt;br /&gt;
Note: MIC2 GIT tree has latest-and-greatest source, so stability is not guaranteed.  If you run into errors, please use a 'Stable Release' instead before filing a bug.&lt;br /&gt;
&lt;br /&gt;
You need to follow the below steps to git clone MIC2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/meego-developer-tools/image-creator.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd image-creator&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should add the repo for mic2 then run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./tools/mic-check-alldeps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to check/install all the depended packages, otherwise mic2 can't work normally.&lt;br /&gt;
&lt;br /&gt;
== Proxy Setting ==&lt;br /&gt;
&lt;br /&gt;
If you need to use proxy to access Internet, you must set proxy for mic2 correctly. Generally, you should export these environment variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ export http_proxy=&amp;quot;http://proxy.yourcompany.com:8888&amp;quot;&lt;br /&gt;
$ export https_proxy=&amp;quot;http://proxy.yourcompany.com:8888&amp;quot;&lt;br /&gt;
$ export no_proxy=&amp;quot;127.0.0.0/8, .yourcompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use sudo to run mic2, you also need to add these into /etc/sudoers in order that they still are valid after sudo.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo vi /etc/sudoers&lt;br /&gt;
Add: Defaults env_keep += &amp;quot; no_proxy http_proxy https_proxy&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
so sudo will adhere to the no_proxy and proxy settings.&lt;br /&gt;
&lt;br /&gt;
You also can set proxy in /etc/mic2/mic2.conf or in ~/.mic2.conf by adding the below two lines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
proxy=http://proxy.yourcompany.com:8888/&lt;br /&gt;
no_proxy=localhost,127.0.0.0/8,.yourcompany.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course, you need to change proxy.yourcompany.com:8888 and .yourcompany.com according to your network.&lt;br /&gt;
&lt;br /&gt;
From mic2 0.23.0 on, mic2 enabled zypp backend, it uses /etc/sysconfig/proxy to get proxy settings, so you also need to create this file (it is a system file in OpenSUSE, so for openSUSE, you just set correct values inside of it) if you need to use proxy to access internet. Here is a sample:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#### /etc/sysconfig/proxy sample ####&lt;br /&gt;
## Path:	Network/Proxy&lt;br /&gt;
## Description:	&lt;br /&gt;
## Type:	yesno&lt;br /&gt;
## Default:	no&lt;br /&gt;
## Config:      kde,profiles&lt;br /&gt;
#&lt;br /&gt;
# Enable a generation of the proxy settings to the profile.&lt;br /&gt;
# This setting allows to turn the proxy on and off while&lt;br /&gt;
# preserving the particular proxy setup.&lt;br /&gt;
# &lt;br /&gt;
PROXY_ENABLED=&amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Type:	string&lt;br /&gt;
## Default:	&amp;quot;&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Some programs (e.g. lynx, arena and wget) support proxies, if set in&lt;br /&gt;
# the environment.  SuSEconfig can add these environment variables to&lt;br /&gt;
# /etc/SuSEconfig/* (sourced by /etc/profile etc.) -&lt;br /&gt;
# See http://portal.suse.com/sdb/en/1998/01/lynx_proxy.html for more details.&lt;br /&gt;
# Example: HTTP_PROXY=&amp;quot;http://proxy.provider.de:3128/&amp;quot;&lt;br /&gt;
HTTP_PROXY=&amp;quot;http://proxy.yourcompany.com:8888/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Type:	string&lt;br /&gt;
## Default:	&amp;quot;&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Some programs (e.g. lynx, arena and wget) support proxies, if set in&lt;br /&gt;
# the environment.  SuSEconfig can add these environment variables to&lt;br /&gt;
# /etc/SuSEconfig/* (sourced by /etc/profile etc.) -&lt;br /&gt;
# this setting is for https connections&lt;br /&gt;
HTTPS_PROXY=&amp;quot;http://proxy.yourcompany.com:8888/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Type:	string&lt;br /&gt;
## Default:	&amp;quot;&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Example: FTP_PROXY=&amp;quot;http://proxy.provider.de:3128/&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
FTP_PROXY=&amp;quot;http://proxy.yourcompany.com:8888/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Type:	string&lt;br /&gt;
## Default:	&amp;quot;&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
# Example: GOPHER_PROXY=&amp;quot;http://proxy.provider.de:3128/&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
GOPHER_PROXY=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Type:	string(localhost)&lt;br /&gt;
## Default:	localhost&lt;br /&gt;
#&lt;br /&gt;
# Example: NO_PROXY=&amp;quot;www.me.de, do.main, localhost&amp;quot;&lt;br /&gt;
#&lt;br /&gt;
NO_PROXY=&amp;quot;localhost, 127.0.0.1, .yourcompany.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#### /etc/sysconfig/proxy sample ####&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to change proxy.yourcompany.com:8888 and .yourcompany.com according to your network. By default, zypp will be used, but you can use option --pkgmgr=yum to force mic2 to use yum, you can do so if you find zypp can't work for you, but remember to file a bug on http://bugs.meego.com/enter_bug.cgi?product=Development%20Tools&amp;amp;component=MIC%20(Image%20Creator) if you find any issue related to zypp.&lt;br /&gt;
&lt;br /&gt;
An option --proxy for repo command in kickstart file also can set proxy, you can specify it as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  repo --name=meego --baseurl=http://repo.meego.com/trunk/repo/ia32/os/ --proxy=http://proxyhost:proxyport/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to add two more options to repo if your proxy needs user authentication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
repo --name=meego --baseurl=http://repo.meego.com/trunk/repo/ia32/os/ --proxy=http://proxyhost:proxyport/ --proxyuser=proxyusername --proxypaswd=proxyuserpassword&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running mic-image-creator ==&lt;br /&gt;
&lt;br /&gt;
Configuration of images is based on kickstart, the format used for unattended installation in Fedora and Redhat.&lt;br /&gt;
&lt;br /&gt;
Super user privileges are needed. The tool is more or less self-documented, use the --help option to see options.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating Supported Image Types ===&lt;br /&gt;
&lt;br /&gt;
KickStart (.ks) configuration files are passed to MIC2 to create tailored images.  KickStart files specify what repos to pull from, what packages to include, what post-scripts to run and what type of images to create.&lt;br /&gt;
&lt;br /&gt;
creating arm images needs 'qemu-arm' os 'qemu-arm-static' command available, and creating vdi or vmdk images needs 'vboxmanager' available, so be sure your system have installed them before creating these types of images.&lt;br /&gt;
&lt;br /&gt;
To obtain the official Meego .ks files, go here: http://wiki.meego.com/Image_Creation#Official_Meego_.ks_files&lt;br /&gt;
&lt;br /&gt;
'''Create ARMv7 Images'''&lt;br /&gt;
&lt;br /&gt;
When creating images for ARMv7 hardware, pass ''--arch=armv7hl'' to ''mic-image-creator'' commands.&lt;br /&gt;
&lt;br /&gt;
'''Create Livecd Image'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=livecd --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells image-creator to use the kickstart file default.ks to obtain info about which packages to download and include in the image, and --cache is the directory on your local machine which will host a cache of these packages. The cache is very useful if you are remote to the server and reduces the amount of downloaded packages next time you create an image. Next time the command is run, this cache will simply be 'updated' if there are changes, rather than re-downloading from the repositories again.&lt;br /&gt;
&lt;br /&gt;
The output of this command will be a file named meego-1.2-default-XX.iso created. This ISO image is a hybrid image and can be either written to a disk device or burned onto a cd.&lt;br /&gt;
&lt;br /&gt;
To burn it onto a USB stick, just run the following command, assuming the USB stick is /dev/sdb in your system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-writer meego-1.2-default-XX.iso&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Create Moorestown NAND Image'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=mrstnand&lt;br /&gt;
&lt;br /&gt;
remove the first 512 bytes from the image to remove the partition information.&lt;br /&gt;
sudo dd bs=512 skip=1 if=meego-1.2-default-XX-sda.bin of= meego-1.2-default-XX-nand.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Create Liveusb Image'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=liveusb --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A file named meego-1.0-default-XX.usbimg will be created. To burn it onto a USB stick, run the following command, assuming the USB stick is /dev/sdb in your system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-writer meego-1.2-default-XX.usbimg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This image has a FAT file system and can be mounted easily on Windows and other OSes.&lt;br /&gt;
&lt;br /&gt;
'''Create Liveusb Image Interactively'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=liveusb --interactive --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It directly creates a MeeGo live usb stick.&lt;br /&gt;
&lt;br /&gt;
Liveusb image can be created in two different ways, interactive and non-interactive (default). When running MIC2 in a non-interactive mode, MIC2 creates a USB images file that can be copied directly into a USB stick. The non-interactive mode can be used for daily build or automated testing. The interactive mode will write the images onto a USB disk, it will detect if a USB stick is available and detects and verifies a partition is available. If two or more USB devices are present, you will be asked to select the target device. This way the contents of the existing USB stick won't be destroyed unless no appropriate partition is found, end user should use it to create the live USB.&lt;br /&gt;
&lt;br /&gt;
'''Create Loop Image'''&lt;br /&gt;
&lt;br /&gt;
This is the simplest image format available. Such images can be loop mounted and chrooted into, for example, to build applications or for debugging purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=loop --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A file named meego-1.2-default-XX.img is created. You can use below to mount it and chroot into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mount -o loop meego-1.2-default-XX.img /mnt&lt;br /&gt;
sudo chroot /mnt su -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Create KVM Image'''&lt;br /&gt;
&lt;br /&gt;
Can be used with QEMU or other VMM applications to launch MeeGo as a virtualized instance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=raw --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A file named meego-1.2-default-XX folder with a meego-1.2-default-XX-sda.raw image is created. For optimal results, use this feature in a machine with VT support and enable it in the BIOS.&lt;br /&gt;
&lt;br /&gt;
If you use Fedora or openSUSE, run the following command to launch the image into MeeGo KVM virtual machine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo qemu-kvm -m 512 -boot c -hda meego-1.2-default-XX-sda.raw -std-vga&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use Ubuntu, run the following command launch image:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo kvm -m 512 -boot c -hda meego-1.2-default-XX-sda.raw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Create VMDK Image'''&lt;br /&gt;
&lt;br /&gt;
VMDK images can be loaded into Vmware or Vmware player. MIC2 also generates a VMX file that has image configuration and can be used to launch the image in Vmware by just clicking the file. If you have vmplayer, it should open automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --config=default.ks --format=vmdk --cache=mycache&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A file named meego-1.2-default-XX folder with both meego-1.2-default-XX-sda.vmdk image and meego-1.2-default-XX-sda.vmx is created. Just run vmware or vmware player, and select the generated vmx file.&lt;br /&gt;
&lt;br /&gt;
=== KickStart Files (configuration files used for image creation) ===&lt;br /&gt;
&lt;br /&gt;
* [[Image Configurations - KickStart Files]]&lt;br /&gt;
&lt;br /&gt;
=== MIC2 Configuration file ===&lt;br /&gt;
&lt;br /&gt;
MIC2 options can be specified in a global configuration file ('''/etc/mic2/mic2.conf''') and local configuration file ('''$HOME/.mic2.conf'''), where you can specify: &lt;br /&gt;
* Repository configuration&lt;br /&gt;
* proxy settings&lt;br /&gt;
* cache directories and &lt;br /&gt;
* other variables &lt;br /&gt;
that you normally would have to re-type in your command-line. &lt;br /&gt;
&lt;br /&gt;
The two configuration files have the same format, /etc/mic2/mic2.conf is global, no matter whoever is running MIC2, this configuration file will be read first, $HOME/.mic2.conf is just valid for current user, every user can have their own settings.&lt;br /&gt;
The final configuration is a combination of two configuration files, options in '''$HOME/.mic2.conf''' will override those from '''/etc/mic2/mic2.conf'''. Options from command line have the highest priority. &lt;br /&gt;
If an option is specified on the command line, the same option in both configuration files, global and local will be ignored.&lt;br /&gt;
&lt;br /&gt;
Below is an example you can cut-and-paste, and reuse for your needs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[main]&lt;br /&gt;
cachedir=/home/user1/mycache&lt;br /&gt;
tmpdir=/home/user1/mystorage/tmp&lt;br /&gt;
outdir=/home/user1/mystorage&lt;br /&gt;
proxy=http://my.proxy.com:911/&lt;br /&gt;
no_proxy=localhost,127.0.0.0/8,.mysite.com,172.16.0.0/16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''cachedir'' = directory where the cached repo(s) will reside.  With this variable set, you do not need to pass the --cache flag in the command-line.&lt;br /&gt;
&lt;br /&gt;
''tmpdir'' = temporary directory used by MIC2 when creating images.  With this variable set, you do not need to pass the --tmpdir flag in the command-line.&lt;br /&gt;
&lt;br /&gt;
''outdir'' = where your images will reside once they are created.  With this variable set, you do not need to pass the --outdir flag in the command-line.&lt;br /&gt;
&lt;br /&gt;
''proxy'' = specify your proxy if you're behind a behind a firewall.&lt;br /&gt;
&lt;br /&gt;
''no_proxy'' = specify what domains should not sure the proxy setting.&lt;br /&gt;
&lt;br /&gt;
''image_format'' = specify image format.&lt;br /&gt;
&lt;br /&gt;
''default_ks'' = specify a default kickstart file, there are several kickstart files provided in repository http://repo.meego.com/MeeGo/devel/trunk/repo/ia32/os/&lt;br /&gt;
&lt;br /&gt;
'''Note:''' When specifying proxy and no_proxy, you do not need to use the --proxy flag in your .ks files when referring to repos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In configuration files, you also can specify one or multiple repositories, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[trunk]&lt;br /&gt;
name=trunk&lt;br /&gt;
baseurl=http://repo.meego.com/MeeGo/devel/trunk/repo/ia32/os/&lt;br /&gt;
enabled=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once there is this repository info in your configuration files, and both image_format and default_ks are set, you can just run &amp;quot;sudo mic-image-creator&amp;quot; to create a image, there isn't any extra argument needed.&lt;br /&gt;
&lt;br /&gt;
=== Use Bootstrap ===&lt;br /&gt;
&lt;br /&gt;
MIC2 highly depends on yum and librpm, but different Linux distributions used diffrent yum and librpm versions, so MIC2 has some compatibility issues on OpenSUSE, Ubuntu and Debian, bootstrap is just for fixing these compatibility issues.&lt;br /&gt;
&lt;br /&gt;
bootstrap is a minimal MeeGo file system, MIC2 can run very smoothly on it using chroot mode. You can use the below command to create a bootstrap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-create-bootstrap -n trunk -k /your/repo/cache/path -r http://repo.meego.com/MeeGo/builds/trunk/latest/repos/oss/ia32/packages/ -o /your/final/bootstrap&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
NOTE: The repo-url specific for your needs may differ&lt;br /&gt;
&lt;br /&gt;
-n is used to specify repository name, if you have its cache before, it can reduce runtime dramatically to use it with -k option, -k is used to specify your repository cache dir, -r is used to specify MeeGo main repository.&lt;br /&gt;
&lt;br /&gt;
Once you created your bootstrap, you can use this bootstrap to run MIC2 as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --bootstrap=/your/final/bootstrap --format=livecd --config=default.ks --cache=/your/repo/cache/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can create and use bootstrap in one mic-image-creator run, as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-creator --build-bootstrap --bootstrap=/your/final/bootstrap --format=livecd --config=default.ks --cache=/your/repo/cache/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running mic-image-writer ==&lt;br /&gt;
&lt;br /&gt;
mic-image-writer writes a Meego image to a USB disk as an alternative to dd.&lt;br /&gt;
&lt;br /&gt;
mic-image-writer can run in both console mode and GUI mode. It can decide which mode to run, according to current system environment. You can also use a given option to force it to run in some other mode. Run 'mic-image-writer --help' to get usage information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usage: mic-image-writer [options] [image file]&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
  -h, --help     Show this help message and exit&lt;br /&gt;
  -c, --console  Run in console mode&lt;br /&gt;
  -g, --gui      Run in GUI mod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here is a run example in console mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo mic-image-writer meego-xxx.img&lt;br /&gt;
Available usb disk:&lt;br /&gt;
        [1] /dev/sdc: SanDisk USB Flash Drive&lt;br /&gt;
        [2] /dev/sdb: SanDisk U3 Cruzer Micro&lt;br /&gt;
Please choice [1..2] ? 2&lt;br /&gt;
Source: /myhome/meego-xxx.img&lt;br /&gt;
Target: /dev/sdb&lt;br /&gt;
Image size: 559 MB&lt;br /&gt;
Estimated time: 55 seconds&lt;br /&gt;
Elapsed time: 64, progress: 100% 8944+0 records in&lt;br /&gt;
8944+0 records out&lt;br /&gt;
586153984 bytes (586 MB) copied, 63.0486 s, 9.3 MB/s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mic-image-writer can estimate how long it will take to write the given image to your USB disk and reports current writing progress. It automatically unmounts your USB disk, if it is mounted. If your USB can't be unmounted, it will terminate.&lt;br /&gt;
&lt;br /&gt;
If you love UI mode, you can run it in X enviroment. The command with the added -g flag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-writer -g meego-xxx.img&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image name is optional.&lt;br /&gt;
&lt;br /&gt;
== Running mic-image-convertor ==&lt;br /&gt;
&lt;br /&gt;
It's very easy to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-convertor --source-image=InputImage --target-format=Targegformat&lt;br /&gt;
&lt;br /&gt;
sudo mic-image-convertor -I InputImage -T Targegformat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, to translate a KVM raw image to livecd image, just type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-image-convertor --source-image=meego-core-200902200545/meego-core-200902200545-sda.raw --target-format=livecd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A new livecd image of meego-converted-from-raw-200902201804.iso is generated. The tool can detect the type of input image, either raw or vmdk.&lt;br /&gt;
&lt;br /&gt;
This tool is very useful. For example, the developer can launch a virtual machine running MeeGo v2 and make whatever changes on the virtual system like yum install/remove a package, scp a source tarball to VM and build and try, and etc. Then with a simple &amp;quot;sync&amp;quot; or shutdown of VM, the VM image now contains his changes. With this tool, the VM image can be transformed to a live image and burned to a USB flash disk. Now developers can have final verifications in a target device, with changes in the live system.&lt;br /&gt;
&lt;br /&gt;
== Running mic-chroot ==&lt;br /&gt;
&lt;br /&gt;
There are two major usage models for mic-chroot for developers.&lt;br /&gt;
&lt;br /&gt;
'''chroot directly into the image to use it as a development environment, then optionally create a new image based off of your changes'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-chroot  -c livecd meego-core-200903131337.iso&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above command would present a chroot, using the livecd image, to developers with some bind mounts like /proc /sys /dev/pts and /parentroot. With those bind mounts, developers now can easily exchange files in chroot env with host /parentroot, and conduct yum install, yum remove and any other network related operations. After done and typing &amp;quot;exit&amp;quot;, a new live ISO image is created from the chroot env with the changes developers made.&lt;br /&gt;
&lt;br /&gt;
'''Unpack and modify the image's filesystem (which you can save), and create a new image based off of your changes'''&lt;br /&gt;
&lt;br /&gt;
Sometimes, developers want to keep the chroot env, so that they can do multiple changes in that root file system at different times. So they want to execute following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-chroot -s my-chroot-fs --unpack-only  meego-core-200903131337.iso --bind-mounts=/proc:/proc;/:/parentroot;/sys:/sys;/dev/pts:/dev/pts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above command creates a folder called 'my-chroot-fs' in the current directory, using the chroot environment from the livecd image. Of course, if one forgets to add the --bind-mounts options, you'll need to manually do the bind mounting yourself. Don't forget copying /etc/reslov.conf into my-chroot-fs if you need to use DNS. Should you wish to create an image from the chroot, just execute following to create a livecd image&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mic-chroot -c livecd --convert-only my-chroot-fs/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling Autoinstallation ==&lt;br /&gt;
&lt;br /&gt;
You need to copy a kickstart file into /root/mic2-ks.cfg which is used for&lt;br /&gt;
automated installation of the image. To activate autoinstall mode, boot with autoinst on the command line&lt;br /&gt;
or add --menus=autoinst to the bootloader directive in the kickstart file you use to&lt;br /&gt;
create the image.&lt;br /&gt;
&lt;br /&gt;
= Development Release Processes =&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/MIC2_Development_Release_Processes&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
* MIC2 is not compatible with Ubuntu 8.04 (Yum package compatibility)&lt;br /&gt;
* MIC2 is not compatible with the initial Ubuntu 9.04.  Make sure you have package libsqlite3-0 of 3.6.10-1ubuntu0.2 or later.&lt;br /&gt;
* MIC2 has some issues on Debian, please refer to [[MIC on Debian]] to get installation instructions&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
You can file a bug on http://bugzilla.meego.com/enter_bug.cgi?product=Development%20Tools (Note: you should select MIC for component) if you run into any MIC2-related issue, bugzilla can track your issue faster and more efficiently.&lt;br /&gt;
&lt;br /&gt;
===libgcc related issues===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libgcc_s.so.1 must be installed for pthread_cancel to work&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Error: failed to create image : '/sbin/mksquashfs /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin.img' exited with error (-6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This error occurs when MIC2 is unable to find the proper version of libgcc.  This usually happens on x86_64 systems - MIC2 is looking for the 32 bit version of libgcc, but only the 64 bit version is installed.  Installing the 32 bit version of libgcc should resolve this.&lt;br /&gt;
&lt;br /&gt;
===General squashfs issues===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Error: failed to create image : '/sbin/mksquashfs /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin.img' exited with error (-6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This error can also be an issue with the syslinux package.  Try updating to the latest version for your distro.&lt;br /&gt;
&lt;br /&gt;
===device-mapper issues===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unable to remove open device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a race condition with device-mapper in Fedora:  https://bugzilla.redhat.com/show_bug.cgi?id=506644. Usually rerunning the MIC2 command will resolve this.&lt;br /&gt;
&lt;br /&gt;
===python related issues===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urlgrabber.grabber import URLGrabber&lt;br /&gt;
ImportError: No module named urlgrabber.grabber&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some people are using python they built themselves, so some python modules aren't under their python library path. For such error, only one way is not to use your own python but to use python your system installed.&lt;br /&gt;
&lt;br /&gt;
===debian-based distros related issues===&lt;br /&gt;
On debian-based distros, we used pycentral to package mic2, but mic2 source installtion used distutils, so two kinds of installation have different installation path, if they exist there at the same time, it will result in some unpredictable errors to run mic2. To run it correctly, you can keep only one installation, source or binary.&lt;br /&gt;
&lt;br /&gt;
Remove binary installation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get remove mic2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove source installation&lt;br /&gt;
&lt;br /&gt;
Get python lib path&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python&lt;br /&gt;
Python 2.5.2 (r252:60911, Sep 30 2008, 15:41:38)&lt;br /&gt;
[GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import distutils.sysconfig&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print distutils.sysconfig.get_python_lib()&lt;br /&gt;
&amp;lt;PYTHONLIBPATH&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove mic2 files&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo rm -rf &amp;lt;PYTHONLIBPATH&amp;gt;/mic&lt;br /&gt;
$ sudo rm -rf &amp;lt;PYTHONLIBPATH&amp;gt;/mic-0.*&lt;br /&gt;
$ sudo rm -f /usr/bin/mic&lt;br /&gt;
$ sudo rm -f /usr/bin/mic-*&lt;br /&gt;
$ sudo rm -f /usr/bin/moblin-*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: You must replace &amp;lt;PYTHONLIBPATH&amp;gt; with the above python lib path&lt;br /&gt;
&lt;br /&gt;
If program jams after mkfs.vfat, it might be due missing ''vol_id'' program. ''vol_id'' is replaced with ''blkid'' in new ubuntu versions. Try run ''/lib/udev/vol_id'', if it's missing you have troubles.&lt;br /&gt;
&lt;br /&gt;
===ARM related issues===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;/usr/bin/mic-image-creator&amp;quot;, line 856, in &amp;lt;module&amp;gt;&lt;br /&gt;
    ret = main()&lt;br /&gt;
  File &amp;quot;/usr/bin/mic-image-creator&amp;quot;, line 682, in main&lt;br /&gt;
    run_in_bootstrap(options.bootstrap, argv, bindmounts, arch = options.arch)&lt;br /&gt;
  File &amp;quot;/usr/bin/mic-image-creator&amp;quot;, line 261, in run_in_bootstrap&lt;br /&gt;
    ret = subprocess.call(args, preexec_fn = chroot_bootstrap)&lt;br /&gt;
  File &amp;quot;/usr/lib/python2.5/subprocess.py&amp;quot;, line 444, in call&lt;br /&gt;
    return Popen(*popenargs, **kwargs).wait()&lt;br /&gt;
  File &amp;quot;/usr/lib/python2.5/subprocess.py&amp;quot;, line 594, in __init__&lt;br /&gt;
    errread, errwrite)&lt;br /&gt;
  File &amp;quot;/usr/lib/python2.5/subprocess.py&amp;quot;, line 1149, in _execute_child&lt;br /&gt;
    raise child_exception&lt;br /&gt;
OSError: [Errno 8] Exec format error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This error occurs when trying to build ARM images without passing ''--arch=armv7l'' to ''meego-image-creator''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error: Requires qemu version &amp;gt;= 0.13 for armv7hl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you should update the version of 'qemu-arm' or 'qemu-arm-static' to 0.13.0 or above.&lt;br /&gt;
&lt;br /&gt;
Tips: if you encounter arm images creating failed, please try to run bootstrap mode, for armv7hl and armv7nhl is not supported in legacy mode.&lt;br /&gt;
&lt;br /&gt;
===Proxy cache===&lt;br /&gt;
&lt;br /&gt;
See http://bugs.meego.com/show_bug.cgi?id=2343&lt;br /&gt;
&lt;br /&gt;
Some servers (such as with squid as a proxy) may cache more aggressively than&lt;br /&gt;
others, and as a result repomd.xml is invalid (old copy) and&lt;br /&gt;
references out of date metadata files (primary, comps, filelists, etc). This is&lt;br /&gt;
because the server is returning a cached/old copy of repomd.xml.&lt;br /&gt;
&lt;br /&gt;
Proxy cache should be disabled in mic and yum.&lt;br /&gt;
&lt;br /&gt;
= Advanced Hacking Tips = &lt;br /&gt;
&lt;br /&gt;
===replace kernel in live image===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo mic-image-convertor --source-image=&amp;lt;your-netbook.img&amp;gt; --target-format=livecd --shell&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will give you a chroot environment of MeeGo, you can follow the below steps to replace the default kernel with a new one.&lt;br /&gt;
&lt;br /&gt;
1). remove the old kernel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# rpm -e kernel-netbook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: execute the above command in chroot environment.&lt;br /&gt;
&lt;br /&gt;
2). copy new kernel to chroot environment of MeeGo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo cp /path/to/kernel-*.rpm /var/tmp/imgcreate-*/install_root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: execute the above command in your host system.&lt;br /&gt;
&lt;br /&gt;
/path/to/kernel-*.rpm is your new kernel to install, /var/tmp/imgcreate-*/install_root/ is the directory where chroot MeeGo mounted on.&lt;br /&gt;
&lt;br /&gt;
3). install the new kernel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# rpm -ivh /kernel-*.rpm&lt;br /&gt;
# rm /kernel-*.rpm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: execute the above command in chroot environment.&lt;br /&gt;
&lt;br /&gt;
After that, you can find out the new kernel in directory /boot/.&lt;br /&gt;
&lt;br /&gt;
4). update contents of isolinux&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo cp /var/tmp/imgcreate-*/install_root/boot/initrd-*.img  /var/tmp/imgcreate-*/iso-*/isolinux/initrd0.img&lt;br /&gt;
$sudo cp /var/tmp/imgcreate-*/install_root/boot/vmlinuz-*  /var/tmp/imgcreate-*/iso-*/isolinux/vmlinuz0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: execute the above command in your host system.&lt;br /&gt;
&lt;br /&gt;
5. create a new image&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NOTE: execute the above command in chroot environment.&lt;br /&gt;
&lt;br /&gt;
After following all the above steps, you'll have a new image.&lt;br /&gt;
&lt;br /&gt;
===build btrfs image===&lt;br /&gt;
From version 0.20.1 on, mic2 can support btrfs, you can create btrfs image by change fstype=ext3 in your kickstart file to fstype=btrfs. A successful creation will depend on btrfs-progs (btrfs-tools on debian-based distros, btrfsprogs on openSUSE) and btrfs kernel module in your local system, the known issue is we can't create btrfs image on Fedora 11, the issue is the default btrfs kernel module has some issue which will make kernel panic, so for this case, you must make sure you have a stable and latest kernel and btrfs-progs 0.19 on your system. You'll need to build your kernel by yourself and use it to boot your system.&lt;br /&gt;
&lt;br /&gt;
Btrfs-progs is a prerequisite tool, it includes /sbin/mkfs.btrfs, but its version must match btrfs kernel module, so you must ensure this, mic2 repo http://repo.meego.com/MeeGo/tools/repos/ has an issue which will install btrfs-progs 0.19 when you install mic2, this is an repo sync error, so please make sure you have your distro's btrfs-progs after mic2 is installed, if your distro's btrfs-progs version is 0.19, this isn't an issue, otherwise you must remove btrfs-progs installation introduced by mic2 and reinstall your distro's btrfs-progs.&lt;br /&gt;
&lt;br /&gt;
How to build btrfs image on Fedora 11 or lower version?&lt;br /&gt;
&lt;br /&gt;
# Download kernel-2.6.34 or kernel-2.6.35&lt;br /&gt;
# Configure btrfs as module&lt;br /&gt;
# make; make modules; make install; make modules_install&lt;br /&gt;
# Reboot your system using this built-newly kernel&lt;br /&gt;
# Install btrfs-progs 0.19&lt;br /&gt;
&lt;br /&gt;
Done, you're ready for creating btrfs image.&lt;br /&gt;
&lt;br /&gt;
===Metapackages, Patterns, and Repository Creation===&lt;br /&gt;
Meta-packages are discouraged in MeeGo.  The preferred method is to use patterns in the repository (supported by both zypper and mic2).  This is done by creating a patterns.xml file, which is a fairly simple XML file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;pattern xmlns:rpm=&amp;quot;http://linux.duke.edu/metadata/rpm&amp;quot;&lt;br /&gt;
         xmlns=&amp;quot;http://novell.com/package/metadata/suse/pattern&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;meego-core&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;summary&amp;gt;MeeGo Core&amp;lt;/summary&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;Packages needed for Compliance&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;uservisible/&amp;gt;&lt;br /&gt;
   &amp;lt;category lang=&amp;quot;en&amp;quot;&amp;gt;Base Group&amp;lt;/category&amp;gt;&lt;br /&gt;
   &amp;lt;rpm:requires&amp;gt;&lt;br /&gt;
      &amp;lt;rpm:entry name=&amp;quot;pam&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;rpm:entry name=&amp;quot;rootfiles&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;rpm:entry name=&amp;quot;bash&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;rpm:entry name=&amp;quot;sysvinit&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;!-- ...etc... --&amp;gt;&lt;br /&gt;
   &amp;lt;/rpm:requires&amp;gt;&lt;br /&gt;
&amp;lt;/pattern&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The detailed documentation for this XML schema may be found on the [http://en.opensuse.org/openSUSE:Standards_Rpm_Metadata OpenSuSe Wiki].  There is also a Relax NG schema found in the source code for [http://gitorious.org/opensuse/libzypp libzypp] (buried in the folder zypp/parser/yum/schema).&lt;br /&gt;
&lt;br /&gt;
In MeeGo's [http://meego.gitorious.org/meego-os-base/package-groups package-groups], you can find several utilities, style sheets, and examples for how to create patterns and convert them to groups (comps).&lt;br /&gt;
&lt;br /&gt;
Once you have both a patterns.xml and comps.xml file, you can create your repository like this.  (For brevity, assuming a simple 'packages' repository.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    ## Copy RPM packages to a folder, repos/&lt;br /&gt;
    $ mkdir -p repos/repodata&lt;br /&gt;
    $ cp -f patterns.xml comps.xml repos/repodata&lt;br /&gt;
    $ createrepo -g repos/repodata/comps.xml repos/&lt;br /&gt;
    $ modifyrepo repos/repodata/patterns.xml repos/repodata&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, GPG sign your repos/repodata/repomd.xml file.  Note that `modifyrepo` is a part of the `createrepo` package.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T10:19:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Participants and SkyNET Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to continuous change.&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 installation (OpenSuse 11.4 has some issues - patches welcome)&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install (and start) the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss-viewer {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Participants and SkyNET Installation ==&lt;br /&gt;
&lt;br /&gt;
BOSS needs participants to do any real work. These can be installed on the main BOSS machine or on other machines in the network.&lt;br /&gt;
&lt;br /&gt;
Participants are managed by SkyNET (ie start/stop/logging/registration etc)&lt;br /&gt;
&lt;br /&gt;
You may install SkyNET by itself or it will be pulled in when you install any of the boss-participant packages. See http://autodoc.meego.com/mint/boss-standard-workflow/ for details of participants&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-participant-standard-workflow boss-participant-prechecks&lt;br /&gt;
or&lt;br /&gt;
  zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-standard-workflow boss-participant-standard-workflow boss-participant-prechecks &lt;br /&gt;
or for an empty installation:&lt;br /&gt;
 apt-get install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
This will install (but not start) the boss participants.&lt;br /&gt;
&lt;br /&gt;
=== SkyNET ===&lt;br /&gt;
To use skynet see:&lt;br /&gt;
&lt;br /&gt;
 skynet help&lt;br /&gt;
&lt;br /&gt;
To see the participants :&lt;br /&gt;
&lt;br /&gt;
 skynet list&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.2/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T10:05:17Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to continuous change.&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 installation (OpenSuse 11.4 has some issues - patches welcome)&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install (and start) the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss-viewer {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Participants and SkyNET Installation ==&lt;br /&gt;
&lt;br /&gt;
BOSS needs participants to do any real work. These can be installed on the main BOSS machine or on other machines in the network.&lt;br /&gt;
&lt;br /&gt;
Participants are managed by SkyNET (ie start/stop/logging/registration etc)&lt;br /&gt;
&lt;br /&gt;
You may install SkyNET by itself or it will be pulled in when you install the boss-standard-workflow package.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-participant-standard-workflow boss-participant-prechecks&lt;br /&gt;
or&lt;br /&gt;
  zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-standard-workflow boss-participant-standard-workflow boss-participant-prechecks &lt;br /&gt;
or for an empty installation:&lt;br /&gt;
 apt-get install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
This will install (but not start) the boss participants.&lt;br /&gt;
&lt;br /&gt;
=== SkyNET ===&lt;br /&gt;
To use skynet see:&lt;br /&gt;
&lt;br /&gt;
 skynet help&lt;br /&gt;
&lt;br /&gt;
To see the participants :&lt;br /&gt;
&lt;br /&gt;
 skynet list&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.2/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T09:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* BOSS-Viewer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to continuous change.&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 installation (OpenSuse 11.4 has some issues - patches welcome)&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now: (this manual step should be no longer necessary in future, all participants will have a dependency on boss-skynet)&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install (and start) the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss-viewer {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T09:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Debian Squeeze/6.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to continuous change.&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 installation (OpenSuse 11.4 has some issues - patches welcome)&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/Testing/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now: (this manual step should be no longer necessary in future, all participants will have a dependency on boss-skynet)&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T09:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to continuous change.&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 installation (OpenSuse 11.4 has some issues - patches welcome)&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now: (this manual step should be no longer necessary in future, all participants will have a dependency on boss-skynet)&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-10-23T09:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: remove RC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :RC).&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 or OpenSuse 11.4 installation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now: (this manual step should be no longer necessary in future, all participants will have a dependency on boss-skynet)&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
This is an optional step to verify that you installation was successful so far. Experienced users can skip it. In order to &lt;br /&gt;
make the test works you need to install package &amp;lt;code&amp;gt;boss-skynet&amp;lt;/code&amp;gt; manually. (Using the same command you have installed boss components above, it comes from the same repository.) If you choose to skip this step the package will be installed automatically as a dependency in a later step (this is not true as of Sept. '11 because some dependencies are still missing) &lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N950</id>
		<title>ARM/N950</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N950"/>
				<updated>2011-10-19T15:21:14Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* How to use Community Edition on N950 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo 1.3 Community Edition installation for N950 =&lt;br /&gt;
&lt;br /&gt;
(Basic information as copied from https://meego.com/community/device-program/devices/nokia-n9-devkit)&lt;br /&gt;
&lt;br /&gt;
The Nokia N950 is a platform available now for developers targeting the Nokia N9 and MeeGo handset apps in general. Technical details are available at http://developer.nokia.com/swipe. Questions &amp;amp; comments: http://forum.meego.com/showthread.php?t=3597.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: commercial developers are encouraged to apply directly at http://developer.nokia.com - thank you for your understanding.&lt;br /&gt;
&lt;br /&gt;
== How to use Community Edition on N950 ==&lt;br /&gt;
&lt;br /&gt;
Assumption: you have Nokia N950 device with the Beta2 release (firmware version *must be* at 34-2 1.2011.34-2_PR_RM680, update using the OneClickFlasher if not). You should also have the skills required, similar to what is required for using N900 CE: http://wiki.meego.com/ARM/N900/GettingStarted. These instructions also assume that you are using Linux as OS on your computer.&lt;br /&gt;
&lt;br /&gt;
'''The procedures described here will void any warranty (if there was any), and will destroy your Harmattan setup, losing any data you have there.''' However, you can always go back to a fresh Harmattan installation with the OneClickFlasher package available at: http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html (note - please login to https://www.developer.nokia.com first or you'll get redirection errors)&lt;br /&gt;
&lt;br /&gt;
=== Downloading the MeeGo Community Edition release ===&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #000; padding: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Image&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Description&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| Release date&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/n900-de/archive/1.2.90.5.0.20110927.81.CE.2011-09-27.1/images/mg-handset-armv7nhl-n950-ce-testing/ Fall Release]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| v1.3 Handset image for Fall 2011&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| 28.9.2011&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/n900-de/ Weekly image]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| From here, you can find the weekly and daily builds.&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flasher for N950 ===&lt;br /&gt;
Download Harmattan flasher from [http://tablets-dev.nokia.com/maemo-dev-env-downloads.php here].&lt;br /&gt;
&lt;br /&gt;
Before you proceed make sure that &amp;quot;Device lock&amp;quot; is not enabled in Harmattan (In Settings \ Security \ Device Lock \ Autolock: off). If you have an Mail-for-Exchange account configured, you may need to delete it before you can disable device lock.&lt;br /&gt;
&lt;br /&gt;
If flasher bombs out with &amp;quot;Devicelock ON: cannot flash unsigned image&amp;quot;, then you didn't, go back and disable it.&lt;br /&gt;
&lt;br /&gt;
If the beta2 flasher errors with &amp;quot;bb5_rdc_cert_read&amp;quot; or [http://www.martindengler.com/proj/n950-flasher-beta1#failure a few other errors], try the [http://www.martindengler.com/proj/n950-flasher-beta1 beta1 flasher].&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Bootloader (Moslo) ===&lt;br /&gt;
&lt;br /&gt;
In order to boot MeeGo on N950, the default OS, Harmattan, must be replaced with MOSLO, the Meego OS LOader.&lt;br /&gt;
Moslo can be flashed as a fiasco image, available at: http://tablets-dev.nokia.com/moslo.php. Moslo source repository is located at: https://gitorious.org/meego-developer-edition-for-n900/moslo). Current moslo fiasco image for N950 is moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin&lt;br /&gt;
&lt;br /&gt;
Nokia N9 similarly will need its own Moslo.&lt;br /&gt;
&lt;br /&gt;
* IMPORTANT: before installing Moslo, boot into Harmattan at least once and wait for a few minutes.&lt;br /&gt;
* Power off the device, disconnect usb or changer.&lt;br /&gt;
* Run flasher:&lt;br /&gt;
  sudo flasher -F moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin  -f&lt;br /&gt;
Flasher now waits for a device to connect.&lt;br /&gt;
* Connect your N950 and wait for flashing to finish.&lt;br /&gt;
* Do not disconnect. Read on.&lt;br /&gt;
&lt;br /&gt;
=== Write CE to device ===&lt;br /&gt;
&lt;br /&gt;
After flashing MOSLO, boot the device by disconnecting and re-connecting the USB cable to the PC. You will see a warning and a disclaimer screen for 10 seconds followed by green text based MOSLO welcome screen. Wait for the text &amp;quot;Rootfs now exported via USB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you don't get the MOSLO screen after successfully flashing MOSLO, then let the device finish booting into harmattan and reboot it. It can take several full reboots of the device to fully enable MOSLO.&lt;br /&gt;
&lt;br /&gt;
If you have automount enabled in your Linux system, the device may appear as a normal USB drive to your desktop. Automount may not show the drive at first because it is in vfat format. Automount will typically use volume ID as mountpoint name.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: On some systems (Ubuntu) automounting may have too restrictive options. Manual mounting is recommended.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: Although the '''drive exported by device via MOSLO to the host PC it appears as /dev/sdX, inside the device it is a partition''', instead of a full drive.&lt;br /&gt;
&lt;br /&gt;
At first MOSLO connection, the partition has to be reformatted. Make sure it is unmounted (if necessary umount it '''do not 'eject' it via UI!'''):&lt;br /&gt;
 sudo umount /dev/sdX&lt;br /&gt;
 sudo mkfs.ext4 /dev/sdX&lt;br /&gt;
You will see warning: &amp;quot;/dev/sdX is entire device, not just one partition! Proceed anyway? (y,n)&amp;quot;. This is expected. Just make sure you got the right device node and say &amp;quot;y&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
For mounting the MeeGo rootfs manually:&lt;br /&gt;
 sudo mkdir -p /media/&amp;lt;choose mountpoint name for your N950&amp;gt;&lt;br /&gt;
 sudo mount /dev/sdX /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you already had an MeeGo image on the partition, it can be erased by running:&lt;br /&gt;
 sudo rm -rf /media/&amp;lt;mountpoint of your N950&amp;gt;/*&lt;br /&gt;
&lt;br /&gt;
Extract the Community Edition .tar.bz2 to the mounted rootfs partition with:&lt;br /&gt;
 sudo tar --numeric-owner -xf &amp;lt;path&amp;gt;/&amp;lt;CE_package&amp;gt;.tar.bz2 -C /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the extraction is ready, unmount/remove safely/eject the partition before disconnecting from usb:&lt;br /&gt;
 sudo umount /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boot to CE ===&lt;br /&gt;
&lt;br /&gt;
* The device should start booting to MeeGo right after disconnecting the USB.&lt;br /&gt;
* Otherwise start normally by hosding power hoy for 2-4 seconds.&lt;br /&gt;
* First you should see the disclaimer screen.&lt;br /&gt;
* Next you see a green-on-black Moslo bootscreen.&lt;br /&gt;
* The last line should say: &amp;quot;Running Meego Kernel&amp;quot; (it is shown very briefly)&lt;br /&gt;
* Then wait patiently for desktop to come up.&lt;br /&gt;
&lt;br /&gt;
Shutting down is done simply by holding the power key until either a shut down graphic or a red screen is shown.&lt;br /&gt;
Check that screen back light goes out. If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
This will force HW shut down. Note: using forceful shut down might corrupt the filesystem, leading to a non-bootable setup.&lt;br /&gt;
&lt;br /&gt;
====Trouble starting?====&lt;br /&gt;
&lt;br /&gt;
If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
&lt;br /&gt;
In case battery is very low, the screen may stay black even if booting continues, or the device may shutdown (and likewise stay black).&lt;br /&gt;
* Connect usb or charger and let Moslo charge the battery at least for a few &amp;lt;del&amp;gt;minutes&amp;lt;/del&amp;gt; tens of minutes.&lt;br /&gt;
* Then disconnect usb/charger and device should continue booting to MeeGo.&lt;br /&gt;
* You can reconnect usb/charger after a few seconds. Latest at the Meego splash screen.&lt;br /&gt;
&lt;br /&gt;
Don't panic - try again, check the steps and finally ask for advice at #meego-arm IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== How to remove MeeGo/Moslo and restore Harmattan ===&lt;br /&gt;
In order to boot Harmattan again, MeeGo and Moslo must be removed.&lt;br /&gt;
This can be done by using OneClickFlasher available here:&lt;br /&gt;
http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html&lt;br /&gt;
&lt;br /&gt;
Running the OneClickFlasher will overwrite MeeGo/Moslo with Harmattan. All personal settings will be lost.&lt;br /&gt;
It will take about 15-30 minutes.&lt;br /&gt;
&lt;br /&gt;
== Open issues ==&lt;br /&gt;
&lt;br /&gt;
* How about dual boot with Harmattan?&lt;br /&gt;
** Not possible with current Moslo release. Community is encouraged to find a way, with modified Moslo or some other means eg. u-boot.&lt;br /&gt;
* Will this work in N9?&lt;br /&gt;
** Not at the moment. We are working to make a N9 release as well, stay tuned for more information.&lt;br /&gt;
&lt;br /&gt;
=== Reporting bugs against Community Edition ===&lt;br /&gt;
&lt;br /&gt;
* File a bug report on [http://bugs.meego.com/ bugs.meego.com]&lt;br /&gt;
* Use '''[CE]''' in the summary&lt;br /&gt;
* Add the '''N950''' and '''N900CE''' keywords to the bug report&lt;br /&gt;
* Select from Platform '''N900''', if bug can be reproduced with N900 also.&lt;br /&gt;
&lt;br /&gt;
*Notice:&lt;br /&gt;
** If bug is producible with MeeGo image also, remove the [CE] prefix from the summary. It's used only for the Community Edition specific bugs.&lt;br /&gt;
** Feel free to suggest MeeGo_N900CE_Release_Blocker.&lt;br /&gt;
** '''If bug is for application''', check if there's a '''upstream link''' for direct reporting in [[/AppsInCE | CE application list]]. If there's a link, please report to upstream, if not, then to the MeeGo Bugzilla.&lt;br /&gt;
** If you found a bug when using MeeGo 1.2 '''Harmattan''', please file the bug to the [http://www.developer.nokia.com/bugs/ http://www.developer.nokia.com/bugs/]&lt;br /&gt;
&lt;br /&gt;
= More info =&lt;br /&gt;
&lt;br /&gt;
More information can be found in [[N950 landing page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:N950]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N950</id>
		<title>ARM/N950</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N950"/>
				<updated>2011-10-18T14:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* How to use Community Edition on N950 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MeeGo 1.3 Community Edition installation for N950 =&lt;br /&gt;
&lt;br /&gt;
(Basic information as copied from https://meego.com/community/device-program/devices/nokia-n9-devkit)&lt;br /&gt;
&lt;br /&gt;
The Nokia N950 is a platform available now for developers targeting the Nokia N9 and MeeGo handset apps in general. Technical details are available at http://developer.nokia.com/swipe. Questions &amp;amp; comments: http://forum.meego.com/showthread.php?t=3597.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: commercial developers are encouraged to apply directly at http://developer.nokia.com - thank you for your understanding.&lt;br /&gt;
&lt;br /&gt;
== How to use Community Edition on N950 ==&lt;br /&gt;
&lt;br /&gt;
Assumption: you have Nokia N950 device with the Beta2 release (firmware version 34-2 1.2011.34-2_PR_RM680). You should also have the skills required, similar to what is required for using N900 CE: http://wiki.meego.com/ARM/N900/GettingStarted. These instructions also assume that you are using Linux as OS on your computer.&lt;br /&gt;
&lt;br /&gt;
'''The procedures described here will void any warranty (if there was any), and will destroy your Harmattan setup, losing any data you have there.''' However, you can always go back to a fresh Harmattan installation with the OneClickFlasher package available at: http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html (note - please login to https://www.developer.nokia.com first or you'll get redirection errors)&lt;br /&gt;
&lt;br /&gt;
=== Downloading the MeeGo Community Edition release ===&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #000; padding: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Image&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| Description&lt;br /&gt;
!style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| Release date&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/n900-de/archive/1.2.90.5.0.20110927.81.CE.2011-09-27.1/images/mg-handset-armv7nhl-n950-ce-testing/ Fall Release]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| v1.3 Handset image for Fall 2011&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;| 28.9.2011&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| [http://repository.maemo.org/meego/n900-de/ Weekly image]&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 1px 1px 0&amp;quot;| From here, you can find the weekly and daily builds.&lt;br /&gt;
|style=&amp;quot;border-style: solid; border-width: 0 0 1px 0&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flasher for N950 ===&lt;br /&gt;
Download Harmattan flasher from [http://tablets-dev.nokia.com/maemo-dev-env-downloads.php here].&lt;br /&gt;
&lt;br /&gt;
Before you proceed make sure that &amp;quot;Device lock&amp;quot; is not enabled in Harmattan (In Settings \ Security \ Device Lock \ Autolock: off). If you have an Mail-for-Exchange account configured, you may need to delete it before you can disable device lock.&lt;br /&gt;
&lt;br /&gt;
If flasher bombs out with &amp;quot;Devicelock ON: cannot flash unsigned image&amp;quot;, then you didn't, go back and disable it.&lt;br /&gt;
&lt;br /&gt;
If the beta2 flasher errors with &amp;quot;bb5_rdc_cert_read&amp;quot; or [http://www.martindengler.com/proj/n950-flasher-beta1#failure a few other errors], try the [http://www.martindengler.com/proj/n950-flasher-beta1 beta1 flasher].&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Bootloader (Moslo) ===&lt;br /&gt;
&lt;br /&gt;
In order to boot MeeGo on N950, the default OS, Harmattan, must be replaced with MOSLO, the Meego OS LOader.&lt;br /&gt;
Moslo can be flashed as a fiasco image, available at: http://tablets-dev.nokia.com/moslo.php. Moslo source repository is located at: https://gitorious.org/meego-developer-edition-for-n900/moslo). Current moslo fiasco image for N950 is moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin&lt;br /&gt;
&lt;br /&gt;
Nokia N9 similarly will need its own Moslo.&lt;br /&gt;
&lt;br /&gt;
* IMPORTANT: before installing Moslo, boot into Harmattan at least once and wait for a few minutes.&lt;br /&gt;
* Power off the device, disconnect usb or changer.&lt;br /&gt;
* Run flasher:&lt;br /&gt;
  sudo flasher -F moslo-rootfs-1.2011.34-2_RM680-OEM1-916_0.0.13-12.1.bin  -f&lt;br /&gt;
Flasher now waits for a device to connect.&lt;br /&gt;
* Connect your N950 and wait for flashing to finish.&lt;br /&gt;
* Do not disconnect. Read on.&lt;br /&gt;
&lt;br /&gt;
=== Write CE to device ===&lt;br /&gt;
&lt;br /&gt;
After flashing MOSLO, boot the device by disconnecting and re-connecting the USB cable to the PC. You will see a warning and a disclaimer screen for 10 seconds followed by green text based MOSLO welcome screen. Wait for the text &amp;quot;Rootfs now exported via USB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you don't get the MOSLO screen after successfully flashing MOSLO, then let the device finish booting into harmattan and reboot it. It can take several full reboots of the device to fully enable MOSLO.&lt;br /&gt;
&lt;br /&gt;
If you have automount enabled in your Linux system, the device may appear as a normal USB drive to your desktop. Automount may not show the drive at first because it is in vfat format. Automount will typically use volume ID as mountpoint name.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: On some systems (Ubuntu) automounting may have too restrictive options. Manual mounting is recommended.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: Although the '''drive exported by device via MOSLO to the host PC it appears as /dev/sdX, inside the device it is a partition''', instead of a full drive.&lt;br /&gt;
&lt;br /&gt;
At first MOSLO connection, the partition has to be reformatted. Make sure it is unmounted:&lt;br /&gt;
 sudo umount /dev/sdX&lt;br /&gt;
 sudo mkfs.ext4 /dev/sdX&lt;br /&gt;
You will see warning: &amp;quot;/dev/sdX is entire device, not just one partition! Proceed anyway? (y,n)&amp;quot;. This is expected. Just make sure you got the right device node and say &amp;quot;y&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
For mounting the MeeGo rootfs manually:&lt;br /&gt;
 sudo mkdir -p /media/&amp;lt;choose mountpoint name for your N950&amp;gt;&lt;br /&gt;
 sudo mount /dev/sdX /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you already had an MeeGo image on the partition, it can be erased by running:&lt;br /&gt;
 sudo rm -rf /media/&amp;lt;mountpoint of your N950&amp;gt;/*&lt;br /&gt;
&lt;br /&gt;
Extract the Community Edition .tar.bz2 to the mounted rootfs partition with:&lt;br /&gt;
 sudo tar --numeric-owner -xf &amp;lt;path&amp;gt;/&amp;lt;CE_package&amp;gt;.tar.bz2 -C /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the extraction is ready, unmount/remove safely/eject the partition before disconnecting from usb:&lt;br /&gt;
 sudo umount /media/&amp;lt;mountpoint of your N950&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boot to CE ===&lt;br /&gt;
&lt;br /&gt;
* The device should start booting to MeeGo right after disconnecting the USB.&lt;br /&gt;
* Otherwise start normally by hosding power hoy for 2-4 seconds.&lt;br /&gt;
* First you should see the disclaimer screen.&lt;br /&gt;
* Next you see a green-on-black Moslo bootscreen.&lt;br /&gt;
* The last line should say: &amp;quot;Running Meego Kernel&amp;quot; (it is shown very briefly)&lt;br /&gt;
* Then wait patiently for desktop to come up.&lt;br /&gt;
&lt;br /&gt;
Shutting down is done simply by holding the power key until either a shut down graphic or a red screen is shown.&lt;br /&gt;
Check that screen back light goes out. If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
This will force HW shut down. Note: using forceful shut down might corrupt the filesystem, leading to a non-bootable setup.&lt;br /&gt;
&lt;br /&gt;
====Trouble starting?====&lt;br /&gt;
&lt;br /&gt;
If device does not react, hold the power key for over 8 seconds.&lt;br /&gt;
&lt;br /&gt;
In case battery is very low, the screen may stay black even if booting continues.&lt;br /&gt;
* Connect usb or charger and let Moslo charge the battery at least for a few minutes.&lt;br /&gt;
* Then disconnect usb/charger and device should continue booting to MeeGo.&lt;br /&gt;
* You can reconnect usb/charger after a few seconds. Latest at the Meego splash screen.&lt;br /&gt;
&lt;br /&gt;
Don't panic - try again, check the steps and finally ask for advice at #meego-arm IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== How to remove MeeGo/Moslo and restore Harmattan ===&lt;br /&gt;
In order to boot Harmattan again, MeeGo and Moslo must be removed.&lt;br /&gt;
This can be done by using OneClickFlasher available here:&lt;br /&gt;
http://www.developer.nokia.com/info/sw.nokia.com/id/db230178-aa63-4c73-ba7f-20930da13cad/Nokia_N950_OneClickFlashers.html&lt;br /&gt;
&lt;br /&gt;
Running the OneClickFlasher will overwrite MeeGo/Moslo with Harmattan. All personal settings will be lost.&lt;br /&gt;
It will take about 15-30 minutes.&lt;br /&gt;
&lt;br /&gt;
== Open issues ==&lt;br /&gt;
&lt;br /&gt;
* How about dual boot with Harmattan?&lt;br /&gt;
** Not possible with current Moslo release. Community is encouraged to find a way, with modified Moslo or some other means eg. u-boot.&lt;br /&gt;
* Will this work in N9?&lt;br /&gt;
** Not at the moment. We are working to make a N9 release as well, stay tuned for more information.&lt;br /&gt;
&lt;br /&gt;
=== Reporting bugs against Community Edition ===&lt;br /&gt;
&lt;br /&gt;
* File a bug report on [http://bugs.meego.com/ bugs.meego.com]&lt;br /&gt;
* Use '''[CE]''' in the summary&lt;br /&gt;
* Add the '''N950''' and '''N900CE''' keywords to the bug report&lt;br /&gt;
* Select from Platform '''N900''', if bug can be reproduced with N900 also.&lt;br /&gt;
&lt;br /&gt;
*Notice:&lt;br /&gt;
** If bug is producible with MeeGo image also, remove the [CE] prefix from the summary. It's used only for the Community Edition specific bugs.&lt;br /&gt;
** Feel free to suggest MeeGo_N900CE_Release_Blocker.&lt;br /&gt;
** '''If bug is for application''', check if there's a '''upstream link''' for direct reporting in [[/AppsInCE | CE application list]]. If there's a link, please report to upstream, if not, then to the MeeGo Bugzilla.&lt;br /&gt;
** If you found a bug when using MeeGo 1.2 '''Harmattan''', please file the bug to the [http://www.developer.nokia.com/bugs/ http://www.developer.nokia.com/bugs/]&lt;br /&gt;
&lt;br /&gt;
= More info =&lt;br /&gt;
&lt;br /&gt;
More information can be found in [[N950 landing page]].&lt;br /&gt;
&lt;br /&gt;
[[Category:N950]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS</id>
		<title>ARM/N900/DeveloperEdition/BOSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS"/>
				<updated>2011-09-23T13:47:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: email subject&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Automating DE processes =&lt;br /&gt;
&lt;br /&gt;
The DE workflow is (roughly) :&lt;br /&gt;
&lt;br /&gt;
# Developer branches package from P:DE:Trunk&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing&lt;br /&gt;
# Boss runs checks on package&lt;br /&gt;
# Boss creates branch of P:DE:Trunk&lt;br /&gt;
# Boss submits package(s) to new branch&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Boss rejects package&lt;br /&gt;
or&lt;br /&gt;
# Boss notifies maintainers that checks passed&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
# Package is accepted to P:DE:Trunk by a maintainer&lt;br /&gt;
# bz is updated&lt;br /&gt;
&lt;br /&gt;
The actual processes can be seen in the [http://autodoc.meego.com/boss/ autodoc boss] area until the OBS plugin is available.&lt;br /&gt;
&lt;br /&gt;
== BOSS Checks ==&lt;br /&gt;
&lt;br /&gt;
An SR for one or more packages into the Testing project is seen by BOSS.&lt;br /&gt;
&lt;br /&gt;
BOSS runs the following checks (and stops as soon as one fails)&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_submitter_is_maintainer check_submitter_is_maintainer]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_built_at_source check_package_built_at_source]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_is_complete check_package_is_complete]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_spec check_spec]&lt;br /&gt;
&lt;br /&gt;
To be done:&lt;br /&gt;
* changelog in proper format (present, syntactically correct)&lt;br /&gt;
* changelog has entry for this commit&lt;br /&gt;
* last changelog version matches spec file version&lt;br /&gt;
* tarball not changed within same package version&lt;br /&gt;
* executing spectacle doesn't change anything if .yaml present&lt;br /&gt;
* yaml must be present if spec is based on .yaml&lt;br /&gt;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* check that old tarball has been removed if new one is introduced&lt;br /&gt;
* SR not empty (define empty?)&lt;br /&gt;
** No changes at all. At times people are trying rebuild packages by submitting empty change. (Sage)&lt;br /&gt;
&lt;br /&gt;
Then it tries to build the package in a 'link' project.&lt;br /&gt;
&lt;br /&gt;
This project should be dynamically created and retained in the event of failure for diagnostics. BOSS should then clean up the dynamic project (when told, or after a time).&lt;br /&gt;
&lt;br /&gt;
An image is created using the newly built package(s) and any packages rebuilt in the link project. (Clarify - only those mentioned in the .ks or *all* rebuilt packages?)&lt;br /&gt;
&lt;br /&gt;
Eventually the image will be processed by OTS.&lt;br /&gt;
&lt;br /&gt;
Once all checks have been run the request will be either accepted or marked for acceptance.&lt;br /&gt;
&lt;br /&gt;
== Process Testing ==&lt;br /&gt;
&lt;br /&gt;
The Project:DE:BOSS:Trunk and Project:DE:BOSS:Trunk:Testing areas are used&lt;br /&gt;
to test the processes.&lt;br /&gt;
&lt;br /&gt;
The processes to be tested are deployed to /srv/BOSS/processes/Project/DE/BOSS/Trunk/&lt;br /&gt;
&lt;br /&gt;
=== DE_Trunk_SRs ===&lt;br /&gt;
&lt;br /&gt;
To deploy:&lt;br /&gt;
* set irc_channel and final_project&lt;br /&gt;
* Copy to Project:DE:Trunk&lt;br /&gt;
* symlink: SRCSRV_REQUEST_CREATE and SRCSRV_REQUEST_STATECHANGE in Trunk and Trunk:Testing&lt;br /&gt;
&lt;br /&gt;
   cd Trunk&lt;br /&gt;
   ln -s DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
   cd Testing&lt;br /&gt;
   ln -s ../DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
&lt;br /&gt;
= Wish List =&lt;br /&gt;
List of wishes for the BOSS. Please write your nick in parentheses to the end so people know who to contact if they have more questions.&lt;br /&gt;
&lt;br /&gt;
# e-mail notice of SR's especially when SR is rejected&lt;br /&gt;
# Check if package upstream has changed and do a report of the packages that needs to be rebased on top of the new upstream. Currently this check is done manually with https://gitorious.org/meego-developer-edition-for-n900/upstreamchecker/ script by N900 RE. (Sage)&lt;br /&gt;
# In case package fails to connection failure start rebuild automatically after time X. (Sage)&lt;br /&gt;
# Add architecture and repository to build error message. (Sage)&lt;br /&gt;
#* ''14:06.33 &amp;lt; boss&amp;gt; Build failure in Project:DE:Trunk:Testing: meegotouch-theme More details soon''&lt;br /&gt;
# Update patterns based on package-groups package. (Sage)&lt;br /&gt;
#* We should have package-group package in the Project:DE:Trunk[:Testing] project that contains the CE package groups. This information should be when ever repository is published pushed to the repository with ''osc meta pattern'' or similar command.&lt;br /&gt;
# When submit supersedes another one the handling of the old submit request should be stopped. (Sage)&lt;br /&gt;
&lt;br /&gt;
# SR email subject should include Rejected/Accepted %fromproject to %toproject : %packagelist.&lt;br /&gt;
&lt;br /&gt;
= Bug Lifecycle =&lt;br /&gt;
&lt;br /&gt;
The DE bug lifecycle is (roughly):&lt;br /&gt;
&lt;br /&gt;
* 'open' -&amp;gt; FIXED -&amp;gt; RELEASED -&amp;gt; VERIFIED&lt;br /&gt;
&lt;br /&gt;
# Developer starts working on the bug/feature and sets to ASSIGNED&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing and documents changelog and/or commit properly (fixes bmc #1234;) - if changelog doesn't have a valid bug/feature reference the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
# Bugzilla records the commit message with link to the repo and timestamp&lt;br /&gt;
# Package is accepted to P:DE:Trunk (manual for now....)&lt;br /&gt;
# Bugzilla records acceptance with comment and bug status is automatically changed to FIXED if bug is still in OPEN status (New, assigned, needinfo, reopened, waiting)&lt;br /&gt;
# If bug is already in FIXED resolution, only acceptance comment is written in the bug report&lt;br /&gt;
# If bug is not in OPEN status (New, assigned, needinfo, reopened, waiting) or resolved FIXED (eg. duplicate, wontfix, etc... or verified or closed) the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Release is triggered &lt;br /&gt;
# Bug status is automatically changed to RELEASED, a comment with a link to the image is created and the Target Build value is set to match appropriate release&lt;br /&gt;
&lt;br /&gt;
Later still:&lt;br /&gt;
# QA review the release and for each bug marked RELEASED, either change to VERIFIED or re-open&lt;br /&gt;
&lt;br /&gt;
Note that eventually, both FIXED and RELEASED statuses would require specific credentials to be modified.&lt;br /&gt;
&lt;br /&gt;
= Image Building =&lt;br /&gt;
&lt;br /&gt;
CE has a private installation of IMG on host img in the internal meego.com network. Speak to David Greaves / lbt for access details.&lt;br /&gt;
Login is via meego.com credentials.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS</id>
		<title>ARM/N900/DeveloperEdition/BOSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS"/>
				<updated>2011-09-18T20:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* BOSS Checks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Automating DE processes =&lt;br /&gt;
&lt;br /&gt;
The DE workflow is (roughly) :&lt;br /&gt;
&lt;br /&gt;
# Developer branches package from P:DE:Trunk&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing&lt;br /&gt;
# Boss runs checks on package&lt;br /&gt;
# Boss creates branch of P:DE:Trunk&lt;br /&gt;
# Boss submits package(s) to new branch&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Boss rejects package&lt;br /&gt;
or&lt;br /&gt;
# Boss notifies maintainers that checks passed&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
# Package is accepted to P:DE:Trunk by a maintainer&lt;br /&gt;
# bz is updated&lt;br /&gt;
&lt;br /&gt;
The actual processes can be seen in the [http://autodoc.meego.com/boss/ autodoc boss] area until the OBS plugin is available.&lt;br /&gt;
&lt;br /&gt;
== BOSS Checks ==&lt;br /&gt;
&lt;br /&gt;
An SR for one or more packages into the Testing project is seen by BOSS.&lt;br /&gt;
&lt;br /&gt;
BOSS runs the following checks (and stops as soon as one fails)&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_submitter_is_maintainer check_submitter_is_maintainer]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_built_at_source check_package_built_at_source]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_is_complete check_package_is_complete]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_spec check_spec]&lt;br /&gt;
&lt;br /&gt;
To be done:&lt;br /&gt;
* changelog in proper format (present, syntactically correct)&lt;br /&gt;
* changelog has entry for this commit&lt;br /&gt;
* last changelog version matches spec file version&lt;br /&gt;
* tarball not changed within same package version&lt;br /&gt;
* executing spectacle doesn't change anything if .yaml present&lt;br /&gt;
* yaml must be present if spec is based on .yaml&lt;br /&gt;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* check that old tarball has been removed if new one is introduced&lt;br /&gt;
* SR not empty (define empty?)&lt;br /&gt;
** No changes at all. At times people are trying rebuild packages by submitting empty change. (Sage)&lt;br /&gt;
&lt;br /&gt;
Then it tries to build the package in a 'link' project.&lt;br /&gt;
&lt;br /&gt;
This project should be dynamically created and retained in the event of failure for diagnostics. BOSS should then clean up the dynamic project (when told, or after a time).&lt;br /&gt;
&lt;br /&gt;
An image is created using the newly built package(s) and any packages rebuilt in the link project. (Clarify - only those mentioned in the .ks or *all* rebuilt packages?)&lt;br /&gt;
&lt;br /&gt;
Eventually the image will be processed by OTS.&lt;br /&gt;
&lt;br /&gt;
Once all checks have been run the request will be either accepted or marked for acceptance.&lt;br /&gt;
&lt;br /&gt;
== Process Testing ==&lt;br /&gt;
&lt;br /&gt;
The Project:DE:BOSS:Trunk and Project:DE:BOSS:Trunk:Testing areas are used&lt;br /&gt;
to test the processes.&lt;br /&gt;
&lt;br /&gt;
The processes to be tested are deployed to /srv/BOSS/processes/Project/DE/BOSS/Trunk/&lt;br /&gt;
&lt;br /&gt;
=== DE_Trunk_SRs ===&lt;br /&gt;
&lt;br /&gt;
To deploy:&lt;br /&gt;
* set irc_channel and final_project&lt;br /&gt;
* Copy to Project:DE:Trunk&lt;br /&gt;
* symlink: SRCSRV_REQUEST_CREATE and SRCSRV_REQUEST_STATECHANGE in Trunk and Trunk:Testing&lt;br /&gt;
&lt;br /&gt;
   cd Trunk&lt;br /&gt;
   ln -s DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
   cd Testing&lt;br /&gt;
   ln -s ../DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
&lt;br /&gt;
= Wish List =&lt;br /&gt;
List of wishes for the BOSS. Please write your nick in parentheses to the end so people know who to contact if they have more questions.&lt;br /&gt;
&lt;br /&gt;
# e-mail notice of SR's especially when SR is rejected&lt;br /&gt;
# Check if package upstream has changed and do a report of the packages that needs to be rebased on top of the new upstream. Currently this check is done manually with https://gitorious.org/meego-developer-edition-for-n900/upstreamchecker/ script by N900 RE. (Sage)&lt;br /&gt;
# In case package fails to connection failure start rebuild automatically after time X. (Sage)&lt;br /&gt;
# Add architecture and repository to build error message. (Sage)&lt;br /&gt;
#* ''14:06.33 &amp;lt; boss&amp;gt; Build failure in Project:DE:Trunk:Testing: meegotouch-theme More details soon''&lt;br /&gt;
# Update patterns based on package-groups package. (Sage)&lt;br /&gt;
#* We should have package-group package in the Project:DE:Trunk[:Testing] project that contains the CE package groups. This information should be when ever repository is published pushed to the repository with ''osc meta pattern'' or similar command.&lt;br /&gt;
# When submit supersedes another one the handling of the old submit request should be stopped. (Sage)&lt;br /&gt;
&lt;br /&gt;
= Bug Lifecycle =&lt;br /&gt;
&lt;br /&gt;
The DE bug lifecycle is (roughly):&lt;br /&gt;
&lt;br /&gt;
* 'open' -&amp;gt; FIXED -&amp;gt; RELEASED -&amp;gt; VERIFIED&lt;br /&gt;
&lt;br /&gt;
# Developer starts working on the bug/feature and sets to ASSIGNED&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing and documents changelog and/or commit properly (fixes bmc #1234;) - if changelog doesn't have a valid bug/feature reference the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
# Bugzilla records the commit message with link to the repo and timestamp&lt;br /&gt;
# Package is accepted to P:DE:Trunk (manual for now....)&lt;br /&gt;
# Bugzilla records acceptance with comment and bug status is automatically changed to FIXED if bug is still in OPEN status (New, assigned, needinfo, reopened, waiting)&lt;br /&gt;
# If bug is already in FIXED resolution, only acceptance comment is written in the bug report&lt;br /&gt;
# If bug is not in OPEN status (New, assigned, needinfo, reopened, waiting) or resolved FIXED (eg. duplicate, wontfix, etc... or verified or closed) the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Release is triggered &lt;br /&gt;
# Bug status is automatically changed to RELEASED, a comment with a link to the image is created and the Target Build value is set to match appropriate release&lt;br /&gt;
&lt;br /&gt;
Later still:&lt;br /&gt;
# QA review the release and for each bug marked RELEASED, either change to VERIFIED or re-open&lt;br /&gt;
&lt;br /&gt;
Note that eventually, both FIXED and RELEASED statuses would require specific credentials to be modified.&lt;br /&gt;
&lt;br /&gt;
= Image Building =&lt;br /&gt;
&lt;br /&gt;
CE has a private installation of IMG on host img in the internal meego.com network. Speak to David Greaves / lbt for access details.&lt;br /&gt;
Login is via meego.com credentials.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Build_Infrastructure/Community_Builder/Installation</id>
		<title>Build Infrastructure/Community Builder/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Build_Infrastructure/Community_Builder/Installation"/>
				<updated>2011-09-17T14:46:47Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Installing the Workers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Preparing Host ==&lt;br /&gt;
Starting with a minimal Suse 11.2 install&lt;br /&gt;
&lt;br /&gt;
Most of the commands below can be copied into a shell; so we'll define some base data in shell variables to allow you to customise your setup.&lt;br /&gt;
(Yes this could all be one monolithic script or a pre-made VM ... but if you're going to run one of these you should at least get your hands dirty setting it up ;) )&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ROOTFS=/data/11.2min/image-root&lt;br /&gt;
ROUTER_IP=10.0.0.1&lt;br /&gt;
VG=VM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on http://en.opensuse.org/Build_Service/KIWI/Cookbook&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/Virtualization:/Appliances/openSUSE_11.2/ Virtualization:Appliances&lt;br /&gt;
zypper refresh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper in kiwi kiwi-templates kiwi-desc-xenboot squashfs emacs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prepare the storage for LV usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
 mklabel&lt;br /&gt;
 gpt&lt;br /&gt;
 yes&lt;br /&gt;
 mkpart p1 0 10%&lt;br /&gt;
 mkpart p2 10% 20%&lt;br /&gt;
 mkpart p3 20% 30%&lt;br /&gt;
 mkpart p4 30% 40%&lt;br /&gt;
 mkpart p5 40% 50%&lt;br /&gt;
 mkpart p6 50% 60%&lt;br /&gt;
 mkpart p7 60% 70%&lt;br /&gt;
 mkpart p8 70% 80%&lt;br /&gt;
 mkpart p9 80% 90%&lt;br /&gt;
 mkpart p10 90% 100%&lt;br /&gt;
 quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make the VG&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pvcreate /dev/sdb?*&lt;br /&gt;
vgcreate $VG /dev/sdb1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prepare an openSUSE minimal image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /data/11.2min&lt;br /&gt;
rm -rf /data/11.2min/image-root&lt;br /&gt;
kiwi --prepare suse-11.2-JeOS --root $ROOTFS --add-profile xenFlavour --add-package less --add-package iputils --add-package kernel-xen --add-package wget --add-package less --add-package iputils --add-package terminfo --add-package emacs --add-package sudo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the config &amp;amp; modules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo default $ROUTER_IP &amp;gt; $ROOTFS/etc/sysconfig/network/routes&lt;br /&gt;
echo NETCONFIG_DNS_POLICY=\&amp;quot;\&amp;quot; &amp;gt;&amp;gt; $ROOTFS/etc/sysconfig/network/config&lt;br /&gt;
echo nameserver 8.8.8.8 &amp;gt; $ROOTFS/etc/resolv.conf&lt;br /&gt;
echo default $ROUTER_IP &amp;gt; $ROOTFS/etc/sysconfig/network/routes&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt;$ROOTFS/etc/sysconfig/network/ifcfg-eth0&lt;br /&gt;
BOOTPROTO='static'&lt;br /&gt;
BROADCAST=''&lt;br /&gt;
STARTMODE='onboot'&lt;br /&gt;
EOF&lt;br /&gt;
echo /dev/xvda1 swap swap defaults 0 0 &amp;gt;&amp;gt; $ROOTFS/etc/fstab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Prepare some overlay data from the main host to allow ssh into guests&lt;br /&gt;
etc&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Allow user ssh to all VMs and retain sudo rights&lt;br /&gt;
# Should probably be done periodically somehow&lt;br /&gt;
mkdir -p /data/vm_overlay&lt;br /&gt;
mkdir -p /data/vm_overlay/etc/sysconfig/&lt;br /&gt;
ln /etc/passwd /data/vm_overlay/etc/&lt;br /&gt;
ln /etc/shadow /data/vm_overlay/etc/&lt;br /&gt;
ln /etc/group /data/vm_overlay/etc/&lt;br /&gt;
ln /etc/sudoers /data/vm_overlay/etc/&lt;br /&gt;
# Fix for screen/bash ctrl-arrow&lt;br /&gt;
ln /etc/inputrc /data/vm_overlay/etc/&lt;br /&gt;
# Network proxy information&lt;br /&gt;
ln /etc/sysconfig/proxy /data/vm_overlay/etc/sysconfig/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(note JeOS 11.2 won't allow su - &amp;lt;user&amp;gt; or ssh when user is disabled using !&lt;br /&gt;
in /etc/shadow. Instead use an impossible hash.)&lt;br /&gt;
&lt;br /&gt;
=== Xen Networking ===&lt;br /&gt;
Yast is cleverer than you so apparently you should use that... I'm sure if you ask it nicely it will work. Alternatively:&lt;br /&gt;
&lt;br /&gt;
in /etc/xen/xend-config.sxp&lt;br /&gt;
{{{&lt;br /&gt;
(network-script 'network-bridge netdev=eth0')&lt;br /&gt;
}}}&lt;br /&gt;
Then &lt;br /&gt;
{{{&lt;br /&gt;
ln -s /dev/.sysconfig/network/ /dev/shm/sysconfig&lt;br /&gt;
}}}&lt;br /&gt;
and then&lt;br /&gt;
{{{&lt;br /&gt;
rcxend restart&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Useful ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chroot_vm() {&lt;br /&gt;
GUEST=$1&lt;br /&gt;
xm list | grep &amp;quot;^$GUEST &amp;quot; &amp;amp;&amp;amp; echo &amp;quot;$GUEST is running&amp;quot; &amp;amp;&amp;amp; return&lt;br /&gt;
mkdir /mnt/${GUEST}_chroot/&lt;br /&gt;
mount /dev/$VG/${GUEST}_root /mnt/${GUEST}_chroot/ &amp;amp;&amp;amp;&lt;br /&gt;
chroot /mnt/${GUEST}_chroot/&lt;br /&gt;
umount /mnt/${GUEST}_chroot/&lt;br /&gt;
rmdir /mnt/${GUEST}_chroot/&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VM creation fn/scripts ==&lt;br /&gt;
&lt;br /&gt;
The following function/scripts assume&lt;br /&gt;
* a VG exists defined by the env variable $VG&lt;br /&gt;
* there is a rootfs at /data/11.2min/image-root/&lt;br /&gt;
&lt;br /&gt;
The scripts look in /etc/hosts for the IP so put appropriate lines in there.&lt;br /&gt;
&lt;br /&gt;
Create Xen volumes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_lv() {&lt;br /&gt;
GUEST=$1&lt;br /&gt;
lvremove /dev/$VG/${GUEST}_*&lt;br /&gt;
lvcreate -L 10G $VG -n ${GUEST}_root&lt;br /&gt;
lvcreate -L 2G  $VG -n ${GUEST}_swap&lt;br /&gt;
mkswap -f /dev/$VG/${GUEST}_swap&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the minimal image and overlay to the VM root disk and set an IP&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_fs() {&lt;br /&gt;
GUEST=$1&lt;br /&gt;
IP=$(grep &amp;quot; $GUEST &amp;quot; /etc/hosts | cut -f1 -d&amp;quot; &amp;quot;)&lt;br /&gt;
if ! [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] ; then&lt;br /&gt;
 echo &amp;quot;No IP for $GUEST in /etc/hosts&amp;quot; &amp;amp;&amp;amp; return&lt;br /&gt;
fi&lt;br /&gt;
echo IP is $IP&lt;br /&gt;
mkdir -p /mnt/lvm&lt;br /&gt;
echo mkfs &amp;amp;&amp;amp;&lt;br /&gt;
mkfs -text4 /dev/$VG/${GUEST}_root &amp;amp;&amp;amp;&lt;br /&gt;
echo mounting &amp;amp;&amp;amp;&lt;br /&gt;
mount /dev/$VG/${GUEST}_root /mnt/lvm &amp;amp;&amp;amp;&lt;br /&gt;
echo copy rootfs &amp;amp;&amp;amp;&lt;br /&gt;
rsync -HAXa /data/11.2min/image-root/ /mnt/lvm/ &amp;amp;&amp;amp;&lt;br /&gt;
echo copy overlay &amp;amp;&amp;amp;&lt;br /&gt;
echo ${GUEST}.meego.com &amp;gt; /mnt/lvm/etc/HOSTNAME &amp;amp;&amp;amp;&lt;br /&gt;
echo &amp;quot;IPADDR='$IP/24'&amp;quot; &amp;gt;&amp;gt; /mnt/lvm/etc/sysconfig/network/ifcfg-eth0 &amp;amp;&amp;amp;&lt;br /&gt;
rsync -HAXa /data/vm_overlay/ /mnt/lvm/ &amp;amp;&amp;amp;&lt;br /&gt;
echo copy home &amp;amp;&amp;amp;&lt;br /&gt;
rsync -HAXa /home /mnt/lvm/ &amp;amp;&amp;amp;&lt;br /&gt;
echo setup root equivalence to allow root rsync/ssh &amp;amp;&amp;amp;&lt;br /&gt;
mkdir /mnt/lvm/root/.ssh &amp;amp;&amp;amp;&lt;br /&gt;
chmod 700 /mnt/lvm/root/.ssh &amp;amp;&amp;amp;&lt;br /&gt;
cp /root/.ssh/id_rsa.pub /mnt/lvm/root/.ssh/authorized_keys &amp;amp;&amp;amp;&lt;br /&gt;
sed -i -e's/^root:.*/root:*:::::::/' /mnt/lvm/etc/shadow &amp;amp;&amp;amp;&lt;br /&gt;
echo sync &amp;amp;&amp;amp;&lt;br /&gt;
sync &amp;amp;&amp;amp;&lt;br /&gt;
echo umount &amp;amp;&amp;amp;&lt;br /&gt;
umount /mnt/lvm&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make per-machine files in /etc/xen/ with unique MACs&lt;br /&gt;
Additional LV space can be allocated here too&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_g() {&lt;br /&gt;
GUEST=$1&lt;br /&gt;
MAC=$2&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/xen/$GUEST.cfg&lt;br /&gt;
name='${GUEST}'&lt;br /&gt;
disk=['phy:/dev/$VG/${GUEST}_root,xvda2,w', 'phy:/dev/$VG/${GUEST}_swap,xvda1,w']&lt;br /&gt;
vif=['mac=$MAC, bridge=eth0']&lt;br /&gt;
memory='2048'&lt;br /&gt;
&lt;br /&gt;
root='/dev/xvda2 rw'&lt;br /&gt;
kernel='/boot/vmlinuz-2.6.31.12-0.2-xen'&lt;br /&gt;
ramdisk='/boot/initrd-2.6.31.12-0.2-xen'&lt;br /&gt;
extra='clocksource=jiffies console=hvc0 xencons=tty'&lt;br /&gt;
&lt;br /&gt;
on_poweroff='destroy'&lt;br /&gt;
on_reboot='restart'&lt;br /&gt;
on_crash='restart'&lt;br /&gt;
EOF&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create The VMs ==&lt;br /&gt;
&lt;br /&gt;
On the appropriate xen host, make sure you add the machines to&lt;br /&gt;
/etc/hosts and setup the base data environment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VG=VM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_lv cfe&lt;br /&gt;
mk_lv cbe&lt;br /&gt;
mk_lv cstore&lt;br /&gt;
mk_lv csign&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_fs cfe&lt;br /&gt;
mk_fs cbe&lt;br /&gt;
mk_fs cstore&lt;br /&gt;
mk_fs csign&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mk_g cfe 00:16:3E:40:B5:FE&lt;br /&gt;
mk_g cbe 00:16:3E:40:B5:BE&lt;br /&gt;
mk_g cstore 00:16:3E:40:B5:5E&lt;br /&gt;
mk_g csign 00:16:3E:40:51:64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then start the VMs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xm create /etc/xen/cfe.cfg&lt;br /&gt;
xm create /etc/xen/cbe.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Backend ==&lt;br /&gt;
&lt;br /&gt;
On this guest we need also to setup openSUSE Tools repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /etc/zypp/repos.d/;&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra:/OBS/Tools_Unstable_openSUSE_11.2/Maemo:MeeGo-Infra:OBS.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools:/Unstable/openSUSE_11.2/openSUSE:Tools:Unstable.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.2/openSUSE:Tools.repo&lt;br /&gt;
zypper ref&lt;br /&gt;
# Accept the trust key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper in obs-server obs-signer obs-utils createrepo dpkg lighttpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/sysconfig/obs-server&lt;br /&gt;
OBS_SCHEDULER_ARCHITECTURES=&amp;quot;i586 x86_64 armv5el armv7el&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now /usr/lib/obs/server/BSConfig.pm needs to point to correct server names corresponding to source server, where workers are going to download the source, and the repository server, where RPM repos are going to be shared to users.&lt;br /&gt;
&lt;br /&gt;
What's needed here?????????&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
#add&lt;br /&gt;
our $srcserver = &amp;quot;http://csrc:5352&amp;quot;;&lt;br /&gt;
our $reposerver = &amp;quot;http://cbe:5252&amp;quot;;&lt;br /&gt;
our $serviceserver = &amp;quot;http://csrc:5152&amp;quot;;&lt;br /&gt;
our $servicedir = &amp;quot;/usr/lib/obs/service/&amp;quot;;&lt;br /&gt;
our $repodownload = &amp;quot;http://crepo.meego.com&amp;quot;;&lt;br /&gt;
our @reposervers = (&amp;quot;http://cbe:5252&amp;quot;);&lt;br /&gt;
our $stageserver = 'rsync://obsrun@cdownload/repo';&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure services as daemons&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chkconfig --add obsrepserver obsscheduler obsdispatcher obspublisher obswarden obssigner&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rcobsrepserver start&lt;br /&gt;
rcobsscheduler start&lt;br /&gt;
rcobsdispatcher start&lt;br /&gt;
rcobspublisher start&lt;br /&gt;
rcobswarden start&lt;br /&gt;
rcobssigner start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Not started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rcobsservice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lighttpd ===&lt;br /&gt;
&lt;br /&gt;
lighttpd also needs to be available on backend server. This is required to provide directory listing on the repositories available on this server when an http/s request to maemo-repo is made through web ui.&lt;br /&gt;
&lt;br /&gt;
Create a new file under /etc/lighttpd/vhosts.d/. It can be obs.conf as well, and add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/lighttpd/vhosts.d/obs.conf&lt;br /&gt;
&lt;br /&gt;
$HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;crepo.meego.com&amp;quot; {&lt;br /&gt;
  server.name = &amp;quot;crepo.meego.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  server.document-root = &amp;quot;/srv/obs/repos/&amp;quot;&lt;br /&gt;
  dir-listing.activate = &amp;quot;enable&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To enable vhosts, remember to uncomment the following in the 'custom includes':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/lighttpd/lighttpd.conf&lt;br /&gt;
##&lt;br /&gt;
  ## custom includes like vhosts.&lt;br /&gt;
  ##&lt;br /&gt;
  #include &amp;quot;conf.d/config.conf&amp;quot;&lt;br /&gt;
  # following line uncommented as per&lt;br /&gt;
  # /usr/share/doc/packages/obs-api/README.SETUP&lt;br /&gt;
  include_shell &amp;quot;cat vhosts.d/*.conf&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And disable ipv6 unless it's secured correctly&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server.use-ipv6 = &amp;quot;disable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start lighttpd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#first add it as deamon&lt;br /&gt;
chkconfig --add lighttpd&lt;br /&gt;
rclighttpd start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prepare repository imports ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Handset/standard/armv5el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Handset/standard/armv7el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Handset/standard/i586&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:IVI/standard/i586&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:IVI/standard/armv5el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:IVI/standard/armv7el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Netbook/standard/armv7el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Netbook/standard/armv5el&lt;br /&gt;
mkdir -p /srv/obs/build/MeeGo:current:Netbook/standard/i586&lt;br /&gt;
&lt;br /&gt;
chown -R obsrun:obsrun /srv/obs/build/MeeGo:current:Handset&lt;br /&gt;
chown -R obsrun:obsrun /srv/obs/build/MeeGo:current:IVI&lt;br /&gt;
chown -R obsrun:obsrun /srv/obs/build/MeeGo:current:Netbook&lt;br /&gt;
&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Handset/armv5l_full/ /srv/obs/build/MeeGo\:current\:Handset/standard/armv5el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Handset/armv7l_full/ /srv/obs/build/MeeGo\:current\:Handset/standard/armv7el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Handset/i586_full/ /srv/obs/build/MeeGo\:current\:Handset/standard/i586/\:full&lt;br /&gt;
&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:IVI/armv5l_full/ /srv/obs/build/MeeGo\:current\:IVI/standard/armv5el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:IVI/armv7l_full/ /srv/obs/build/MeeGo\:current\:IVI/standard/armv7el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:IVI/i586_full/ /srv/obs/build/MeeGo\:current\:IVI/standard/i586/\:full&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Netbook/armv5l_full/ /srv/obs/build/MeeGo\:current\:Netbook/standard/armv5el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Netbook/armv7l_full/ /srv/obs/build/MeeGo\:current\:Netbook/standard/armv7el/\:full&lt;br /&gt;
ln -s /data/mirror/meego-current/current\:Netbook/i586_full/ /srv/obs/build/MeeGo\:current\:Netbook/standard/i586/\:full&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Storage node ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On this guest we need also to setup openSUSE Tools repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /etc/zypp/repos.d/;&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra:/OBS/Tools_Unstable_openSUSE_11.2/Maemo:MeeGo-Infra:OBS.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools:/Unstable/openSUSE_11.2/openSUSE:Tools:Unstable.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.2/openSUSE:Tools.repo&lt;br /&gt;
zypper ref&lt;br /&gt;
# Accept the trust key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper in obs-server obs-source_service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/sysconfig/obs-server&lt;br /&gt;
OBS_SCHEDULER_ARCHITECTURES=&amp;quot;i586 x86_64 armv5el armv7el&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now /usr/lib/obs/server/BSConfig.pm needs to point to correct server names corresponding to source server, where workers are going to download the source, and the repository server, where RPM repos are going to be shared to users.&lt;br /&gt;
&lt;br /&gt;
What's needed here?????????&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
#add&lt;br /&gt;
&lt;br /&gt;
our $srcserver = &amp;quot;http://csrc:5352&amp;quot;;&lt;br /&gt;
our $reposerver = &amp;quot;http://cbe:5252&amp;quot;;&lt;br /&gt;
our $serviceserver = &amp;quot;http://csrc:5152&amp;quot;;&lt;br /&gt;
our $servicedir = &amp;quot;/usr/lib/obs/service/&amp;quot;;&lt;br /&gt;
our $repodownload = &amp;quot;http://crepo.meego.com&amp;quot;;&lt;br /&gt;
our @reposervers = (&amp;quot;http://cbe:5252&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure services as daemons&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chkconfig --add obssrcserver obsservice&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start Services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rcobssrcserver start&lt;br /&gt;
rcobsservice start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Frontend ==&lt;br /&gt;
&lt;br /&gt;
On this guest we need also to setup openSUSE Tools repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /etc/zypp/repos.d/;&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra:/OBS/Tools_Unstable_openSUSE_11.2/Maemo:MeeGo-Infra:OBS.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools:/Unstable/openSUSE_11.2/openSUSE:Tools:Unstable.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.2/openSUSE:Tools.repo&lt;br /&gt;
zypper ref&lt;br /&gt;
# Accept the trust key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install obs-api (It's going to install lighttpd webserver by dependency for you).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper in obs-api memcached&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup MySQL ===&lt;br /&gt;
&lt;br /&gt;
MySQL server needs to be installed and configured to start as daemon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chkconfig --add mysql&lt;br /&gt;
rcmysql start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup a secure installation, if it's the first time starting MySQL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/mysql_secure_installation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /root/.my.cnf&lt;br /&gt;
chmod 0600 /root/.my.cnf&lt;br /&gt;
nano /root/.my.cnf&lt;br /&gt;
&lt;br /&gt;
[client]&lt;br /&gt;
user = root&lt;br /&gt;
password = &amp;lt;PASSWORD&amp;gt;&lt;br /&gt;
[mysqladmin]&lt;br /&gt;
user= root&lt;br /&gt;
password = &amp;lt;PASSWORD&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The frontend instance holds 2 applications, the API and the webui. Each one need a database created&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql -u root -p&lt;br /&gt;
 create database api_production;&lt;br /&gt;
 create database webui_production;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add obs user to handle these databases&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT all privileges&lt;br /&gt;
      ON api_production.*&lt;br /&gt;
      TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************';&lt;br /&gt;
GRANT all privileges&lt;br /&gt;
      ON webui_production.*&lt;br /&gt;
      TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY '************';&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now secure the passwd storing config files&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /srv/www/obs/api/config/database.yml&lt;br /&gt;
touch /srv/www/obs/webui/config/database.yml&lt;br /&gt;
chmod 600 /srv/www/obs/api/config/database.yml&lt;br /&gt;
chmod 600 /srv/www/obs/webui/config/database.yml&lt;br /&gt;
chown lighttpd /srv/www/obs/api/config/database.yml&lt;br /&gt;
chown lighttpd /srv/www/obs/webui/config/database.yml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure your MySQL user and password in the &amp;quot;production:&amp;quot; section of the API config:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /srv/www/obs/api/config/database.yml&lt;br /&gt;
#change the production section&lt;br /&gt;
production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: api_production&lt;br /&gt;
  username: obs&lt;br /&gt;
  password: ************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do the same for the webui. It's configured, by default to use SQLite, but since we're configuring the cluster for production environment, let's bind it to mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /srv/www/obs/webui/config/database.yml&lt;br /&gt;
#change the production section&lt;br /&gt;
production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: webui_production&lt;br /&gt;
  username: obs&lt;br /&gt;
  password: ************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Populate the database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /srv/www/obs/api/db/data/production&lt;br /&gt;
cd /srv/www/obs/api/&lt;br /&gt;
RAILS_ENV=&amp;quot;production&amp;quot; rake db:migrate&lt;br /&gt;
chown lighttpd.lighttpd log/*&lt;br /&gt;
&lt;br /&gt;
cd /srv/www/obs/webui/&lt;br /&gt;
RAILS_ENV=&amp;quot;production&amp;quot; rake db:migrate&lt;br /&gt;
chown lighttpd.lighttpd log/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can check the migration was successful verifying the “migrated” message at the end of each statement.&lt;br /&gt;
&lt;br /&gt;
Setup and configure lighttpd for the API and webui&lt;br /&gt;
&lt;br /&gt;
You need to setup the correct hostnames to where webui, API and repo server are going to point to&lt;br /&gt;
&lt;br /&gt;
Edit /etc/lighttpd/vhosts.d/obs.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$SERVER[&amp;quot;socket&amp;quot;] == &amp;quot;192.168.60.100:443&amp;quot; {&lt;br /&gt;
  ssl.engine                  = &amp;quot;enable&amp;quot;&lt;br /&gt;
  ssl.pemfile                 = &amp;quot;certificate.pem&amp;quot;&lt;br /&gt;
  $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;^cbuild&amp;quot; {&lt;br /&gt;
    server.name                 = &amp;quot;cbuild.meego.com&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    rails_app   = &amp;quot;webui&amp;quot;&lt;br /&gt;
    rails_root  = &amp;quot;/srv/www/obs/webui&amp;quot;&lt;br /&gt;
    rails_procs = 10&lt;br /&gt;
    # production/development are typical values here&lt;br /&gt;
    rails_mode  = &amp;quot;production&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    log_root = &amp;quot;/srv/www/obs/webui/log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    include &amp;quot;vhosts.d/rails.inc&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;^capi&amp;quot; {&lt;br /&gt;
    server.name                 = &amp;quot;capi.meego.com&amp;quot;&lt;br /&gt;
    rails_app   = &amp;quot;api&amp;quot;&lt;br /&gt;
    rails_root  = &amp;quot;/srv/www/obs/api&amp;quot;&lt;br /&gt;
    rails_procs = 10&lt;br /&gt;
    # production/development are typical values here&lt;br /&gt;
    rails_mode  = &amp;quot;production&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    log_root = &amp;quot;/srv/www/obs/api/log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    include &amp;quot;vhosts.d/rails.inc&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;download&amp;quot; {&lt;br /&gt;
# This should point to an rsync populated download repo&lt;br /&gt;
#  server.name = &amp;quot;download.obs.maemo.org&amp;quot;&lt;br /&gt;
#  server.document-root = &amp;quot;/srv/obs/repos/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  proxy.server = ( &amp;quot;&amp;quot; =&amp;gt; ( (&lt;br /&gt;
        &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;10.1.1.11&amp;quot;,&lt;br /&gt;
        &amp;quot;port&amp;quot; =&amp;gt; 80&lt;br /&gt;
      ))&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To enable these vhosts, make sure to '''uncomment''' the following in the 'custom includes' section at the bottom of /etc/lighttpd/lighttpd.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/lighttpd/lighttpd.conf&lt;br /&gt;
##&lt;br /&gt;
## custom includes like vhosts.&lt;br /&gt;
##&lt;br /&gt;
#include &amp;quot;conf.d/config.conf&amp;quot;&lt;br /&gt;
include_shell &amp;quot;cat /etc/lighttpd/vhosts.d/*.conf&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also need to disable IPv6 unkess it's secured&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server.use-ipv6 = &amp;quot;disable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, the modules &amp;quot;mod_magnet&amp;quot;, &amp;quot;mod_rewrite&amp;quot; and FastCGI need to be enabled by uncommenting the corresponding lines in /etc/lighttpd/modules.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server.modules = (&lt;br /&gt;
  &amp;quot;mod_access&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_alias&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_auth&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_evasive&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_redirect&amp;quot;,&lt;br /&gt;
  &amp;quot;mod_rewrite&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_setenv&amp;quot;,&lt;br /&gt;
#  &amp;quot;mod_usertrack&amp;quot;,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## mod_magnet&lt;br /&gt;
##&lt;br /&gt;
include &amp;quot;conf.d/magnet.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## FastCGI (mod_fastcgi)&lt;br /&gt;
##&lt;br /&gt;
include &amp;quot;conf.d/fastcgi.conf&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need also to configure /srv/www/obs/webui/config/environments/production.rb to point to correct server names:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /srv/www/obs/webui/config/environments/production.rb&lt;br /&gt;
FRONTEND_HOST = &amp;quot;capi.meego.com&amp;quot;&lt;br /&gt;
FRONTEND_PORT = 80&lt;br /&gt;
EXTERNAL_FRONTEND_HOST = &amp;quot;capi.meego.com&amp;quot;&lt;br /&gt;
BUGZILLA_HOST = &amp;quot;http://bugs.moego.com/&amp;quot;&lt;br /&gt;
DOWNLOAD_URL = &amp;quot;http://cdownload.meego.com/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do the same for /srv/www/obs/api/config/environments/production.rb. As soon your backend is not on the same machine as the api (frontend), change the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /srv/www/obs/api/config/environments/production.rb&lt;br /&gt;
SOURCE_HOST = &amp;quot;csrc.meego.com&amp;quot;&lt;br /&gt;
SOURCE_PORT = 5352&lt;br /&gt;
DOWNLOAD_URL='http://cdownload.meego.com/'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ligthttpd user and group need to be the owner of api and webui dirs (as well as log and tmp):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R lighttpd.lighttpd /srv/www/obs/{api,webui}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure TCP port 5352 is open on the firewall. Ensure lighttpd and obs ui helpers start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chkconfig --add memcached&lt;br /&gt;
chkconfig --add lighttpd&lt;br /&gt;
chkconfig --add obsapidelayed&lt;br /&gt;
chkconfig --add obswebuidelayed&lt;br /&gt;
&lt;br /&gt;
rcmemcached start&lt;br /&gt;
rclighttpd start&lt;br /&gt;
rcobsapidelayed start&lt;br /&gt;
rcobswebuidelayed start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rcobsapidelayed&lt;br /&gt;
&lt;br /&gt;
= Preparing Worker Host =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vgadd OBS /dev/sda4&lt;br /&gt;
vgcreate OBS /dev/sda4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Workers ==&lt;br /&gt;
&lt;br /&gt;
The other hosts on the cluster are reserved to be used as workers,&lt;br /&gt;
where package builds are going to place.&lt;br /&gt;
&lt;br /&gt;
The same openSUSE Tools repository addition must be done for each worker.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /etc/zypp/repos.d/;&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_11.2/openSUSE:Tools.repo&lt;br /&gt;
zypper ref&lt;br /&gt;
# Accept the trust key.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zypper in obs-worker qemu-devel mount-static bash-static&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(mount-static and bash-static are needed on the worker for rpm cross-compile to work)&lt;br /&gt;
&lt;br /&gt;
For Xen workers we need a suitable initrd:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export rootfstype=&amp;quot;ext4&amp;quot;&lt;br /&gt;
mkinitrd -d /dev/null -m &amp;quot;ext4 binfmt_misc&amp;quot; -k vmlinuz-$(uname -r) -i initrd-$(uname -r)-obs_worker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will create an initrd for your kernel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Kernel image:   /boot/vmlinuz-2.6.31.12-0.2-xen&lt;br /&gt;
Initrd image:   /boot/initrd-2.6.31.12-0.2-xen-obs_worker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure you link initrd-xen-worker -&amp;gt; initrd-2.6.31.12-0.2-xen-obs_worker&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s /boot/initrd-$(uname -r)-obs_worker /boot/initrd-xen-worker&lt;br /&gt;
ln -s vmlinuz-$(uname -r) vmlinuz-xen-worker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assumes you have a VG dedicated to workers called &amp;quot;OBS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Edit the file /etc/sysconfig/obs-worker in order to point to correct repository server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /etc/sysconfig/obs-worker&lt;br /&gt;
OBS_SRC_SERVER=&amp;quot;csrc:5352&amp;quot;&lt;br /&gt;
OBS_REPO_SERVERS=&amp;quot;cbe:5252&amp;quot;&lt;br /&gt;
OBS_VM_TYPE=&amp;quot;xen&amp;quot;&lt;br /&gt;
OBS_VM_KERNEL=&amp;quot;/boot/vmlinuz-xen-worker&amp;quot;&lt;br /&gt;
OBS_VM_INITRD=&amp;quot;/boot/initrd-xen-worker&amp;quot;&lt;br /&gt;
OBS_VM_DISK_AUTOSETUP_ROOT_FILESIZE=&amp;quot;8192&amp;quot;&lt;br /&gt;
OBS_VM_DISK_AUTOSETUP_SWAP_FILESIZE=&amp;quot;2048&amp;quot;&lt;br /&gt;
OBS_INSTANCE_MEMORY=&amp;quot;1024&amp;quot;&lt;br /&gt;
OBS_STORAGE_AUTOSETUP=&amp;quot;yes&amp;quot;&lt;br /&gt;
OBS_SETUP_WORKER_PARTITIONS=&amp;quot;use_obs_vg&amp;quot;&lt;br /&gt;
OBS_WORKER_ROOT_SIZE=&amp;quot;8192&amp;quot;&lt;br /&gt;
OBS_WORKER_SWAP_SIZE=&amp;quot;2048&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the OBS_VM_KERNEL/INITRD params are for kvm only. The Xen VM pulls in /usr/lib/build/xen.conf from the repo master (backend server, cbe). It does this&lt;br /&gt;
&lt;br /&gt;
The obsstoragesetup will wipe the OBS VG and create root/swap LVs for each worker&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rcobsstoragesetup start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm: No arrays found in config file or automatically&lt;br /&gt;
Waiting for udev to settle...&lt;br /&gt;
Scanning for LVM volume groups...&lt;br /&gt;
  Reading all physical volumes.  This may take a while...&lt;br /&gt;
  Found volume group &amp;quot;OBS&amp;quot; using metadata type lvm2&lt;br /&gt;
Activating LVM volume groups...&lt;br /&gt;
  0 logical volume(s) in volume group &amp;quot;OBS&amp;quot; now active&lt;br /&gt;
                                                                                                             done&lt;br /&gt;
  Logical volume &amp;quot;worker_root_1&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_1&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_2&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_2&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_3&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_3&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_4&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_4&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_5&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_5&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_6&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_6&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_7&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_7&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_8&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_8&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_9&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_9&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_10&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_10&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_11&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_11&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_12&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_12&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_13&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_13&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_14&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_14&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_15&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_15&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_root_16&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;worker_swap_16&amp;quot; created&lt;br /&gt;
  Logical volume &amp;quot;cache&amp;quot; created&lt;br /&gt;
mke2fs 1.41.9 (22-Aug-2009)&lt;br /&gt;
Filesystem label=&lt;br /&gt;
OS type: Linux&lt;br /&gt;
Block size=4096 (log=2)&lt;br /&gt;
Fragment size=4096 (log=2)&lt;br /&gt;
3555328 inodes, 14201856 blocks&lt;br /&gt;
710092 blocks (5.00%) reserved for the super user&lt;br /&gt;
First data block=0&lt;br /&gt;
Maximum filesystem blocks=4294967296&lt;br /&gt;
434 block groups&lt;br /&gt;
32768 blocks per group, 32768 fragments per group&lt;br /&gt;
8192 inodes per group&lt;br /&gt;
Superblock backups stored on blocks:&lt;br /&gt;
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
        4096000, 7962624, 11239424&lt;br /&gt;
&lt;br /&gt;
Writing inode tables: done&lt;br /&gt;
Creating journal (32768 blocks): done&lt;br /&gt;
Writing superblocks and filesystem accounting information: done&lt;br /&gt;
&lt;br /&gt;
This filesystem will be automatically checked every 39 mounts or&lt;br /&gt;
180 days, whichever comes first.  Use tune2fs -c or -i to override.&lt;br /&gt;
Looking for OBS Server LVM Volume&lt;br /&gt;
Setup local storage&lt;br /&gt;
Looking for OBS Worker Cache LVM Volume&lt;br /&gt;
Setting up OBS Workers according to LVM Volumes&lt;br /&gt;
Found XEN virtualization&lt;br /&gt;
                                                                                                             done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xm create -c /var/run/obs/worker/8/build/xen.conf name=build:root8 memory=40 disk=phy:/dev/mapper/OBS-worker_root8,hda1,w disk=phy:/dev/mapper/OBS-worker_swap8,hda2,w extra=&amp;quot;init=/.build/initscript_qemu_vm panic=1 console=ttyS0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the worker service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chkconfig --add obsworker&lt;br /&gt;
rcobsworker start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Build Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS</id>
		<title>ARM/N900/DeveloperEdition/BOSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS"/>
				<updated>2011-09-16T10:36:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: link to boss processes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Automating DE processes =&lt;br /&gt;
&lt;br /&gt;
The DE workflow is (roughly) :&lt;br /&gt;
&lt;br /&gt;
# Developer branches package from P:DE:Trunk&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing&lt;br /&gt;
# Boss runs checks on package&lt;br /&gt;
# Boss creates branch of P:DE:Trunk&lt;br /&gt;
# Boss submits package(s) to new branch&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Boss rejects package&lt;br /&gt;
or&lt;br /&gt;
# Boss notifies maintainers that checks passed&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
# Package is accepted to P:DE:Trunk by a maintainer&lt;br /&gt;
# bz is updated&lt;br /&gt;
&lt;br /&gt;
The actual processes can be seen in the [http://autodoc.meego.com/boss/ autodoc boss] area until the OBS plugin is available.&lt;br /&gt;
&lt;br /&gt;
== BOSS Checks ==&lt;br /&gt;
&lt;br /&gt;
BOSS runs the following checks (and stops as soon as one fails)&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_submitter_is_maintainer check_submitter_is_maintainer]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_built_at_source check_package_built_at_source]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_is_complete check_package_is_complete]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_spec check_spec]&lt;br /&gt;
&lt;br /&gt;
To be done:&lt;br /&gt;
* changelog in proper format (present, syntactically correct)&lt;br /&gt;
* changelog has entry for this commit&lt;br /&gt;
* last changelog version matches spec file version&lt;br /&gt;
* tarball not changed within same package version&lt;br /&gt;
* executing spectacle doesn't change anything if .yaml present&lt;br /&gt;
* yaml must be present if spec is based on .yaml&lt;br /&gt;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* check that old tarball has been removed if new one is introduced&lt;br /&gt;
* SR not empty (define empty?)&lt;br /&gt;
** No changes at all. At times people are trying rebuild packages by submitting empty change. (Sage)&lt;br /&gt;
&lt;br /&gt;
== Process Testing ==&lt;br /&gt;
&lt;br /&gt;
The Project:DE:BOSS:Trunk and Project:DE:BOSS:Trunk:Testing areas are used&lt;br /&gt;
to test the processes.&lt;br /&gt;
&lt;br /&gt;
The processes to be tested are deployed to /srv/BOSS/processes/Project/DE/BOSS/Trunk/&lt;br /&gt;
&lt;br /&gt;
=== DE_Trunk_SRs ===&lt;br /&gt;
&lt;br /&gt;
To deploy:&lt;br /&gt;
* set irc_channel and final_project&lt;br /&gt;
* Copy to Project:DE:Trunk&lt;br /&gt;
* symlink: SRCSRV_REQUEST_CREATE and SRCSRV_REQUEST_STATECHANGE in Trunk and Trunk:Testing&lt;br /&gt;
&lt;br /&gt;
   cd Trunk&lt;br /&gt;
   ln -s DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
   cd Testing&lt;br /&gt;
   ln -s ../DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
&lt;br /&gt;
= Wish List =&lt;br /&gt;
List of wishes for the BOSS. Please write your nick in parentheses to the end so people know who to contact if they have more questions.&lt;br /&gt;
&lt;br /&gt;
# e-mail notice of SR's especially when SR is rejected&lt;br /&gt;
# Check if package upstream has changed and do a report of the packages that needs to be rebased on top of the new upstream. Currently this check is done manually with https://gitorious.org/meego-developer-edition-for-n900/upstreamchecker/ script by N900 RE. (Sage)&lt;br /&gt;
# In case package fails to connection failure start rebuild automatically after time X. (Sage)&lt;br /&gt;
# Add architecture and repository to build error message. (Sage)&lt;br /&gt;
#* ''14:06.33 &amp;lt; boss&amp;gt; Build failure in Project:DE:Trunk:Testing: meegotouch-theme More details soon''&lt;br /&gt;
# Update patterns based on package-groups package. (Sage)&lt;br /&gt;
#* We should have package-group package in the Project:DE:Trunk[:Testing] project that contains the CE package groups. This information should be when ever repository is published pushed to the repository with ''osc meta pattern'' or similar command.&lt;br /&gt;
# When submit supersedes another one the handling of the old submit request should be stopped. (Sage)&lt;br /&gt;
&lt;br /&gt;
= Bug Lifecycle =&lt;br /&gt;
&lt;br /&gt;
The DE bug lifecycle is (roughly):&lt;br /&gt;
&lt;br /&gt;
* 'open' -&amp;gt; FIXED -&amp;gt; RELEASED -&amp;gt; VERIFIED&lt;br /&gt;
&lt;br /&gt;
# Developer starts working on the bug/feature and sets to ASSIGNED&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing and documents changelog and/or commit properly (fixes bmc #1234;) - if changelog doesn't have a valid bug/feature reference the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
# Bugzilla records the commit message with link to the repo and timestamp&lt;br /&gt;
# Package is accepted to P:DE:Trunk (manual for now....)&lt;br /&gt;
# Bugzilla records acceptance with comment and bug status is automatically changed to FIXED if bug is still in OPEN status (New, assigned, needinfo, reopened, waiting)&lt;br /&gt;
# If bug is already in FIXED resolution, only acceptance comment is written in the bug report&lt;br /&gt;
# If bug is not in OPEN status (New, assigned, needinfo, reopened, waiting) or resolved FIXED (eg. duplicate, wontfix, etc... or verified or closed) the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Release is triggered &lt;br /&gt;
# Bug status is automatically changed to RELEASED, a comment with a link to the image is created and the Target Build value is set to match appropriate release&lt;br /&gt;
&lt;br /&gt;
Later still:&lt;br /&gt;
# QA review the release and for each bug marked RELEASED, either change to VERIFIED or re-open&lt;br /&gt;
&lt;br /&gt;
Note that eventually, both FIXED and RELEASED statuses would require specific credentials to be modified.&lt;br /&gt;
&lt;br /&gt;
= Image Building =&lt;br /&gt;
&lt;br /&gt;
CE has a private installation of IMG on host img in the internal meego.com network. Speak to David Greaves / lbt for access details.&lt;br /&gt;
Login is via meego.com credentials.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS</id>
		<title>ARM/N900/DeveloperEdition/BOSS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/ARM/N900/DeveloperEdition/BOSS"/>
				<updated>2011-09-16T09:09:36Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Bug Lifecycle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Automating DE processes =&lt;br /&gt;
&lt;br /&gt;
The DE workflow is (roughly) :&lt;br /&gt;
&lt;br /&gt;
# Developer branches package from P:DE:Trunk&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing&lt;br /&gt;
# Boss runs checks on package&lt;br /&gt;
# Boss creates branch of P:DE:Trunk&lt;br /&gt;
# Boss submits package(s) to new branch&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Boss rejects package&lt;br /&gt;
or&lt;br /&gt;
# Boss notifies maintainers that checks passed&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
# Package is accepted to P:DE:Trunk by a maintainer&lt;br /&gt;
# bz is updated&lt;br /&gt;
&lt;br /&gt;
== BOSS Checks ==&lt;br /&gt;
&lt;br /&gt;
BOSS runs the following checks (and stops as soon as one fails)&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_submitter_is_maintainer check_submitter_is_maintainer]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_built_at_source check_package_built_at_source]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_package_is_complete check_package_is_complete]&lt;br /&gt;
* [http://wiki.meego.com/Release_Infrastructure/BOSS/Participants#check_spec check_spec]&lt;br /&gt;
&lt;br /&gt;
To be done:&lt;br /&gt;
* changelog in proper format (present, syntactically correct)&lt;br /&gt;
* changelog has entry for this commit&lt;br /&gt;
* last changelog version matches spec file version&lt;br /&gt;
* tarball not changed within same package version&lt;br /&gt;
* executing spectacle doesn't change anything if .yaml present&lt;br /&gt;
* yaml must be present if spec is based on .yaml&lt;br /&gt;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* check that old tarball has been removed if new one is introduced&lt;br /&gt;
* SR not empty (define empty?)&lt;br /&gt;
** No changes at all. At times people are trying rebuild packages by submitting empty change. (Sage)&lt;br /&gt;
&lt;br /&gt;
== Process Testing ==&lt;br /&gt;
&lt;br /&gt;
The Project:DE:BOSS:Trunk and Project:DE:BOSS:Trunk:Testing areas are used&lt;br /&gt;
to test the processes.&lt;br /&gt;
&lt;br /&gt;
The processes to be tested are deployed to /srv/BOSS/processes/Project/DE/BOSS/Trunk/&lt;br /&gt;
&lt;br /&gt;
=== DE_Trunk_SRs ===&lt;br /&gt;
&lt;br /&gt;
To deploy:&lt;br /&gt;
* set irc_channel and final_project&lt;br /&gt;
* Copy to Project:DE:Trunk&lt;br /&gt;
* symlink: SRCSRV_REQUEST_CREATE and SRCSRV_REQUEST_STATECHANGE in Trunk and Trunk:Testing&lt;br /&gt;
&lt;br /&gt;
   cd Trunk&lt;br /&gt;
   ln -s DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
   cd Testing&lt;br /&gt;
   ln -s ../DE_Trunk_SRs SRCSRV_REQUEST_CREATE SRCSRV_REQUEST_STATECHANGE&lt;br /&gt;
&lt;br /&gt;
= Wish List =&lt;br /&gt;
List of wishes for the BOSS. Please write your nick in parentheses to the end so people know who to contact if they have more questions.&lt;br /&gt;
&lt;br /&gt;
# e-mail notice of SR's especially when SR is rejected&lt;br /&gt;
# Check if package upstream has changed and do a report of the packages that needs to be rebased on top of the new upstream. Currently this check is done manually with https://gitorious.org/meego-developer-edition-for-n900/upstreamchecker/ script by N900 RE. (Sage)&lt;br /&gt;
# In case package fails to connection failure start rebuild automatically after time X. (Sage)&lt;br /&gt;
# Add architecture and repository to build error message. (Sage)&lt;br /&gt;
#* ''14:06.33 &amp;lt; boss&amp;gt; Build failure in Project:DE:Trunk:Testing: meegotouch-theme More details soon''&lt;br /&gt;
# Update patterns based on package-groups package. (Sage)&lt;br /&gt;
#* We should have package-group package in the Project:DE:Trunk[:Testing] project that contains the CE package groups. This information should be when ever repository is published pushed to the repository with ''osc meta pattern'' or similar command.&lt;br /&gt;
# When submit supersedes another one the handling of the old submit request should be stopped. (Sage)&lt;br /&gt;
&lt;br /&gt;
= Bug Lifecycle =&lt;br /&gt;
&lt;br /&gt;
The DE bug lifecycle is (roughly):&lt;br /&gt;
&lt;br /&gt;
* 'open' -&amp;gt; FIXED -&amp;gt; RELEASED -&amp;gt; VERIFIED&lt;br /&gt;
&lt;br /&gt;
# Developer starts working on the bug/feature and sets to ASSIGNED&lt;br /&gt;
# Developer submits package to P:DE:Trunk:Testing and documents changelog and/or commit properly (fixes bmc #1234;) - if changelog doesn't have a valid bug/feature reference the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
# Bugzilla records the commit message with link to the repo and timestamp&lt;br /&gt;
# Package is accepted to P:DE:Trunk (manual for now....)&lt;br /&gt;
# Bugzilla records acceptance with comment and bug status is automatically changed to FIXED if bug is still in OPEN status (New, assigned, needinfo, reopened, waiting)&lt;br /&gt;
# If bug is already in FIXED resolution, only acceptance comment is written in the bug report&lt;br /&gt;
# If bug is not in OPEN status (New, assigned, needinfo, reopened, waiting) or resolved FIXED (eg. duplicate, wontfix, etc... or verified or closed) the request MUST fail but we do not document the failure in the bug report&lt;br /&gt;
&lt;br /&gt;
Later:&lt;br /&gt;
# Release is triggered &lt;br /&gt;
# Bug status is automatically changed to RELEASED, a comment with a link to the image is created and the Target Build value is set to match appropriate release&lt;br /&gt;
&lt;br /&gt;
Later still:&lt;br /&gt;
# QA review the release and for each bug marked RELEASED, either change to VERIFIED or re-open&lt;br /&gt;
&lt;br /&gt;
Note that eventually, both FIXED and RELEASED statuses would require specific credentials to be modified.&lt;br /&gt;
&lt;br /&gt;
= Image Building =&lt;br /&gt;
&lt;br /&gt;
CE has a private installation of IMG on host img in the internal meego.com network. Speak to David Greaves / lbt for access details.&lt;br /&gt;
Login is via meego.com credentials.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Policy</id>
		<title>Web infrastructure/Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Policy"/>
				<updated>2011-09-13T12:48:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* SSH Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The policies on this page are aimed at administrative use of the system.&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
There are no firm guidelines for access to infrastructure systems. We operate a validated trust approach and require consensus from a number of members of the IT team to grant access.&lt;br /&gt;
&lt;br /&gt;
There are multiple levels of trust:&lt;br /&gt;
* No shell access : This is the norm. Very few people have shell accounts to any systems. There must be an '''extremely''' compelling reason to provide shell access.&lt;br /&gt;
* Shell user : When granted, access will normally be at this level.&lt;br /&gt;
* VM root : In exceptional cases for highly trusted people with significant sysadmin knowledge we will provide root access to a virtual machine. Having root access means you take direct responsibility for the security of the machine.&lt;br /&gt;
* Superadmin : The superadmin team is the core IT team - invitation only :)  These users are given access to IT Private bugs.&lt;br /&gt;
&lt;br /&gt;
== SSH Keys ==&lt;br /&gt;
Access is provided via ssh keys and not passwords.&lt;br /&gt;
&lt;br /&gt;
Users are expected to take security of ssh private keys very seriously.&lt;br /&gt;
&lt;br /&gt;
* Private keys are '''strictly private to an individual'''. If they are disclosed to '''anyone''', under '''any''' circumstances please let IT know '''AT ONCE'''. It's easy to change them.&lt;br /&gt;
* You should have a dedicated ssh key for use for meego.com access&lt;br /&gt;
* ssh keys '''must''' be protected by a strong pass phrase (ssh-agent and ssh-add makes this un-noticeable)&lt;br /&gt;
* ssh keys use '''must''' be confirmed before every use (ssh-add -c). This is usually a simple pop-up from ssh-askpass&lt;br /&gt;
* ssh private keys ''must never'' be checked into a git repo which could compromise them&lt;br /&gt;
* ssh public keys ''must never'' be obtained from a git repo which could lead to loose access controls&lt;br /&gt;
* Onward access from the jump host is by tunnel - no ssh or agent-forwarding&lt;br /&gt;
* The comment on your public key should be descriptive, such as an email address, as much as your pet name is funny, its not to the point.&lt;br /&gt;
* If you use a mobile device(phone, tablet, etc) please consider using a separate key for that device and not accessing critical infrastructure with that mobile device directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have any problems with implementing any of these rules then please talk to one of the IT team - they want you to get it right and will do their best to help you. (And it may help to know that they too will have struggled with ssh once upon a time!)&lt;br /&gt;
&lt;br /&gt;
If you think you need an exception to a rule (eg group access, password access, unattended/cron access etc) then we'll be glad to help solve the problem you face. It's much better to get help to implement a secure solution than to &amp;quot;just&amp;quot; do something to make it work.&lt;br /&gt;
&lt;br /&gt;
The following snippet can be usefully added to your .ssh/config  (note you need to change the &amp;lt;USER&amp;gt; to your meego.com shell account name)&lt;br /&gt;
 Host *.meego.com&lt;br /&gt;
     User &amp;lt;USER&amp;gt;&lt;br /&gt;
     IdentityFile ~/.ssh/id_rsa_meego&lt;br /&gt;
     ServerAliveInterval 60&lt;br /&gt;
     ForwardAgent no&lt;br /&gt;
 &lt;br /&gt;
 Host access.meego.com&lt;br /&gt;
     ProxyCommand none&lt;br /&gt;
 &lt;br /&gt;
 Host *.in.meego.com&lt;br /&gt;
     ProxyCommand ssh -q access.meego.com netcat %h 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The strong passphrase means that if your computer is stolen then the attacker won't be able to use your key to access your account.&lt;br /&gt;
* The askpass confirmation means that if a man-in-the-middle attack is attempted then your agent should prompt you when you didn't just establish a connection. If this happens then refuse the request.&lt;br /&gt;
* Agent forwarding means a compromised jump host would be able to spoof an onward connection as your account&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
(repeated from [[Meego_IT#Contact_points|IT team contact section]]).&lt;br /&gt;
&lt;br /&gt;
The MeeGo IT team have 2 bug products: MeeGo IT Private and MeeGo IT. We use the private one for bugs which discuss secure or confidential information; sometimes we'll make a public bug private or a private bug public. The criteria are not well defined but in general we don't discuss specifics of our installation in public. Whilst we do not operate &amp;quot;security through obscurity&amp;quot;, nor do we claim to be infallible - limiting information means that when we make errors, the information is less likely to leak and the window that we have to rectify the error without discovery should be larger.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Policy</id>
		<title>Web infrastructure/Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Policy"/>
				<updated>2011-09-13T08:16:31Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Clarify IT Private bug policy - see https://bugs.meego.com/show_bug.cgi?id=22699 for debate.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The policies on this page are aimed at administrative use of the system.&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
There are no firm guidelines for access to infrastructure systems. We operate a validated trust approach and require consensus from a number of members of the IT team to grant access.&lt;br /&gt;
&lt;br /&gt;
There are multiple levels of trust:&lt;br /&gt;
* No shell access : This is the norm. Very few people have shell accounts to any systems. There must be an '''extremely''' compelling reason to provide shell access.&lt;br /&gt;
* Shell user : When granted, access will normally be at this level.&lt;br /&gt;
* VM root : In exceptional cases for highly trusted people with significant sysadmin knowledge we will provide root access to a virtual machine. Having root access means you take direct responsibility for the security of the machine.&lt;br /&gt;
* Superadmin : The superadmin team is the core IT team - invitation only :)  These users are given access to IT Private bugs.&lt;br /&gt;
&lt;br /&gt;
== SSH Keys ==&lt;br /&gt;
Access is provided via ssh keys and not passwords.&lt;br /&gt;
&lt;br /&gt;
Users are expected to take security of ssh private keys very seriously.&lt;br /&gt;
&lt;br /&gt;
* Private keys are '''strictly private to an individual'''. If they are disclosed to '''anyone''', under '''any''' circumstances please let IT know '''AT ONCE'''. It's easy to change them.&lt;br /&gt;
* You should have a dedicated ssh key for use for meego.com access&lt;br /&gt;
* ssh keys '''must''' be protected by a strong pass phrase (ssh-agent and ssh-add makes this un-noticeable)&lt;br /&gt;
* ssh keys use '''must''' be confirmed before every use (ssh-add -c). This is usually a simple pop-up from ssh-askpass&lt;br /&gt;
* ssh private keys ''must never'' be checked into a git repo which could compromise them&lt;br /&gt;
* ssh public keys ''must never'' be obtained from a git repo which could lead to loose access controls&lt;br /&gt;
* Onward access from the jump host is by tunnel - no ssh or agent-forwarding&lt;br /&gt;
* The comment on your public key should be descriptive, such as an email address, as much as your pet name is funny, its not to the point.&lt;br /&gt;
* If you use a mobile device(phone, tablet, etc) please consider using a separate key for that device and not accessing critical infrastructure with that mobile device directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have any problems with implementing any of these rules then please talk to one of the IT team - they want you to get it right and will do their best to help you. (And it may help to know that they too will have struggled with ssh once upon a time!)&lt;br /&gt;
&lt;br /&gt;
If you think you need an exception to a rule (eg group access, password access, unattended/cron access etc) then we'll be glad to help solve the problem you face. It's much better to get help to implement a secure solution than to &amp;quot;just&amp;quot; do something to make it work.&lt;br /&gt;
&lt;br /&gt;
The following snippet can be usefully added to your .ssh/config&lt;br /&gt;
 Host *.meego.com&lt;br /&gt;
     User &amp;lt;USER&amp;gt;&lt;br /&gt;
     IdentityFile ~/.ssh/id_rsa_meego&lt;br /&gt;
     ServerAliveInterval 60&lt;br /&gt;
     ForwardAgent no&lt;br /&gt;
 &lt;br /&gt;
 Host access.meego.com&lt;br /&gt;
     ProxyCommand none&lt;br /&gt;
 &lt;br /&gt;
 Host *.in.meego.com&lt;br /&gt;
     ProxyCommand ssh -q access.meego.com netcat %h 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The strong passphrase means that if your computer is stolen then the attacker won't be able to use your key to access your account.&lt;br /&gt;
* The askpass confirmation means that if a man-in-the-middle attack is attempted then your agent should prompt you when you didn't just establish a connection. If this happens then refuse the request.&lt;br /&gt;
* Agent forwarding means a compromised jump host would be able to spoof an onward connection as your account&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
(repeated from [[Meego_IT#Contact_points|IT team contact section]]).&lt;br /&gt;
&lt;br /&gt;
The MeeGo IT team have 2 bug products: MeeGo IT Private and MeeGo IT. We use the private one for bugs which discuss secure or confidential information; sometimes we'll make a public bug private or a private bug public. The criteria are not well defined but in general we don't discuss specifics of our installation in public. Whilst we do not operate &amp;quot;security through obscurity&amp;quot;, nor do we claim to be infallible - limiting information means that when we make errors, the information is less likely to leak and the window that we have to rectify the error without discovery should be larger.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-09-12T12:34:30Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Remove confusing comment about a related upstream package - this page doesn't talk about running ruote and it's not a sensible thing to do.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :RC).&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 or OpenSuse 11.4 installation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Release Candidate : https://build.pub.meego.com/project/monitor?project=Project:MINT:RC (~June 2011)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now:&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register check&lt;br /&gt;
 skynet register notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process instance ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process instance:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= BOSS OBS Plugin =&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-09-11T20:49:42Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Update repos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.4.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.4/meego-tools.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
Worker:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-boss&lt;br /&gt;
&lt;br /&gt;
Web UI:&lt;br /&gt;
  zypper in img-web&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Whether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-09-02T14:04:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :RC).&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 or OpenSuse 11.4 installation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing (Current)&lt;br /&gt;
&lt;br /&gt;
 Release Candidate : https://build.pub.meego.com/project/monitor?project=Project:MINT:RC (~June 2011)&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo MINT&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== SkyNET installation for OpenSuse 11.4 ===&lt;br /&gt;
&lt;br /&gt;
In order to be able to work with BOSS, please install SkyNET now:&lt;br /&gt;
&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
from the repository &lt;br /&gt;
&lt;br /&gt;
 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
== BOSS OBS Plugin ==&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; (provided by the robogrator launcher package https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator ) running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register -n check&lt;br /&gt;
 skynet register -n notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Meego_IT</id>
		<title>Meego IT</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Meego_IT"/>
				<updated>2011-08-19T19:38:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: cross-link to policy/processes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MeeGo IT team takes care of the infrastructure in meego.com located at Oregon State University hosting center. It's devoted to offer the best service to the Community and to the other teams so that everyone can do his/her job without worrying nor caring about the underlying layers of the stack.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/stezz Stefano Mosconi]'''  is the MeeGo IT manager. He is responsible for the MeeGo IT team, making sure that we don't break too much stuff, the services are up, running and fast and people using them are happy.&lt;br /&gt;
* '''[http://meego.com/users/mshaver Michael Shaver]''' is the MeeGo webmaster, he takes care of the websites content down to the spelling of the words and to the colors of the pages. He installs weird Drupal modules in his spare time and tests them to see if they work.&lt;br /&gt;
* '''[http://meego.com/users/lbt David Greaves]''' is the guy who reminds us to clean up after we made some mess, document the stuff and in his spare time takes care of the community OBS infra. He does also IT architecure, dances tango and speaks with a funny british accent.&lt;br /&gt;
* '''[http://meego.com/users/xfade Niels Breet]''' is the guy who knows a lot of stuff about a lot of IT things but he doesn't want to be called IT engineer, sysadmin nor architect, X-Fade is enough. He's also the maemo.org webmaster and brings to Meego IT a lot of his expertise in community related matters. Taking care of community OBS and a lot of the other infrastructure.&lt;br /&gt;
* '''[http://meego.com/users/adamgretzinger Adam Gretzinger]''' is the Meego Sysadmin, he has the keys to our realm and does a zillion of things, from plugging/unplugging cables, to tagging servers, to installing machines, to configuring web servers, to debugging network problems... etc.&lt;br /&gt;
* '''[http://meego.com/users/maxivano Maxim Ivanov]''' is the other Meego Sysadmin, he also does a lot of stuff, architecture, installation, testing, monitoring, debugging but can't unplug cables as he's far away from the buttons' room.&lt;br /&gt;
* '''[http://meego.com/users/pierce Dean Pierce]''' is the Meego IT security engineer. He reminds us that we can trust no one, not even ourselves.&lt;br /&gt;
&lt;br /&gt;
== Supported servers and services ==&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of services in [[Web_infrastructure |this separate page]] with some details about them&lt;br /&gt;
&lt;br /&gt;
== Policy and Processes ==&lt;br /&gt;
&lt;br /&gt;
You can find some of the [[Web_infrastructure/Processes | processes here]] and some [[Web_infrastructure/Policy|IT policy here]]&lt;br /&gt;
&lt;br /&gt;
== Contact points ==&lt;br /&gt;
&lt;br /&gt;
We have a [mailto:meego-it@lists.meego.com mailing list] where you can talk to the team in case you need us to know something or you want to know something. You can subscribe there if you want to have an idea of what we discuss in our weekly meetings.&lt;br /&gt;
&lt;br /&gt;
Also in case of problems with the websites or the IT in general you can enter a bug in [https://bugs.meego.com/enter_bug.cgi?classification=MeeGo%20Community%20Infrastructure any of our components in bugs.meego.com]&lt;br /&gt;
&lt;br /&gt;
The MeeGo IT team have 2 bug products: MeeGo IT Private and MeeGo IT. We use the private one for bugs which discuss secure or confidential information; sometimes we'll make a public bug private or a private bug public. The criteria are not well defined but in general we don't discuss specifics of our installation in public. Whilst we do not operate &amp;quot;security through obscurity&amp;quot;, nor do we claim to be infallible - limiting information means that when we make errors, the information is less likely to leak and the window that we have to rectify the error without discovery should be larger.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Policy</id>
		<title>Web infrastructure/Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Policy"/>
				<updated>2011-08-19T19:36:47Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Policy page .. add some light Bug policy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The policies on this page are aimed at administrative use of the system.&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
There are no firm guidelines for access to infrastructure systems. We operate a validated trust approach and require consensus from a number of members of the IT team to grant access.&lt;br /&gt;
&lt;br /&gt;
There are multiple levels of trust:&lt;br /&gt;
* No shell access : This is the norm. Very few people have shell accounts to any systems. There must be an '''extremely''' compelling reason to provide shell access.&lt;br /&gt;
* Shell user : When granted, access will normally be at this level. These users are given access to IT Private bugs if requested.&lt;br /&gt;
* VM root : In exceptional cases for highly trusted people with significant sysadmin knowledge we will provide root access to a virtual machine. Having root access means you take direct responsibility for the security of the machine.&lt;br /&gt;
* Superadmin : The superadmin team is the core IT team - invitation only :)&lt;br /&gt;
&lt;br /&gt;
== SSH Keys ==&lt;br /&gt;
Access is provided via ssh keys and not passwords.&lt;br /&gt;
&lt;br /&gt;
Users are expected to take security of ssh private keys very seriously.&lt;br /&gt;
&lt;br /&gt;
* Private keys are '''strictly private to an individual'''. If they are disclosed to '''anyone''', under '''any''' circumstances please let IT know '''AT ONCE'''. It's easy to change them.&lt;br /&gt;
* You should have a dedicated ssh key for use for meego.com access&lt;br /&gt;
* ssh keys '''must''' be protected by a strong pass phrase (ssh-agent and ssh-add makes this un-noticeable)&lt;br /&gt;
* ssh keys use '''must''' be confirmed before every use (ssh-add -c). This is usually a simple pop-up from ssh-askpass&lt;br /&gt;
* ssh private keys ''must never'' be checked into a git repo which could compromise them&lt;br /&gt;
* ssh public keys ''must never'' be obtained from a git repo which could lead to loose access controls&lt;br /&gt;
* Onward access from the jump host is by tunnel - no ssh or agent-forwarding&lt;br /&gt;
* The comment on your public key should be descriptive, such as an email address, as much as your pet name is funny, its not to the point.&lt;br /&gt;
* If you use a mobile device(phone, tablet, etc) please consider using a separate key for that device and not accessing critical infrastructure with that mobile device directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have any problems with implementing any of these rules then please talk to one of the IT team - they want you to get it right and will do their best to help you. (And it may help to know that they too will have struggled with ssh once upon a time!)&lt;br /&gt;
&lt;br /&gt;
If you think you need an exception to a rule (eg group access, password access, unattended/cron access etc) then we'll be glad to help solve the problem you face. It's much better to get help to implement a secure solution than to &amp;quot;just&amp;quot; do something to make it work.&lt;br /&gt;
&lt;br /&gt;
The following snippet can be usefully added to your .ssh/config&lt;br /&gt;
 Host *.meego.com&lt;br /&gt;
     User &amp;lt;USER&amp;gt;&lt;br /&gt;
     IdentityFile ~/.ssh/id_rsa_meego&lt;br /&gt;
     ServerAliveInterval 60&lt;br /&gt;
     ForwardAgent no&lt;br /&gt;
 &lt;br /&gt;
 Host access.meego.com&lt;br /&gt;
     ProxyCommand none&lt;br /&gt;
 &lt;br /&gt;
 Host *.in.meego.com&lt;br /&gt;
     ProxyCommand ssh -q access.meego.com netcat %h 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The strong passphrase means that if your computer is stolen then the attacker won't be able to use your key to access your account.&lt;br /&gt;
* The askpass confirmation means that if a man-in-the-middle attack is attempted then your agent should prompt you when you didn't just establish a connection. If this happens then refuse the request.&lt;br /&gt;
* Agent forwarding means a compromised jump host would be able to spoof an onward connection as your account&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
(repeated from [[Meego_IT#Contact_points|IT team contact section]]).&lt;br /&gt;
&lt;br /&gt;
The MeeGo IT team have 2 bug products: MeeGo IT Private and MeeGo IT. We use the private one for bugs which discuss secure or confidential information; sometimes we'll make a public bug private or a private bug public. The criteria are not well defined but in general we don't discuss specifics of our installation in public. Whilst we do not operate &amp;quot;security through obscurity&amp;quot;, nor do we claim to be infallible - limiting information means that when we make errors, the information is less likely to leak and the window that we have to rectify the error without discovery should be larger.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Policy</id>
		<title>Web infrastructure/Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Policy"/>
				<updated>2011-08-19T09:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Shell Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The policies on this page are aimed at administrative use of the system.&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
There are no firm guidelines for access to infrastructure systems. We operate a validated trust approach and require consensus from a number of members of the IT team to grant access.&lt;br /&gt;
&lt;br /&gt;
There are multiple levels of trust:&lt;br /&gt;
* No shell access : This is the norm. Very few people have shell accounts to any systems. There must be an '''extremely''' compelling reason to provide shell access.&lt;br /&gt;
* Shell user : When granted, access will normally be at this level. These users are given access to IT Private bugs if requested.&lt;br /&gt;
* VM root : In exceptional cases for highly trusted people with significant sysadmin knowledge we will provide root access to a virtual machine. Having root access means you take direct responsibility for the security of the machine.&lt;br /&gt;
* Superadmin : The superadmin team is the core IT team - invitation only :)&lt;br /&gt;
&lt;br /&gt;
== SSH Keys ==&lt;br /&gt;
Access is provided via ssh keys and not passwords.&lt;br /&gt;
&lt;br /&gt;
Users are expected to take security of ssh private keys very seriously.&lt;br /&gt;
&lt;br /&gt;
* Private keys are '''strictly private to an individual'''. If they are disclosed to '''anyone''', under '''any''' circumstances please let IT know '''AT ONCE'''. It's easy to change them.&lt;br /&gt;
* You should have a dedicated ssh key for use for meego.com access&lt;br /&gt;
* ssh keys '''must''' be protected by a strong pass phrase (ssh-agent and ssh-add makes this un-noticeable)&lt;br /&gt;
* ssh keys use '''must''' be confirmed before every use (ssh-add -c). This is usually a simple pop-up from ssh-askpass&lt;br /&gt;
* Onward access from the jump host is by tunnel - no ssh or agent-forwarding&lt;br /&gt;
* The comment on your public key should be descriptive, such as an email address, as much as your pet name is funny, its not to the point.&lt;br /&gt;
* If you use a mobile device(phone, tablet, etc) please consider using a separate key for that device and not accessing critical infrastructure with that mobile device directly.&lt;br /&gt;
* You'll be told the &lt;br /&gt;
&lt;br /&gt;
If you have any problems with implementing any of these rules then please talk to one of the IT team - they want you to get it right and will do their best to help you. (And it may help to know that they too will have struggled with ssh once upon a time!)&lt;br /&gt;
&lt;br /&gt;
If you think you need an exception to a rule (eg group access, password access, unattended/cron access etc) then we'll be glad to help solve the problem you face. It's much better to get help to implement a secure solution than to &amp;quot;just&amp;quot; do something to make it work.&lt;br /&gt;
&lt;br /&gt;
The following snippet can be usefully added to your .ssh/config&lt;br /&gt;
 Host *.meego.com&lt;br /&gt;
     User &amp;lt;USER&amp;gt;&lt;br /&gt;
     IdentityFile ~/.ssh/id_rsa_meego&lt;br /&gt;
     ServerAliveInterval 60&lt;br /&gt;
     ForwardAgent no&lt;br /&gt;
 &lt;br /&gt;
 Host access.meego.com&lt;br /&gt;
     ProxyCommand none&lt;br /&gt;
 &lt;br /&gt;
 Host *.in.meego.com&lt;br /&gt;
     ProxyCommand ssh -q access.meego.com netcat %h 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The strong passphrase means that if your computer is stolen then the attacker won't be able to use your key to access your account.&lt;br /&gt;
* The askpass confirmation means that if a man-in-the-middle attack is attempted then your agent should prompt you when you didn't just establish a connection. If this happens then refuse the request.&lt;br /&gt;
* Agent forwarding means a compromised jump host would be able to spoof an onward connection as your account&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Policy</id>
		<title>Web infrastructure/Policy</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Policy"/>
				<updated>2011-08-17T22:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add some security policy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The policies on this page are aimed at administrative use of the system.&lt;br /&gt;
&lt;br /&gt;
== Shell Access ==&lt;br /&gt;
&lt;br /&gt;
There are no firm guidelines for access to infrastructure systems. We operate a validated trust approach and require consensus from a number of members of the IT team to grant access.&lt;br /&gt;
&lt;br /&gt;
There are multiple levels of trust:&lt;br /&gt;
* No shell access : This is the norm. Very few people have shell accounts to any systems. There must be an '''extremely''' compelling reason to provide shell access.&lt;br /&gt;
* Shell user : When granted, access will normally be at this level.&lt;br /&gt;
* VM root : In exceptional cases for highly trusted people with significant sysadmin knowledge we will provide root access to a virtual machine. Having root access means you take direct responsibility for the security of the machine.&lt;br /&gt;
* Superadmin : The superadmin team is the core IT team - invitation only :)&lt;br /&gt;
&lt;br /&gt;
== SSH Keys ==&lt;br /&gt;
Access is provided via ssh keys and not passwords.&lt;br /&gt;
&lt;br /&gt;
Users are expected to take security of ssh private keys very seriously.&lt;br /&gt;
&lt;br /&gt;
* Private keys are '''strictly private to an individual'''. If they are disclosed to '''anyone''', under '''any''' circumstances please let IT know '''AT ONCE'''. It's easy to change them.&lt;br /&gt;
* You should have a dedicated ssh key for use for meego.com access&lt;br /&gt;
* ssh keys '''must''' be protected by a strong pass phrase (ssh-agent and ssh-add makes this un-noticeable)&lt;br /&gt;
* ssh keys use '''must''' be confirmed before every use (ssh-add -c). This is usually a simple pop-up from ssh-askpass&lt;br /&gt;
* Onward access from the jump host is by tunnel - no ssh or agent-forwarding&lt;br /&gt;
* You'll be told the &lt;br /&gt;
&lt;br /&gt;
If you have any problems with implementing any of these rules then please talk to one of the IT team - they want you to get it right and will do their best to help you. (And it may help to know that they too will have struggled with ssh once upon a time!)&lt;br /&gt;
&lt;br /&gt;
If you think you need an exception to a rule (eg group access, password access, unattended/cron access etc) then we'll be glad to help solve the problem you face. It's much better to get help to implement a secure solution than to &amp;quot;just&amp;quot; do something to make it work.&lt;br /&gt;
&lt;br /&gt;
The following snippet can be usefully added to your .ssh/config&lt;br /&gt;
 Host *.meego.com&lt;br /&gt;
     User &amp;lt;USER&amp;gt;&lt;br /&gt;
     IdentityFile ~/.ssh/id_rsa_meego&lt;br /&gt;
     ServerAliveInterval 60&lt;br /&gt;
     ForwardAgent no&lt;br /&gt;
 &lt;br /&gt;
 Host access.meego.com&lt;br /&gt;
     ProxyCommand none&lt;br /&gt;
 &lt;br /&gt;
 Host *.in.meego.com&lt;br /&gt;
     ProxyCommand ssh -q access.meego.com netcat %h 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The strong passphrase means that if your computer is stolen then the attacker won't be able to use your key to access your account.&lt;br /&gt;
* The askpass confirmation means that if a man-in-the-middle attack is attempted then your agent should prompt you when you didn't just establish a connection. If this happens then refuse the request.&lt;br /&gt;
* Agent forwarding means a compromised jump host would be able to spoof an onward connection as your account&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure</id>
		<title>Web infrastructure</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure"/>
				<updated>2011-08-17T21:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Request new services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OSUOSL Migration ==&lt;br /&gt;
A plan is being drawn up for the move of all MeeGo services to OSUOSL for hosting. Look for details of the plan: [[Web_infrastructure/Planning_Security_Review|Planning and Security Review]]&lt;br /&gt;
&lt;br /&gt;
== Request new services ==&lt;br /&gt;
[[Web_infrastructure/Processes|Here]] you can find a description about how to request new services or change requests to existing services.&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
We have some [[Web_infrastructure/Policy|policies]] related to services.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Services ==&lt;br /&gt;
Like most open source projects, MeeGo has a vast number of services that keep the community functioning on a day to day basis. As the number of services grows and the number of people involved in administering these services grows, it's important to closely track. Below is a list of the various services with links to details about these services.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
!Service&lt;br /&gt;
!Platform&lt;br /&gt;
!Current Host&lt;br /&gt;
!Status&lt;br /&gt;
!Owners&lt;br /&gt;
!Details&lt;br /&gt;
|- &lt;br /&gt;
|http://meego.com 	&lt;br /&gt;
|Drupal 6.x 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/mshaver Mike Shaver] [http://meego.com/users/qgil Quim Gil]&lt;br /&gt;
|[[Web_infrastructure/Meego.com|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://help.meego.com 	&lt;br /&gt;
|Drupal 6.x 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/mshaver Mike Shaver] [http://meego.com/users/noel Noel Arnold]&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|[[Main Page|http://wiki.meego.com]] 	&lt;br /&gt;
|MediaWiki 1.16.2 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|??	&lt;br /&gt;
|[[Web_infrastructure/Help.meego.com|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://bugs.meego.com 	&lt;br /&gt;
|Bugzilla 3.6x 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/ericlr Eric Le Roux] [http://meego.com/users/may May Xie]&lt;br /&gt;
|[[Quality/Error_Management|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://apidocs.meego.com 	&lt;br /&gt;
|Static HTML/files 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/bspencer Bob Spencer]	&lt;br /&gt;
|[[SDK|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://lists.meego.com 	&lt;br /&gt;
|Mailman 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/agretzinger Adam Gretzinger]&lt;br /&gt;
|[[Mailing list guidelines|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://forum.meego.com 	&lt;br /&gt;
|vBulletin 	&lt;br /&gt;
|external community hosted 	&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/reggie Reggie Suplido]	&lt;br /&gt;
|[[Web_infrastructure/Forum|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://planet.meego.com 	&lt;br /&gt;
|Midgard 	&lt;br /&gt;
|OSU&lt;br /&gt;
|active&lt;br /&gt;
|[http://meego.com/users/bergie Henri Bergius]	 	&lt;br /&gt;
|[[Web_infrastructure/Planet.meego.com|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://crashdb.meego.com 	&lt;br /&gt;
|Custom PHP 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|active &lt;br /&gt;
|		&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|developer.meego.com 	&lt;br /&gt;
|Drupal 6.x 	&lt;br /&gt;
|Offsite/moving to OSU or Softlayer&lt;br /&gt;
|In Review&lt;br /&gt;
|[http://meego.com/users/macron Ronan Mac Laverty/macron,maclaver(IRC)] 	&lt;br /&gt;
|[[Application developer site|details]]&lt;br /&gt;
|-&lt;br /&gt;
|[http://download.meego.com download.meego.com]&lt;br /&gt;
|Generic Web Server, Serves Intermediate Builds&lt;br /&gt;
|OSU&lt;br /&gt;
|active &lt;br /&gt;
|[http://meego.com/users/agretzinger Adam Gretzinger]&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|Metrics Website 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|proposed&lt;br /&gt;
|	 	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|Conference Website http://conference2010.meego.com/ 	&lt;br /&gt;
|Drupal 6.x 	&lt;br /&gt;
|none	&lt;br /&gt;
|active/in process&lt;br /&gt;
|	 	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|Meeting IRC Bot 	&lt;br /&gt;
|[http://wiki.debian.org/MeetBot MeetBot]	&lt;br /&gt;
|Stskeeps' shell in DK&lt;br /&gt;
|active/should migrate to central location &lt;br /&gt;
|		&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|povbot IRC bot (#meego) + web logs&lt;br /&gt;
|Supybot + [http://mg.pov.lt/irclog2html/ irclog2html]&lt;br /&gt;
|mgedmin&lt;br /&gt;
|active/should migrate to central location &lt;br /&gt;
|		&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|merbot IRC bot (#meego-arm etc) + web logs&lt;br /&gt;
|irssi&lt;br /&gt;
|Stskeeps' shell in DK&lt;br /&gt;
|active/should migrate to central location/merge with meetbot&lt;br /&gt;
|	&lt;br /&gt;
|details&lt;br /&gt;
|- &lt;br /&gt;
| MeeBot IRC bot&lt;br /&gt;
| supybot + [http://mg.pov.lt/irclog2html/ irclog2html] &lt;br /&gt;
| OSUOSL&lt;br /&gt;
| proposed, centralisation of meeting bot and logging&lt;br /&gt;
|	&lt;br /&gt;
| [[Web_infrastructure/IRC|details]]&lt;br /&gt;
|-&lt;br /&gt;
|build.pub.meego.com api.pub.meego.com&lt;br /&gt;
|Community OBS 	&lt;br /&gt;
|OSU servers&lt;br /&gt;
|beta setup on spare hardware, currently setting up servers at OSU. &lt;br /&gt;
|		&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|Community Apps Website 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|proposed &lt;br /&gt;
|		&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|http://meego.gitorious.org 	&lt;br /&gt;
|Gitorious 	&lt;br /&gt;
|http://meego.gitorious.org 	&lt;br /&gt;
|active 	&lt;br /&gt;
|	&lt;br /&gt;
|[[Web_infrastructure/Meego.gitorious.org|details]]&lt;br /&gt;
|-&lt;br /&gt;
|http://meego.transifex.org 	&lt;br /&gt;
|Transifex 	&lt;br /&gt;
|http://meego.transifex.org 	&lt;br /&gt;
|active/in process 	&lt;br /&gt;
|	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|http://mxr.meego.com 	&lt;br /&gt;
|?? 	&lt;br /&gt;
|http://mxr.moego.org 	&lt;br /&gt;
|active 	&lt;br /&gt;
|	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|http://tl.meego.com 	&lt;br /&gt;
|http://www.teamst.org/ 	&lt;br /&gt;
|OSU 	&lt;br /&gt;
|active 	&lt;br /&gt;
|[http://meego.com/users/jennycao Jenny Cao]	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|http://hg.meego.com&lt;br /&gt;
|http://mercurial.selenic.com/&lt;br /&gt;
|Bitbucket&lt;br /&gt;
|none&lt;br /&gt;
|	&lt;br /&gt;
|details&lt;br /&gt;
|-&lt;br /&gt;
|Patchwork&lt;br /&gt;
|http://ozlabs.org/~jk/projects/patchwork/&lt;br /&gt;
|none&lt;br /&gt;
|proposed&lt;br /&gt;
|	&lt;br /&gt;
|[http://lists.meego.com/pipermail/meego-dev/2010-August/005169.html details]&lt;br /&gt;
|-&lt;br /&gt;
|ots.meego.com&lt;br /&gt;
|http://gitorious.org/qa-tools/ots&lt;br /&gt;
|OSU&lt;br /&gt;
|Decomissioned&lt;br /&gt;
|&lt;br /&gt;
|[[Quality/QA-tools/OTS|details]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Meego_IT</id>
		<title>Meego IT</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Meego_IT"/>
				<updated>2011-08-17T20:41:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add note on new IT bug policy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MeeGo IT team takes care of the infrastructure in meego.com located at Oregon State University hosting center. It's devoted to offer the best service to the Community and to the other teams so that everyone can do his/her job without worrying nor caring about the underlying layers of the stack.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/stezz Stefano Mosconi]'''  is the MeeGo IT manager. He is responsible for the MeeGo IT team, making sure that we don't break too much stuff, the services are up, running and fast and people using them are happy.&lt;br /&gt;
* '''[http://meego.com/users/mshaver Michael Shaver]''' is the MeeGo webmaster, he takes care of the websites content down to the spelling of the words and to the colors of the pages. He installs weird Drupal modules in his spare time and tests them to see if they work.&lt;br /&gt;
* '''[http://meego.com/users/lbt David Greaves]''' is the guy who reminds us to clean up after we made some mess, document the stuff and in his spare time takes care of the community OBS infra. He does also IT architecure, dances tango and speaks with a funny british accent.&lt;br /&gt;
* '''[http://meego.com/users/xfade Niels Breet]''' is the guy who knows a lot of stuff about a lot of IT things but he doesn't want to be called IT engineer, sysadmin nor architect, X-Fade is enough. He's also the maemo.org webmaster and brings to Meego IT a lot of his expertise in community related matters. Taking care of community OBS and a lot of the other infrastructure.&lt;br /&gt;
* '''[http://meego.com/users/adamgretzinger Adam Gretzinger]''' is the Meego Sysadmin, he has the keys to our realm and does a zillion of things, from plugging/unplugging cables, to tagging servers, to installing machines, to configuring web servers, to debugging network problems... etc.&lt;br /&gt;
* '''[http://meego.com/users/maxivano Maxim Ivanov]''' is the other Meego Sysadmin, he also does a lot of stuff, architecture, installation, testing, monitoring, debugging but can't unplug cables as he's far away from the buttons' room.&lt;br /&gt;
* '''[http://meego.com/users/pierce Dean Pierce]''' is the Meego IT security engineer. He reminds us that we can trust no one, not even ourselves.&lt;br /&gt;
&lt;br /&gt;
== Supported servers and services ==&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of services in [[Web_infrastructure |this separate page]] with some details about them&lt;br /&gt;
&lt;br /&gt;
== Processes ==&lt;br /&gt;
&lt;br /&gt;
You can find some of the processes [[Web_infrastructure/Processes | here]].&lt;br /&gt;
&lt;br /&gt;
== Contact points ==&lt;br /&gt;
&lt;br /&gt;
We have a [mailto:meego-it@lists.meego.com mailing list] where you can talk to the team in case you need us to know something or you want to know something. You can subscribe there if you want to have an idea of what we discuss in our weekly meetings.&lt;br /&gt;
&lt;br /&gt;
Also in case of problems with the websites or the IT in general you can enter a bug in [https://bugs.meego.com/enter_bug.cgi?classification=MeeGo%20Community%20Infrastructure any of our components in bugs.meego.com]&lt;br /&gt;
&lt;br /&gt;
The MeeGo IT team have 2 bug products: MeeGo IT Private and MeeGo IT. We use the private one for bugs which discuss secure or confidential information; sometimes we'll make a public bug private or a private bug public. The criteria are not well defined but in general we don't discuss specifics of our installation in public. Whilst we do not operate &amp;quot;security through obscurity&amp;quot;, nor do we claim to be infallible - limiting information means that when we make errors, the information is less likely to leak and the window that we have to rectify the error without discovery should be larger.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure</id>
		<title>Release Infrastructure</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure"/>
				<updated>2011-08-05T11:25:13Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add team information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MINT =&lt;br /&gt;
MINT (MeeGo Integration) is a set of integrated tools, that was created with the goal of creating a CI system around OBS for enabling vendors to build meego products.&lt;br /&gt;
It provides a business process automation system, interacting with many different systems such as bugzilla and OBS to facilitate product building.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
* MINT (MeeGo Integration) is a platform composed of integrated tools, that was created with the goal of creating a CI system around OBS for enabling vendors to build meego products.&lt;br /&gt;
* MINT provides a business process automation system, interacting with many different systems such as bugzilla and OBS to facilitate product building.&lt;br /&gt;
* MINT is a platform not a product, delivering a base to build a CI infrastructure to suit each customer's need.&lt;br /&gt;
* MINT out-of-the-box provides an end-to-end build and release infrastructure for making linux based products.&lt;br /&gt;
* Different deployments may have additional systems and MINT is designed to allow components to be replaced or added to fulfill different needs.&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
* Covers all the activities involved in continuous integration&lt;br /&gt;
** Building through integration with OBS (http://en.opensuse.org//Portal:Build_Service)&lt;br /&gt;
** publishing and notifictaions&lt;br /&gt;
** Creation of installable/flashable images&lt;br /&gt;
** On-device Testing, through integration with OTS (http://wiki.meego.com/Quality/QA-tools/OTS/About)&lt;br /&gt;
** Error and feature management, through bugzilla integration (www.bugzilla.org)&lt;br /&gt;
** Reporting on releases progress&lt;br /&gt;
* Distributed architecture means no single point of failure and better resource management&lt;br /&gt;
* Massive parallelism, all the components of the system run multiple parallel jobs serving several parallel workflows&lt;br /&gt;
* Parallel workflows, means you can run many different workflows servicing multiple products&lt;br /&gt;
* Simple workflow description language&lt;br /&gt;
* Reliable&lt;br /&gt;
** based on mature, production level opensource projects&lt;br /&gt;
** Reliable messaging using the AMQP standard, means no events will be lost&lt;br /&gt;
** Workflow management based on ruote, an enterprise grade workflow engine&lt;br /&gt;
* Robust&lt;br /&gt;
** Live migration of workflows, means you don't need to bring your system down for changing your workflow. Simply deploy your workflow and it gets loaded without disruption to currently running jobs&lt;br /&gt;
* Extensible. The system has a minimal core and all operations and functions are implemented as plugins ([[/BOSS/Participants|Participants]])&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
how does it all fit together&lt;br /&gt;
&lt;br /&gt;
== Deployment ==&lt;br /&gt;
=== Joining the Team ===&lt;br /&gt;
MINT is a set of open source tools and if you use it you should consider yourself a part of the team.&lt;br /&gt;
&lt;br /&gt;
The primary communication tools are irc (#meego) and email (http://lists.meego.com/listinfo/meego-distribution-tools)&lt;br /&gt;
&lt;br /&gt;
There are no bug components in bugzilla yet.&lt;br /&gt;
&lt;br /&gt;
It's important to learn how to influence the project in order to get the best out of it and this is primarily done through participation&lt;br /&gt;
on the mailing list and in irc. The mailing list is also used for mutual support, to report security issues and discuss bugs.&lt;br /&gt;
&lt;br /&gt;
=== Planning ===&lt;br /&gt;
* decide on a process, write it&lt;br /&gt;
* identify needed participants&lt;br /&gt;
=== Installation ===&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[/BOSS|Build Orchestration BOSS]]&lt;br /&gt;
** [[/BOSS_Launcher|Launcher documentation]]&lt;br /&gt;
** [[/BOSS_Process|Process documentation]]&lt;br /&gt;
** [[/BOSS_Testing|Testing]]&lt;br /&gt;
** [[/BOSS/Standard_workflow|standard workflow]]&lt;br /&gt;
* [[/REVS|Release reporting REVS]]&lt;br /&gt;
* [[/IMG|Image Creation IMG]]&lt;br /&gt;
* [[/BOSS_Participant|Participant documentation]]&lt;br /&gt;
* [[/BOSS/Participants|Participants]]&lt;br /&gt;
* [[/SKYNET|Skynet]]&lt;br /&gt;
&lt;br /&gt;
== [[/Packaging|Release team packaging information]] ==&lt;br /&gt;
&lt;br /&gt;
== misc. ==&lt;br /&gt;
* [[/devroot|devroot]]&lt;br /&gt;
* [[/BOSS/Installation|BOSS and Skynet]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/MeeGo_Apps/Problem_Statement</id>
		<title>MeeGo Apps/Problem Statement</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/MeeGo_Apps/Problem_Statement"/>
				<updated>2011-08-02T08:22:51Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: discussion links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Apps - options, pros and cons =&lt;br /&gt;
Discussion on mailing lists and [http://forum.meego.com/showthread.php?p=27975 MeeGo.com forum]&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
The Linux Foundation (LF) owns the MeeGo trademark and hosts the MeeGo.com infrastructure through an arrangement with OSU. They have zero involvement in the running of the infrastructure. &lt;br /&gt;
&lt;br /&gt;
Community OBS (C.OBS) is a hosted service that compiles source packaged to binary packages and then distributes the binaries. It is located at https://build.pub.meego.com/ and has been operational since August 2010.&lt;br /&gt;
&lt;br /&gt;
The MeeGo community are developing a service known as apps.meego.com&lt;br /&gt;
&lt;br /&gt;
This service is a web application which indexes certain community vetted, OSI-approved-licensed applications built by individual community members at the C.OBS&lt;br /&gt;
&lt;br /&gt;
LF have refused permission to :&lt;br /&gt;
* use the domain apps.meego.com or apps.for.meego.com to identify the service&lt;br /&gt;
* host the apps.meego.com service within the MeeGo infrastructure at OSU&lt;br /&gt;
&lt;br /&gt;
LF have not (currently) refused:&lt;br /&gt;
* the continued operation of the C.OBS and the MeeGo.com infrastructure to build and distribute apps.&lt;br /&gt;
&lt;br /&gt;
In private conversations the LF have justified the refusal as:&lt;br /&gt;
* If an app is accused of violating a patent then the LF could be at legal risk from linking to it.&lt;br /&gt;
* This only applies to individually contributed apps and not to corporate apps because there is a risk of 'dark corners' where an app may be published for many years without the hypothetical violation being discovered.&lt;br /&gt;
&lt;br /&gt;
LF are (currently) happy to distribute all binaries produced by the C.OBS. [editors note: no, this doesn't make sense to him but it's not a typo - it may be a misunderstanding]&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
These possible solutions are put forward for the community to consider.&lt;br /&gt;
&lt;br /&gt;
=== Retain apps.meego.com and C.OBS ===&lt;br /&gt;
Use existing infrastructure and host apps.meego.com through LF and at OSU.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* Expected solution&lt;br /&gt;
* Maintains integrity of MeeGo project&lt;br /&gt;
* Linux Foundation seen to support and host Opensource Apps&lt;br /&gt;
* Single organisational unit (resource, infrastructure, legal entity)&lt;br /&gt;
* Potentiallly hundreds of thousands of users will download MeeGo apps for the first production devices with the MeeGo label (the N9/950) from meego.com.&lt;br /&gt;
* This service will continue to be available for as long as the LF wants to support the MeeGo opensource community.&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF at incremental  risk for linking to possibly patent-infringing apps (over and above existing risk for distributing same apps and linking to and distributing UX, wifi, bluetooth, and other OSS apps included in MeeGo)&lt;br /&gt;
* LF have rejected this option and have said they do not have the resource at this time to provide a statement giving their reasons.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* Authors of Apps to be indexed in apps.meego.com enter some kind of legal agreement that is compatible with whatever OSI license the App has to minimise LF's exposure to risk.&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
If LF is happy to continue to *distribute* apps from repo.pub.meego.com and to allow the community OBS to provide index/search/linking services then it is not clear what additional risk is taken by hosting apps.meego.com&lt;br /&gt;
&lt;br /&gt;
=== Move apps.meego.com to apps.formeego.org ===&lt;br /&gt;
Create a new set of infrastructure in EU under the formeego.org domain.&lt;br /&gt;
Leave C.OBS app building and distribution at meego.com&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* LF not exposed to legal risk of search/linking from apps.formeego.org&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF still exposed to legal risk of distribution and search/linking from build.pub.meego.com&lt;br /&gt;
* LF seen as 'preventing the distribution of OSI apps and sucumbing to patent FUD'&lt;br /&gt;
* MeeGo project members forbidden from linking to apps in meego.com domains?&lt;br /&gt;
* Very unclear position for:&lt;br /&gt;
** any Community Build and distribution indivdual users&lt;br /&gt;
** any Community Build and distribution projects (N900 CE)&lt;br /&gt;
** home projects in core MeeGo Build and distribution&lt;br /&gt;
** use of meego.com identity at forapps.meego.com&lt;br /&gt;
** use of bugs.meego.com for community apps&lt;br /&gt;
* Duplicate infrastructure&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
No idea how this (currently favoured) solution solves the stated problem. Makes one wonder if the problem to be solved is openly stated.&lt;br /&gt;
&lt;br /&gt;
=== Move apps.meego.com and Community Build and Distribution to formeego.org ===&lt;br /&gt;
As previous but also move Community Build and Distribution systems.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* LF not exposed to legal risk of search/linking or distribution of apps.formeego.org&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF seen as unwilling to support OSS apps&lt;br /&gt;
* MeeGo possibly seen as unwilling to support community apps, projects and community contributions&lt;br /&gt;
* Duplicate infrastructure&lt;br /&gt;
* Very unclear position for&lt;br /&gt;
** use of meego.com identity at forapps.meego.com&lt;br /&gt;
** apps and any projects for meego&lt;br /&gt;
&lt;br /&gt;
Comment:&lt;br /&gt;
Probably the solution most favoured by Android, Apple and Microsoft. Will almost certainly alienate the entire OSS community from MeeGo.&lt;br /&gt;
&lt;br /&gt;
=== Move all MeeGo infrastructure to formeego.org and away from LF ===&lt;br /&gt;
&lt;br /&gt;
This sounds more dramatic than it really is.&lt;br /&gt;
&lt;br /&gt;
Establish a non-profit organisation. Fund organisation to be able to support hosting and distribution services.&lt;br /&gt;
&lt;br /&gt;
Retain minimal infrastructure at LF to support: www.meego.com and repos.meego.com&lt;br /&gt;
&lt;br /&gt;
Nominally move all meego.com infrastructure to formeego.org. This includes core OBS, community OBS, mailing lists, wiki, Bugzilla etc&lt;br /&gt;
&lt;br /&gt;
Retain the same community organisation - including the TSG, CO, IT etc etc.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* The LF has a clear role as a the trademark and compliance owner for MeeGo project&lt;br /&gt;
* MeeGo.com is the place to distribute final and compliant code&lt;br /&gt;
* formeego.org does not expose LF to any legal risk&lt;br /&gt;
* LF is not seen as succumbing to FUD&lt;br /&gt;
* Non-profit is not an attractive legal target&lt;br /&gt;
* The project and community take complete charge of their activities&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* More sleepless nights for the IT team&lt;br /&gt;
* Bookmarks become invalid (eventually - this could be phased)&lt;br /&gt;
* .... none really&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
* use another name (bikeshed)&lt;br /&gt;
* Leave infrastructure physically in OSU.&lt;br /&gt;
* Move infrastructure /organisation to a different legal jurisdiction&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
&lt;br /&gt;
This approach is accepted in the OSS world: Fedora / RedHAT and openSuSE / SuSE being two of the better known examples. The LF do not need to get involved in the normal operations of the project and are clearly manage the trademark and compliance.&lt;br /&gt;
&lt;br /&gt;
Given the LF's inability to support community software distribution&lt;br /&gt;
this is, IMHO, the best medium-term approach although it does sound&lt;br /&gt;
slightly melodramatic.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/MeeGo_Apps</id>
		<title>MeeGo Apps</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/MeeGo_Apps"/>
				<updated>2011-08-02T07:56:50Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: link to apps.meego.com problem statement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MeeGo Community Apps is the repository where open source software created by the MeeGo community can be found. Developers can build their applications on the MeeGo Community OBS, a sophisticated build system. These applications can be published into the end-user facing Apps repository after certain conditions have been met. This project falls under the responsibility of the [[Community Office]]. The LF have refused to allow 'apps' in the meego.com namespace; the [[/Problem Statement|problem statement]] tries to explain more.&lt;br /&gt;
&lt;br /&gt;
= Accessing Apps = &lt;br /&gt;
&lt;br /&gt;
* [http://apps-beta.meego.com Apps Beta Web Interface]&lt;br /&gt;
* [http://apps-beta.meego.com/ocs/providers.xml Open Collaboration Services (OCS) API provider file for Apps]&lt;br /&gt;
* [http://gitorious.org/meego-community-extras-client Client code in Gitorious]&lt;br /&gt;
* [http://github.com/nemein Server code on GitHub]&lt;br /&gt;
&lt;br /&gt;
= Process =&lt;br /&gt;
&lt;br /&gt;
A developer will need to [[Build_Infrastructure/Community_Builder#Getting_Access|request access]] to the Community OBS. Once the account has been activated, the developer can create a 'home' project. Inside this project one can build packages against any project(repository) in the OBS. This allows the developer to build an application against the Apps repository and make sure there are no dependency issues or other problems. &lt;br /&gt;
&lt;br /&gt;
Once a developer determines that the application is ready for end-users, the package can be promoted to Apps-testing. The promotion request triggers some automated tests on the package. The Apps-testing repository is intended for [[MeeGo Apps/QA|stability testing and community QA]]. If the package meets all promotion criteria, it will be moved to the Apps repository. This makes it available for every end user with a MeeGo device, provided they have enabled the repository in their garage client. &lt;br /&gt;
&lt;br /&gt;
== Supporting Process References ==&lt;br /&gt;
* [[Build_Infrastructure/Community_Builder#Getting_Access|Getting access to the Community OBS]]&lt;br /&gt;
* [[Packaging/Guidelines|Packaging Guidelines]]&lt;br /&gt;
* [[MeeGo Apps/QA|QA Process]]&lt;br /&gt;
* [[MeeGo_Apps/repositories|Repository layout description]]&lt;br /&gt;
&lt;br /&gt;
= Community Apps Team = &lt;br /&gt;
&lt;br /&gt;
* Lead Developer: Niels Breet&lt;br /&gt;
* Client Application: Martin Grimme&lt;br /&gt;
* Web Site: Ferenc Szekely&lt;br /&gt;
* OCS Interface: Henri Bergius&lt;br /&gt;
* Build Service: David Greaves&lt;br /&gt;
&lt;br /&gt;
== Community Apps Volunteer Team ==&lt;br /&gt;
&lt;br /&gt;
* Graphics: Tim Samoff&lt;br /&gt;
&lt;br /&gt;
== Team Communication Channels ==&lt;br /&gt;
* Use the [http://lists.meego.com/listinfo/meego-community MeeGo-Community Mailing List] for questions and discussion.&lt;br /&gt;
* File bugs in the [https://bugs.meego.com/enter_bug.cgi?product=Community%20Apps Community Apps Component]&lt;br /&gt;
* Ask questions in the #meego IRC Channel&lt;br /&gt;
&lt;br /&gt;
= Plans and Schedule = &lt;br /&gt;
&lt;br /&gt;
Working on:&lt;br /&gt;
&lt;br /&gt;
W26:&lt;br /&gt;
* Automatic import/delete packages in MeeGo Apps by BOSS participant signaling (niels)&lt;br /&gt;
* OCS interface additions: commenting and voting (ferenc/henri)&lt;br /&gt;
* List apps in testing queue (ferenc)&lt;br /&gt;
* QA result signaling to BOSS (niels/david)&lt;br /&gt;
* Configure Apps build targets in OBS, cleanup old build targets (niels)&lt;br /&gt;
* Document Apps submit process (niels)&lt;br /&gt;
&lt;br /&gt;
Open issues (help appreciated):&lt;br /&gt;
&lt;br /&gt;
Documentation:&lt;br /&gt;
* Document QA process&lt;br /&gt;
&lt;br /&gt;
Design:&lt;br /&gt;
* Front page design (Mike?/Tim)&lt;br /&gt;
* Icons for App categories&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/MeeGo_Apps/Problem_Statement</id>
		<title>MeeGo Apps/Problem Statement</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/MeeGo_Apps/Problem_Statement"/>
				<updated>2011-08-02T07:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Describe apps.meego.com problem statement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Apps - options, pros and cons =&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
The Linux Foundation (LF) owns the MeeGo trademark and hosts the MeeGo.com infrastructure through an arrangement with OSU. They have zero involvement in the running of the infrastructure. &lt;br /&gt;
&lt;br /&gt;
Community OBS (C.OBS) is a hosted service that compiles source packaged to binary packages and then distributes the binaries. It is located at https://build.pub.meego.com/ and has been operational since August 2010.&lt;br /&gt;
&lt;br /&gt;
The MeeGo community are developing a service known as apps.meego.com&lt;br /&gt;
&lt;br /&gt;
This service is a web application which indexes certain community vetted, OSI-approved-licensed applications built by individual community members at the C.OBS&lt;br /&gt;
&lt;br /&gt;
LF have refused permission to :&lt;br /&gt;
* use the domain apps.meego.com or apps.for.meego.com to identify the service&lt;br /&gt;
* host the apps.meego.com service within the MeeGo infrastructure at OSU&lt;br /&gt;
&lt;br /&gt;
LF have not (currently) refused:&lt;br /&gt;
* the continued operation of the C.OBS and the MeeGo.com infrastructure to build and distribute apps.&lt;br /&gt;
&lt;br /&gt;
In private conversations the LF have justified the refusal as:&lt;br /&gt;
* If an app is accused of violating a patent then the LF could be at legal risk from linking to it.&lt;br /&gt;
* This only applies to individually contributed apps and not to corporate apps because there is a risk of 'dark corners' where an app may be published for many years without the hypothetical violation being discovered.&lt;br /&gt;
&lt;br /&gt;
LF are (currently) happy to distribute all binaries produced by the C.OBS. [editors note: no, this doesn't make sense to him but it's not a typo - it may be a misunderstanding]&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
These possible solutions are put forward for the community to consider.&lt;br /&gt;
&lt;br /&gt;
=== Retain apps.meego.com and C.OBS ===&lt;br /&gt;
Use existing infrastructure and host apps.meego.com through LF and at OSU.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* Expected solution&lt;br /&gt;
* Maintains integrity of MeeGo project&lt;br /&gt;
* Linux Foundation seen to support and host Opensource Apps&lt;br /&gt;
* Single organisational unit (resource, infrastructure, legal entity)&lt;br /&gt;
* Potentiallly hundreds of thousands of users will download MeeGo apps for the first production devices with the MeeGo label (the N9/950) from meego.com.&lt;br /&gt;
* This service will continue to be available for as long as the LF wants to support the MeeGo opensource community.&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF at incremental  risk for linking to possibly patent-infringing apps (over and above existing risk for distributing same apps and linking to and distributing UX, wifi, bluetooth, and other OSS apps included in MeeGo)&lt;br /&gt;
* LF have rejected this option and have said they do not have the resource at this time to provide a statement giving their reasons.&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* Authors of Apps to be indexed in apps.meego.com enter some kind of legal agreement that is compatible with whatever OSI license the App has to minimise LF's exposure to risk.&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
If LF is happy to continue to *distribute* apps from repo.pub.meego.com and to allow the community OBS to provide index/search/linking services then it is not clear what additional risk is taken by hosting apps.meego.com&lt;br /&gt;
&lt;br /&gt;
=== Move apps.meego.com to apps.formeego.org ===&lt;br /&gt;
Create a new set of infrastructure in EU under the formeego.org domain.&lt;br /&gt;
Leave C.OBS app building and distribution at meego.com&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* LF not exposed to legal risk of search/linking from apps.formeego.org&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF still exposed to legal risk of distribution and search/linking from build.pub.meego.com&lt;br /&gt;
* LF seen as 'preventing the distribution of OSI apps and sucumbing to patent FUD'&lt;br /&gt;
* MeeGo project members forbidden from linking to apps in meego.com domains?&lt;br /&gt;
* Very unclear position for:&lt;br /&gt;
** any Community Build and distribution indivdual users&lt;br /&gt;
** any Community Build and distribution projects (N900 CE)&lt;br /&gt;
** home projects in core MeeGo Build and distribution&lt;br /&gt;
** use of meego.com identity at forapps.meego.com&lt;br /&gt;
** use of bugs.meego.com for community apps&lt;br /&gt;
* Duplicate infrastructure&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
No idea how this (currently favoured) solution solves the stated problem. Makes one wonder if the problem to be solved is openly stated.&lt;br /&gt;
&lt;br /&gt;
=== Move apps.meego.com and Community Build and Distribution to formeego.org ===&lt;br /&gt;
As previous but also move Community Build and Distribution systems.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* LF not exposed to legal risk of search/linking or distribution of apps.formeego.org&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* LF seen as unwilling to support OSS apps&lt;br /&gt;
* MeeGo possibly seen as unwilling to support community apps, projects and community contributions&lt;br /&gt;
* Duplicate infrastructure&lt;br /&gt;
* Very unclear position for&lt;br /&gt;
** use of meego.com identity at forapps.meego.com&lt;br /&gt;
** apps and any projects for meego&lt;br /&gt;
&lt;br /&gt;
Comment:&lt;br /&gt;
Probably the solution most favoured by Android, Apple and Microsoft. Will almost certainly alienate the entire OSS community from MeeGo.&lt;br /&gt;
&lt;br /&gt;
=== Move all MeeGo infrastructure to formeego.org and away from LF ===&lt;br /&gt;
&lt;br /&gt;
This sounds more dramatic than it really is.&lt;br /&gt;
&lt;br /&gt;
Establish a non-profit organisation. Fund organisation to be able to support hosting and distribution services.&lt;br /&gt;
&lt;br /&gt;
Retain minimal infrastructure at LF to support: www.meego.com and repos.meego.com&lt;br /&gt;
&lt;br /&gt;
Nominally move all meego.com infrastructure to formeego.org. This includes core OBS, community OBS, mailing lists, wiki, Bugzilla etc&lt;br /&gt;
&lt;br /&gt;
Retain the same community organisation - including the TSG, CO, IT etc etc.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
* The LF has a clear role as a the trademark and compliance owner for MeeGo project&lt;br /&gt;
* MeeGo.com is the place to distribute final and compliant code&lt;br /&gt;
* formeego.org does not expose LF to any legal risk&lt;br /&gt;
* LF is not seen as succumbing to FUD&lt;br /&gt;
* Non-profit is not an attractive legal target&lt;br /&gt;
* The project and community take complete charge of their activities&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
* More sleepless nights for the IT team&lt;br /&gt;
* Bookmarks become invalid (eventually - this could be phased)&lt;br /&gt;
* .... none really&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
&lt;br /&gt;
* use another name (bikeshed)&lt;br /&gt;
* Leave infrastructure physically in OSU.&lt;br /&gt;
* Move infrastructure /organisation to a different legal jurisdiction&lt;br /&gt;
&lt;br /&gt;
Editors Comment:&lt;br /&gt;
&lt;br /&gt;
This approach is accepted in the OSS world: Fedora / RedHAT and openSuSE / SuSE being two of the better known examples. The LF do not need to get involved in the normal operations of the project and are clearly manage the trademark and compliance.&lt;br /&gt;
&lt;br /&gt;
Given the LF's inability to support community software distribution&lt;br /&gt;
this is, IMHO, the best medium-term approach although it does sound&lt;br /&gt;
slightly melodramatic.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Community_Office/Community_device_program/Nokia</id>
		<title>Community Office/Community device program/Nokia</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Community_Office/Community_device_program/Nokia"/>
				<updated>2011-08-01T17:56:58Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: update lbt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nokia Participation Details =&lt;br /&gt;
* Program Contact: [[User:qgil|Quim Gil]]&lt;br /&gt;
Update: Nokia N950 handsets are ready!  https://meego.com/community/device-program/devices/nokia-n9-devkit&lt;br /&gt;
&lt;br /&gt;
== N950 Devkit Program Details ==&lt;br /&gt;
* Device: Nokia N950 loaded with MeeGo 1.2 Harmattan &lt;br /&gt;
* Quantity: 250&lt;br /&gt;
* Additional Criteria / Terms: &lt;br /&gt;
** One submission per developer please&lt;br /&gt;
** Device to be loaned to participant for [period unspecified].&lt;br /&gt;
** May not be able to ship to certain countries / locations.&lt;br /&gt;
** Nokia employees are not eligible.&lt;br /&gt;
* Timeframe: distribution active.&lt;br /&gt;
&lt;br /&gt;
 '''QUESTIONS / ANSWERS &amp;amp; UPDATES:''' http://forum.meego.com/showthread.php?t=3597&lt;br /&gt;
&lt;br /&gt;
 '''[[N950 landing page]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
 '''WORK IN PROGRESS'''&lt;br /&gt;
&lt;br /&gt;
 For the sake of transparency and collaboration:&lt;br /&gt;
 * Please link your name to a page describing your Nokia N950 related work e.g. a wiki page.&lt;br /&gt;
 * Add here one line of text summarizing the project(s) and feature(s) you are concentrating. &lt;br /&gt;
 * We haven't done the 'Nokia employee' check yet. If you happen to be one, contact Quim Gil.&lt;br /&gt;
&lt;br /&gt;
=== Still pending ===&lt;br /&gt;
Participants accepted that still haven't received the N950.&lt;br /&gt;
&lt;br /&gt;
==== Still haven't ordered the N950 ====&lt;br /&gt;
You haven't completed the first steps at Nokia Developer and therefore they can't send you an N950. Please move fast before it's too late. You risk losing your chances of getting the device at all.&lt;br /&gt;
&lt;br /&gt;
* Vitaly Petrov (fruct.org/sketchit, fruct.org/gpw) '''ID Sent, Waiting for Lauhcpad account to be activated'''&lt;br /&gt;
* Si Howard&lt;br /&gt;
* Piotr Pokora (piotras) - '''ID Sent, Waiting for Launchpad account to be activated'''&lt;br /&gt;
** I am core developer of Midgard Content Repository which (as library) is used by different Maemo apps: Conboy, MaeCalories, Tablet of Adventure, Qaikuclient. Also I am maintainer of libgda and midgard packages (debs and rpms). From date of birth, I am interested in unified and simplified data access. And such, I am also going to develop for N950.&lt;br /&gt;
* Luke Bratch&lt;br /&gt;
* Tadej Novak '''ID sent''',  '''Launchpad:Accepted(06-Jul-2011)'''&lt;br /&gt;
** Porting my desktop IP TV player and schedule to Meego&lt;br /&gt;
* Evgeny Linsky (evlinsky) '''ID Sent, Waiting for Launchpad account to be activated'''&lt;br /&gt;
** Small apps on QtQuick for Meego/Symbian (http://projects.forum.nokia.com/icthub)&lt;br /&gt;
&lt;br /&gt;
==== N950 ordered, waiting to be sent ====&lt;br /&gt;
Please move your entry from the sections below if this is your case. Sort yourselves by country since this is most likely the reason why you haven't got the device yet.&lt;br /&gt;
&lt;br /&gt;
* Brazil - this is a special case, issue known.&lt;br /&gt;
** [[User:Lizardo|Anderson Lizardo Gomes]] (user: lizardo): ID sent, Accepted for the Nokia Developer Launchpad program (06-Jul-2011–06-Jul-2012), device ordered (07-Jul), waiting for DHL tracking number.&lt;br /&gt;
** [[User:Briglia|Anderson Briglia]] (user: briglia), ID sent | Launchpad:Accepted | Ordered:Yes(7th-July-2011) | Received/Sent:'''No'''&amp;lt;br/&amp;gt;&lt;br /&gt;
** [[User:Lfelipe|Luis Felipe Strano Moraes]] '''ID sent''', '''Launchpad accepted''' &amp;lt;br/&amp;gt;&lt;br /&gt;
** [[User:Rafael2k|Rafael Diniz]] '''ID sent''', '''Launchpad for individuals account active ''' &amp;lt;br&amp;gt;&lt;br /&gt;
*** I plan to develop FM RDS applications with focus in the new standards from RadioDNS like the RadioVIS (partly based in the already existent the N900-fmvis  http://code.google.com/p/n900-fmvis/).&lt;br /&gt;
*** I'm a member of a university radio station (Radio Muda FM, 88.5MHz) and my plan is to develop &amp;quot;real life&amp;quot; radio station applications.&amp;lt;br&amp;gt;&lt;br /&gt;
*** I'll also write one audio and one audio/video icecast2 clients. I can provide icecast2 server access for beta testers at radiolivre.org. I'll take ideas from softwares I already wrote for this purpose, like darknow (a gui for darkice, http://darksnow.radiolivre.org) and theorur, an audio/video icecast2 client (a gui for ffmpeg2theora, http://theorur.sarava.org), all using QT.&lt;br /&gt;
** [[User:vivijim|Rodrigo Vivi]] (user: vivijim), ID sent | Launchpad:Accepted | Ordered:Yes(7th-July-2011) | Received/Sent:'''No'''&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Netherlands&lt;br /&gt;
** Willem Liu '''ID Sent, applied to Launchpad, Device ordered 2011-08-01'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*New Zealand&lt;br /&gt;
**[http://wiki.meego.com/User:Mohannad Mohannad Hammadeh] '''Ordered N950 (July 8, 8:30am NZST) | N950SentEmail:No'''&lt;br /&gt;
*** Porting mPrayerTime to Meego-Harmattan, updating the UI and adding more features.&lt;br /&gt;
*** Writing new application ''Spotter'' - exercise tracking app&lt;br /&gt;
&lt;br /&gt;
*Norway&lt;br /&gt;
**[[User:karljohang|Karl Johan Grøttum]] '''Order: OID-053015''' | '''Device: Nokia N950''' | Porting [http://trac.itek.norut.no/n4c/wiki Hiker's app] from '''EU WP7''' project [http://www.n4c.eu/N4C-open-source-code.php N4C (open source code)]. Hiker's app runs on N810 and N900, and integrates [http://sourceforge.net/projects/dtn/ DTN2] (or [http://garage.maemo.org/projects/dtn/ DTN2 for Maemo]).&lt;br /&gt;
&lt;br /&gt;
*USA&lt;br /&gt;
** [[user:n8willis|Nathan Willis]] '''New Order'''&lt;br /&gt;
*** Font packaging, porting DIN 1451 designs to open font license&lt;br /&gt;
** [[user:reggie|Reggie Suplido]] '''New Order'''&lt;br /&gt;
*** Custom MeeGo web development related to meego.com and forum.meego.com.&lt;br /&gt;
&lt;br /&gt;
* Finland&lt;br /&gt;
**[[User:Vranki|Ville Ranki]] '''ID sent, applied for Nokia Launchpad, Ordered device '''&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.siilihai.com Siilihai web forum reader], [http://www.youtube.com/watch?v=erTAMOzdf0Y&amp;amp;feature=related Drone Taxi], PPCards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Russia&lt;br /&gt;
** Roman Deninberg([http://maemo.team16.ru/ Bonapart]) - ''applied for Nokia Launchpad, Launchpad for individuals (28-Jul-2011–28-Jul-2012)''','''New Order (28.7.2011)''', '''Not Received Yet'''&amp;lt;br /&amp;gt;Psx4m\PCSX-rearmed\Psx4m-gui projects basically&lt;br /&gt;
&lt;br /&gt;
* England&lt;br /&gt;
** Damion Yates '''ID sent'''. '''Accepted in to Nokia Developer Launchpad programme, device ordered - OID-054526''' &lt;br /&gt;
*** Video streaming for multiple desktops to receive the video from your phone.&lt;br /&gt;
*** New in 2.6.32+ kernel's wifi 80211 Infrastructure AP rather than Ad-Hoc for tethering.&lt;br /&gt;
*** qemu x86 chroot for wine and arbitrary x86 X11 binaries&lt;br /&gt;
*** tun/tap network interface for dns tunnelling with iodine&lt;br /&gt;
*** usb-storage usage monitor with idle umount &amp;amp;&amp;amp; rsync and remount&lt;br /&gt;
*** turn phone in to bluetooth dongle&lt;br /&gt;
&lt;br /&gt;
* $country&lt;br /&gt;
** $entry.&lt;br /&gt;
&lt;br /&gt;
==== N950 shipped, waiting to get it ====&lt;br /&gt;
Please list yourselves keeping the list by countries in order to see the geographical progress in ''real time''.  :)&lt;br /&gt;
&lt;br /&gt;
* $country&lt;br /&gt;
** $entry.&lt;br /&gt;
&lt;br /&gt;
* Serbia (Devices were sent to Moscow by accident, reordered them to an address in Hungary)&lt;br /&gt;
** [[User:Blackwicked|Edvin Rab]], '''Developer ID sent''', '''Applied for Launchpad''', '''Device Ordered''', '''Waiting for Arrival'''. [http://t.co/4Os8iIh EvidenceHunt Game]&lt;br /&gt;
** Robert Marki - '''Developer ID sent, Applied for Launchpad, Device Ordered, Waiting for Arrival.''' Developing an application called [https://projects.developer.nokia.com/feed_reader FeedReader], it's a universal feed reader with support for podcasts. More info on the project's website. Would like to develop image processing related applications like: Image translation application, Image gallery with face recognition, Porting control software of a hexapod robot.&lt;br /&gt;
&lt;br /&gt;
* Israel&lt;br /&gt;
** Assaf Paz (damagedspline) '''ID sent''', '''applied for Nokia Launchpad, Launchpad for individuals (06-Jul-2011–06-Jul-2012)''','''Order committed (7-Jul-2011)''', '''Device Sent (29-Jul-2011)''', '''Not Received Yet'''&amp;lt;br /&amp;gt;Adapting [http://code.google.com/p/qwazer/ Qwazer] to also work on Meego, hopefully create an Exchange Webmail client in pure QML (N900 was the initial target), Hebrew support&lt;br /&gt;
** Mohammad Abu-Garbeyyeh '''Device Ordered, Waiting for Arrival''' Planning a wiki page with a todo list, main project here: http://bt-messenger.com&lt;br /&gt;
&lt;br /&gt;
*Maldives&lt;br /&gt;
**Hussain Shafiu(demonreeper) ID sent | Launchpad:Accepted | N950eMail:Yes | Ordered:Yes(7th-July-2011) | Sent:'''Yes(1st-August-2011)'''&lt;br /&gt;
&lt;br /&gt;
* Switzerland&lt;br /&gt;
** [[User:milliams|Matt Williams]] (milliams) '''Device Sent (28/7/2011) - picking up from DHL depot tomorrow'''&amp;lt;br/&amp;gt;Creation of a Particle Physics information database (from [http://pdg.lbl.gov/ PDG]) application. Porting of [http://games.kde.org/game.php?game=ksquares KSquares] to pure Qt for MeeGo and creation of other similar simple games. Porting of [http://thermite3d.org PolyVox] to MeeGo and port games built on it when they are ready. Port the [http://falconpl.org Falcon] programming language to MeeGo.&lt;br /&gt;
&lt;br /&gt;
* Australia&lt;br /&gt;
** [[User:Termana|Bradley Smith]] (Termana) '''ID sent,  Launchpad: Accepted, N950 Email: Received, Ordered: Yes, Shipped: Yes 27/July, Received Device: No'''&amp;lt;br /&amp;gt;South Australia. As above, it has shipped and I received a tracking number on the 27th of July, I have not received the device as of yet.&amp;lt;br /&amp;gt;Developing a karaoke game with built-in pitch correction.&lt;br /&gt;
&lt;br /&gt;
* New Zealand&lt;br /&gt;
**[[User:Kidproquo|Sam Bristow]] '''Shipped 2011-08-01. DHL Tracking number not yet working though'''&lt;br /&gt;
&lt;br /&gt;
* Spain&lt;br /&gt;
** Daniel Martin Yerga '''ID sent''' | '''Launchpad:Accepted(05-Jul-2011)''' | '''N950eMail:Yes''' | ''' Ordered:Yes ''' | ''' Shipped:Yes (July 29) ''' | '''Received:No'''&amp;lt;br/&amp;gt;Porting my Maemo applications: [http://maemo-wordpy.garage.maemo.org/ MaStory], [http://cusl4-cservices.forja.rediris.es/ CasualServices], [http://pyrecipe.garage.maemo.org/ Pyrecipe], [http://maemo.org/downloads/product/Maemo5/copernicium/ Copernicium], [http://stockthis.garage.maemo.org/ StockThis], and developing new ones, like [https://gitorious.org/r-dmobiley R&amp;amp;DMobiley].&lt;br /&gt;
&lt;br /&gt;
* PRC&lt;br /&gt;
** [[User:leafjohn|Lifu Zhang(leafjohn)]] '''ID sent''' |  '''N950eMail:Yes''' | ''' Ordered:Yes ''' | ''' Shipped:Yes (July 28) ''' | '''Received:No'''&amp;lt;br/&amp;gt;  Create an opensource Qt astrology app for handset, Project Page: [https://github.com/cardmaster/qastro/tree/develop qastro hosting by github] &amp;lt;br /&amp;gt; Porting apps on our company page ([http://store.ovi.com.cn/publisher/EB EB OVI Page]) to MeeGo &amp;lt;br /&amp;gt;From DHL track web page, it's very close to me now.&lt;br /&gt;
&lt;br /&gt;
* Russia&lt;br /&gt;
** [[User:Kulakov|Kirill Kulakov]], '''ID sent''' |  '''N950eMail:Yes''' | ''' Ordered:Yes ''' | ''' Shipped:Yes (July 28) '''&amp;lt;br /&amp;gt;MySocials project - clients, libraries and plugins for frameworks and platforms for social networks&lt;br /&gt;
&lt;br /&gt;
==== FIXME Unclear cases &amp;amp; lazy wiki editors ====&lt;br /&gt;
&lt;br /&gt;
 '''Let's clean this section, please! Move your entry wherever appropriate. Thanks!'''&lt;br /&gt;
&lt;br /&gt;
Adam Pigg '''ID sent''', '''applied for Nokia Launchpad''', '''waiting for reply'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting my Qt/QML apps/games from maemo, and further work on Kexi and some more QML games&lt;br /&gt;
[http://www.piggz.co.uk My Site]&lt;br /&gt;
&lt;br /&gt;
Oleg Bodnarchuk(bloody)'''ID sent''', '''applied for Nokia Launchpad'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Developing Wiki-based offline database.&lt;br /&gt;
&lt;br /&gt;
Diego Marcos '''ID sent''' | '''Launchpad:Accepted(05-Jul-2011)''' | '''N950eMail:Yes''' | ''' Ordered:Yes ''' | '''Received:No'''&amp;lt;br/&amp;gt;&lt;br /&gt;
The goal is porting to mobile devices open source data visualization tools of astronomical data aimed at outreach and science communication.  I've been previously working on Qt/QML desktop applications based on stellarium.org&lt;br /&gt;
http://www.youtube.com/watch?v=COkwscvTnnM&amp;amp;feature=youtube_gdata_player&lt;br /&gt;
&lt;br /&gt;
Frank Sievertsen '''ID Sent, Launchpad member now'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Open-Source Spideroak Mobile Client and other apps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:gbraad | Gerard 'gbraad' Braad]] '''ID sent''' | '''Launchpad: waiting''' | '''N950eMail: Yes''' | ''' Ordered: Yes ''' |  '''Sent: Yes (28 Jul)''' | '''Received: Not yet'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting of of Node.JS, phonegap, unhosted and a mobile org-mode editor. Aiming for good integration with the MeeGo API and Qt Mobility. Code will be published on [https://github.com/gbraad github] and described on my [http://gbraad.nl/ blog]. Small [https://github.com/gbraad/meego-pomodoro PomodoroTimer] app has been created: &lt;br /&gt;
&lt;br /&gt;
Hiemanshu Sharma '''Completed ''' &amp;lt;br/&amp;gt;&lt;br /&gt;
Currently working on porting [[http://forum.meego.com/showthread.php?t=3660|Komedia]]. More apps in the pipeline including Quassel (IRC Client), a Google Reader (name suggestions are welcome) and a 'Line of the day' kind of app (a glorified version of cowsay). Also working on getting an opencv port to give way for Face Detection/Facial recognition APIs.&lt;br /&gt;
&lt;br /&gt;
[[User:kemargrant | kemargrant]], '''ID sent''',  '''Applied for the Nokia Developer Launchpad program,(Ordered N950:Phone recieved)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My goal is to bring Screen Mirroring to Meego along with playing local files&lt;br /&gt;
easily to a desktop. The app is called groundwork and it is opensource. Code will be shifted to Launchpad once I can begin testing on a meego device.&lt;br /&gt;
http://code.google.com/p/groundwork/&lt;br /&gt;
&lt;br /&gt;
Laszlo Papp (Already got one earlier, thus I do not need a new one ;) )&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Martink Martin Kolman] (MartinK)  '''ID sent''', '''applied for the Nokia Launchpad''' | '''N950eMail:Yes''' | '''Ordered:Yes''' | '''Received:Yes'''&amp;lt;br&amp;gt;&lt;br /&gt;
Porting the modRana GPS navigation system and Mieru manga and comic book reader.&lt;br /&gt;
&lt;br /&gt;
[[User:Seif|Seif Lotfy]], '''ID sent''', '''Device received'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My goal is to port the Zeitgeist to MeeGo with all the fun stuff with it. I already have a Qt port for &amp;quot;El Loco&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sergey Ivanov '''Order (11.7.2011), Not Received Yet'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Developing software for the mobile operating system MeeGo, associated with the processing of audio and video streams.&lt;br /&gt;
&lt;br /&gt;
Susanna Huhtanen&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Kenya888 Takahiro Hashimoto(kenya888)] '''ID sent, accepted into Nokia Launchpad, device ordered'''&amp;lt;br&amp;gt;&lt;br /&gt;
porting qimsys/mozc to Harmattan/MeeGo, developing streaming multimedia player with QML&lt;br /&gt;
&lt;br /&gt;
Tasuku Suzuki&lt;br /&gt;
&lt;br /&gt;
Teemu Hukkanen&lt;br /&gt;
&lt;br /&gt;
Thomas Cherryhomes - Lead Developer for LinuxMCE - '''ID and Launchpad ID sent'''&lt;br /&gt;
* LinuxMCE is a next generation smart home platform encompassing media, home automation, telecom, and security features. http://www.linuxmce.org/&lt;br /&gt;
* A 25 min demo of the software can be seen here: http://video.google.com/videoplay?docid=2176025602905109829&lt;br /&gt;
* Nokia N950 will be used as a test platform for the new QML/Qt Quick based qOrbiter we are writing to replace our existing Orbiter software, qOrbiter videos here: &lt;br /&gt;
** http://www.youtube.com/watch?v=NDGagn3EciA&lt;br /&gt;
** http://www.youtube.com/watch?v=oUHrCdBgoyQ&lt;br /&gt;
&lt;br /&gt;
[[User:tlaukkanen|Tommi Laukkanen]] '''Device received'''&lt;br /&gt;
* Facebook client [http://kasvopus.com Kasvopus], Twitter client [http://twimgo.com TwimGo], Google Reader client [http://newsflow.mobi NewsFlow], FourSquare client [http://nelisquare.com Nelisquare]&lt;br /&gt;
&lt;br /&gt;
[[User:toninikkanen|Toni Nikkanen]] '''ID sent''', '''applied for Nokia Launchpad''', '''order sent'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anthony Day '''ID sent''', '''Device received'''&lt;br /&gt;
* Porting and extending [http://talk.maemo.org/showthread.php?t=72951 inner-spin] game&lt;br /&gt;
* Porting and extending [http://talk.maemo.org/showthread.php?t=73942 Take it away Marco] N900 drum machine&lt;br /&gt;
* writing new game and realtime music Apps content for the N9/950   &lt;br /&gt;
&lt;br /&gt;
Eike Hein&lt;br /&gt;
&lt;br /&gt;
[[User:Theonehumble|Stephan Bulgin]] '''COMPLETED'''&amp;lt;br /&amp;gt;&lt;br /&gt;
- I will be porting NXEngine http://nxengine.sourceforge.net/ to MeeGo/Harmattan. My previews work for Maemo can be found here http://talk.maemo.org/showpost.php?p=971709&amp;amp;postcount=1&lt;br /&gt;
  Description: A clone/engine-rewrite of the classic jump-and-run platformer Cave Story.&lt;br /&gt;
- Right now Im in the process of re-writing DonQt for MeeGo/Harmattan. Previews work for Maemo here  http://www.forums.internettablettalk.com/showpost.php?p=976671&amp;amp;postcount=1 (will most likely be a name change and better code.)&lt;br /&gt;
  Description: Don is a &amp;quot;SDK installer&amp;quot; for developers to compile on the go.&lt;br /&gt;
- More ports and some original stuff and looking forward to collaborations. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--David Perlow '''ID sent, Applied for the Nokia Developer Launchpad program [UPDATE: 110706] Accepted into the Launchpad program [UPDATE: 110707] Ordered device and received order confirmation [UPDATE: 110718] Device arrived'''--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moritz Mühlenhoff&lt;br /&gt;
&lt;br /&gt;
Felipe Erias Morandeira '''ID sent, Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
* Design user interfaces using QML and collaborate with the MeeGoTouch project.&lt;br /&gt;
&lt;br /&gt;
[[User:sebas|Sebastian Kügler]] (sebas) '''device has arrived...'''&lt;br /&gt;
* Bringing Plasma Active ( http://community.kde.org/Plasma/Active )to MeeGo &lt;br /&gt;
&lt;br /&gt;
Juha Ristolainen '''ID sent, already a Launchpad member''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Heiaheia fitness-service application for MeeGo. Untappd.com client for MeeGo.&lt;br /&gt;
&lt;br /&gt;
Shan Yafeng '''ID sent''', '''Applied for the Nokia Developer Launchpad program''' &amp;lt;br /&amp;gt;&lt;br /&gt;
An education program for exchange information between students and teacher in class. And port some programs to the nokia N900/N950 device. The progress can be found here : http://cuckoohello.wordpress.com&lt;br /&gt;
&lt;br /&gt;
Koos Vriezen '''Device Received'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Will port the popular [http://maemo.org/downloads/product/Maemo5/kmplayer/  kmplayer] application from maemo5.&amp;lt;br/&amp;gt;&lt;br /&gt;
For now sources are found at [https://garage.maemo.org/plugins/scmsvn/viewcvs.php/branches/harmattan/?root=kmplayer maemo garage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aigars Mahinovs&lt;br /&gt;
&lt;br /&gt;
Andreas Schildbach (Goonie) '''ID sent''', '''Applied for the Nokia Developer Launchpad program''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting of [http://code.google.com/p/public-transport-enabler/ Public-Transport-Enabler] and [https://market.android.com/details?id=de.schildbach.oeffi Öffi] to Meego.&lt;br /&gt;
&lt;br /&gt;
Ilya Paramonov '''Device received''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Development of collaborative mind mapping application [http://yar.fruct.org/projects/hivemind HiveMind] for mobile and desktop platforms and sophisticated GTD-style personal time management application [http://yar.fruct.org/projects/octotask Octotask].&lt;br /&gt;
&lt;br /&gt;
Philford Barrett (sevla) '''ID sent, Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
* Swipe Style/Swypr/SwipeMe - Allows the user to assign swiping from the outside of the screen to specific actions i.e. swiping from the top jumps to the multi-tasking view while swiping from the bottom jumps to the Feeds View.  Each side of the screen (Top/Left/Bottom/Right) can have a max of 4 zones.  Each zone can be assigned to an action thereby giving the user the ability to configure 16 &amp;quot;invisible&amp;quot; shortcuts.  Each of which will be available at all times, regardless of what the user is doing in the current app/view.&lt;br /&gt;
* Drop Box Integration - Integrate downloading/uploading data to and from an existing Drop Box account.  Wherever possible, existing apps will be modified to show this data. i.e. photos in the users drop box account can be (meaning this will be configurable) displayed from the n9 picture viewer.&lt;br /&gt;
* Audio Galaxy Integration - Enable streaming of your audio galaxy library to your device through the n9 media player.&lt;br /&gt;
* Feeds++ - Feeds++, an enhanced feeds view, extends the functionality of the feeds view by allowing multiple views and enabling the ability to assign specific data to each view.  i.e. Show Facebook only data in View A and Twitter only data in View B.  Feeds++ will also allow the user to reply directly to events without having to opening the corresponding app.&lt;br /&gt;
&lt;br /&gt;
[[User:hardaker|Wes Hardaker]] '''ID sent, Launchpad application submitted'''&lt;br /&gt;
I'm continually developing applications for multitudes of devices, including many Qt applications at [http://www.dnssec-tools.org/ dnssec-tools] as well as personal projects, my favorite being my [http://www.hamtools.org/cutecw/ Morse Code Training Software], which is what I want to port immediately.  See my [[User:hardaker|User Page]] for a more complete list.&lt;br /&gt;
&lt;br /&gt;
William Stephenson (wstephenson) '''Device Received''',  '''Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
I'm working on a high level toolkit for the creation of branded RSS based apps, in order to facilitate the creation of these simple apps.&lt;br /&gt;
&lt;br /&gt;
pancake&lt;br /&gt;
&lt;br /&gt;
[[User:pancake|pancake]] '''&lt;br /&gt;
I'm the author of radare2, a reverse engineering framework for disassembling, debugging, hexediting binaries and doing some forensics-related tasks. I already wrote a GTK frontend for Maemo (n770,n810,n900) and my plan is to write a QT/QML ui for it.&lt;br /&gt;
I will also port other programs of mine like tokipona language learning tools, simple games (but addictive!) to QT (from commandline).&lt;br /&gt;
In the future I would like to work on Vala and Gtk3/gtkaml (multitouch) support for MeeGo based devices.&lt;br /&gt;
&lt;br /&gt;
[[User:lamikr|Mika Laitio]]&lt;br /&gt;
* kernel&lt;br /&gt;
* MeeGo CE edition&lt;br /&gt;
* VDR linux tv client&lt;br /&gt;
&lt;br /&gt;
 * kernel&lt;br /&gt;
 * Meego CE edition&lt;br /&gt;
&lt;br /&gt;
Christos Zamantzas ([[User:Saturn|Saturn]]) - '''ID sent, Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
&lt;br /&gt;
Sivan Greenberg--&amp;gt; Nokia Developer Champion ID: &amp;lt;b&amp;gt;sivang&amp;lt;/b&amp;gt; , Applied for individual Nokia Developer Launchpad Membership. Working on [[http://developer.qt.nokia.com/groups/qt_contributors_summit/wiki/pdf/CrowdQuick CrowdQuick]] and some platform stuff, as evident by the talks I had given in 2010/2011 begin_of_the_skype_highlighting              2010/2011      end_of_the_skype_highlighting begin_of_the_skype_highlighting              2010/2011      end_of_the_skype_highlighting begin_of_the_skype_highlighting              2010/2011      end_of_the_skype_highlighting MeeGo conferences.&lt;br /&gt;
&lt;br /&gt;
Tapio Pyrhönen '''Device ordered 2011-07-11 and arrived on 2011-07-16!!! Getting busy now.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting my old Nintendo DS apps/games and making new ones too.&lt;br /&gt;
[http://tapsa.bitmagick.com/nds My Site]&lt;br /&gt;
&lt;br /&gt;
Michael Schloh von Bennewitz (MSvB) '''- Got &amp;quot;A Nokia N950 is waiting for you&amp;quot; but... after going to the order URL an error appears &amp;quot;Support Center, Unexpected error has occured. Please try again.&amp;quot; This since three days now.''' Using the device for a MeeGo lecture series in the fall, giving demos. Application development includes LDAP client, and a chess clock. I've ported a number of network and security packages as well, will begin to get them over to the MeeGo repos.&lt;br /&gt;
&lt;br /&gt;
Svetozar Belic ([[User:trx|trx]]) '''- Got &amp;quot;A Nokia N950 is waiting for you&amp;quot;, Device ordered (2011-07-07) ''', Port TxPad, TxMySQL Explorer, libQt4Pas library, etc.. Will create a list of apps to port/create&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
Participants that have received the Nokia N950, sorted by meego.com nick. You know this device program is completed when we have reached 250:&lt;br /&gt;
&lt;br /&gt;
# [[User:aaporantalainen|aaporantalainen]] (Aapo Rantalainen)&lt;br /&gt;
#*[http://www.umsic.org/jammo/  JamMo] (will need some underlying libraries, e.g. [http://www.clutter-project.org/ clutter])&lt;br /&gt;
# [[User:Agomez|Agomez]] (Andres Gomez)&lt;br /&gt;
#*Development of drondas, a personal application for the management of the payments shared with other people so you can get track of who paid which in name of whom.&lt;br /&gt;
# [[User:ajalkane|ajalkane]] (Arto Jalkanen) &lt;br /&gt;
#*Developing dynamic profile switcher, with location and day/time based rules on which profile to use.&lt;br /&gt;
# [[User:aklapper|aklapper]] (Andre Klapper)&lt;br /&gt;
#*General testing and bug hunting&lt;br /&gt;
# [[User:amandalam|amandalam]] (Amanda Hoi Ching Lam) '''Device received (2011-07-18)'''&lt;br /&gt;
#*Traditional Chinese language and utility apps for the MeeGo &amp;amp; Harmattan platforms, including but not limited to a Chinese character lookup app, and applications localized for the Traditional Chinese communities in Hong Kong, Macau and Taiwan.  [https://sites.google.com/site/amandahoic/Home/ Amanda's Software Projects]&lt;br /&gt;
# [https://meego.com/users/andreagrandi Andy80] (Andrea Grandi)&lt;br /&gt;
#*QML native client for Soma.fm radio. Current code available here: https://github.com/andreagrandi/CuteSoma&lt;br /&gt;
# [[User:andrei1089|andrei1089]] (Andrei Mirestean) '''device received'''&lt;br /&gt;
#*Develop a step counter application based on the [http://maemo.org/downloads/product/Maemo5/pedometerhomewidget/ Pedometer desktop widget] for N900&lt;br /&gt;
# [[User:anidel|anidel]] (Aniello Del Sorbo) '''Device received. All is well in the world.'''&lt;br /&gt;
#*Porting [http://maemo.org/downloads/product/Maemo5/xournal/ Xournal] from Maemo to Harmattan/MeeGo&lt;br /&gt;
# [[User:antman8969|antman8969]] (Anthony Naddeo) '''device received''' &lt;br /&gt;
#*[http://umcs.maine.edu/~naddeoa/profile/linkedup-project.html Linkedup] - LinkedIn client for Maemo, Meego, Harmattan..... anything Qt&lt;br /&gt;
#*[http://umcs.maine.edu/~naddeoa/profile/qtweather-project.html QtWeather] - United States National Weather Service application&lt;br /&gt;
#[[User:apachelogger|apachelogger]]&lt;br /&gt;
#*[http://git.videolan.org/?p=QtMobileVLC.git;a=summary Porting VLC] to handsets and tablets using Qt for UI awesomeness.&lt;br /&gt;
#Aleix Pol (apol)&lt;br /&gt;
#*Porting &amp;quot;horaris&amp;quot; and &amp;quot;kanban&amp;quot; maemo applications, finally get to have a usable KAlgebra Mobile version working on MeeGo, hopefully drag other KDE applications with this effort.&lt;br /&gt;
# [[User:ar|ar]] (Antti Raina) '''device received'''&lt;br /&gt;
#*Develop a simple budgeting application + porting apps &lt;br /&gt;
#[[User:arfoll|Arfoll]] (Brendan Le Foll) '''device received'''&lt;br /&gt;
#*Porting XBMC + MeeGo TV stuff + doing audio continuums using pulseaudio.&lt;br /&gt;
#[[User:Avis|Avis]] (Alexander Terekhov) '''device received''' &lt;br /&gt;
#*[http://qt-apps.org/content/show.php/Smart+Shopper?content=139742 Smart Shopper] - porting and improving GPS-based shopping application.&lt;br /&gt;
#[[User:awhiemstra|awhiemstra]] (Arjen-Wander Hiemstra) &amp;lt;br/&amp;gt;&lt;br /&gt;
#*Porting [http://gluon.gamingfreedom.org Gluon] to MeeGo/Harmattan.&lt;br /&gt;
#*Working on [http://calligra-suite.org Calligra].&lt;br /&gt;
# [[User:b0unc3|b0unc3]] (Daniele Maio), '''device received'''&lt;br /&gt;
#* Porting maemo stuff&lt;br /&gt;
#[[User:Bart-cerneels|Bart Cerneels]](Stecchino)&amp;lt;br /&amp;gt;&lt;br /&gt;
#*Mobile UX' for Amarok using QML. [http://amarok.kde.org Amarok website]&lt;br /&gt;
#[[User:Bemasc/N950_Project|bemasc]] (Benjamin M. Schwartz) '''Received. Appears to be in working order.''' &amp;lt;br /&amp;gt;&lt;br /&gt;
#*I will attempt to convert [http://sugarlabs.org Sugar] [http://activities.sugarlabs.org Activities] into MeeGo apps, and hopefully in the process acquire some insight into the potential for MeeGo to form the basis of future Sugar revisions&lt;br /&gt;
# [[User:bergie|Henri Bergius]]&lt;br /&gt;
#* Porting Buscatcher, Midgard and Node.js -related tools to MeeGo. However, I've withdrawn my device program application because I already got a N950 via Helsinki MeeGo Network.&lt;br /&gt;
# [[User:Broothy|Broothy]] (Ádám Balázs), '''Sent my Account ID to Quim, i'm already Nokia launchpad member. Awaiting any reply. Device shipped, received''' &amp;lt;br /&amp;gt;&lt;br /&gt;
#* [http://store.ovi.com/content/113753 Switchboard] [http://www.youtube.com/watch?v=GdskgAfjjxc MobileMind]&lt;br /&gt;
# [[User:Bundyo|Bundyo]] (Kamen Bundev), '''ID sent''', '''Launchpad activated, notification email received, device ordered, device shipped, received on 18th July''' &amp;lt;br /&amp;gt;&lt;br /&gt;
#* Rewriting Search Tool, porting Maemo 5 work, NodeJS, possible Tear rewrite.&lt;br /&gt;
#[[User:CaCO3|George Ruinelli]] '''received my device, got account for launchpad and OBS''' Porting my [http://maemo.org/packages/view/sleepanalyser/ SleepAnalyser] from MAEMO as well as other smaller apps I wrote/ported. See [http://wiki.maemo.org/User:Caco3] for details.&lt;br /&gt;
#[[User:captianigloo|captainigloo]] (Aguirre Nicolas)&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Porting [http://enna.geexbox.org Enna], [http://svn.enlightenment.org/svn/e/trunk/E-MODULES-EXTRA/elfe elfe] and all [http://www.enlightenment.org EFL/Enlightenment] libraries to Meego.&lt;br /&gt;
# [[User:cgrozea|cgrozea]] (Cristian Grozea) '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* creating magnus-plus-photo: an application that combines a camera-based magnifier with more advanced image processing techniques, that would enable one to use it as a magnifier (with optional light from the camera LED), use it as a photo negatives lightbox that automatically inverts the negatives and adjusts the colors for proper display; use it as an EVF add-on to SLRs to help with manual focus, leveraging the possibility of amplifying contrast and magnifying.&amp;lt;br /&amp;gt;&lt;br /&gt;
# [[User:cip|cip]] (Christian Pühringer) '''ID sent, already a Launchpad member''', '''Ordered (8-Jul-2011)''', '''Dispatched (15-Jul-2011)''', '''Device received (18-Jul-2011)&amp;lt;br&amp;gt;&lt;br /&gt;
#* [https://github.com/cip/WikiOnBoard/wiki WikiOnBoard] Offline reader for Wikipedia using [http://openzim.org zim] format.  &lt;br /&gt;
# [https://meego.com/users/conny Conny] (Cornelius Hald) '''Device received'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* [http://conboy.garage.maemo.org Conboy] [http://thp.io/2011/mong Mong aka Plonk]&lt;br /&gt;
# [[User:Clint|Clint Adams]]&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Libre.fm-related software development and porting, advocacy&lt;br /&gt;
# [[User:Cpscotti|cpscotti]] (Clovis Scotti) '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Developing the &amp;quot;connected snowboarding&amp;quot; [http://www.pushsnowboarding.com Push Snowboarding] application/project. Also, I'll be very happy to port other apps I did (mainly for Maemo) + new projects.&lt;br /&gt;
# [[User:Creamygoodness|Creamy Goodness]] (Lance Colton) '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Working on Proximus during July, I will see what we can do with Conky after that.&lt;br /&gt;
# [[User:crevetor|crevetor]] (Antoine Reversat) '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Developing a bixi app [http://forum.meego.com/showthread.php?t=3650 App thread]. Some Meego CE hacking&lt;br /&gt;
# [[User:dakron|dakron]] (Pawel Kurdybacha) '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Testing and contribution to Qt Mobility on Harmattan platform&lt;br /&gt;
#* Multimedia Home controller based on gUPnP&lt;br /&gt;
# [[User:daperl|daperl]]&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Porting the Sudoku clone Tomiku&lt;br /&gt;
# [[User:davidmaxwaterman|Max Waterman]] '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Porting ZouBa to MeeGo/H and QML, plust other app ideas.&lt;br /&gt;
# [[User:davidsansome|David Sansome]] '''Device received.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Porting [http://www.clementine-player.org Clementine music player] to MeeGo.  Clementine already uses Qt and GStreamer.&lt;br /&gt;
# [[User:deimos|deimos]] (Marco Bavagnoli) &amp;lt;br /&amp;gt;&lt;br /&gt;
#* I'm porting [http://mediadownloader.cz.cc/?page_id=2 mediadownloader] application just ported to [http://mediadownloader.cz.cc/?p=153 maemo] and here a N900 [http://www.youtube.com/watch?v=_Dsj2piBQCw video]. &lt;br /&gt;
# [[User:Dimitar | Dimitar]] (Dimitar Pashov) &amp;lt;br /&amp;gt;&lt;br /&gt;
#* Porting pdf viewer in case the stock one is not better than the one in n900. Try the abilities of the n9/50 HW with an engineering/scientific 3D model viewer. Implement some other ideas.&lt;br /&gt;
# [[User:Divan|Ivan Daniluk]] ''' Device received. COMPLETED.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Porting  [[User:Divan|my Maemo5 applications]], adding full Vkontakte support, developing new apps.&lt;br /&gt;
# [https://meego.com/users/djarty DJArty] (Artem Sereda) &amp;lt;br /&amp;gt;&lt;br /&gt;
#* Porting qutIM, openpref, arora, links, groove, microdc, Ukrainian localization.&lt;br /&gt;
# [[User:Dm8tbr | dm8tbr]] (Thomas B. Ruecker)  &amp;lt;br /&amp;gt;&lt;br /&gt;
#* MeeGo Community edition for N9(|50|00)&lt;br /&gt;
#* APRS application in QML to teach myself something about QML and Qt Mobility.&lt;br /&gt;
#* LiveView daemon/application based on code found here: http://code.google.com/p/adqmisc/source/browse/#svn%2Ftrunk%2Fliveview&lt;br /&gt;
#* USB host mode&lt;br /&gt;
# [[User:drowne | Drowne]] (Valerio Di Donato)&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Location-Based games and application development, mobile game design. Junomi Developer ( serious game presented at Games for Health Conference in Boston, May 2011 )&amp;lt;br /&amp;gt;&lt;br /&gt;
# [[User:druid23 | druid23]] (Dru Moore) &amp;lt;br/&amp;gt;&lt;br /&gt;
#* To port / create multi-track editing and mixing software to Meego / Harmatten, and multimedia capabilities in general&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Additionally, to port remote controls for various networked media players (Singbird, Foobar2000, Squeeze, VLC etc).&lt;br /&gt;
# [[User:dwaradzyn|dwaradzyn]] (Damian Waradzyn) '''Device received. Thank you!'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Porting and further development of [http://talk.maemo.org/showthread.php?t=58402 CloudGPS]&lt;br /&gt;
# [[User:Eipi|eipi]] (Sanjeev Visvanatha) , '''Device Received 18/7/2011-Thanks!'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#*Porting MaeFlight from Maemo 5, and adding functionality for Harmattan &lt;br /&gt;
# [[User:Elleo|Elleo]] ([http://blog.mikeasoft.com/tag/maemo/ Michael Sheldon]) &lt;br /&gt;
#*Creating a [http://libre.fm Libre.fm] radio client and porting [http://www.jokosher.org Jokosher] to small screen devices.&lt;br /&gt;
#[[User:Emocow|emocow]] (Ferdinand Mayet) ('''Device received. Thank you!''')&amp;lt;br/&amp;gt;&lt;br /&gt;
#*Development of a golf GPS application&lt;br /&gt;
# [[User:epage|Ed Page]]&lt;br /&gt;
#* Updating [http://wiki.maemo.org/DialCentral DialCentral], [http://wiki.maemo.org/Gonvert Gonvert], [http://wiki.maemo.org/Ejpi ejpi] for Meego/Harmattan&lt;br /&gt;
#* Port all other appliations to Qt for  Meego/Harmattan&lt;br /&gt;
#* Continue writing new applications&lt;br /&gt;
# [[User:fcrochik|fcrochik]] (Felipe Crochik) '''Device received'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* port applications from n900: mobwebmail, macuco, geeps, wakeonlan, ...&lt;br /&gt;
#[[User:feri|Ferenc Székely]] (ferenc)&lt;br /&gt;
#* Working on [http://apps-beta.meego.com MeeGo Apps], an &amp;quot;app store&amp;quot; for open source, free apps for MeeGo&lt;br /&gt;
#* Will help packaging and porting Maemo -mainly location based- apps to MeeGo&lt;br /&gt;
# [[User:fiferboy|fiferboy]] (Andrew Olmsted) '''Device received'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#* [http://andrew.olmsted.ca/meego fiferboy's applications] - Personal Lexicon, Birdlist, some other ideas for new programs and a few ports&lt;br /&gt;
#[[User:fms|fms]] (Marat Fayzullin) ('''Device received 22.7.2011''')&amp;lt;br/&amp;gt;&lt;br /&gt;
#* Porting the following: [http://fms.komkon.org/SlideRule/ SlideRule], [http://fms.komkon.org/ColEm/ ColEm], [http://fms.komkon.org/fMSX/ fMSX],[http://fms.komkon.org/Speccy/ Speccy], [http://fms.komkon.org/ATI85/ AlmostTI], [http://fms.komkon.org/MG/ MasterGear], [http://fms.komkon.org/iNES/ iNES], [http://fms.komkon.org/VGB/ VGB], [http://fms.komkon.org/VGBA/ VGBA]. Also expecting to port the FBReader and an IRC client (although most likely not XChat).&lt;br /&gt;
#[[User:frankusb|frankusb]] (Frank Banul) '''ID sent, Applied for the Nokia Developer Launchpad program. Device ordered. Device received.'''&lt;br /&gt;
#* Port TabletBridge and RadioTimeToGo&lt;br /&gt;
# [[User:garyd|Gary Driggs]] ('''Device received.''') Porting web apps and misc. Unix tools to MeeGo ARM devices.&lt;br /&gt;
#[[User:generalantilles|GeneralAntilles]] (Ryan Abel)&lt;br /&gt;
#* Working with fiferboy on a photographer's application suite ([http://thousandsparrows.com/meego/ SnapGo] and [https://gitorious.org/fiferboy/geosnap Gitorious], currently) to include feature like a light meter and GPS track recording.&lt;br /&gt;
# [[User:gri|gri]] (Christoph Keller) '''Device received'''&lt;br /&gt;
#* Porting [http://web2sms.garage.maemo.org Web2SMS], splitting it up into a telepathy plugin, service daemon, contacts integration and hopefully sms application integration plus new provider plugins.&lt;br /&gt;
# [[User:Harbaum|Harbaum]] (Till Harbaum)&lt;br /&gt;
#*Currently re-writing CacheMe UI in qml,  working on Zeemote driver&lt;br /&gt;
# [[user:hawaii|hawaii]] (Simon LR)  '''Device received'''&lt;br /&gt;
#* FOSS porting, repo priming, tool building. Platform/product evangelism.&lt;br /&gt;
# [http://forum.meego.com/member.php?u=9286 helex] (Michael Muth)&lt;br /&gt;
#* [http://talk.maemo.org/showthread.php?p=1001316 ClipMan], [http://talk.maemo.org/showthread.php?t=52589 DreamRemote], TcpKeyboard, something like [http://talk.maemo.org/showthread.php?t=72408 ConkyLayoutSwitcher] (have to see how the UI works in detail - need to create it from scratch)&lt;br /&gt;
#[[User:helihyv|helihyv]] (Heli Hyvättinen)&lt;br /&gt;
#*Porting Ghosts Overboard (a game) and Chess Clock from Maemo and adding new features to the former.&lt;br /&gt;
# hiemanshu (Hiemanshu Sharma)&lt;br /&gt;
#* Porting Komedia and OpenCV. Writing a google reader client, a cowsay GUI.&lt;br /&gt;
#[[User:hopbeat|hopbeat]] (Arkadiusz Stopczynski)&lt;br /&gt;
#*Various academic projects, including novel user interfaces, social web, BCI and portable cognitive sensors. All the crazy stuff mentioned here: http://www.milab.imm.dtu.dk&lt;br /&gt;
#*Some utility applications that make your everyday tasks easier, such as shortcutd or lockdaemon for Maemo&lt;br /&gt;
#[[User:ieatlint|ieatlint]](Jeffrey Malone)&lt;br /&gt;
#*Creating NextBus transit application for North America&lt;br /&gt;
#[[User:ivan4th|ivan4th]] (Ivan Shvedunov) '''Device received'''&lt;br /&gt;
#*Working on [http://github.com/ivan4th/i4checklist Shopping list/checklist] application inspired by HandyShopper for PalmOS&lt;br /&gt;
#*Common Lisp stuff (will try to make CCL+CommonQt etc. work on Meego/Harmattan)&lt;br /&gt;
# [[User:Jaffa|Jaffa]] (Andrew Flegg)&lt;br /&gt;
#*Porting apps from Maemo (Attitude &amp;amp; Hermes), developer tools, and apps.meego.com workflow. [[User:Jaffa|&amp;quot;Want to know more?&amp;quot;]]&lt;br /&gt;
#[[User:Javispedro|javispedro]] (Javier de San Pedro)&lt;br /&gt;
#*Porting my [http://wiki.maemo.org/User:Javispedro Maemo 5 applications and SDL games], and [http://gitorious.org/hsdl/pages/Home SDL] itself.&lt;br /&gt;
#[[User:jbos|jbos]] (Jeremias Bosch) '''Device arrived.'''&lt;br /&gt;
#* Bringing Peregrine Communication Client to Harmattan&lt;br /&gt;
#* http://www.peregrine-communicator.org&lt;br /&gt;
#* MeeGo CE&lt;br /&gt;
#[[User:jflatt|jflatt]] (Jason Flatt) '''Completed'''&lt;br /&gt;
#* https://gitorious.org/meego-nonograms&lt;br /&gt;
#JLP (Jure Repinc)&lt;br /&gt;
#* Creating a Thousand Parsec game client&lt;br /&gt;
#* Moodle client&lt;br /&gt;
#* Help with testing&lt;br /&gt;
#* Translation into Slovenian&lt;br /&gt;
# [[User:Joergrw|Joergrw]] (Joerg Reisenweber) '''device arrived. COMPLETED'''&lt;br /&gt;
#* USB hostmode. Give N9(50) access to external storage etc. (co-devels: Thomas B. Ruecker, MohammadAG)&lt;br /&gt;
#* Review the core functionality and find other similar fields to tackle (see *# starhash-enabler for N900). To mind comes: user profiles (refer the modest &amp;quot;default&amp;quot; &amp;amp; &amp;quot;silent&amp;quot; on fremantle), dialplans, location aware event triggers (cinema profile triggers automatically on entering the building), improved battery management and monitoring, theft protection and recovery...&lt;br /&gt;
#* cablefinder based on fast magnetometer readout detecting 50/60Hz fields (co-devel: alterego)&lt;br /&gt;
#* torch/flashlight app for N950 - possibly augmented to do optical data transfer, RX via a v4l2 based decoder app&lt;br /&gt;
#* I am contributing/associated to: &lt;br /&gt;
#**SnapGo / Ryan Abel [consulting on low level stuff] &lt;br /&gt;
#[[User:jukey|jukey]] (Uwe Kaminski)&lt;br /&gt;
#*General Bug reporting / Community QA processes&lt;br /&gt;
#*[http://meegofreeday.org MeeGo Freeday]: event organizing / presentations&lt;br /&gt;
#[[User:junousia|junousia]] (Jukka Nousiainen) '''- Device received - COMPLETED'''&lt;br /&gt;
#* Creating a tethering application for DSLR cameras, and porting necessary libraries, e.g. libgphoto2&lt;br /&gt;
#* Other small random applications and utilities &lt;br /&gt;
#[[User:jykae|jykae]] (Ville Jyrkkä) '''device arrived. COMPLETED'''&lt;br /&gt;
#* [http://www.cs.tut.fi/~jyrkkav/ Homesite|Ville Jyrkkä]&lt;br /&gt;
#* [http://jykae.blogspot.com BLOG: Hacker's Life In Finland]&lt;br /&gt;
#* [https://launchpad.net/m-poker MPoker]&lt;br /&gt;
# [[User:kdrozd|kdrozd]] (Krzysiek Drozd) - '''N950 At Home '''&lt;br /&gt;
#*Clients for a number of local network services, casual games. More soon, on my MeeGo wiki&lt;br /&gt;
# [[User:kenyoung|kenyoung]] (Ken Young) - '''device arrived. COMPLETED '''&lt;br /&gt;
#*I'm working on porting Orrery, maeSat and maeFat to the N9.   The N950 is a beautiful device!&lt;br /&gt;
# [https://meego.com/users/khertan khertan] (Benoît HERVIER)&lt;br /&gt;
#* Currently working on KhtEditor&lt;br /&gt;
# [[User:Kimitake|Kimitake]] (Kimitake) '''device arrived. COMPLETED'''&amp;lt;br&amp;gt;&lt;br /&gt;
#*developing Qt-based micro blogging client for twitter, identi.ca, wassr, jp&lt;br /&gt;
#*porting qimsys, Japanese Input method, as maliit plugin&lt;br /&gt;
# [[User:kkv|kkv]] (Kirill Krinkin) '''device arrived. COMPLETED'''&amp;lt;br&amp;gt;&lt;br /&gt;
#* Developing Tracker (client for open [https://github.com/OSLL/geo2tag Location Base Platform ]). Tracker will gather user moving data, find patterns, do logistic tasks. Project tracker and progress can be found [[http://osll.spb.ru/projects/geo2tag/issues here]]. &lt;br /&gt;
#* Mesh networks and energy consumption on device investigation&lt;br /&gt;
#[[User:klausr|klausr]] (Klaus Rotter) '''device arrived. COMPLETED'''&amp;lt;br&amp;gt;&lt;br /&gt;
#* Started to work with QtQuick. Nice Tool. Trying to rewrite my EasyPlayer program in QtQuick.&lt;br /&gt;
#[[User:kojacker|Kojacker]] (Ryan Faulkner)&lt;br /&gt;
#* Various applications, bits and bobs (links coming)&lt;br /&gt;
#[[User:kulve|kulve]] (Tuomas Kulve) '''device arrived. COMPLETED'''&lt;br /&gt;
#[[User:kypeli|kypeli]] (Johan Paul) '''device arrived. COMPLETED'''&lt;br /&gt;
#[[User:kyranto|kyranto]] (Kyösti Ranto) '''device arrived. COMPLETED'''&lt;br /&gt;
#* [https://gitorious.org/meego-developer-edition-for-n900/mg-package-manager mg-package-manager]&lt;br /&gt;
#[[User:Laasonen|Laasonen]] (Olli Laasonen)&lt;br /&gt;
#*Porting apps from Maemo (Who is calling?, Advanced phone lock, Sanakirja.org dictionary client).&lt;br /&gt;
#*Developing small handy applications.&lt;br /&gt;
#[[User:lardman|lardman]] (Simon Pickering) - '''Device arrived, thanks! :)'''&lt;br /&gt;
#*Porting mBarcode, working on Augmented Reality app (mAR), time and location event app (Proximus), additional location methods (offline cellid, magnetic field line direction)&lt;br /&gt;
#[[User:Lbt|lbt]] (David Greaves)&lt;br /&gt;
#* Mainly CE, Harmattan and Apps to start with. Hopefully Surrounds later.&lt;br /&gt;
#[[User:lcuk|lcuk]] (Gary Birkett) '''device arrived. COMPLETED, thanks'''&lt;br /&gt;
#* N9 Qt port of liqcalendar and misc liq* apps&lt;br /&gt;
#liang wei (foolegg), '''ID sent:Yes''' | '''Launchpad Accepted:Yes''' | ''' Ordered:Yes ''' | '''Received:Yes'''&amp;lt;br/&amp;gt;&lt;br /&gt;
#*[[Cuteinputmethod]] is a Chinese Input Method, designed for handset device.&amp;lt;br/&amp;gt;&lt;br /&gt;
#[[User:Lorenzph|lorenzph]] (Philip Lorenz) - '''Device arrived - thank you'''&lt;br /&gt;
#*Development of a hiking application supporting the user when planning and executing the trip.&lt;br /&gt;
#[[User:lostinmirkwood|lostinmirkwood]] (Kristopher C. Kantor) - '''Device arrived, Thank You.'''&lt;br /&gt;
#*Continuing Development of [http://ansela.garage.maemo.org/ Ansel-A]: Digital Darkroom for Qt Devices&lt;br /&gt;
# [[User:mardy|Mardy]] (Alberto Mardegan)&lt;br /&gt;
#* Developing QML port of [http://www.mardy.it/mappero Mappero], possibly [http://www.mardy.it/oculo Oculo]&lt;br /&gt;
#* [http://neverball.org Neverball and Neverputt] (currently I'm working on a N900 port).&lt;br /&gt;
# [[User:Martink|MartinK]] (Martin Kolman)&lt;br /&gt;
#* Porting the modRana GPS navigation system and Mieru manga and comic book reader.&lt;br /&gt;
# [[User:marxian|marxian]] (Stuart Howarth)&lt;br /&gt;
#* Porting my [https://garage.maemo.org/projects/qmltube cuteTube] application (QML version).&lt;br /&gt;
#* MythTV controller/recording scheduler (similar to the Android XBMC application)&lt;br /&gt;
# [[User:Masterzap|MasterZap]] (Zap Andersson) - '''Device arrived.'''&lt;br /&gt;
#* Porting [http://maemo.org/packages/view/zaploc/ ZapLoc] app to Qt/Meego (currently pygame/Maemo)&lt;br /&gt;
#* Porting game &amp;quot;Slightly Annoyed Rodents&amp;quot; (yet to be released) to Qt/Meego (currently pygame/Maemo)&lt;br /&gt;
#* Sadly, my unit is developing issues with the display, stripes of black pixels below halfway down the screen, and they seem to get a pixel longer every few days.... :( It's still usable for development, but it's not exactly pretty to look at.&lt;br /&gt;
# [[User:mattaustin|Matt Austin]] '''Device received (01/08/11)'''&lt;br /&gt;
#* Transperth trains live departure boards app, Player numbers AFL footy app, Amazon S3 bucket &amp;amp; file browser.&lt;br /&gt;
#[[User:mdengler|mdengler]] (Martin Dengler) '''device arrived. COMPLETED'''&lt;br /&gt;
#* I am working on porting a tron-like game (armegatron preferably or glTron) to the N9, and developing Ringr, a location-based ringtone management application.&lt;br /&gt;
# [[User:Mece|Mece]] (Marcus Wikström) '''Device received'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#*[http://talk.maemo.org/showthread.php?t=73490 Tweed Suit] for N9/50&lt;br /&gt;
#*Qlister (shopping list program)&lt;br /&gt;
#*Planning an location based tracking service/app.&lt;br /&gt;
#[[User:Metropt|Jose Xavier]], '''device arrived. COMPLETED'''&lt;br /&gt;
#* My goal is to port the OpenPilot Ground Control Station to the MeeGo platform and adapt the UI for a better mobile experience. You can see more #information about OpenPilot GCS here: http://wiki.openpilot.org/display/Doc/Ground+Control+Station+User+Manual&lt;br /&gt;
#[[User:mgedmin|mgedmin]] (Marius Gedminas) '''Device arrived'''&lt;br /&gt;
#*Played with bugfixing in QMLCompass in order to learn the Qt Creator IDE.&lt;br /&gt;
#*Ported vim, fbreader for own use.&lt;br /&gt;
#*Built unofficial-meego-terminal so that a newer meego-terminal can be installed side-by-side, again, for own use.&lt;br /&gt;
#*Put the stuff in apt repository at http://mg.pov.lt/770/ because hasn't found the time to learn OBS yet.&lt;br /&gt;
#*Planning to port [http://mg.pov.lt/gtimelog GTimeLog].&lt;br /&gt;
# [[User:mickeprag|mickeprag]] (Micke Prag) - '''Device arrived.'''&lt;br /&gt;
#*[https://gitorious.org/telldus/tellduscenter-light TelldusCenter Light] - Using the mobile phone as the central hub in your home automation. Control your lights, electrical appliances and curtains wirelessly from the palm of your hands.&lt;br /&gt;
#[[User:Mikec|Mikecy]] (Mike Choy) - '''Device arrived.'''&lt;br /&gt;
#*Porting svgclock, Maesynth and Maelophone from N900 Python to QML and C++. Stress testing the new [https://projects.developer.nokia.com/qtgameenabler Qt Game Enabler] to see if we finally have  low latency audio support in Qt. Will also look to see if we can get midi sample support via Wild Midi or equivalent. &lt;br /&gt;
# [[User:mikelima|mikelima]] (Luciano Montanaro) - '''Device arrived.'''&lt;br /&gt;
#*Porting [http://quandoparte.garage.maemo.org Quando Parte], implementing a QML patience/puzzle game, porting and adapting KGoldrunner, and writing an OpenStreetMap survey tool, all for use with MeeGo Harmattan (and future MeeGo versions).&lt;br /&gt;
# [[User:mikkov|mikkov]] http://forum.meego.com/showthread.php?t=3607&lt;br /&gt;
# [[User:Milhouse|Milhouse]] '''Device arrived'''&amp;lt;br&amp;gt;&lt;br /&gt;
#*Develop an audio recording application with geo-location support, plus other applications to improve personal productivity utilising the Harmattan notification/event view.&lt;br /&gt;
# [[User:mitrandir|mitrandir]] Ilya Skriblovsky &lt;br /&gt;
#* Port NWTBible (Bible reader)&lt;br /&gt;
#*Planaris (Hierarchical Todo list) to MeeGo&lt;br /&gt;
# [[User:mkruisselbrink|Marijn Kruisselbrink]] '''Device arrive'''&lt;br /&gt;
# [[User:mmlado|mmlado]] (Mladen Milankovic) - '''Device arrived'''&amp;lt;br&amp;gt;&lt;br /&gt;
#*Develop [https://projects.developer.nokia.com/home/user/mmlado games] in QML&lt;br /&gt;
# [[User:MSvB|MSvB]] (Michael Schloh von Bennewitz) - '''Device arrived, thank you.'''&amp;lt;br&amp;gt;&lt;br /&gt;
#*Using the device for a MeeGo lecture series in the fall, giving demos.&lt;br /&gt;
#*Application development includes LDAP client, and a chess clock.&lt;br /&gt;
# [[User:Muresandone|MuresAndone]] (Mures Andone) - '''Device arrived'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#*Develop location-aware apps with Qt/QML, an enhanced e-book reader based on FBReader engine.&lt;br /&gt;
#*Current project: Maemo Application Launcher: http://sourceforge.net/p/maplau/code/&lt;br /&gt;
# [[User:netvandal|netvandal]] (Michele Tameni)&lt;br /&gt;
#* Luca's Mirror:  It’s a simple app that transform your phone into a hand-held mirror with some other cool addictions.&lt;br /&gt;
#* Semantic experiment : Experiment with Notification Area mixed with the semantic information stored in tracker, reacting to user action with usefull notification&lt;br /&gt;
#*More info  [http://michele.tameni.it/project/meego/ Here]&lt;br /&gt;
# [[User:Nicolai|Nicolai]] (Nicolai Hess)&lt;br /&gt;
#*Port my [http://maemo.org/packages/view/scout scout] application to Qt (Application to search contacts, calendar and conversations)&lt;br /&gt;
# [http://twitter.com/#!/mja_fin mja] (Miika Ahdesmaki)&lt;br /&gt;
#* Trap, Shake, Kill 'em and other multi sensor apps' development. [http://forum.meego.com/showthread.php?t=3633] '''Nokia Developer Launchpad program approved 06Jul2011, Device available for order 07Jul2011 (ordered, OID-052820), Order sent on 13.7.2011 (email 10:40am), Received 14.07.2011.'''&lt;br /&gt;
#[[User:Nielsmayer|Niels Mayer]]&lt;br /&gt;
#*[http://wiki.meego.com/Tubelet-and-cutetube-port Rewrite cutetube-qml for MeeGo tablet UX/harmattan UX.] and add automatic-cue-point detection, and social deep-linking of media podcasts. http://nielsmayer.com/meego/qml/qmltube_1_0_6_armel.deb is already usable.... Still a ways to go [http://nielsmayer.com/ts-episode-timeline.png porting my webapp] [http://nielsmayer.com/ts-episode-evnt-anls.png that I call &amp;quot;trainspodder&amp;quot;] :-)&lt;br /&gt;
#*Infrastructure for the above: [http://code.google.com/p/qtzibit/ qtzibit: Simile-Widgets Exhibit in QtWebKit with QML integration].  For example, here's [http://nielsmayer.com/meego/qml/qtzibit-youtube.png Timeline faceted browser for 388 YouTube Episodes] [http://qtzibit.googlecode.com/svn/trunk/exhibit/src/webapp/examples/YouTube/YouTube.html can be created with very little code]. &lt;br /&gt;
#*[http://code.google.com/p/ytd-meego/wiki/CitizenJournalismWithYoutubeDirectForMeego YouTube Direct For MeeGo]&lt;br /&gt;
# [http://twitter.com/#!/gregjroberts Noobmonkey] - '''Launchpad:Accepted(06-Jul-2011) | N950eMail:07 July, 12pmGMT| Ordered:07 July 12pmGMT |Received: 14 July|  '''&lt;br /&gt;
#*Developing/Porting [http://maemo.org/downloads/product/Maemo5/healthcheck/ Healthcheck] with many new fun things (Qt)&amp;lt;BR&amp;gt;&lt;br /&gt;
#*Will Port and update [http://talk.maemo.org/showthread.php?t=65522&amp;amp;highlight=maecount MaeCount] (Qt)&amp;lt;BR&amp;gt;&lt;br /&gt;
#*Would like to develop a new game (Some ideas, and basic code for a few - so will update shortly)&amp;lt;BR&amp;gt;&lt;br /&gt;
# [[User:Nijel|Michal Čihař (Nijel)]] '''device arrived. COMPLETED'''&lt;br /&gt;
#* [https://gitorious.org/dofcalc DOF Calc]&lt;br /&gt;
#* Creating a [http://wammu.eu/ Gammu] application for phone for data synchronization and backup.&lt;br /&gt;
# [[user:nilchak|nilchak]] (Nilanjan Chakravorty) '''Device arrived'''&lt;br /&gt;
#* Finance app and Bloomberg Pricing data app&lt;br /&gt;
# [[User:niqt|niqt]] (Nicola De Filippo) -  '''Device arrived.'''&lt;br /&gt;
#*Porting my maemo5 applications [http://badge.garage.maemo.org Badge] and QLshop. &lt;br /&gt;
#*New qml game&lt;br /&gt;
#*Other mail client.&lt;br /&gt;
# [[User:olka|Oleksandr Kachur]]&lt;br /&gt;
#* Developing cloud music player integrated with Google music, Amazon music and last.fm services.&lt;br /&gt;
# [[User:omllobet|omllobet]]&lt;br /&gt;
#*Port 2d puzzle board game [http://kde-apps.org/content/show.php/kMagnet?content=109111 kMagnet] or a new 2d board puzzle game&lt;br /&gt;
# [[User:orava|orava]] (Lasse Stenberg)&lt;br /&gt;
#* Porting and further developing [http://talk.maemo.org/showthread.php?t=72982 Mapsi]&lt;br /&gt;
# [[User:ossipena|ossipena]] (Timo Pelkonen)&lt;br /&gt;
#* App for measuring distances and keeping statistics, will reveal more when I get it working well&lt;br /&gt;
#* Willing to test others apps, contact me if needed&lt;br /&gt;
# [[User:ph0b|ph0b]] &amp;lt;br /&amp;gt;&lt;br /&gt;
#* Writing tutorials to help other developers to step in MeeGo / Building MeeGo Paris network / Developing an audio player to access to more than 47 000 webradios referenced on AOL shoutcast (by name, genre, current track)&lt;br /&gt;
#[[User:Ph5|pH5]] (Philipp Zabel)&lt;br /&gt;
#* Integration of [https://www.torproject.org/ Tor] support&lt;br /&gt;
#* Porting of [http://maemo.org/downloads/product/Maemo5/frogatto/ Frogatto], pending SDL support&lt;br /&gt;
#* Porting of [https://garage.maemo.org/projects/beifahrer/ Beifahrer] and [https://garage.maemo.org/projects/cinaest/ Cinaest]&lt;br /&gt;
#[[User:philippengelhard|philippengelhard]] (Philipp Engelhard) '''Device arrived.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Develop a maze game for children and adults&lt;br /&gt;
#* Develop a &amp;quot;Nokia Bots&amp;quot; like program for alarm and battery&lt;br /&gt;
# [[User:emanymton|Boris Pohler]]&lt;br /&gt;
#* porting Zeitkonto and HandsOff (not yet released) from Maemo to Meego, maybe a rewrite with QML&lt;br /&gt;
#* other ideas in pipeline (remote for mythtv, live sports-ticker, ...)&lt;br /&gt;
#* Helping other users at the german side meego.de (there known as Cermit) &lt;br /&gt;
# [[User:pycage|pycage]] (Martin Grimme) '''Sent back defective device. Replacement device arrived. Thanks DDP!'''&lt;br /&gt;
#*Doing the Community Apps installer client. Also targetting Harmattan with my OSS MeeGo apps (which are currently mostly running on the WeTab).&lt;br /&gt;
#[[User:Qole|qole]] [http://maemo.org/downloads/product/Maemo5/easy-deb-chroot/ Easy Debian] and other projects as they arise&lt;br /&gt;
#[[User:quang|quang]] (Quang Pham) '''Device arrived.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Develop a location based services application&lt;br /&gt;
#* Test Vietnamese localization&lt;br /&gt;
# [http://maemo.org/profile/view/rambo/ rambo] (Eero af Heurlin) '''ID sent''',  '''Launchpad:Accepted''' | '''N950eMail:Yes''' | ''' Ordered:Yes ''' | '''Received:Yes'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Port [http://maemo.org/downloads/product/Maemo5/maecalories/ MaeCalories], [http://maemo.org/downloads/product/Maemo5/mobilehotspot/ Mobile hotspot] (possibly, depends on many things and might not be actually neccessary), I'm also looking into some wearable computing and augmented reality stuff, I'll have to see how suitable platform the N9(50) is going to be for that.&lt;br /&gt;
# [[User:ravirdv|ravirdv]] (Ravi Vagadia)&lt;br /&gt;
#* Trip Management App&lt;br /&gt;
#* VLC Remote&lt;br /&gt;
# [[User:raydonnelly|raydonnelly]] (Ray Donnelly) '''Device arrived.'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Investigating porting TermKit&lt;br /&gt;
#* Ensure MeeGo works ok with Necessitas SDKs Qt Creator&lt;br /&gt;
# [[User:reffy|reffy]] (Alex Tyler)&lt;br /&gt;
#* I plan to port my Subsonic client [http://maemo.org/packages/view/aerofy/ Aerofy] to the platform. I also plan to develop a range of media related applications.&lt;br /&gt;
# [[User:Rlinfati|rlinfati]] (Rodrigo Linfati) ''' ID send: 30-Jun-2011, Launchpad-Applied: 30-Jun-2011, Launchpad-Accepted: 06-Jul-2011 | N950eMail: 07-Jul-2011 | Ordered: 07-Jul-2011 | Received:14-07-2011 '''&lt;br /&gt;
#* Upgrade GoogleLatitude to the current API&lt;br /&gt;
#* Find your Frient: a apps that inform you position directly to you friend without any external server.&lt;br /&gt;
# [http://maemo.org/profile/view/rm_you/ rm_you] (Adam Harwell)&lt;br /&gt;
#* Porting [http://maemo.org/downloads/product/OS2008/advanced-backlight/ Advanced Backlight] from Maemo, adding new features&lt;br /&gt;
#* Helping with photo utility suite project (SnapGo, with GeneralAntilles and others)&lt;br /&gt;
#* Will help beta test apps for people on IRC&lt;br /&gt;
# [[User:rnazarov|rnazarov]] (Ruslan Nazarov)&lt;br /&gt;
#* Porting [https://gitorious.org/titanim TitanIM] (Vkontakte instant messenger)&lt;br /&gt;
# [[User:roman4|roman4]] (Roman Morawek)&lt;br /&gt;
#* Porting [http://babyphone.garage.maemo.org/ Babyphone] to the platform.&lt;br /&gt;
# [[User:Rzr|RzR]] (Philippe Coval) '''thank you Nokia for n950 and supporting GNU/Linux&lt;br /&gt;
#* tags: ( qt4, qml, opengl, debian, emulator, pinball, neheglqt, p-uae)&lt;br /&gt;
#* more: http://rzr.online.fr/q/handset (diary)&lt;br /&gt;
#[https://meego.com/users/sandst1 sandst1] (Topi Santakivi)&lt;br /&gt;
#* Porting FunkeySynth, a MeeGo Tablet synthesizer to Harmattan &lt;br /&gt;
#* Demo clip and further info in [http://sandst1.wordpress.com/ my blog]&lt;br /&gt;
# [https://meego.com/users/scifiguy scifiguy] (Sudheer K.) '''ID sent'''| '''Launchpad:Accepted(07-Jul-2011)''' | '''N950eMail:Yes(07-Jul-2011)''' | ''' Ordered:Yes (07-Jul-2011)''' | '''Received:Yes(18-Jul-2011)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
#* Porting [https://garage.maemo.org/projects/marketstoday Markets Today], a Stock Quotes  app to Harmattan. [http://forum.meego.com/showthread.php?t=3903 Released for Harmattan] (19-Jul-2011)&lt;br /&gt;
#* Evaluate porting of VICaR (Call router application) and new application ideas on Harmattan&lt;br /&gt;
# [[User:sebas|sebas]] (Sebastian Kügler) - ('''device arrived, thanks!''')&lt;br /&gt;
#* Bringing Plasma Active to Meego / handsets&lt;br /&gt;
# [[User:Sfietkonstantin|Sfietkonstantin]] (Lucien XU) - ('''thanks Qgil and Nokia for the N950''')&lt;br /&gt;
#* Develop a centralized public transportation system : [[TransportApp|libpublictransportation]] (first priority)&lt;br /&gt;
#* And also a game [http://sfietkonstantin.free.fr/blog/?p=11 Blog post about the game] (No gitorious yet, will come)&lt;br /&gt;
# [[User:shadymilkman|shadymilkman]] (Kyle Thomas) - ('''recieved devkit''')&lt;br /&gt;
#* Building Reedit, a reddit application [http://www.shadymilkman.com/p/n9-project.html] removed name from incomplete list.&lt;br /&gt;
# [[User:shmerl|shmerl]] (Hillel Lubman) - ('''device arrived, thanks to Nokia for open source Meego development support''')&lt;br /&gt;
#* Building/testing Firefox/Fennec (release, beta, aurora, nightly) on Meego&lt;br /&gt;
#* Porting [http://code.google.com/p/kosherjava/ Zmanim API] to C++ and preparing it for Meego as a library (libzmanim). Planned - Hebrew calendar application in Qt based on the Zmanim API.&lt;br /&gt;
# [[User:sjgadsby|sjgadsby]] (Stephen Gadsby)&lt;br /&gt;
#* writing a [[User:Sjgadsby#Preferred Shopper Card Wallet|not-yet-named wallet for store loyalty cards]]&lt;br /&gt;
# [[User:slaine|slaine]] (Glen Gray)&lt;br /&gt;
# [[User:slvr32|slvr32]] (Jason Byrne)&lt;br /&gt;
#* [https://garage.maemo.org/projects/nfqm nfqm] (Netflix Queue Manager) Qt/C++, targeting Symbian^3, Maemo 5, and Meego/Harmattan - discussion thread [http://forum.meego.com/showthread.php?t=3715 here]&lt;br /&gt;
# [[User:smoku|smoku]] (Tomasz Sterna)&lt;br /&gt;
#* Port my touch screen [http://tomasz.sterna.tv/maemo/ ports of games for Maemo] (Widelands, Bos Wars, Robbo) and UAE4All, PSX4All emulators&lt;br /&gt;
#* Port support for SIXAXIS(TM) Controller&lt;br /&gt;
#[[User:smurfy|smurfy]] (Philipp Andreas)&lt;br /&gt;
#* Porting [https://garage.maemo.org/project/fahrplan fahrplan] (Public Transportation App) for the N9&lt;br /&gt;
#[[User:solmis|solmis]] (Janne Mäkinen)&lt;br /&gt;
#* Porting/Rewriting Maemo 5 stuff&lt;br /&gt;
# [[User:Somnathbanik|Somnathbanik]] (Somnath Banik) &amp;lt;br /&amp;gt; &lt;br /&gt;
#* Porting my existing Symbian^3 multimedia applications to MeeGo/N9 with a  new and exciting UI components of Harmattan/MeeGo.&lt;br /&gt;
#* Creating simple and easy open source application to inspire beginner developers to work on MeeGo/N9 technology.&lt;br /&gt;
#[[User:sony123|sony123]] (William Su)&lt;br /&gt;
#* Porting Stockona to Harmattan.&lt;br /&gt;
#[[User:Spenap|Spenap]] (Simón Pena)&lt;br /&gt;
#* Porting and enhancing Maevies from Maemo 5 to Meego/Harmattan. Now tracked at [[User:Spenap/Butaca|Butaca]]&lt;br /&gt;
#[[User:stanokia|stanokia]] (Stani)&lt;br /&gt;
#* Develop RadioTouch to play online radio stations. Ready for testing: [http://forum.meego.com/showthread.php?t=3993 click here].&lt;br /&gt;
#* Develop a creative photo and/or camera application based on the code of the [http://www.phatch.org Phatch] project. (This code uses wxPython for the GUI. So it will take some effort to port it to PySide and QML, with which I have no previous experience yet.)&lt;br /&gt;
# [[User:Stskeeps|stskeeps]] (Carsten Munk) '''Device received'''&lt;br /&gt;
#* N950/N9 MeeGo CE work and Wayland on these devices&lt;br /&gt;
# [[user:summeli|summeli]] (Antti Pohjola) -  '''Device arrived.'''&lt;br /&gt;
#* Porting [http://www.summeli.fi/?p=2453 AntSnes] and [http://www.summeli.fi/?p=2520 gpSP] from Symbian^3 to Harmattan/MeeGo.&lt;br /&gt;
#[[User:swinkels|swinkels]] (Sławomir Musiał)&lt;br /&gt;
#* Porting [http://www.swinkels.tvtom.pl/eCards eCards] - Application for creating and sending e-cards&lt;br /&gt;
# [[user:syrjala|syrjala]] (Ville Syrjälä)&lt;br /&gt;
#* Porting [https://gitorious.org/maemo-tvout-control maemo-tvout-control]&lt;br /&gt;
# [[user:tassu|tassu]] (Tapio Pyrhönen)&lt;br /&gt;
#* [http://tapsa.bitmagick.com/nds/ My site] - Porting my old DS games and making new ones.&lt;br /&gt;
# [[user:teo|teo]] (Teo Mrnjavac)&lt;br /&gt;
#* [http://teom.wordpress.com My blog]&lt;br /&gt;
#* [http://ur1.ca/4kkwh Porting] [http://amarok.kde.org Amarok] to tablets and handsets running MeeGo/Harmattan.&lt;br /&gt;
# [[User:texrat|texrat]] (Randall Arnold, Community Device Program Lead)&lt;br /&gt;
# [[User:thebootroo|thebootroo]] (Thomas Boutroue, Developer/Designer)&lt;br /&gt;
#* [https://gitorious.org/meego-community-mobile-ux-ng Gitorious] - Making a C++ Declarative-based Visual Components API Lib, alternative to plain QML, or specific platform Components&lt;br /&gt;
#* [http://modern-os.projects.servhome.org/mobileApps/ MobileApps] - Porting my old Maemo5 apps to my new Lib, and creating new ones&lt;br /&gt;
#[[User:Theonehumble|Stephan Bulgin]]&lt;br /&gt;
#*Porting NXEngine&lt;br /&gt;
#*In the process of re-writing DonQt for MeeGo/Harmattan.(will most likely be a name change and better code.)&lt;br /&gt;
# [[user:thp|thp]] (Thomas Perl)&lt;br /&gt;
#* [http://gpodder.org/ gPodder] - Integrating gPodder with Harmattan (including specific APIs)&lt;br /&gt;
#* Open source work on Python-related APIs (PySide, etc..) + Python tutorials&lt;br /&gt;
#* Get [[Games|Mong]] in shape for Harmattan&lt;br /&gt;
#* Port over some of my existing [http://maemo.org/profile/view/thp/ Maemo 5 apps]&lt;br /&gt;
# [[user:tigerite|tigerite]] (Peter Hunt)&lt;br /&gt;
#* Integrating the BFS CPU scheduler https://garage.maemo.org/projects/kernel-bfs/ into the N9/50 kernel, along with the Budget Fair Queueing I/O scheduler http://algo.ing.unimo.it/people/paolo/disk_sched/&lt;br /&gt;
#* Porting projects such as the Phoronix Test Suite http://www.phoronix-test-suite.com/ to Harmattan&lt;br /&gt;
#* Converting a Flash cards based learning system which I developed, loosely based on the one found at http://www.educationlabs.com/projects/flashcards/Pages/default.aspx, from C#/XAML to Qt/QML and making it standalone&lt;br /&gt;
# [[User:timoph|timoph]] (Timo Härkönen)&lt;br /&gt;
#* [http://gitorious.org/random-timoph impuzzle, etc.]&lt;br /&gt;
#* [http://timoph.fi timoph.fi]&lt;br /&gt;
#* [https://build.pub.meego.com/project/show?project=home%3Atimoph Community OBS home project]&lt;br /&gt;
# [[User:timsamoff|timsamoff]] (Tim Samoff)&lt;br /&gt;
#* [http://thp.io/2011/mong/ Plonk]&lt;br /&gt;
#* MeeGo Community Apps website design&lt;br /&gt;
#* A few other things that are brewing (games, sound generators, etc.)&lt;br /&gt;
# [[User:tronic|Tronic]] (Lasse Kärkkäinen)&lt;br /&gt;
#* [http://performous.org/ Performous] singing/band game&lt;br /&gt;
# [[User:tswindell|tswindell]] (Tom Swindell)&lt;br /&gt;
#* [http://stage.rubyx.co.uk/columbus columbus]&lt;br /&gt;
#[[User:twoboxen|twoboxen]] (Matt Hawkins)&lt;br /&gt;
#* Porting [https://code.google.com/p/hawkengine hawkengine] to Meego &lt;br /&gt;
#* Porting [https://sites.google.com/site/hawkorn/games games] via hawkengine &lt;br /&gt;
#[[User:v13|v13]] (Stefanos Harhalakis)&lt;br /&gt;
#* Port WifiEye from maemo to meego&lt;br /&gt;
#* Port MaeGirls from maemo to meego&lt;br /&gt;
#* Perhaps complete MaeSlap and release it for meego&lt;br /&gt;
#[[User:vandenoever|vandenoever]] (Jos van den Oever)&lt;br /&gt;
#*Porting [http://webodf.org WebODF] to MeeGo using QML and JavaScript.&lt;br /&gt;
#*[http://www.webodf.org/redmine/projects/webodf/wiki/WebODF_on_an_N950 WebODF on an N950]&lt;br /&gt;
#*Experiment with a semantic logging tool.&lt;br /&gt;
#*Experiment with a [http://blogs.kde.org/node/4161 metronome application] in QML.&lt;br /&gt;
#[https://meego.com/users/vasvlad Uladzislau Vasilyeu] (Vasvlad)  &lt;br /&gt;
#* Porting OMWeather to Harmattan&lt;br /&gt;
#[[User:Asys3|Uwe Koch]] (Uwe Koch)&lt;br /&gt;
#*Port hopefully all of my games Lineo,Q,TwinDistress,Sokoban and Jooleem&lt;br /&gt;
#[[User:Venemo|Venemo]] (Timur Kristóf)&lt;br /&gt;
#* [http://wiki.meego.com/User:Venemo/HarmattanPlans My Harmattan Plans]&lt;br /&gt;
#** [http://gitorious.org/colorful-apps/puzzle-master Puzzle Master]&lt;br /&gt;
#** [http://forum.meego.com/showthread.php?t=3711 Public transportation app] (Click on the [http://forum.meego.com/showthread.php?t=3711 link] and post to the thread if you are interested to contribute.)&lt;br /&gt;
#** [https://gitorious.org/colorful-apps/memory-game Memory game]&lt;br /&gt;
#** Labirynth game (No code available yet)&lt;br /&gt;
#[[User:Vgrade|vgrade]] (Martin Brook)&lt;br /&gt;
#*I would plan to contnue my contributions to the N900 Community Edition of MeeGo which I assume will push right through into the N9. I am very interested in contributing to the exciting new architecture #*built on Wayland to give this device the best user experience.&lt;br /&gt;
#*Local Network Meetups, Cambridge, Birmingham, Koln, Dusseldorf&lt;br /&gt;
#[[User:vitaminj|VitaminJ]] (Stephen Spencer)&lt;br /&gt;
#* [http://jenkins.vitaminj.co.uk/job/meex/ Meex], a portable DJing application&lt;br /&gt;
#[[User:vitna|vitna]] '''COMPLETED&lt;br /&gt;
#*My actual project is http://forum.meego.com/showthread.php?t=3652, but i have in program to develop much more game for the Harmanattan platform&lt;br /&gt;
#[[User:vudentz|vudentz]] (Luiz Augusto von Dentz) '''COMPLETED&lt;br /&gt;
#*Porting upstream BlueZ and obexd&lt;br /&gt;
#[[User:w00t|w00t]] (Robin Burchell)&lt;br /&gt;
#* meego-ux hackery, Groovy, anything else I think of that's interesting&lt;br /&gt;
#[[User:wazd|wazd]] (Andrew Zhilin)&lt;br /&gt;
#* OMWeather, Live Wallpapers, BlueMaemo, Ati85, QML gPodder, tons of other design-related stuff&lt;br /&gt;
#[[User:Wicket|wicket]] (David Derby)&lt;br /&gt;
#*Porting [http://www.6809.org.uk/dragon/xroar.shtml XRoar - Dragon &amp;amp; CoCo emulator] and [http://icculus.org/avp/ Aliens versus Predator (Gold Edition) game engine].&lt;br /&gt;
# [[user:wonko|wonko]] (Ruediger Gad)&lt;br /&gt;
#* Amongst other things I'll port my existing applications for Maemo5/Fremantle to MeeGo/Harmattan: VU Meter, StultitiaSimplex, Zeecontrol, Advanced Clock Plugin (for details please see my page).&lt;br /&gt;
# [[User:Xando|xando]] (Sebastian Pawluś) &lt;br /&gt;
#* Porting [https://github.com/xando/thesis/tree/master/locit-client LocIt] application from N900 Maemo to Meego system.[https://github.com/xando/thesis/blob/master/thesis/Obrazki/UiFlowDiagram.pdf?raw=true pics]&lt;br /&gt;
# [[user:xawotihs|xawotihs]]&lt;br /&gt;
#* Porting [http://code.google.com/p/wagic/ Wagic] on Harmattan based on either Qt or SDL.&lt;br /&gt;
#[[user:xerxes2|xerxes2]] (Jens Persson)&lt;br /&gt;
#* [http://gpodder.org/panucci Panucci] - Resuming audiobook and podcast player&lt;br /&gt;
#* Meego CE&lt;br /&gt;
# [[user:xfade|X-Fade]] (Niels Breet)&lt;br /&gt;
#* Set up &amp;amp; Testing Harmanttan building on MeeGo Community OBS&lt;br /&gt;
# [[user:zaheerm|zaheerm]] (Zaheer Merali)&lt;br /&gt;
#* Porting [http://gstreamer.freedesktop.org GStreamer] plugins not shipped by Nokia to Harmattan&lt;br /&gt;
#* Porting [http://www.flumotion.net Flumotion] an open source streaming solution to Harmattan taking advantage of the hardware encoding and the camera&lt;br /&gt;
# [[user:zas|zas]] (Matti Henrik Kinen)&lt;br /&gt;
#* Setting up SDK&lt;br /&gt;
# [[user:zchydem|zchydem]] (Marko Mattila) '''Device arrived'''&lt;br /&gt;
#* QuickFlickr - QML based flickr client for mobile handsets.&lt;br /&gt;
# [[user:zeamoceq|zeamoceq]] (Olle Tränk)&lt;br /&gt;
#* Porting [http://qticksize.zeamoceq.net qTickSize] (interface to Swedish online stock broker)&lt;br /&gt;
# [https://meego.com/users/zehjotkah zehjotkah] (Cosimo Kroll)&lt;br /&gt;
#* [http://wiki.maemo.org/MeeGo_Coding_Competition_2011 MeeGo Coding Competition 2011]&lt;br /&gt;
# [[user:zeenix|zeenix]] (Zeeshan Ali)&lt;br /&gt;
#* Ensuring [http://www.gupnp.org GUPnP]/[http://www.rygel-project.org Rygel] works on N9.&lt;br /&gt;
#* Possibly porting/writing [http://spice-space.org SPICE] client for&lt;br /&gt;
#* N9/MeeGo.&lt;br /&gt;
# [[user:nowheremanmail|nowheremanmail]] David Galindo&lt;br /&gt;
#* N950 received Thanks!. Starting to migrate Wallet and Calculus.&amp;lt;br/&amp;gt;&lt;br /&gt;
#* [http://www.nowhereman.eu]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ############################################################### --&amp;gt;&lt;br /&gt;
&amp;lt;!-- #  Do NOT paste yourself here - add yourself alphabetically!  # --&amp;gt;&lt;br /&gt;
&amp;lt;!-- #         Ensure your meego.com nick is first and your        # --&amp;gt;&lt;br /&gt;
&amp;lt;!-- #             full name is in brackets afterwards             # --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ############################################################### --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Updated Questions and answer for those people awaiting N950 Dev Kits:''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) '''If you have registered for the launchpad, please wait.'''&lt;br /&gt;
If you want to find out more information you can email the launchpad team, but a quick response is unlikely.&lt;br /&gt;
''Also, Quim will be emailing / sending all of the names and accounts across, therefore, if they have any questions / problems contacting devs they'll let Quim know.''&lt;br /&gt;
&lt;br /&gt;
2) '''Timeline - Timescale'''&lt;br /&gt;
There is no defined deadline or timescale for this. Keep an eye on the delivered and pending sections below, as people are posting dates / times.&lt;br /&gt;
If things start happening and you feel you are being left out - please then email the Nokia Developer launchpad teams. But until then, not much communication if any will be received. Hold tight and please wait.&lt;br /&gt;
If your status is similar to someone else's, and in the same batch, and they get a device, wait a few days then fire a message to the launchpad team or here. No point asking the same questions on the forum. Most of the devs mentioned below are also on twitter, so ask there or elsewhere on the forums if really needed.&lt;br /&gt;
&lt;br /&gt;
3) '''Timescale Part 2 - Patience!'''&lt;br /&gt;
Arranging, confirming, emailing, packaging and sending 250 devices is not a day's job. &lt;br /&gt;
Realistically expect a few weeks once they have started being sent out.&lt;br /&gt;
Be clear in all contact emails you send, to speed up the process - include account names and any other IDs requested/required. It is hard for people to swap from real names, nicknames, etc on a list of 250+ people..&lt;br /&gt;
&lt;br /&gt;
4) '''People who already are registered with Launchpad''' &lt;br /&gt;
If you have a launchpad account (Lucky you) there is an option which allows you to select available devices, however, nothing is certain as of now, therefore that may not be the route. &lt;br /&gt;
Once the team start going through the list, it sounds sensible that they will start emailing / contacting the people on the list with instructions, confirmations and/or queries. (see below! - thank you Jaffa for the update)&lt;br /&gt;
Update - It seems the next step once the launchpad section is confirmed may be an email from '''no.reply-developer@nokia.com''', subject &amp;quot;A Nokia N950 is waiting for you&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5) '''Why have I heard nothing from Launchpad?'''&lt;br /&gt;
There is no launchpad confirmation email (But if you try to register again it says that there is already an application waiting) - therefore.... re-register if you have to. Just make sure you use the individual and not company registration. (There is however a developer registration email! - and logging in also proves that stage works!)&lt;br /&gt;
&lt;br /&gt;
6) '''&amp;quot;I didn't realize this was happening, can I still apply for one?&amp;quot;'''&lt;br /&gt;
Answer- &amp;quot;Short term: register to http://developer.nokia.com and watch Nokia developer activities in your country. &amp;quot;&lt;br /&gt;
- '''This program is closed''', but as Quim says, keep your eyes on the internet, as there are other programs and similar things available, and different countries where Nokia reps do things too&lt;br /&gt;
&lt;br /&gt;
7) '''Why is Nokia Developer saying the device program has been closed, and we still do not have our devices? *rant rant*'''&lt;br /&gt;
There are other device programs being run separately to the MeeGo DevKit program. The programs are not joined, but the team that sends out the devices is the same. Therefore, any messages you read are not exclusive to this particular set of 250 devices. Other programs may or may not appear across other Nokia sites, they are all separate from this one.&lt;br /&gt;
&lt;br /&gt;
If you have been accepted, don't panic - they have not gone out yet! (As far as we all know!) &lt;br /&gt;
''Please do update this section if you feel other questions from the forum have been answered?''&lt;br /&gt;
&lt;br /&gt;
== General thoughts on device program ==&lt;br /&gt;
&lt;br /&gt;
The Nokia N950 is a platform available now for developers targeting the Nokia N9 and MeeGo handset apps in general. Technical details are available at http://developer.nokia.com/swipe&lt;br /&gt;
&lt;br /&gt;
Candidates must be community developers ready to start working on new or existing open source applications, to be published in apps.meego.com and the Nokia Store. Links to your current projects are relevant! Deadline for applications: end of Tuesday, June 28th.&lt;br /&gt;
&lt;br /&gt;
Questions &amp;amp; comments: http://forum.meego.com/showthread.php?t=3597&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: *commercial* developers are encouraged to apply directly at http://developer.nokia.com - thank you for your understanding.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Participants</id>
		<title>Release Infrastructure/BOSS/Participants</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Participants"/>
				<updated>2011-07-30T09:25:04Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add instructions for osc installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&gt;
== Installation Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Some partiticipants will require the osc tool to interact with OBS. This will be installed as a dependency to relevant participants.&lt;br /&gt;
The version included in Debian is too old and the required repository must be added:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT-tools.list&lt;br /&gt;
deb http://download.opensuse.org/repositories/openSUSE:/Tools/Debian_6.0/ /&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OBS prechecks ==&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-prechecks&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-participant-prechecks&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
Configuration : The file at /etc/oscrc needs to be edited so that these participants can communicate with the OBS instance.&lt;br /&gt;
&lt;br /&gt;
=== check_already_testing ===&lt;br /&gt;
Compares the checksum of the packages being submitted to packages of the same&lt;br /&gt;
name possibly in the Testing project. If the checksum matches it sets STATUS&lt;br /&gt;
= FAILED&lt;br /&gt;
&lt;br /&gt;
This is for over-eager developers - or if two people in a team submit&lt;br /&gt;
close together.&lt;br /&gt;
&lt;br /&gt;
=== check_no_changes ===&lt;br /&gt;
Compares the checksum of the packages being submitted to packages of the same&lt;br /&gt;
name possibly in the Target project. If the checksum matches it sets STATUS =&lt;br /&gt;
FAILED&lt;br /&gt;
&lt;br /&gt;
Developers sometimes submit without doing a proper update - this&lt;br /&gt;
catches that situation.&lt;br /&gt;
&lt;br /&gt;
=== check_multiple_destinations ===&lt;br /&gt;
Checks if the request tries to submit packages to multiple projects at the same&lt;br /&gt;
time and sets STATUS = FAILED if so&lt;br /&gt;
&lt;br /&gt;
=== check_package_is_complete ===&lt;br /&gt;
Checks if each of the packages being submitted contains at least the following&lt;br /&gt;
files :&lt;br /&gt;
  * Source tarball : *.tar.gz *.tar.bz2 or *.tgz&lt;br /&gt;
  * Changes file : *.changes&lt;br /&gt;
  * Spec file : *.spec&lt;br /&gt;
and sets STATUS = FAILED if not&lt;br /&gt;
&lt;br /&gt;
Nb the presence of the .changes file is important for the changelog&lt;br /&gt;
participants to operate correctly&lt;br /&gt;
&lt;br /&gt;
=== check_package_built_at_source ===&lt;br /&gt;
&lt;br /&gt;
Prerequisite : check_has_valid_repo&lt;br /&gt;
&lt;br /&gt;
Checks if the packages being submitted are built successfully against the &lt;br /&gt;
designated target repository for the architectures of interest and sets STATUS = FAILED if not&lt;br /&gt;
&lt;br /&gt;
=== check_spec ===&lt;br /&gt;
Checks if the spec file of each of the packages being submitted is valid. Currently&lt;br /&gt;
the only validity check applied is that it shouldn't contain the %changelog tag&lt;br /&gt;
and sets STATUS = FAILED if it does&lt;br /&gt;
&lt;br /&gt;
OBS is responsible for inserting the .changes file contents into the spec file.&lt;br /&gt;
&lt;br /&gt;
=== get_submitter_email ===&lt;br /&gt;
Gets the request submitter email from OBS and makes sure it is not an empty string&lt;br /&gt;
sets STATUS = FAILED otherwise.&lt;br /&gt;
&lt;br /&gt;
=== check_submitter_is_maintainer ===&lt;br /&gt;
Checks the request submitter is actually a maintainer in the source project from&lt;br /&gt;
which the request is origination, sets STATUS = FAILED otherwise.&lt;br /&gt;
&lt;br /&gt;
=== check_has_valid_repo ===&lt;br /&gt;
Finds a repository in the source project that builds ONLY against a certain target&lt;br /&gt;
project / repo , sets STATUS = FAILED if it does not find one.&lt;br /&gt;
&lt;br /&gt;
=== check_has_relevant_changelog ===&lt;br /&gt;
&lt;br /&gt;
Prerequisite : get_relevant_changelog&lt;br /&gt;
&lt;br /&gt;
Checks that each package in the request actions has a non empty relevant change entries field.&lt;br /&gt;
&lt;br /&gt;
Use this if you want to enforce that new entries be added to the .changes file before allowing a request to be accepted.&lt;br /&gt;
&lt;br /&gt;
=== check_is_from_devel :regexp ===&lt;br /&gt;
&lt;br /&gt;
Checks that each package in the request originates from a project the matches the regexp provided as a parameter.&lt;br /&gt;
&lt;br /&gt;
== Resolving Requests ==&lt;br /&gt;
&lt;br /&gt;
Package : [https://build.pub.meego.com/package/show?package=boss-participant-resolverequest&amp;amp;project=Project:MINT boss-participant-resolverequest]&lt;br /&gt;
&lt;br /&gt;
=== change_request_state ===&lt;br /&gt;
&lt;br /&gt;
Used to accept or decline a submit request.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* :action (accept/reject) : Determines what to do with the request&lt;br /&gt;
&lt;br /&gt;
Fields:&lt;br /&gt;
* 'msg' : The contents of the 'msg' array in the workitem is used as the action message&lt;br /&gt;
&lt;br /&gt;
Config:&lt;br /&gt;
* See [[#OBS / BuildService Participants]]&lt;br /&gt;
&lt;br /&gt;
=== build_trial ===&lt;br /&gt;
&lt;br /&gt;
=== revert_trial ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Changelog ==&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-getchangelog&lt;br /&gt;
&lt;br /&gt;
* branch skynet&lt;br /&gt;
&lt;br /&gt;
=== get_changelog ===&lt;br /&gt;
&lt;br /&gt;
Gets the .changes file from the project/package and puts it into the&lt;br /&gt;
'changelog' field.  Note that for SRCSRV_REQUEST_*, project is the&lt;br /&gt;
_target_ and may not return the expected log.  &lt;br /&gt;
Thus get_relevant_changelog may be more relevant for that case.&lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
* /etc/skynet/&lt;br /&gt;
&lt;br /&gt;
=== get_relevant_changelog ===&lt;br /&gt;
&lt;br /&gt;
Gets the .changes file for the source project/package/revision and&lt;br /&gt;
does a diff against the target project/package putting the 'added'&lt;br /&gt;
lines into a 'relevant_changelog' field for each package in the &lt;br /&gt;
request's actions array.&lt;br /&gt;
&lt;br /&gt;
This is particularly useful for acting on external links such as bug#&lt;br /&gt;
or feature# mentioned in the new changelog lines.&lt;br /&gt;
&lt;br /&gt;
The complexity of a diff provides for situations where multiple&lt;br /&gt;
changelog entries are made in one area of a project before the package&lt;br /&gt;
is finally accepted.&lt;br /&gt;
&lt;br /&gt;
== Bugzilla ==&lt;br /&gt;
&lt;br /&gt;
Interacts with bugzilla to:&lt;br /&gt;
* add comments to bugs&lt;br /&gt;
* change bug status&lt;br /&gt;
&lt;br /&gt;
Links :&lt;br /&gt;
* GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-bugzilla&lt;br /&gt;
* Package : https://build.pub.meego.com/package/show?package=boss-participant-bugzilla&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
* Configuration : The file at /etc/skynet/bugzilla.conf needs to be edited so that the participant can communicate with the Bugzilla instance. The file has lots of comments to explain the settings.&lt;br /&gt;
&lt;br /&gt;
Prerequisites :&lt;br /&gt;
* Bugzilla with REST api installed (https://wiki.mozilla.org/Bugzilla:REST_API)&lt;br /&gt;
* get_relevant_changelog&lt;br /&gt;
&lt;br /&gt;
Takes the following parameters (can be different depending on the target bugzilla):&lt;br /&gt;
* status :           UNCONFIRMED/NEW/ASSIGNED/REOPENED/RESOLVED/VERIFIED/CLOSED&lt;br /&gt;
* resolution :       FIXED/INVALID/WONTFIX/DUPLICATE/WORKSFORME/MOVED&lt;br /&gt;
For the comment :&lt;br /&gt;
* comment :          Comment text for the bug&lt;br /&gt;
or&lt;br /&gt;
* template :         Cheetah template file passed the workitem hash&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
== Image Creation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notification ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-notify&lt;br /&gt;
&lt;br /&gt;
NOTE: skynet branch for now&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-participant-notify&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== notify ===&lt;br /&gt;
Email notification based on templates.&lt;br /&gt;
&lt;br /&gt;
=== notify_irc :msg, :irc_channel ===&lt;br /&gt;
#TODO IRC notification to an IRC bot.&lt;br /&gt;
&lt;br /&gt;
== OBS / BuildService Participants ==&lt;br /&gt;
&lt;br /&gt;
Several participants interact with the OBS using the buildservice library.&lt;br /&gt;
&lt;br /&gt;
They use the skynet configuration system to look for an 'oscrc' value&lt;br /&gt;
in the [obs] section.&lt;br /&gt;
eg&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[obs]&lt;br /&gt;
oscrc = /etc/skynet/default.oscrc&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a normal oscrc file (mode 600) and should contain [apiurl] sections with&lt;br /&gt;
an aliases section that includes the namespace value set by the OBS in&lt;br /&gt;
the obsEvent (see BSConfig.pm)&lt;br /&gt;
eg:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[https://api.pub.meego.com]&lt;br /&gt;
aliases=OBS&lt;br /&gt;
user=&amp;lt;user&amp;gt;&lt;br /&gt;
passx=&amp;lt;passx&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Migrating_from_N900_to_N950</id>
		<title>Migrating from N900 to N950</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Migrating_from_N900_to_N950"/>
				<updated>2011-07-28T20:35:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: tips&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Should this go as a page under [[Community Office/Community device program/Nokia]]?'''&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Lots of developers will be transitioning from an N900 to an N950 as their primary device as part of the [[Community Office/Community device program/Nokia|device programme]]. This transition allows people to get a feel for Harmattan and work out what itches they need to scratch.&lt;br /&gt;
&lt;br /&gt;
The following is a small list of points which helped the author(s) get started. '''It is not indicative of steps necessary on the N9, and is based on the initial steps taken by the author when he received his pre-production, developer device.'''&lt;br /&gt;
&lt;br /&gt;
Other channels: IRC:freenode.net #harmattan&lt;br /&gt;
&lt;br /&gt;
== Developing apps ==&lt;br /&gt;
&lt;br /&gt;
If you have done this before, check out [[Porting Fremantle Applications to Harmattan]].&lt;br /&gt;
&lt;br /&gt;
If you are starting from scratch, use QML, not QWidgets (unfortunately the QtCreator tutorials are outdated and show use of QWidgets).  Get started reading about the [http://library.developer.nokia.com/index.jsp?topic=/MeeGo_1.2_Harmattan_API/html/guide/html/Developer_Library_Application_development_framework_ebcf.html MeeGo 1.2 Harmattan API] and be sure to digest the [http://library.developer.nokia.com/topic/MeeGo_1.2_Harmattan_API/html/guide/html/Developer_Library_Best_practices_for_application_development_fc5f.html Best Practices] section.&lt;br /&gt;
&lt;br /&gt;
== Building packages in Scratchbox ==&lt;br /&gt;
&lt;br /&gt;
Follow the instructions in [http://www.developer.nokia.com/Community/Wiki/Harmattan:Platform_Guide/Publishing_with_Harmattan_Platform_SDK/Packaging_your_application_with_Harmattan_Platform_SDK the official Harmattan Platform Guide page] on packaging.&lt;br /&gt;
&lt;br /&gt;
A hint for the experienced: if you have a source deb for a different platform then it's just a matter of unpacking it with dpkg -x *.dsc, cd'ing inside package-version/ and running:&lt;br /&gt;
&lt;br /&gt;
 dpkg-buildpackage -us -uc -b -rfakeroot&lt;br /&gt;
&lt;br /&gt;
Another protip: 'debuild' tends to fail with fakeroot-related problems where dpkg-buildpackage succeeds.&lt;br /&gt;
&lt;br /&gt;
== Events feed ==&lt;br /&gt;
1.2011.22-6 is a pre-production, developer edition. It only has Facebook integration for chat and events, no Google Talk or Twitter. RSS feeds can be set, in the ''Feeds'' application, to appear here.&lt;br /&gt;
&lt;br /&gt;
== Contacts ==&lt;br /&gt;
Some N900s are unreliable with Bluetooth connections. To transfer all the contacts from your N900 to your Harmattan device, including avatars:&lt;br /&gt;
&lt;br /&gt;
* Delete any Facebook accounts on your Harmattan device&lt;br /&gt;
* Delete all contacts&lt;br /&gt;
* Do ''not'' try to use the &amp;quot;sync your phone&amp;quot; feature from the N950 (if you've tried it, delete the channel on both the N950 and N900)&lt;br /&gt;
* ''N900:'' go to Settings &amp;gt; Transfer &amp;amp; sync &amp;gt; New. Define a new send-only, contacts-only channel to the N950 (which should have Bluetooth switched on and visible)&lt;br /&gt;
&lt;br /&gt;
This method does NOT transfer any IM-only contacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be added that the BT sync from the N950 can be used. At least it worked without any issues for me. YMMV it would seem. -lardman&lt;br /&gt;
&lt;br /&gt;
== Email ==&lt;br /&gt;
Replying/quoting is FUBAR in 1.2011.22-6 (no ability to edit quote, forced top posting). With Gmail over IMAP, ''Delete'' now deletes messages, rather than archiving them (as it did in Modest). To &amp;quot;archive&amp;quot; email, move it to the ''All mail'' folder.(There's definitely an opportunity for someone to write a good Gmail client!)&lt;br /&gt;
&lt;br /&gt;
=== Hotmail ===&lt;br /&gt;
&lt;br /&gt;
If you want your folders &amp;amp; state to appear on the device, use '''Mail for Exchange''' for your Hotmail account. [http://windowsteamblog.com/windows_live/b/windowslive/archive/2010/08/30/hotmail-now-supports-push-email-calendar-and-contacts-with-exchange-activesync.aspx The settings can be found here.]&lt;br /&gt;
&lt;br /&gt;
== Syncing multiple Google Calendars ==&lt;br /&gt;
This Harmattan build supports multiple Mail for Exchange and multiple CalDAV accounts. For Google Calendar:&lt;br /&gt;
&lt;br /&gt;
* Go to Accounts &amp;gt; Add accounts &amp;gt; CalDAV&lt;br /&gt;
* Username should be your full Google Calendar username (e.g. jbloggs@gmail.com) and password.&lt;br /&gt;
* The URL is:&lt;br /&gt;
** For your primary calendar: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://www.google.com/calendar/dav/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** For other calendars: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://www.google.com/calendar/dav/uuid@group.calendar.google.com/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
** For some users, the primary calendar will only work with, supposing your e-mail is jbloggs@gmail.com: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://www.google.com/calendar/dav/jbloggs@gmail.com/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
The ''uuid'' can be found on the calendar settings page within Google Calendar, and is a long string of characters &amp;amp; numbers.&amp;lt;br /&amp;gt;&lt;br /&gt;
The trailing slashes are ''crucial'' for Google.&lt;br /&gt;
&lt;br /&gt;
* The primary calendar claimed to sync, but no events showed up. So I deleted the CalDAV entry for my primary calendar and set up Mail for Exchange:&lt;br /&gt;
** Username is your full Google Calendar username and password&lt;br /&gt;
** Server: &amp;lt;code&amp;gt;m.google.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* I synced [[User:Vitaminj|my]] primary calendar using the syntax of the second URL (with my Google login email instead of uuid@google) and it worked great. YMMV.&lt;br /&gt;
&lt;br /&gt;
== Conversations ==&lt;br /&gt;
Unknown at this time&lt;br /&gt;
&lt;br /&gt;
== Map loader ==&lt;br /&gt;
Maps contains a ''Manage Maps'' feature which downloads, but doesn't expand. It is possible to do it manually, though:&lt;br /&gt;
&lt;br /&gt;
# Connect your device as USB mass storage&lt;br /&gt;
# Open &amp;lt;code&amp;gt;cities/MapLoader/catalog-....xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Find the region you want to download&lt;br /&gt;
# Take the &amp;lt;code&amp;gt;Link&amp;lt;/code&amp;gt; element and append it to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://static.s2g.gate5.de/map5/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. For example, the UK maps are at http://static.s2g.gate5.de/map5/maploaderzip-00.02.42.122/48210.zip&lt;br /&gt;
# Copy the contents of the zip file to &amp;lt;code&amp;gt;cities/diskcache/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
Hopefully this is a bug in 1.2011.22-6: ringtones and gPodder podcasts appear in the ''Music'' app; and will play on an all songs shuffle. This can be fixed by editing Tracker configuration:&lt;br /&gt;
&lt;br /&gt;
== Tracker ==&lt;br /&gt;
Tracker config file can be found at: &lt;br /&gt;
 /home/user/.config/tracker/tracker-miner-fs.cfg&lt;br /&gt;
&lt;br /&gt;
Edit the file as regular &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; and add to the semi-colon separated &amp;lt;code&amp;gt;IgnoredDirectories&amp;lt;/code&amp;gt; list.&lt;br /&gt;
&lt;br /&gt;
Tracker indexes file system and applications. Haven't tried ''(could someone please confirm?)'' but re-indexing should be triggered with following command:&lt;br /&gt;
 /usr/lib/tracker/tracker-store -r (or /usr/lib/tracker/tracker-store --force-reindex)&lt;br /&gt;
&lt;br /&gt;
== Notification light ==&lt;br /&gt;
N950 has only single white led instead of N900's RGB LED. The led is driven with same config file:&lt;br /&gt;
 /etc/mce/mce.ini&lt;br /&gt;
&lt;br /&gt;
It seems that you can also modify the functionality of power button with &amp;lt;code&amp;gt;mce.ini&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Don't know if the services you must restart are the same than in N900 though.&lt;br /&gt;
&lt;br /&gt;
== root ==&lt;br /&gt;
The default root password is &amp;lt;code&amp;gt;rootme&amp;lt;/code&amp;gt; (as in the 770 days ;-)). You can get root to change it (using &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt;) using:&lt;br /&gt;
&lt;br /&gt;
  ssh root@localhost&lt;br /&gt;
&lt;br /&gt;
...or:&lt;br /&gt;
&lt;br /&gt;
  devel-su&lt;br /&gt;
&lt;br /&gt;
== Security framework ==&lt;br /&gt;
&lt;br /&gt;
Aegis is the name of the platform security system.  If you understand POSIX file ownership-based security, '''this is not that'''.  Forget that root can read from or write to all files (it cannot on the N950).&lt;br /&gt;
&lt;br /&gt;
N950s given to developers have '''Aegis turned on'''.&lt;br /&gt;
&lt;br /&gt;
If you edit protected files, like some config files or some shell scripts, '''you may have to re-flash the device'''!  Don't do this.&lt;br /&gt;
&lt;br /&gt;
You can enable running of arbitrary binaries by running:&lt;br /&gt;
&lt;br /&gt;
 develsh&lt;br /&gt;
 aegis-developer-mode --relaxed-exec&lt;br /&gt;
&lt;br /&gt;
...and then '''reboot'''ing.&lt;br /&gt;
&lt;br /&gt;
found useful for root (runs commands that otherwise wouldn't run):&lt;br /&gt;
 devel-su -c bash&lt;br /&gt;
&lt;br /&gt;
As a temporary workaround, liberal use of &amp;lt;code&amp;gt;chmod 777 ...&amp;lt;/code&amp;gt; for a moment before &amp;lt;code&amp;gt;cp ...&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;chmod 700 ...&amp;lt;/code&amp;gt; after (as user) can work; &amp;lt;code&amp;gt;su -c user chmod&amp;lt;/code&amp;gt; will work as root too.&lt;br /&gt;
&lt;br /&gt;
=== Harmattan Security FAQ ===&lt;br /&gt;
&lt;br /&gt;
There is an [http://library.developer.nokia.com/index.jsp?topic=/MeeGo_1.2_Harmattan_API/html/guide/html/Developer_Library_Developing_for_Harmattan_Harmattan_security_Security_guide_Harmattan_security_FAQ_3358.html Harmattan Security FAQ] that has very useful tips.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
&lt;br /&gt;
* http://www.developer.nokia.com/Community/Discussion/showthread.php?226594-Running-console-apps-on-n950-Operation-not-permitted&lt;br /&gt;
* http://forum.meego.com/showthread.php?t=3827&lt;br /&gt;
* http://pastebin.com/C5jbvj7N&lt;br /&gt;
* http://lwn.net/Articles/372937/&lt;br /&gt;
* http://fruct.org/conf7/Kasatkin_Maemo_6_Security_Framework.pdf&lt;br /&gt;
* http://www.developer.nokia.com/Community/Wiki/Harmattan:Developer_Library/Developing_for_Harmattan/Harmattan_security/Security_guide#Overview_of_application_security&lt;br /&gt;
* http://www.slideshare.net/reshetov/maemo-platform-security-fosdem&lt;br /&gt;
* http://www.developer.nokia.com/Community/Wiki/Harmattan:Platform_Guide/Harmattan_platform_and_Platform_SDK_overview/Security_domain_overview&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
Launch ''Boosted Widget Gallery'' from the applications list, and select ''Debug tools &amp;gt; Take a screenshot''. Ctrl-Shift-P also works, as on N900, but only in stock (MTF?) screens.&lt;br /&gt;
&lt;br /&gt;
They can be shared from ''Gallery'' (they are stored in ~/MyDocs/.images)&lt;br /&gt;
&lt;br /&gt;
== Task switching ==&lt;br /&gt;
=== Accesssing ===&lt;br /&gt;
In addition to the swipe, the up-right arrow &amp;amp; backspace shortcut works almost similarly to Ctrl-Backspace on the N900.&lt;br /&gt;
&lt;br /&gt;
=== Rotation ===&lt;br /&gt;
Out of the box, applications which use Qt Components and lock themselves to landscape, still get rerendered in portrait in the task switcher if the keyboard is closed. [http://www.developer.nokia.com/bugs/show_bug.cgi?id=231 Bug #231] has been reported.&lt;br /&gt;
&lt;br /&gt;
It is possible to modify the themes for the [http://forum.meego.com/showpost.php?p=24933&amp;amp;postcount=14 home screens] and [http://forum.meego.com/showpost.php?p=25070&amp;amp;postcount=19 lock screen] to support portrait, but this is obviously only a developer-only workaround.&lt;br /&gt;
&lt;br /&gt;
== Keyboard layout ==&lt;br /&gt;
You can easily change the hardware keyboard's layout with setxkbmap:&lt;br /&gt;
 setxkbmap -rules evdev -model nokiarm680 -layout fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is possible to set two layouts with Ctrl+Shift switching:&lt;br /&gt;
 setxkbmap -model nokiarm680 -layout us,ru -variant ,cyrillic -option &amp;quot;grp:ctrl_shift_toggle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Keyboard shortcuts ==&lt;br /&gt;
Sh = shift, Ctrl = control, Fn = Function (lower left key), BS = backspace (upper right key), CR = CarriageReturn/Enter (right 2nd from top)&lt;br /&gt;
* Fn+BS : jump back to last screen - usually either taskswitcher or applauncher&lt;br /&gt;
(none of the following seem to work in non-MTF apps)&lt;br /&gt;
* Ctrl+Q : close current screen and back to last, like Fn+BS&lt;br /&gt;
* Ctrl+Sh+P : take -&amp;gt;screenshots&lt;br /&gt;
* Ctrl+Sh+T : switch on/off positions(?)&lt;br /&gt;
* Ctrl+Sh+S : switch on/off dimensions(?)&lt;br /&gt;
* Ctrl+Sh+L : cycle through some languages&lt;br /&gt;
* Ctrl+Sh+F : switch on/off frames-per-second&lt;br /&gt;
* Ctrl+Sh+B : switch on/off borders(?)&lt;br /&gt;
* Ctrl+Sh+M : switch on/off margins(?)&lt;br /&gt;
* Ctrl+Sh+N : switch on/off some writing that shows up when scrolling applauncher(?)&lt;br /&gt;
* start typing in any of the 3 basic screens : start Search&lt;br /&gt;
&lt;br /&gt;
== Hardware related bits ==&lt;br /&gt;
The N950 comes with a quick start guide, USB cable and device. To charge, the N900 wallwart fastcharger works like a charm. Device charges from non standard (missing D+- short) USB chargers with a maximum current of 100mA. The USB receptacle seems to be pretty sturdily mounted to the PCB, should not come off like some of N900.&lt;br /&gt;
&lt;br /&gt;
The screws holding the battery cover are Torx TX4, pry off the cover with your fingernails starting at speaker both directions to the other end, and &amp;quot;hinge&amp;quot; around USB and then off.&lt;br /&gt;
&lt;br /&gt;
== Tricks ==&lt;br /&gt;
=== Harmattan home screens in landscape mode ===&lt;br /&gt;
&lt;br /&gt;
Get root:&lt;br /&gt;
&amp;lt;pre&amp;gt;ssh root@localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
then:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /usr/share/themes/blanco/meegotouch/meegotouchhome/&lt;br /&gt;
mkdir /usr/share/themes/blanco/meegotouch/meegotouchhome/style/&lt;br /&gt;
&lt;br /&gt;
echo 'MainWindowStyle {&lt;br /&gt;
    locked-orientation: &amp;quot;&amp;quot;;&lt;br /&gt;
}' &amp;gt; /usr/share/themes/blanco/meegotouch/meegotouchhome/style/meegotouchhome.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://forum.meego.com/showpost.php?p=24933&amp;amp;postcount=14 source]&lt;br /&gt;
&lt;br /&gt;
To fix the lock-screen:&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /usr/share/themes/blanco/meegotouch/sysuid/sysuid.css&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find &amp;lt;pre&amp;gt;locked-orientation: &amp;quot;portrait&amp;quot;;&amp;lt;/pre&amp;gt; and change it to &amp;lt;pre&amp;gt;locked-orientation: &amp;quot;&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hold the Ctrl on-screen key (not the physical one) and press X on the keyboard. If it just types an 'x' then backspace and do it again. Press 'Y' to save, then 'Enter'. Reboot.&lt;br /&gt;
&lt;br /&gt;
This makes the lock-screen orientation aware, but only just after boot. It seems there is something elsewhere locking its orientation once you have actually used any apps and from then on the lock-screen is fixed in the last orientation you used before locking it. &lt;br /&gt;
[http://forum.meego.com/showpost.php?p=25070&amp;amp;postcount=19 source]&lt;br /&gt;
[[Category:N900]]&lt;br /&gt;
[[Category:N950]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-07-25T10:44:38Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Getting started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :RC).&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 or OpenSuse 11.4 installation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
 Release Candidate : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
In order to verify BOSS is working, please install SkyNET and follow the sample deployment.&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
== SkyNET ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
SkyNET manages long-running BOSS Participants.&lt;br /&gt;
&lt;br /&gt;
It provides:&lt;br /&gt;
&lt;br /&gt;
* daemonisation&lt;br /&gt;
* start/stop control&lt;br /&gt;
* consistent logging&lt;br /&gt;
* user-owned participants &lt;br /&gt;
  &lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
If you installed a minimal OpenSUSE you might get a dependency error and as shown here proceed with choice 1 :&lt;br /&gt;
&lt;br /&gt;
  Problem: boss-skynet-0.1-5.1.noarch requires /usr/bin/python, but this requirement cannot be provided&lt;br /&gt;
    uninstallable providers: python-base-2.7-8.4.i586[openSUSE-11.4-11.4-0]&lt;br /&gt;
                     python-base-2.7-8.4.x86_64[openSUSE-11.4-11.4-0]&lt;br /&gt;
   Solution 1: deinstallation of patterns-openSUSE-minimal_base-11.4-6.9.1.x86_64&lt;br /&gt;
   Solution 2: do not install boss-skynet-0.1-5.1.noarch&lt;br /&gt;
   Solution 3: break boss-skynet by ignoring some of its dependencies&lt;br /&gt;
  Choose from above solutions by number or cancel [1/2/3/c] (c): 1&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The /etc/skynet/skynet.conf file specifies where SkyNET stores the&lt;br /&gt;
running participants and where daemontools monitors them&lt;br /&gt;
(/var/lib/SkyNET/services/ and /var/lib/SkyNET/store/ by default)&lt;br /&gt;
&lt;br /&gt;
The [boss] section specifies the boss instance used by default and the credentials&lt;br /&gt;
required. Individual participants can override this.&lt;br /&gt;
&lt;br /&gt;
== BOSS OBS Plugin ==&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Getting started and Testing the Deployment =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register -n check&lt;br /&gt;
 skynet register -n notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Installation</id>
		<title>Release Infrastructure/BOSS/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Installation"/>
				<updated>2011-07-25T10:43:50Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: add note on how to test BOSS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Whilst BOSS is deployed in production, this packaged version is still&lt;br /&gt;
in beta-testing and is subject to change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :RC).&lt;br /&gt;
&lt;br /&gt;
However BOSS and SkyNET both install and run at a basic level on a&lt;br /&gt;
clean Debian 6.0 or OpenSuse 11.4 installation.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== Preparation == &lt;br /&gt;
&lt;br /&gt;
* Proxy : On OpenSUSE you need to set the proxy in /etc/sysconfig/proxy&lt;br /&gt;
&lt;br /&gt;
== BOSS ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
BOSS provides the ruote worker and the main AMQP server.&lt;br /&gt;
&lt;br /&gt;
This component is the main process dispatcher; no work happens&lt;br /&gt;
here but all process steps are initiated from here.&lt;br /&gt;
&lt;br /&gt;
Currently BOSS uses the Ruote filesystem storage system and the&lt;br /&gt;
worker and viewer need to run on the same system. This will change&lt;br /&gt;
when BOSS moves to Redis.&lt;br /&gt;
&lt;br /&gt;
The stable and testing projects are at the community OBS, the state &lt;br /&gt;
of the packages can be monitored at :&lt;br /&gt;
&lt;br /&gt;
 Testing : https://build.pub.meego.com/project/monitor?project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
 Release Candidate : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&lt;br /&gt;
&lt;br /&gt;
 Stable : (No release yet) https://build.pub.meego.com/project/monitor?project=Project:MINT&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
(old version of BOSS on openSUSE 11.2)&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
To run boss:&lt;br /&gt;
&lt;br /&gt;
  rcboss start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss&lt;br /&gt;
&lt;br /&gt;
This will install Rabbit MQ and the boss worker daemon.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default settings are found in /etc/default/boss&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
BOSS is preconfigured with username boss and password boss on the boss vhost&lt;br /&gt;
(AMQP will lose vhosts soon)&lt;br /&gt;
&lt;br /&gt;
BOSS stores workitem and process data in /var/spool/boss/&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
In order to verify BOSS is working, please install SkyNET and follow the sample deployment.&lt;br /&gt;
&lt;br /&gt;
== BOSS-Viewer ==&lt;br /&gt;
&lt;br /&gt;
This must be installed on the boss server when using the FS storage.&lt;br /&gt;
&lt;br /&gt;
The default port is 9292, point your browser at http://127.0.0.1:9292/_ruote/ (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
#FIXME: Make sure you go to /_ruote/ otherwise you will get a big scary error.&lt;br /&gt;
&lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
  zypper in boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install boss-viewer.&lt;br /&gt;
&lt;br /&gt;
To run boss-viewer:&lt;br /&gt;
&lt;br /&gt;
 rcboss-viewer start / stop&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install --no-install-recommends boss-viewer&lt;br /&gt;
&lt;br /&gt;
This will install the boss viewer.&lt;br /&gt;
&lt;br /&gt;
Then, as usual&lt;br /&gt;
 /etc/init.d/boss {start|stop|restart|force-reload|log}&lt;br /&gt;
&lt;br /&gt;
== SkyNET ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
SkyNET manages long-running BOSS Participants.&lt;br /&gt;
&lt;br /&gt;
It provides:&lt;br /&gt;
&lt;br /&gt;
* daemonisation&lt;br /&gt;
* start/stop control&lt;br /&gt;
* consistent logging&lt;br /&gt;
* user-owned participants &lt;br /&gt;
  &lt;br /&gt;
=== SUSE ===&lt;br /&gt;
&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
If you installed a minimal OpenSUSE you might get a dependency error and as shown here proceed with choice 1 :&lt;br /&gt;
&lt;br /&gt;
  Problem: boss-skynet-0.1-5.1.noarch requires /usr/bin/python, but this requirement cannot be provided&lt;br /&gt;
    uninstallable providers: python-base-2.7-8.4.i586[openSUSE-11.4-11.4-0]&lt;br /&gt;
                     python-base-2.7-8.4.x86_64[openSUSE-11.4-11.4-0]&lt;br /&gt;
   Solution 1: deinstallation of patterns-openSUSE-minimal_base-11.4-6.9.1.x86_64&lt;br /&gt;
   Solution 2: do not install boss-skynet-0.1-5.1.noarch&lt;br /&gt;
   Solution 3: break boss-skynet by ignoring some of its dependencies&lt;br /&gt;
  Choose from above solutions by number or cancel [1/2/3/c] (c): 1&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
&lt;br /&gt;
=== Debian Squeeze/6.0 ===&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /etc/apt/sources.list.d/MINT.list&lt;br /&gt;
 deb http://repo.pub.meego.com/Project:/MINT:/RC/Debian_6.0/ /&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
 apt-get install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The /etc/skynet/skynet.conf file specifies where SkyNET stores the&lt;br /&gt;
running participants and where daemontools monitors them&lt;br /&gt;
(/var/lib/SkyNET/services/ and /var/lib/SkyNET/store/ by default)&lt;br /&gt;
&lt;br /&gt;
The [boss] section specifies the boss instance used by default and the credentials&lt;br /&gt;
required. Individual participants can override this.&lt;br /&gt;
&lt;br /&gt;
== BOSS OBS Plugin ==&lt;br /&gt;
The OBS plugin is designed to launch processes when a build/publish event occurs on the OBS&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
The plugin is installed on the OBS backend which runs the schedulers&lt;br /&gt;
&lt;br /&gt;
openSUSE 11.2&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.2/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
opensuse 11.4&lt;br /&gt;
 zypper ar http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.4/devel:languages:perl.repo&lt;br /&gt;
 zypper ar http://repo.pub.meego.com/Project:/MINT:/RC/openSUSE_11.4/Project:MINT:RC.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
'''You *MUST* have a participant registered as &amp;quot;obs_event&amp;quot; running before enabling this plugin or ruote will silently fill up with hundreds/thousands/millions of stalled processes.'''&lt;br /&gt;
&lt;br /&gt;
Edit the file:&lt;br /&gt;
  /usr/lib/obs/server/BSConfig.pm&lt;br /&gt;
and define/add: &lt;br /&gt;
  our $notification_plugin = &amp;quot;notify_boss&amp;quot;;&lt;br /&gt;
  our $BOSS_host=&amp;quot;boss&amp;quot;;   # hostname for server running BOSS AMQP&lt;br /&gt;
  our $BOSS_user=&amp;quot;boss&amp;quot;;   # AMQP username&lt;br /&gt;
  our $BOSS_passwd=&amp;quot;boss&amp;quot;; # AMQP password (cleartext)&lt;br /&gt;
&lt;br /&gt;
You may also uncomment and set to 1:&lt;br /&gt;
 our $multiaction_notify_support = 1;&lt;br /&gt;
(This allows osc requests containing multiple actions to be handled properly).&lt;br /&gt;
&lt;br /&gt;
The plugin itself is installed in :&lt;br /&gt;
  /usr/lib/obs/server/plugins/notify_boss.pm&lt;br /&gt;
&lt;br /&gt;
The schedulers will need to be restarted to take effect. Note there is currently an issue that&lt;br /&gt;
the plugin will block if the AMQP server is not available - this will halt the OBS.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
Once you have installed BOSS and SkyNET you are ready to create and run some processes.&lt;br /&gt;
&lt;br /&gt;
== Watch BOSS ==&lt;br /&gt;
On the BOSS machine:&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/boss log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
You'll see messages about the engine being alive and participant&lt;br /&gt;
registration. Further debug output is possible here.&lt;br /&gt;
&lt;br /&gt;
== Setup a participant ==&lt;br /&gt;
&lt;br /&gt;
On the skynet machine we need to setup some code as a participant:&lt;br /&gt;
&lt;br /&gt;
 skynet make_participant -n check -p /usr/share/doc/python-boss-skynet/example-check-participant&lt;br /&gt;
 skynet make_participant -n notify -p /usr/share/doc/python-boss-skynet/example-notify-participant&lt;br /&gt;
&lt;br /&gt;
This creates a daemontools/participant directory structure with a&lt;br /&gt;
symbolic link to the code for these participants.&lt;br /&gt;
&lt;br /&gt;
Now we need to ensure they start to run under daemontools (and restart if&lt;br /&gt;
there's a problem):&lt;br /&gt;
&lt;br /&gt;
 skynet enable check&lt;br /&gt;
 skynet enable notify&lt;br /&gt;
&lt;br /&gt;
To watch the log output:&lt;br /&gt;
&lt;br /&gt;
 skynet log check &amp;amp;&lt;br /&gt;
 skynet log notify &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Now we need to tell boss that there is something listening on these&lt;br /&gt;
queues and available for use in processes:&lt;br /&gt;
&lt;br /&gt;
 skynet register -n check&lt;br /&gt;
 skynet register -n notify&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The skynet command also supports:&lt;br /&gt;
* stop : shutdown the participant and don't respawn.&lt;br /&gt;
* reload : stop and start once&lt;br /&gt;
* register : can also specify the amqp queue to use if it's not the name&lt;br /&gt;
&lt;br /&gt;
== Launch a process ==&lt;br /&gt;
&lt;br /&gt;
With a participant ready to do some work, we're ready to launch a process:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
The log output should show&lt;br /&gt;
&lt;br /&gt;
 2011-03-29 00:49:21.186558500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.186849500 Failed to read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:21.708706500 Nothing to say&lt;br /&gt;
&lt;br /&gt;
Now do:&lt;br /&gt;
&lt;br /&gt;
 echo Hi there &amp;gt; /tmp/success&lt;br /&gt;
&lt;br /&gt;
And relaunch:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/boss-skynet/skynet_launch&lt;br /&gt;
&lt;br /&gt;
gives&lt;br /&gt;
 2011-03-29 00:49:31.659986500 checking for /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.660440500 Read /tmp/success&lt;br /&gt;
 2011-03-29 00:49:31.878978500 Send email saying : Hi there&lt;br /&gt;
 2011-03-29 00:49:31.878980500 &lt;br /&gt;
&lt;br /&gt;
Of course a process can be launched from anywhere on the network using&lt;br /&gt;
any 'trigger' and participants also run on any machine.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
&lt;br /&gt;
Do something useful with your installation using the [[../Standard workflow|standard workflow]] and the [[../Participants|participants and launchers]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-07-22T11:36:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add sample IMG process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.2.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.2/devel:languages:python.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.2/meego-tools.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-core img-amqp img-boss&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Wether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Integration =&lt;br /&gt;
&lt;br /&gt;
One valuable use of IMG is to build an image prior to accepting a package into Trunk. Just verifying that a package doesn't prevent building an image is useful; but beyond this, the image can be sent to automated test system and the results used to determine acceptance.&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;br /&gt;
&lt;br /&gt;
== Sample Workflow ==&lt;br /&gt;
&lt;br /&gt;
The following simple workflow can be attached to the REPO_PUBLISHED OBS event like so:&lt;br /&gt;
&lt;br /&gt;
 ln -s /srv/BOSS/processes/build_IMG  /srv/BOSS/processes/${PROJECT//:/\/}/REPO_PUBLISHED&lt;br /&gt;
&lt;br /&gt;
Each time $PROJECT is published the process will run.&lt;br /&gt;
&lt;br /&gt;
Note that this is a simple process that does not handle situations&lt;br /&gt;
like locking the project to ensure changes are not made during the&lt;br /&gt;
image build process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'Project_Trunk_PUB' do&lt;br /&gt;
# This process uses:&lt;br /&gt;
# img_boss package:&lt;br /&gt;
# * build_ks&lt;br /&gt;
# * build_image&lt;br /&gt;
# optionally from: boss-participant-obsticket&lt;br /&gt;
# * obsticket&lt;br /&gt;
&lt;br /&gt;
  sequence do&lt;br /&gt;
&lt;br /&gt;
    set 'archs' =&amp;gt; ['i586']&lt;br /&gt;
    # The name of the build target (eg 'standard')&lt;br /&gt;
    set 'targetrepo' =&amp;gt; 'Project_Trunk'&lt;br /&gt;
    set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
    set 'image' =&amp;gt; {'image_id' =&amp;gt; 'latest',&lt;br /&gt;
                    'image_type' =&amp;gt; 'livecd',&lt;br /&gt;
                    'arch' =&amp;gt; 'i586',&lt;br /&gt;
                    'name' =&amp;gt; 'latest',&lt;br /&gt;
                    'ksfile' =&amp;gt; 'meego.ks'&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Start Project_PUB  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # We could lock the Project to ensure that no SR is accepted whilst the image is building&lt;br /&gt;
#    with_OBS_ticket do&lt;br /&gt;
      build_ks&lt;br /&gt;
      build_image&lt;br /&gt;
#    end&lt;br /&gt;
&lt;br /&gt;
    # We are not doing acceptance based on the image so drop the lock and test it&lt;br /&gt;
#    test_image&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
# This subprocess shows how a group of actions can be wrapped inside&lt;br /&gt;
# other process steps; in this case reserving the use of a build project&lt;br /&gt;
  define 'with_OBS_ticket' do&lt;br /&gt;
    sequence do&lt;br /&gt;
      obsticket :action =&amp;gt; 'get', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
      apply&lt;br /&gt;
      obsticket :action =&amp;gt; 'release', :lock_project =&amp;gt; '${test_project}', :debug_dump =&amp;gt; 'TRUE'&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/IMG</id>
		<title>Release Infrastructure/IMG</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/IMG"/>
				<updated>2011-07-21T22:18:43Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* BOSS Workitem definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is IMG =&lt;br /&gt;
&lt;br /&gt;
IMG (Image Me Give) is a small python client/server application suite, its sole job is to get a kickstart file from a user, via a web interface, command line or BOSS process. Then it runs Moblin-Image-Creator, either in a host or in a VM. IMG also has the capability to run as a BOSS participant and thus be a part of a build process.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG.png]]&lt;br /&gt;
&lt;br /&gt;
= Design = &lt;br /&gt;
* Asynchronous&lt;br /&gt;
:Fire and forget about it, check back later with the cli client for results&lt;br /&gt;
* Queue view with django,&lt;br /&gt;
:Show a nice html view of currently running or standby MIC jobs in the queue&lt;br /&gt;
* Submit a ks via a web interface&lt;br /&gt;
:Upload via a form&lt;br /&gt;
* No security &lt;br /&gt;
:No https or file filter restrictions :)&lt;br /&gt;
* Two ways of communication&lt;br /&gt;
: BOSS and pure AMQP messages&lt;br /&gt;
&lt;br /&gt;
(FIXME: Which rpms provide which services and where should they be installed? What is the expected network layout - in particular does a single img-web control a pool of img workers? What about the participant? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
The application consists of two parts, django frontend and the actual image creation application. Both of them are connected via AMQP, RabbitMQ is used as the server.&lt;br /&gt;
&lt;br /&gt;
So an example workflow, in AMQP:&lt;br /&gt;
&lt;br /&gt;
# User posts an image creation request with email address and sample kickstart file (or a package overlay), using the web application or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it (Even for the command line client? lbt 27/Dec)&lt;br /&gt;
# A message is sent via an AMQP broker to the image creation worker, containing the details for the required image. (Does this use BOSS? lbt 27/Dec)&lt;br /&gt;
## Image creation commences&lt;br /&gt;
## Virtual machine disk image containing mic2 is engaged (as a kvm overlay image), with ssh access.&lt;br /&gt;
### When a package overlay is received, a kickstart file is constructed from a ready-made template and passed to kickstart part&lt;br /&gt;
### When a kickstart file is received, it is passed directly to worker&lt;br /&gt;
## Worker starts up and connects to the virtual machine using ssh and passes the required arguments to mic2.&lt;br /&gt;
## Worker copies image on success from the virtual machine to well-known www-root, if there is an error, only a message about it is sent via AMQP.&lt;br /&gt;
## When mic2 has finished, the virtual machine is shut down by the worker.&lt;br /&gt;
## When image is created, the virtual machine disk image is deleted&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
And an example workflow, in BOSS:&lt;br /&gt;
&lt;br /&gt;
TO BE DONE&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
= Installation =&lt;br /&gt;
Installing IMG via RPM for OpenSUSE 11.2.&lt;br /&gt;
&lt;br /&gt;
The following repos are needed : MeeGo-Infra, opensuse python and MeeGo tools:&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/Maemo:/MeeGo-Infra/openSUSE_11.2-plus/Maemo:MeeGo-Infra.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.2/devel:languages:python.repo&lt;br /&gt;
  zypper ar http://repo.meego.com/MeeGo/tools/repos/opensuse/11.2/meego-tools.repo&lt;br /&gt;
  zypper ref&lt;br /&gt;
&lt;br /&gt;
Then install the core IMG package and the amqp listener:&lt;br /&gt;
&lt;br /&gt;
  zypper in img-core img-amqp img-boss&lt;br /&gt;
&lt;br /&gt;
IMG performance can be massively improved with caching proxy, please take a look at [[Release_Infrastructure/IMG-PROXY|Setting up IMG PROXY]].&lt;br /&gt;
&lt;br /&gt;
= Worker / img-core =&lt;br /&gt;
&lt;br /&gt;
The worker code is provided by img-core and is responsible for running mic2 either locally or on a virtual machine. The initialisation code takes care of creating the necessary command stubs for mic2 use for either implementations. It also handles the KVM creation command stubs. &lt;br /&gt;
&lt;br /&gt;
In KVM mode, it first creates an overlay image from the base image (not distributed) and then starts it using the overlay image as the hard disk. Virtio is used as a speed optimisation method for KVM. When a specific amount of time has passed, it will copy the kickstart and mic2 config file to the guest VM. Then it runs mic2 in the VM with parameters specified in the init method. After mic2 has run, the image is copied from the guest using scp. &lt;br /&gt;
&lt;br /&gt;
In local mode, only mic2 is run on the host machine. It will create the image based on the options in the init method along with the kickstart file.&lt;br /&gt;
&lt;br /&gt;
A worker needs a queueing mechanism to accept jobs. The primary solution is expected to be the BOSS participant (img-boss) but there is a plain amqp client too (img-amqp).&lt;br /&gt;
&lt;br /&gt;
= BOSS participant / img-boss =&lt;br /&gt;
&lt;br /&gt;
The general design of the client is pretty much the same as the AMQP server, since they both get activated and then call the worker code to create the image, with or without KVM. The worker code is described in the section above.&lt;br /&gt;
&lt;br /&gt;
More information about BOSS [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_build_image.py boss_build_image.py] for the source code.&lt;br /&gt;
&lt;br /&gt;
= BOSS Client / img-amqp =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_boss/boss_img_client.py boss_img_client.py] for example BOSS client.&lt;br /&gt;
 &lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
(Is this the img-amqp usage? lbt 27/Dec)&lt;br /&gt;
&lt;br /&gt;
 Usage: boss_client.py -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release &amp;lt;release&amp;gt; -a|--arch &amp;lt;arch &amp;gt;-s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 boss_client.py Sends a message (poll for result later) to the BOSS, using&lt;br /&gt;
 &amp;lt;kickstart.ks&amp;gt;  as the kickstart file.&lt;br /&gt;
&lt;br /&gt;
 Options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -s, --submit          Submit to BOSS, takes no options&lt;br /&gt;
  -k KICKSTART, --kickstart=KICKSTART&lt;br /&gt;
                        Kickstart file&lt;br /&gt;
  -t TYPE, --type=TYPE  Image type&lt;br /&gt;
  -n NAME, --name=NAME  Image name&lt;br /&gt;
  -e EMAIL, --email=EMAIL&lt;br /&gt;
                        Author email&lt;br /&gt;
  -r RELEASE --release  Image release, goes directly to mic2&lt;br /&gt;
  -a ARCH --arch        Architecture to use&lt;br /&gt;
&lt;br /&gt;
= BOSS OTS Client =&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/boss-scripts/boss-scripts/blobs/master/boss_ots_client.py BOSS OTS Client] is a AMQP launcher enabling communication with [[Quality/QA-tools/OTS|OTS Framework]]. BOSS OTS Client is used to send image URL to OTS and commence image testing.&lt;br /&gt;
&lt;br /&gt;
Download from: [http://gitorious.org/boss-scripts/boss-scripts/blobs/raw/master/boss_ots_client.py boss_ots_client.py]. Usage ''boss_ots_client.py --help''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
See ''defaultconf'' section in the script or provide standalone configuration file.&lt;br /&gt;
&lt;br /&gt;
= Server =&lt;br /&gt;
&lt;br /&gt;
See [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/build_image.py build_image.py] for example server.&lt;br /&gt;
&lt;br /&gt;
This section documents the server component of IMG.&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer functions ===&lt;br /&gt;
&lt;br /&gt;
*kickstarter_callback:&lt;br /&gt;
:Receives messages as described [#Kickstarter here], decodes JSON data to variables and creates a kickstart file with the received list of packages and then submits them to the mic-image-creator [#MoblinImageCreator here].&lt;br /&gt;
*mic2_callback:&lt;br /&gt;
:Receives messages as described [#MoblinImageCreator here], decodes JSON data to variables and runs moblin-image-creator (NB! this has to exist in /usr/bin/moblin-image-creator, will be changeable in the future) against the supplied configuration file and image type.&lt;br /&gt;
:The images are saved to to a configured location, needs to be changed in the python subprocess call in order to get downloadable images (eg. to a webserver media path).&lt;br /&gt;
:If the image creation fails (is caught with &amp;quot;CalledProcessError&amp;quot; exception in the code, this happens with nonzero exit status), a message is sent to &amp;quot;error_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'error': Contains the error message of the exception received from the python subprocess call.&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
    'url': Contains the URL from which one can download the log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:If the image creation succeeds, a message is queued to &amp;quot;link_queue&amp;quot; queue, with the following JSON encoded dictionary:&lt;br /&gt;
&lt;br /&gt;
    'url': Contains the URL from which one can download the image&lt;br /&gt;
&lt;br /&gt;
    'id': identification string of the original message sent to &amp;quot;image_queue&amp;quot; queue &lt;br /&gt;
&lt;br /&gt;
== Exchanges ==&lt;br /&gt;
&lt;br /&gt;
* image_exchange, The exchange for image creationg related queues&lt;br /&gt;
* django_result_exchange, Exchange for results, picked up by django&lt;br /&gt;
&lt;br /&gt;
== Queues ==&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;image_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* image_queue&lt;br /&gt;
:Stores messages related to Moblin Image Creator runtime.&lt;br /&gt;
* kickstarter_queue&lt;br /&gt;
:Stores messages related to kickstarter runtime.&lt;br /&gt;
&lt;br /&gt;
Queues for exchange &amp;quot;django_result_exchange&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* status_queue&lt;br /&gt;
:Contains messages in the following format (JSON encoded dictionary):&lt;br /&gt;
** 'status': status of the image build, compulsory&lt;br /&gt;
** 'id': the identification string of the original message sent to kickstarter_queue, compulsory&lt;br /&gt;
** 'url': Contains the URL from which one can download the image&lt;br /&gt;
** 'log': specifies the log file to read from&lt;br /&gt;
** 'error': any error messages faced&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
For demonstration see [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/src/img_amqp/img_client.py img_client.py] for example client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 img_client.py -p|--poll &amp;lt;id&amp;gt; -n|--name &amp;lt;name&amp;gt; -t|--type &amp;lt;imagetype&amp;gt; -e|--email &amp;lt;author@email&amp;gt; -r|--release -a|--arch s|--submit -k &amp;lt;kickstart_file.ks&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
: -p|--poll &amp;lt;message_id&amp;gt;, poll the AMQP server for messages relating to the id, see -a|--async&lt;br /&gt;
: -t|--type &amp;lt;imagetype&amp;gt;, image type, can be of: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
: -n|--name Image name&lt;br /&gt;
: -a|--arch Image architecture&lt;br /&gt;
: -r|--release Image release number&lt;br /&gt;
: -c|--config Configuration file to use&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
This client version uses AMQP as the message bus to communicate with the server. The format for the messages is described in the next part of this document.&lt;br /&gt;
&lt;br /&gt;
==== Messages ====&lt;br /&gt;
&lt;br /&gt;
The general message format is JSON encoded dictionary.&lt;br /&gt;
&lt;br /&gt;
===== Moblin Image Creator =====&lt;br /&gt;
&lt;br /&gt;
To initialize the actual image building, send a JSON formatted message as follows:&lt;br /&gt;
&lt;br /&gt;
 {'email':email, 'id':id, 'imagetype':imagetype, 'ksfile':ksfile, 'name': name, 'arch':arch, 'release':release}&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* email, email address of the submitter&lt;br /&gt;
* id, identification string of the original message (passed on from kickstarter process)&lt;br /&gt;
* imagetype, image type of values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
* ksfile, the actual kickstar file to upload (in text)&lt;br /&gt;
* name, the name for the image&lt;br /&gt;
* arch, architecture to use for the image building&lt;br /&gt;
* release, release numbering, $VERTICAL-$ARCH-$VARIANT like in mic2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Django client / img-web =&lt;br /&gt;
&lt;br /&gt;
=== Views ===&lt;br /&gt;
* submit&lt;br /&gt;
:If this view receives a POST request, it constructs a bound form with the data from POST array. If the form is valid it extracts the data, as specified in the forms section.&lt;br /&gt;
:Applying the overlay is handled in this form, in the following way.&lt;br /&gt;
* Get the overlay text from the form field&lt;br /&gt;
* use python strings split() method to split the overlay text in to a list, with a comma delimiter&lt;br /&gt;
** construct a kickstart file using this list and append the packages to the kickstart files package list&lt;br /&gt;
* queue&lt;br /&gt;
:This view is responsible of two things. Firstly it checks wether there are any messages in the &amp;quot;status_queue&amp;quot; message queue, if there are, then it updates the !ImageJob model object (identified by the identification string from the message) to include the ready image URL.&lt;br /&gt;
:Secondly, it checks for possible error messages in &amp;quot;status_queue&amp;quot; queue, if there are any, it assigns a special variable to indicate that there has been an error. &lt;br /&gt;
:If no messages are received, it simply redirects to a template with all the !ImageJob model objects.&lt;br /&gt;
* job&lt;br /&gt;
:Job view is responsible of providing the information about the log file. The information about the logfile is formed in the server side, such as the URL to the log file. If there is a URL, it will open the URL and read its contents and return the resulting text to the template. The template renders the log message with a textarea html widget.&lt;br /&gt;
*index&lt;br /&gt;
:Index only returns a template in which one can click a link about uploading the image.&lt;br /&gt;
&lt;br /&gt;
=== URLs ===&lt;br /&gt;
    url(r'submit/$', 'meego_img.app.views.submit', name='img-app-submit'), &lt;br /&gt;
    url(r'queue/$', 'meego_img.app.views.queue', name='img-app-queue'),    &lt;br /&gt;
    url(r'job/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.job', name='img-app-job'),       &lt;br /&gt;
    url(r'images/(?P&amp;lt;msgid&amp;gt;\S+)$', 'meego_img.app.views.download',name='img-app-download'),&lt;br /&gt;
=== Models ===&lt;br /&gt;
&lt;br /&gt;
IMG currently has only one model, !ImageJob, here is the Django code for it:&lt;br /&gt;
 # Create your models here.&lt;br /&gt;
 class ImageJob(models.Model):    &lt;br /&gt;
    email = models.CharField(max_length=40)&lt;br /&gt;
    filename = models.CharField(max_length=40)&lt;br /&gt;
    logfile = models.CharField(max_length=50)&lt;br /&gt;
    task_id = models.CharField(max_length=30)&lt;br /&gt;
    imagefile = models.CharField(max_length=50)    &lt;br /&gt;
    created = models.DateTimeField(auto_now_add=True)&lt;br /&gt;
    error = models.CharField(max_length=500)&lt;br /&gt;
    type = models.CharField(max_length=10)&lt;br /&gt;
    status = models.CharField(max_length=30)&lt;br /&gt;
    def delete(self, *args, **kwargs): &lt;br /&gt;
        if self.logfile:&lt;br /&gt;
            if os.path.exists(self.logfile):&lt;br /&gt;
                os.remove(self.logfile)&lt;br /&gt;
                os.remove(self.logfile.replace(&amp;quot;-log&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
                print &amp;quot;Removed %s&amp;quot;%self.logfile&lt;br /&gt;
        super(ImageJob, self).delete(*args, **kwargs)&lt;br /&gt;
&lt;br /&gt;
As can be seen in the delete method, this model cleans up all image creation related files, like the kickstarter file and log file.&lt;br /&gt;
&lt;br /&gt;
=== Forms ===&lt;br /&gt;
==== UploadFileForm ====&lt;br /&gt;
&lt;br /&gt;
Contains the following fields&lt;br /&gt;
* email, email field&lt;br /&gt;
* overlay, text input field&lt;br /&gt;
* name, text input field&lt;br /&gt;
* platform, select field for the platform, parsed from the default template &lt;br /&gt;
* release, a text input field for release&lt;br /&gt;
* arch, architecture selection field&lt;br /&gt;
* imagetype, select field for the image type, with values:  livecd, liveusb, loop, raw, nand, mrstnand, vdi, vmdk&lt;br /&gt;
* ksfile, the raw kickstart file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Worker configuration =&lt;br /&gt;
&lt;br /&gt;
The configuration file is to be installed in /etc/imger/img.conf and a sample file is [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/img.conf here].&lt;br /&gt;
&lt;br /&gt;
== Configuration file ==&lt;br /&gt;
 base_url: A base URL that has a direct access to the base_dir via HTTP, example http://127.0.0.1&lt;br /&gt;
 base_dir: A directory to put the finished images, example /var/www/images&lt;br /&gt;
 num_workers: Number of workers to start, OBSOLETE, USE INITSCRIPT OR MANUALLY RUN MANY PARTICIPANTS&lt;br /&gt;
 post_creation: Path to a script to run after the image is created&lt;br /&gt;
 use_kvm: Wether to use a virtual machine, values are &amp;quot;yes&amp;quot; or &amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 mic_opts: Example, mic_opts = --save-kernel, --use_comps, so comma separated options&lt;br /&gt;
&lt;br /&gt;
 amqp_host: Host that runs BOSS&lt;br /&gt;
 amqp_user: Username to tap into the BOSS virtual host&lt;br /&gt;
 amqp_pwd: Password&lt;br /&gt;
 amqp_vhost: The actual virtual host to connect to&lt;br /&gt;
&lt;br /&gt;
== KVM Image ==&lt;br /&gt;
&lt;br /&gt;
The KVM image must be created in such a way that it has openssh and mic2, along with having ssh-key based login for root, which uses a certain [http://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/master/ssh/id_rsa.pub ssh public key].&lt;br /&gt;
&lt;br /&gt;
The format of the image is recommended to be qcow2, with preallocation and cluster_size=2M as the qemu-img options. This is because the worker code uses qcow2 to create the overlay, thus saving time if the image is in the same format.&lt;br /&gt;
&lt;br /&gt;
If the host is using openSUSE, please enable the following things for zypper repositories:&lt;br /&gt;
&lt;br /&gt;
http://download.opensuse.org/repositories/Kernel:/openSUSE-11.3/openSUSE_11.2/&lt;br /&gt;
http://download.opensuse.org/repositories/Virtualization/openSUSE_11.2/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And add kvm-intel to /etc/sysconfig/kernel.&lt;br /&gt;
&lt;br /&gt;
== Virtual machine ==&lt;br /&gt;
&lt;br /&gt;
Currently, IMGer can run the MIC2 jobs inside a KVM virtual machine, the only prerequisites are that image is located in /usr/share/img/base.img (configurable in the future) path and that the virtual machine has MIC2 installed and configured.&lt;br /&gt;
&lt;br /&gt;
Suse studio is one way to create the images, just make sure that you have a rpm repository which contains mic2, python-xml and qemu-static-arm to make mic2 run properly on the image.&lt;br /&gt;
&lt;br /&gt;
One must also confirm that the image SSH-keys in the source distribution are configured in the virtual machine and both keys exist in /usr/share/img (configurable in the future). During the runtime of IMGer, it is possible that ssh-keys inside the image may change, this is already handled by IMGer by ignoring the host key checking.&lt;br /&gt;
&lt;br /&gt;
= BOSS Workitem definition =&lt;br /&gt;
&lt;br /&gt;
IMG provides 2 participants that can be used in a BOSS process:&lt;br /&gt;
* build_ks : Modifies a template kickstart file to add specific packages or groups&lt;br /&gt;
* build_image : Builds an image defined by a kickstart file&lt;br /&gt;
&lt;br /&gt;
== build_ks ==&lt;br /&gt;
This participant is used to customise a kickstart file to add specific&lt;br /&gt;
packages or groups; for instance to add a package to a minimal&lt;br /&gt;
kickstart for testing purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_ks participant is configured at the OS level.&lt;br /&gt;
&lt;br /&gt;
This allows the repository server (reposerver) and the kickstart&lt;br /&gt;
template store (ksstore) to be specified.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The participant documentation defines the input for the participant.&lt;br /&gt;
 &lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The image.kickstart field is populated with the modified kickstart file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build_image ==&lt;br /&gt;
The main IMG participant. It takes a kickstart file and some values and returns URLs which point to the image and log.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The build_image participant is configured at the OS level.&lt;br /&gt;
The [https://meego.gitorious.org/meego-infrastructure-tools/imger/blobs/skynet/src/img_boss/build_image.conf config file] is documented.&lt;br /&gt;
&lt;br /&gt;
It mainly determines where images are stored on the worker and the base url of the webserver that has been setup to serve them.&lt;br /&gt;
&lt;br /&gt;
==== Input ====&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : contents of a kickstart file (ie not a path)&lt;br /&gt;
 &amp;quot;email&amp;quot;: email address, not parsed so can be a dummy address&lt;br /&gt;
 &amp;quot;id&amp;quot;: a simple UUID, eg. from pythons uuid library&lt;br /&gt;
 &amp;quot;type&amp;quot;: type, from values: livecd, liveusb, loop, raw, nand, mrstnand, vdi or vmdk&lt;br /&gt;
 &amp;quot;name&amp;quot;: name, a simple string for the image name&lt;br /&gt;
 &amp;quot;arch&amp;quot;: architecture, for image&lt;br /&gt;
 &amp;quot;release&amp;quot;: release&lt;br /&gt;
&lt;br /&gt;
=== Output ===&lt;br /&gt;
&lt;br /&gt;
The work item can contain the following dictionary entries:&lt;br /&gt;
&lt;br /&gt;
 Status: Status, is either &amp;quot;DONE&amp;quot; or &amp;quot;ERROR&amp;quot; in the final workitem, depending on success/failure&lt;br /&gt;
 URL: URL to a image/log/kickstart file location on the worker&lt;br /&gt;
 Error: An error string with details of the error, if any&lt;br /&gt;
 Image: A direct URL to the finished image&lt;br /&gt;
 Log: A direct URL to the log file of the mic2 output&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow</id>
		<title>Release Infrastructure/BOSS/Standard workflow</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow"/>
				<updated>2011-07-19T08:15:07Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Add sample process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BOSS comes with a sample &amp;quot;standard workflow&amp;quot; which consists of:&lt;br /&gt;
* a plugin to the OBS to intercept the [[Release Infrastructure/BOSS/OBS Event List|event notifications]]&lt;br /&gt;
* the robogrator process launcher&lt;br /&gt;
* a [[Release_Infrastructure/BOSS/Participants|coherent set of participants]]&lt;br /&gt;
&lt;br /&gt;
This is not a mandatory workflow but was developed at Nokia and is designed to be useful for MeeGo vendors&lt;br /&gt;
&lt;br /&gt;
=== Installation and source ===&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
NOTE: skynet branch for now&lt;br /&gt;
&lt;br /&gt;
=== Robogrator Process Launcher ===&lt;br /&gt;
&lt;br /&gt;
Robogrator is the robotic package integrator. It reacts to the events occuring on the OBS and looks at the data inside to identify which project-specific process to launch.&lt;br /&gt;
&lt;br /&gt;
Installation is as boss-launcher-robogrator:&lt;br /&gt;
 apt-get install boss-launcher-robogrator&lt;br /&gt;
or&lt;br /&gt;
 zypper in boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
NOTE: robogrator is the package name , the participant name in processes is obs_event so register the participant with skynet by invoking the command :&lt;br /&gt;
&lt;br /&gt;
 skynet register -n obs_event&lt;br /&gt;
&lt;br /&gt;
It uses the data sent by the obs-boss-plugin to launch a fresh process.&lt;br /&gt;
&lt;br /&gt;
All processes have the fields:&lt;br /&gt;
* project : the project used to drive the process. Usually the project the package is in but for requests type events this is the target project.&lt;br /&gt;
* ev : the (undocumented) OBS Notify object parameters&lt;br /&gt;
&lt;br /&gt;
For the actual process, robogrator uses the namespace/project/event-label to find a specific ruote process.&lt;br /&gt;
&lt;br /&gt;
For the standard workflow the first participant is the standard_workflow_handler&lt;br /&gt;
&lt;br /&gt;
It is configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
&lt;br /&gt;
This participant serves two purposes:&lt;br /&gt;
* tracks packages that are rebuilt when a repo is published&lt;br /&gt;
* set some standard fields used by other participants&lt;br /&gt;
&lt;br /&gt;
* REPO_PUBLISHED&lt;br /&gt;
** repository&lt;br /&gt;
** packages (packages successfully built in this build/publish cycle)&lt;br /&gt;
* BUILD_UNCHANGED, BUILD_SUCCESS, BUILD_FAIL&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_CREATE_PACKAGE, SRCSRV_DELETE_PACKAGE&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_VERSION_CHANGE&lt;br /&gt;
** package&lt;br /&gt;
** rev&lt;br /&gt;
** version&lt;br /&gt;
* SRCSRV_REQUEST_*&lt;br /&gt;
** actions&lt;br /&gt;
** who&lt;br /&gt;
** rid&lt;br /&gt;
** description&lt;br /&gt;
** when&lt;br /&gt;
&lt;br /&gt;
For a standard installation the following script would enable Project:CE:Trunk&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /srv/BOSS/processes/standard_workflow&lt;br /&gt;
 Ruote.process_definition :name =&amp;gt; 'BOSS_Standard_Workflow' do&lt;br /&gt;
   sequence do&lt;br /&gt;
     standard_workflow_handler&lt;br /&gt;
   done&lt;br /&gt;
 done&lt;br /&gt;
 EOF&lt;br /&gt;
 &lt;br /&gt;
 PROJ=Project:CE:Trunk&lt;br /&gt;
 PDIR=/srv/BOSS/processes/${PROJ//:/\/}&lt;br /&gt;
 mkdir -p $PDIR&lt;br /&gt;
 for ev in SRCSRV_COMMIT REPO_PUBLISHED BUILD_UNCHANGED BUILD_FAIL BUILD_SUCCESS SRCSRV_VERSION_CHANGE SRCSRV_DELETE_PACKAGE SRCSRV_REQUEST_CREATE; do&lt;br /&gt;
   ln -s /srv/BOSS/processes/standard_workflow $PDIR/$ev&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 skynet enable standard_workflow&lt;br /&gt;
 skynet register -n standard_workflow&lt;br /&gt;
&lt;br /&gt;
=== Example Workflow ===&lt;br /&gt;
&lt;br /&gt;
 Ruote.process_definition :name =&amp;gt; 'DE_Trunk_SRs' do&lt;br /&gt;
   sequence do&lt;br /&gt;
 &lt;br /&gt;
     set 'irc_channel' =&amp;gt; '#meego-arm'&lt;br /&gt;
     set 'archs' =&amp;gt; ['i586', 'armv8el']&lt;br /&gt;
     set 'targetrepo' =&amp;gt; 'standard'&lt;br /&gt;
     set 'debug_dump' =&amp;gt; 'true'&lt;br /&gt;
     set 'final_project' =&amp;gt; 'Project:DE:Trunk'&lt;br /&gt;
     # REVS baseline&lt;br /&gt;
     set 'baseline' =&amp;gt; 'Trunk'&lt;br /&gt;
     # REVS platform&lt;br /&gt;
     set 'platform' =&amp;gt; 'DE'&lt;br /&gt;
 &lt;br /&gt;
     echo &amp;quot;Start SRCSRV_REQUEST  :  ${ev.state} in ${project}&amp;quot;&lt;br /&gt;
     notify_irc :msg =&amp;gt; 'lbt : New SR#${ev.id}(${ev.state}) in ${project}', :irc_channel=&amp;gt; '#meego-boss'&lt;br /&gt;
 &lt;br /&gt;
     # CREATE or supersede&lt;br /&gt;
     _if '${ev.state} == new' do&lt;br /&gt;
       do_create&lt;br /&gt;
     end&lt;br /&gt;
     _if '${ev.state} == superseded' do&lt;br /&gt;
       notify_irc :msg =&amp;gt; 'SR#${ev.id} superseded in ${project} - FYI', :irc_channel=&amp;gt; '${irc_channel}'&lt;br /&gt;
     end&lt;br /&gt;
     _if '${ev.state} == accepted' do&lt;br /&gt;
       do_accepted&lt;br /&gt;
     end&lt;br /&gt;
     _if '${ev.state} == declined' do&lt;br /&gt;
       do_declined&lt;br /&gt;
     end&lt;br /&gt;
   end  &lt;br /&gt;
 &lt;br /&gt;
   define 'do_create' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_create&amp;quot;&lt;br /&gt;
     notify_irc :msg =&amp;gt; 'New SR#${ev.id} in ${project} from ${ev.author} ${ev.actions.0.sourceproject}/${ev.actions.0.sourcepackage} to ${ev.actions.0.targetpackage}: ${ev.description} : https://build.pub.meego.com/request/show/${ev.id}', :irc_channel=&amp;gt; '${irc_channel}'&lt;br /&gt;
     echo &amp;quot;check _if '${project} == ${final_project}'&amp;quot;&lt;br /&gt;
     _if '&amp;quot;${project}&amp;quot; == &amp;quot;${final_project}&amp;quot;' do&lt;br /&gt;
       do_final_checks&lt;br /&gt;
     #else&lt;br /&gt;
       do_testing_checks&lt;br /&gt;
     end&lt;br /&gt;
   end  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   define 'do_accepted' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_accepted&amp;quot;&lt;br /&gt;
     get_relevant_changelog :compare =&amp;gt; &amp;quot;last_revision&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
    echo &amp;quot;check _if '${project} == ${final_project}'&amp;quot;&lt;br /&gt;
     _if '&amp;quot;${project}&amp;quot; == &amp;quot;${final_project}&amp;quot;' do&lt;br /&gt;
       sequence do&lt;br /&gt;
 #        bugzilla :status =&amp;gt; 'RESOLVED', :resolution =&amp;gt; 'FIXED', :relevant_bugs =&amp;gt; &amp;quot;yes&amp;quot;, :template =&amp;gt; '/srv/BOSS/bz_comments/meego-DE'&lt;br /&gt;
         bugzilla :relevant_bugs =&amp;gt; &amp;quot;yes&amp;quot;, :template =&amp;gt; '/srv/BOSS/bz_comments/meego-DE'&lt;br /&gt;
         get_changelog&lt;br /&gt;
         revs_de_update&lt;br /&gt;
       end&lt;br /&gt;
     #else&lt;br /&gt;
       bugzilla :relevant_bugs =&amp;gt; &amp;quot;yes&amp;quot;, :template =&amp;gt; '/srv/BOSS/bz_comments/meego-DE'&lt;br /&gt;
     end&lt;br /&gt;
     notify_irc :msg =&amp;gt; '${ev.who} accepted SR#${ev.id} in ${project} from ${ev.author} ${ev.actions.0.sourceproject}/${ev.actions.0.sourcepackage} to ${ev.actions.0.targetpackage}: ${ev.comment} https://build.pub.meego.com/request/show/${ev.id}', :irc_channel=&amp;gt; '${irc_channel}'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   define 'do_declined' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_declined&amp;quot;&lt;br /&gt;
     notify_irc :msg =&amp;gt; '${ev.who} declined SR#${ev.id} in ${project} from ${ev.author} ${ev.actions.0.sourceproject}/${ev.actions.0.sourcepackage} to ${ev.actions.0.targetpackage}: ${ev.comment} https://build.pub.meego.com/request/show/${ev.id}', :irc_channel=&amp;gt; '${irc_channel}'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   define 'do_testing_checks' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_testing_checks&amp;quot;&lt;br /&gt;
     cursor :break_if =&amp;gt; '${__result__} == false' do&lt;br /&gt;
       check_submitter_maintainer&lt;br /&gt;
       check_package_built_at_source&lt;br /&gt;
 #      check_package_is_complete&lt;br /&gt;
 #      check_spec&lt;br /&gt;
     end&lt;br /&gt;
     _if '${__result__} == false' do&lt;br /&gt;
       do_decline&lt;br /&gt;
     #else&lt;br /&gt;
       do_accept&lt;br /&gt;
     end&lt;br /&gt;
   end  &lt;br /&gt;
 &lt;br /&gt;
   define 'do_final_checks' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_final_checks&amp;quot;&lt;br /&gt;
     cursor :break_if =&amp;gt; '${__result__} == false' do&lt;br /&gt;
       check_submitter_maintainer&lt;br /&gt;
 #      check_package_built_at_source&lt;br /&gt;
 #      check_package_is_complete&lt;br /&gt;
 #      check_spec&lt;br /&gt;
     end&lt;br /&gt;
     _if '${__result__} == false' do&lt;br /&gt;
       do_decline&lt;br /&gt;
     #else&lt;br /&gt;
       do_accept&lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
   define 'do_accept' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_accept&amp;quot;&lt;br /&gt;
 #    notify_irc :msg =&amp;gt; 'Tests pass for SR#${ev.id} in ${project} from ${ev.author}', :irc_channel=&amp;gt; '${irc_channel}'&lt;br /&gt;
   end&lt;br /&gt;
   define 'do_decline' do&lt;br /&gt;
     echo &amp;quot;${project} SRCSRV_REQUEST : do_decline&amp;quot;&lt;br /&gt;
 #    notify_irc :msg =&amp;gt; 'BOSS suggests decline: Tests fail for SR#${ev.id} in ${project} from ${ev.author}', :irc_channel =&amp;gt; '${irc_channel}'&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow</id>
		<title>Release Infrastructure/BOSS/Standard workflow</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow"/>
				<updated>2011-07-18T18:15:14Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Installing the standard_workflow_handler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BOSS comes with a sample &amp;quot;standard workflow&amp;quot; which consists of:&lt;br /&gt;
* a plugin to the OBS to intercept the [[Release Infrastructure/BOSS/OBS Event List|event notifications]]&lt;br /&gt;
* the robogrator process launcher&lt;br /&gt;
* a [[Release_Infrastructure/BOSS/Participants|coherent set of participants]]&lt;br /&gt;
&lt;br /&gt;
This is not a mandatory workflow but was developed at Nokia and is designed to be useful for MeeGo vendors&lt;br /&gt;
&lt;br /&gt;
=== Installation and source ===&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
NOTE: skynet branch for now&lt;br /&gt;
&lt;br /&gt;
=== Robogrator Process Launcher ===&lt;br /&gt;
&lt;br /&gt;
Robogrator is the robotic package integrator. It reacts to the events occuring on the OBS and looks at the data inside to identify which project-specific process to launch.&lt;br /&gt;
&lt;br /&gt;
Installation is as boss-launcher-robogrator:&lt;br /&gt;
 apt-get install boss-launcher-robogrator&lt;br /&gt;
or&lt;br /&gt;
 zypper in boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
NOTE: robogrator is the package name , the participant name in processes is obs_event so register the participant with skynet by invoking the command :&lt;br /&gt;
&lt;br /&gt;
 skynet register -n obs_event&lt;br /&gt;
&lt;br /&gt;
It uses the data sent by the obs-boss-plugin to launch a fresh process.&lt;br /&gt;
&lt;br /&gt;
All processes have the fields:&lt;br /&gt;
* project : the project used to drive the process. Usually the project the package is in but for requests type events this is the target project.&lt;br /&gt;
* ev : the (undocumented) OBS Notify object parameters&lt;br /&gt;
&lt;br /&gt;
For the actual process, robogrator uses the namespace/project/event-label to find a specific ruote process.&lt;br /&gt;
&lt;br /&gt;
For the standard workflow the first participant is the standard_workflow_handler&lt;br /&gt;
&lt;br /&gt;
It is configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
&lt;br /&gt;
This participant serves two purposes:&lt;br /&gt;
* tracks packages that are rebuilt when a repo is published&lt;br /&gt;
* set some standard fields used by other participants&lt;br /&gt;
&lt;br /&gt;
* REPO_PUBLISHED&lt;br /&gt;
** repository&lt;br /&gt;
** packages (packages successfully built in this build/publish cycle)&lt;br /&gt;
* BUILD_UNCHANGED, BUILD_SUCCESS, BUILD_FAIL&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_CREATE_PACKAGE, SRCSRV_DELETE_PACKAGE&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_VERSION_CHANGE&lt;br /&gt;
** package&lt;br /&gt;
** rev&lt;br /&gt;
** version&lt;br /&gt;
* SRCSRV_REQUEST_*&lt;br /&gt;
** actions&lt;br /&gt;
** who&lt;br /&gt;
** rid&lt;br /&gt;
** description&lt;br /&gt;
** when&lt;br /&gt;
&lt;br /&gt;
For a standard installation the following script would enable Project:CE:Trunk&lt;br /&gt;
&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF &amp;gt; /srv/BOSS/processes/standard_workflow&lt;br /&gt;
 Ruote.process_definition :name =&amp;gt; 'BOSS_Standard_Workflow' do&lt;br /&gt;
   sequence do&lt;br /&gt;
     standard_workflow_handler&lt;br /&gt;
   done&lt;br /&gt;
 done&lt;br /&gt;
 EOF&lt;br /&gt;
 &lt;br /&gt;
 PROJ=Project:CE:Trunk&lt;br /&gt;
 PDIR=/srv/BOSS/processes/${PROJ//:/\/}&lt;br /&gt;
 mkdir -p $PDIR&lt;br /&gt;
 for ev in SRCSRV_COMMIT REPO_PUBLISHED BUILD_UNCHANGED BUILD_FAIL BUILD_SUCCESS SRCSRV_VERSION_CHANGE SRCSRV_DELETE_PACKAGE SRCSRV_REQUEST_CREATE; do&lt;br /&gt;
   ln -s /srv/BOSS/processes/standard_workflow $PDIR/$ev&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 skynet enable standard_workflow&lt;br /&gt;
 skynet register -n standard_workflow&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Community_Office/Task_Forces/MeeGo_Surrounds_and_Apps</id>
		<title>Community Office/Task Forces/MeeGo Surrounds and Apps</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Community_Office/Task_Forces/MeeGo_Surrounds_and_Apps"/>
				<updated>2011-07-14T22:52:24Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Clarified with Dawn. This project is continuing (and is related to Apps)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MISSION ==&lt;br /&gt;
* To ensure a vibrant and quality area for community open source software.&lt;br /&gt;
* To have at least one repository which contains software of such quality that vendors (such as Nokia[2]) who would be willing to ship it enabled on devices out-of-the-box.&lt;br /&gt;
* To work towards having applications within the community repositories be able to be classed as &amp;quot;MeeGo Compliant&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== SCOPE ==&lt;br /&gt;
* Management of the community OBS, the repositories it hosts, and the packages contained within it.&lt;br /&gt;
* Policies and procedures (including QA) governing the repositories.&lt;br /&gt;
* Align policies where possible, to ease the path for packages from the community repositories to the MeeGo trunk as well as application stores such as Ovi or AppUp.&lt;br /&gt;
* Work with the compliance folks on an approach acceptable to all on third-party software compliance[3]&lt;br /&gt;
&lt;br /&gt;
== TEAM ==&lt;br /&gt;
* Niels Breet (X-Fade)&lt;br /&gt;
* David Greaves (lbt)&lt;br /&gt;
* TBC (a MeeGo architect)&lt;br /&gt;
* TBC (a developer, like Graham Cobb/Shane Bryan/so many others)&lt;br /&gt;
* TBC (someone to help with the work ;-))&lt;br /&gt;
&lt;br /&gt;
== Initial Steps ==&lt;br /&gt;
&lt;br /&gt;
[http://mer-l-in.blogspot.com/2011/01/meego-community-development-apps.html This blog post] attempts to summarise the position as at Jan 2011. The content is intended to be used as a basis for discussion and is being wikified.&lt;br /&gt;
&lt;br /&gt;
* [[Community Office/Task Forces/MeeGo Surrounds and Apps/Apps|Apps]] covers the area around the MeeGo Apps store&lt;br /&gt;
* [[Community Office/Task Forces/MeeGo Surrounds and Apps/OBS|OBS]] is about the OBS and policies and technology there&lt;br /&gt;
* [[Community Office/Task Forces/MeeGo Surrounds and Apps/Teams|Teams]] is for collaborative team areas&lt;br /&gt;
* [[Community Office/Task Forces/MeeGo Surrounds and Apps/Surrounds|Surrounds]] discusses the idea of how typical opensource code sharing can be managed in a distro-like manner around MeeGo.&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow</id>
		<title>Release Infrastructure/BOSS/Standard workflow</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Standard_workflow"/>
				<updated>2011-07-12T22:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: /* Robogrator Process Launcer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BOSS comes with a sample &amp;quot;standard workflow&amp;quot; which consists of:&lt;br /&gt;
* a plugin to the OBS to intercept the [[Release Infrastructure/BOSS/OBS Event List|event notifications]]&lt;br /&gt;
* the robogrator process launcher&lt;br /&gt;
* a [[Release_Infrastructure/BOSS/Participants|coherent set of participants]]&lt;br /&gt;
&lt;br /&gt;
This is not a mandatory workflow but was developed at Nokia and is designed to be useful for MeeGo vendors&lt;br /&gt;
&lt;br /&gt;
=== Installation and source ===&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
NOTE: skynet branch for now&lt;br /&gt;
&lt;br /&gt;
=== Robogrator Process Launcher ===&lt;br /&gt;
&lt;br /&gt;
Robogrator is the robotic package integrator. It reacts to the events occuring on the OBS and looks at the data inside to identify which project-specific process to launch.&lt;br /&gt;
&lt;br /&gt;
Installation is as boss-launcher-robogrator:&lt;br /&gt;
 apt-get install boss-launcher-robogrator&lt;br /&gt;
or&lt;br /&gt;
 zypper in boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
NOTE: robogrator is the package name , the participant name in processes is obs_event so register the participant with skynet by invoking the command :&lt;br /&gt;
&lt;br /&gt;
 skynet register -n obs_event&lt;br /&gt;
&lt;br /&gt;
It uses the data sent by the obs-boss-plugin to launch a fresh process.&lt;br /&gt;
&lt;br /&gt;
All processes have the fields:&lt;br /&gt;
* project : the project used to drive the process. Usually the project the package is in but for requests type events this is the target project.&lt;br /&gt;
* ev : the (undocumented) OBS Notify object parameters&lt;br /&gt;
&lt;br /&gt;
For the actual process, robogrator uses the namespace/project/event-label to find a specific ruote process.&lt;br /&gt;
&lt;br /&gt;
For the standard workflow the first participant is the standard_workflow_handler&lt;br /&gt;
&lt;br /&gt;
It is configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
&lt;br /&gt;
This participant serves two purposes:&lt;br /&gt;
* tracks packages that are rebuilt when a repo is published&lt;br /&gt;
* set some standard fields used by other participants&lt;br /&gt;
&lt;br /&gt;
* REPO_PUBLISHED&lt;br /&gt;
** repository&lt;br /&gt;
** packages (packages successfully built in this build/publish cycle)&lt;br /&gt;
* BUILD_UNCHANGED, BUILD_SUCCESS, BUILD_FAIL&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_CREATE_PACKAGE, SRCSRV_DELETE_PACKAGE&lt;br /&gt;
** package&lt;br /&gt;
* SRCSRV_VERSION_CHANGE&lt;br /&gt;
** package&lt;br /&gt;
** rev&lt;br /&gt;
** version&lt;br /&gt;
* SRCSRV_REQUEST_*&lt;br /&gt;
** actions&lt;br /&gt;
** who&lt;br /&gt;
** rid&lt;br /&gt;
** description&lt;br /&gt;
** when&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/International</id>
		<title>International</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/International"/>
				<updated>2011-07-12T21:07:41Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Proposed policy for language support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MeeGo is an international project and that is reflected in the MeeGo wiki where we will have pages in many languages.&lt;br /&gt;
&lt;br /&gt;
However a wiki should be managed - pages go out-of-date and content sometimes needs to be removed. That's hard to do if you don't understand the language.&lt;br /&gt;
&lt;br /&gt;
== Wiki Language Support Policy ==&lt;br /&gt;
&lt;br /&gt;
The default language for the site is English.&lt;br /&gt;
&lt;br /&gt;
For a new language to be accepted into the wiki the community should have at least 2 (?) active community members to take responsibility for those pages.&lt;br /&gt;
&lt;br /&gt;
For pages with non-English content the page should be categorised with &amp;lt;nowiki&amp;gt;[[Category:Language_French]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
(Use the English word for the language in the category please.)&lt;br /&gt;
&lt;br /&gt;
This page (?) should contain a list of the members responsible for each language and should contain all Language_* categories.&lt;br /&gt;
&lt;br /&gt;
* French : ???&lt;br /&gt;
* German : &lt;br /&gt;
&lt;br /&gt;
[[Category:Language_French]]&lt;br /&gt;
[[Category:Language_German]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Packaging/Guidelines</id>
		<title>Packaging/Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Packaging/Guidelines"/>
				<updated>2011-07-05T14:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: clarify &amp;quot;The %changelog% macro must not be used in the .spec&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Packaging Guidelines =&lt;br /&gt;
&lt;br /&gt;
Guidelines below were adapted for MeeGo from Moblin, OpenSUSE, Fedora and other distributions.&lt;br /&gt;
&lt;br /&gt;
== Maintaining a Package ==&lt;br /&gt;
Every package in MeeGo needs a maintainer (AKA owner, bug owner). Any package without an owner will automatically be nominated for deletion from MeeGo. A package maintainer is responsible for making sure that&lt;br /&gt;
* packages are up to date with latest upstream&lt;br /&gt;
* packages consistently build in the MeeGo build system and fix build failures when they occur&lt;br /&gt;
* package meta data in the RPM spec file is accurate&lt;br /&gt;
* the license of the package is correct&lt;br /&gt;
* she/he follow upstream for any critical security issues and fix them ASAP&lt;br /&gt;
* she/he Provides information about major changes to other packagers and maintainer to allow enough time for fixing compatibility issues&lt;br /&gt;
&lt;br /&gt;
Since the data about ownership of packages is not maintained anywhere right now we are starting to use available meta data fields in the build system to track ownership. This will be better integrated and managed at a later point, but to be able to start somewhere MeeGo will use the bugowner key available for every package. We will start adding the metadata about maintainers (bugowners) in the build system and we will have a grace period for this data to be supplied and added to the build system. After the grace period, packages without a maintainer will be reviewed and any packages without a maintainer will be nominated for deletion.&lt;br /&gt;
&lt;br /&gt;
To add yourself as a bugowner of a package, please follow the steps below:&lt;br /&gt;
* Update to the most recent osc version (0.131) from the MeeGo tools repository. Note: this is essential, since the needed options are not released upstream yet. Tools: http://repo.meego.com/MeeGo/tools/repos/&lt;br /&gt;
* Identify the packages  of which you are the ultimate maintainer&lt;br /&gt;
* Do the following for every package you maintain in the Trunk:* projects:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
osc reqms --role bugowner &amp;lt;project&amp;gt; &amp;lt;package&amp;gt; -m &amp;quot;I want to own this because I love this package&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your request will be sent and someone in release engineering will approve it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current status can be seen here: [[Packaging/Maintainers]]&lt;br /&gt;
&lt;br /&gt;
== Package Naming ==&lt;br /&gt;
* Dash '-' must be used as the delimiter for name parts. &lt;br /&gt;
* Do NOT use an underscore '_', a plus '+', or a period '.' as a delimiter. &lt;br /&gt;
* The spec file should be named using the %{name}.spec scheme which should also correspond to the package name within a project in the build system.&lt;br /&gt;
&lt;br /&gt;
== Version and Release ==&lt;br /&gt;
&lt;br /&gt;
Package Versions look like : X.Y.Z-R.B&lt;br /&gt;
* X.Y.Z is the 'Version' number - determined by the source package.&lt;br /&gt;
* R is the 'Release' number which is automatically incremented by OBS whenever a source/packaging changes (eg a check-in or request acceptance)&lt;br /&gt;
* B is the build number which is incremented when the package is rebuilt due to a dependency change.&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The Version field in the spec file is where you should put the current version of the software being packaged. &lt;br /&gt;
There are four cases where the version contains non-numeric characters:&lt;br /&gt;
&lt;br /&gt;
* Pre-release packages: Packages released as &amp;quot;pre-release&amp;quot; versions, prior to a &amp;quot;final&amp;quot; version. Example tags include &amp;quot;alpha&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;rc&amp;quot;, &amp;quot;cvs&amp;quot;, &amp;quot;git&amp;quot;, &amp;quot;svn&amp;quot;, etc... Details can be found below: Non-Numeric Version.&lt;br /&gt;
* Post-release packages: Packages released after a &amp;quot;final&amp;quot; version. These packages contain the same numeric version as the &amp;quot;final&amp;quot; version, but have an additional non-numeric identifier. This mechanism may also be used for packaging only changes to an upstream package.&lt;br /&gt;
* Snapshot packages: Packages built from SCM snapshots. These packages could be either &amp;quot;pre&amp;quot; or &amp;quot;post&amp;quot; release packages. &lt;br /&gt;
&lt;br /&gt;
==== Non-Numeric Version ====&lt;br /&gt;
&lt;br /&gt;
We can use letters and tilde into the version tag. We do not use the Release field for this.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Let's assume the following Qt versions:&lt;br /&gt;
Qt 4.7.0~beta1&lt;br /&gt;
Qt 4.7.0~beta1+git1&lt;br /&gt;
Qt 4.7.0~beta2&lt;br /&gt;
Qt 4.7.0&lt;br /&gt;
&lt;br /&gt;
Version comparison results:&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1 4.7.0~beta1+git1&lt;br /&gt;
0:4.7.0~beta1+git1-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1+git2 4.7.0~beta2&lt;br /&gt;
0:4.7.0~beta2-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta2 4.7.0&lt;br /&gt;
0:4.7.0-None is newer&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
4.7.0~beta1 &amp;lt; 4.7.0~beta1+git1 &amp;lt; 4.7.0~beta2 &amp;lt; 4.7.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the ~ comparison order is specific to MeeGo rpm (http://rpm.org/ticket/56).&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
&lt;br /&gt;
This field is handled by the build system to be able to manage automated builds. The initial setting in the spec file is used by the build system but in many cases it does not need to be changed.&lt;br /&gt;
&lt;br /&gt;
There is no need for the %{dist} macro in the release field. This is also handled directly by the build system.&lt;br /&gt;
&lt;br /&gt;
The release number is set to zero with any version update. It is increased by one with any change in the package.&lt;br /&gt;
&lt;br /&gt;
We can put letters into the version tag, so we do not use the Release field for this. Details can be found above.&lt;br /&gt;
&lt;br /&gt;
If you build the package outside of the OBS or if you copy a package then you will of course not get the correct Release or Build values.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
*The ''Packager'' tag should not be used in spec files. The identities of the packagers are evident from the changelog entries. By not using the ''Packager'' tag, you also avoid seeing bad binaries rebuilt by someone else with your name in the header.  See also the '''Maximum RPM definition of the Packager tag''' at [http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-PACKAGER-TAG www.rpm.org] .  If you need to include information about the packager in the rpms ''you'' built, use &amp;lt;code&amp;gt;%packager&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;~/.rpmmacros&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
*The ''Vendor'' tag should not be used. It is set automatically by the build system.&lt;br /&gt;
&lt;br /&gt;
*Usually, the ''Pre&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Req'' tag should be replaced by plain ''Requires''.   For more info, see Maximum RPM snapshot's  [http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-manual-dependencies.html#S3-RPM-DEPEND-FINE-GRAINED fine grained dependencies chapter] .&lt;br /&gt;
* The ''Source'' tag documents where to find the upstream sources for the rpm.  In most cases this should be a complete URL to the upstream tarball.  &lt;br /&gt;
=== Summary Tag ===&lt;br /&gt;
The summary is a single line string describing the package. The maximum length is 80 characters. It should fit all standard situations and not assume any special context. It should be helpful alone, in alphabetically sorted or unsorted lists of some selected packages, and in alphabetically sorted or unsorted lists of all packages.&lt;br /&gt;
&lt;br /&gt;
It should describe the package's main function and point out any special properties of the package to support the user comparing similar packages. For example, the two words &amp;quot;Web Browser&amp;quot; summarize any web browser, but using additional adjectives (like minimalistic, complex, GNOME, KDE, text-based, fast, or author's) helps characterize a specific package.&lt;br /&gt;
&lt;br /&gt;
The RPM spec file contains only the English version to keep the RPM database small.&lt;br /&gt;
&lt;br /&gt;
*The ''Summary'' tag value should not end in a period. If this bothers you from a grammatical point of view, sit down, take a deep breath, and get over it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Group Tag ===&lt;br /&gt;
&lt;br /&gt;
Valid RPM Groups are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Amusements/Games&lt;br /&gt;
Amusements/Graphics&lt;br /&gt;
Applications/Archiving&lt;br /&gt;
Applications/Communications&lt;br /&gt;
Applications/Databases&lt;br /&gt;
Applications/Editors&lt;br /&gt;
Applications/Emulators&lt;br /&gt;
Applications/Engineering&lt;br /&gt;
Applications/File&lt;br /&gt;
Applications/Internet&lt;br /&gt;
Applications/Multimedia&lt;br /&gt;
Applications/Productivity&lt;br /&gt;
Applications/Publishing&lt;br /&gt;
Applications/System&lt;br /&gt;
Applications/Text&lt;br /&gt;
Development/Debuggers&lt;br /&gt;
Development/Languages&lt;br /&gt;
Development/Libraries&lt;br /&gt;
Development/System&lt;br /&gt;
Development/Tools&lt;br /&gt;
Documentation&lt;br /&gt;
System/Boot&lt;br /&gt;
System/Console&lt;br /&gt;
System/I18n/Chinese&lt;br /&gt;
System/I18n/Japanese&lt;br /&gt;
System/I18n/Korean&lt;br /&gt;
System/Packages&lt;br /&gt;
System/Base&lt;br /&gt;
System/Daemons&lt;br /&gt;
System/Kernel&lt;br /&gt;
System/Libraries&lt;br /&gt;
System/Shells&lt;br /&gt;
System/X11&lt;br /&gt;
System/X11/Fonts&lt;br /&gt;
System/X11/Icons&lt;br /&gt;
System/GUI/XFCE&lt;br /&gt;
System/GUI/Other&lt;br /&gt;
System/GUI/GNOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Domain/Subsystem based RPM Groups ====&lt;br /&gt;
&lt;br /&gt;
Following the new architecture and the new [http://meego.com/developers/meego-architecture/meego-architecture-domain-view domain view], RPM groups (The Group tag in the RPM) for core packages will be changed to match the domains and any package in the core that is part of one of the domain will have a corresponding group that matches the architecture.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Domain   &lt;br /&gt;
! Subsystem  &lt;br /&gt;
!Groupname&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Adaptation   ||  Communications/Cellular Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Framework   ||  Communications/Cellular Framework&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Telephony and IM   ||  Communications/Telephony and IM&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Bluetooth   ||  Communications/Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Connectivity Adaptation   ||  Communications/Connectivity Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  ConnMan   ||  Communications/ConnMan&lt;br /&gt;
|-&lt;br /&gt;
| Data Management   ||  Content Framework   ||  Data Management/Content Framework&lt;br /&gt;
|-&lt;br /&gt;
| Development Platform   ||  Platform SDK   ||  Development Platform/Platform SDK&lt;br /&gt;
|-&lt;br /&gt;
| Essentials   ||  Base Essentials   ||  Essentials/Base Essentials&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Font Management   ||  Graphics/Font Management&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Display and Graphics Adaptation   ||  Graphics/Display and Graphics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Input Adaptation   ||  Graphics/Input Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Open GL ES   ||  Graphics/Open GL ES&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  X11   ||  Graphics/X11&lt;br /&gt;
|-&lt;br /&gt;
| Kernel   ||  Linux Kernel   ||  Kernel/Linux Kernel&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Framework   ||  Location/Location Framework&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Adaptation   ||  Location/Location Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Audio Adaptation   ||  Multimedia/Audio Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Camera Adaptation   ||  Multimedia/Camera Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Gstreamer   ||  Multimedia/Gstreamer&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging and Video Adaptation   ||  Multimedia/Imaging and Video Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging Codecs   ||  Multimedia/Imaging Codecs&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  PulseAudio   ||  Multimedia/PulseAudio&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Sharing   ||  Multimedia/Sharing&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  UPnP   ||  Multimedia/UPnP&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Backup Framework   ||  Personal Information Management/Backup Framework&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Calendar Engine   ||  Personal Information Management/Calendar Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Contacts Engine   ||  Personal Information Management/Contacts Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Email Engine   ||  Personal Information Management/Email Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Synchronization Framework   ||  Personal Information Management/Synchronization Framework&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt   ||  Qt/Qt&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt Mobility   ||  Qt/Qt Mobility&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt WebKit   ||  Qt/Qt WebKit&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Accounts   ||  Security/Accounts&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Certificate Manager   ||  Security/Certificate Manager&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Integrity Protection Framework   ||  Security/Integrity Protection Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Access Control Framework   ||  Security/Access Control Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Single Sign-On   ||  Security/Single Sign-On&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  SW Distribution Security   ||  Security/SW Distribution Security&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Security Adaptation   ||  Security/Security Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Software Management   ||  Package Manager   ||  Software Management/Package Manager&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Context Framework   ||  System/Context Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  NGF   ||  System/NGF&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Resource Policy   ||  System/Resource Policy&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Adaptation   ||  System/Sensor Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Framework   ||  System/Sensor Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Startup Services   ||  System/Startup Services&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  System Control   ||  System/System Control&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Device Mode Adaptation   ||  System/Device Mode Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Vibra and Haptics Adaptation   ||  System/Vibra and Haptics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BuildRoot tag ===&lt;br /&gt;
The ''BuildRoot'' value MUST be below &amp;lt;code&amp;gt;%{_tmppath}/&amp;lt;/code&amp;gt; and MUST contain at least &amp;lt;code&amp;gt;%{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%{version}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_tmppath}/%{name}-%{version}-%{release}-root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BuildRoot tag can be omitted in packages targeting MeeGo only and is handled directly by rpm in MeeGo, for packages that need to run on other distros with older rpm it should be added for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
=== PreReq ===&lt;br /&gt;
&lt;br /&gt;
Packages should not use the PreReq tag. Once upon a time, in dependency loops PreReq used to &amp;quot;win&amp;quot; over the conventional Requires when RPM determined the installation order in a transaction. This is no longer the case.&lt;br /&gt;
&lt;br /&gt;
=== Explicit Requires ===&lt;br /&gt;
Packages must not contain explicit ''Requires'' on libraries except when absolutely &lt;br /&gt;
necessary. When explicit library ''Requires'' are necessary, there should be a spec file comment justifying it.&lt;br /&gt;
&lt;br /&gt;
We generally rely on rpmbuild to automatically add dependencies on library SONAMEs. &lt;br /&gt;
Modern package management tools are capable of resolving such dependencies to determine &lt;br /&gt;
the required packages. Explicit dependencies on specific package names may aid the &lt;br /&gt;
inexperienced user, who attempts at installing RPM packages manually, however, history &lt;br /&gt;
has shown that such dependencies add confusion when library/files are moved from one &lt;br /&gt;
package to another, when packages get renamed, when one out of multiple alternative &lt;br /&gt;
packages would suffice, and when versioned explicit dependencies become out-of-date and &lt;br /&gt;
inaccurate. Additionally, in some cases, old explicit dependencies on package names &lt;br /&gt;
require unnecessary updates/rebuilds. &lt;br /&gt;
&lt;br /&gt;
Exemplary rationale for a versioned explicit dependency:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # The automatic dependency on libfubar.so.1 is insufficient,&lt;br /&gt;
  # as we strictly need at least the release that fixes two segfaults.&lt;br /&gt;
  Requires: libfubar &amp;gt;= 0:1.2.3-7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packagers should revisit an explicit dependency as appropriate to avoid &lt;br /&gt;
it becoming inaccurate and superfluous.&lt;br /&gt;
&lt;br /&gt;
=== BuildRequires ===&lt;br /&gt;
&lt;br /&gt;
In package development and testing, please verify that your package is not missing any necessary build dependencies. Having proper build requirements saves the time of all developers and testers as well as build systems because they will not need to search for missing build requirements manually. It is also a safety feature that prevents builds with that would not otherwise fail, but would be missing crucial features. For example, a graphical application may exclude PNG support after its '''configure''' script detects that libpng is not installed.&lt;br /&gt;
&lt;br /&gt;
Before adding Build&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Requires to any package, please be comfortable with [[#Explicit Requires|  Requires]] .&lt;br /&gt;
&lt;br /&gt;
=== Patches ===&lt;br /&gt;
Each problem should be solved in a separate patch. To allow easy maintenance of patches, every patch should have a header providing the following information:&lt;br /&gt;
&lt;br /&gt;
* Authors' names&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines/signed-process Signed-off-by] tag&lt;br /&gt;
* Detailed description of the fixed problem&lt;br /&gt;
* URL of the original source of the patch if any&lt;br /&gt;
&lt;br /&gt;
The name of a patch file consists of:&lt;br /&gt;
&lt;br /&gt;
* The name and version of the source tarball from which the patched file is derived&lt;br /&gt;
* Some words that characterize the patch content&lt;br /&gt;
* The filename suffix &amp;lt;code class=&amp;quot;filename&amp;quot;&amp;gt;.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Patches are in the unified format (&amp;lt;span&amp;gt;'''diff -u'''&amp;lt;/span&amp;gt;) and should be applied with 1 strip level in the spec file (&amp;lt;span&amp;gt;'''%patch -p1'''&amp;lt;/span&amp;gt;). The only exceptions are the patches obtained from an another primary source site. The original name, suffix, and format is preserved in this case.&lt;br /&gt;
&lt;br /&gt;
Each patch should be compressed with &amp;lt;span&amp;gt;'''bzip2'''&amp;lt;/span&amp;gt; if its size is greater than 100kB. The macros &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%name&amp;lt;/code&amp;gt; and &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%version&amp;lt;/code&amp;gt; should be used whenever possible.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Source:   %{name}-%{version}.tar.bz2&lt;br /&gt;
 Patch0:   %{name}-%{version}-autoconf.patch&lt;br /&gt;
 Patch1:   %{name}-%{version}-gcc31.patch&lt;br /&gt;
&lt;br /&gt;
For the patches to be applied, the patches should be mentioned under %setup. For the above example, this could be done as&lt;br /&gt;
&lt;br /&gt;
 %setup -q&lt;br /&gt;
 %patch0 -p1&lt;br /&gt;
 %patch1 -p1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Patches have to be marked as such in the spec file and should be applied using the internal patch routines available in rpm. Use of alternate patch management system not supported by rpm is not allowed.&lt;br /&gt;
&lt;br /&gt;
=== %clean ===&lt;br /&gt;
&lt;br /&gt;
The %clean section is not required for MeeGo 1.1 and above. Each package for MeeGo 1.0 MUST have a %clean section, which contains rm -rf %{buildroot} (or $RPM_BUILD_ROOT).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Any relevant documentation included in the source distribution should be included in the package. Irrelevant documentation include build instructions, the omnipresent ''INSTALL'' file containing generic build instructions, for example, and documentation for non-Linux systems, e.g. ''README.MSDOS''.  Pay also attention about which subpackage you include documentation in, for example API documentation belongs in the -devel subpackage, not the main one.  Or if there's a lot of documentation, consider putting it into a subpackage.  In this case, it is recommended to use &amp;lt;code&amp;gt;*-doc&amp;lt;/code&amp;gt; as the subpackage name, and &amp;lt;code&amp;gt;Documentation&amp;lt;/code&amp;gt; as the value of the &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Also, if a package includes something as &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, it must not affect the runtime of the application. To summarize: If it is in &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, the program must run properly if it is not present.&lt;br /&gt;
&lt;br /&gt;
== Devel Packages ==&lt;br /&gt;
If the software being packaged contains files intended solely for development, those files should be put in a -devel subpackage. The following are examples of file types which should be in -devel:&lt;br /&gt;
* Header files (such as .h files)&lt;br /&gt;
* Unversioned shared libraries (such as libfoo.so). Versioned shared libraries (such as libfoo.so.3, libfoo.so.3.0.0) should not be in -devel.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is if the file is used for development and not needed for the base package to run properly, it should go in -devel.&lt;br /&gt;
&lt;br /&gt;
=== Requiring Base Package ===&lt;br /&gt;
Devel packages must require the base package using a fully versioned dependency: &amp;lt;code&amp;gt;Requires: %{name} = %{version}-%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Usually, subpackages other than -devel should also require the base package using a fully versioned dependency.&lt;br /&gt;
&lt;br /&gt;
=== Pkgconfig Files ===&lt;br /&gt;
The placement of pkgconfig(.pc) files depends on their usecase. Since they are almost always used for development purposes, they should be placed in a -devel package.&lt;br /&gt;
A reasonable exception is when the main package itself is a development tool not installed in a user runtime, such as gcc or gdb.&lt;br /&gt;
&lt;br /&gt;
== Test Packages ==&lt;br /&gt;
Tests should be included in -test subpackage or separate package according to the following guidelines.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Test_Packaging Test Packaging Guidelines]&lt;br /&gt;
&lt;br /&gt;
== Shared Libraries ==&lt;br /&gt;
Whenever possible (and feasible), MeeGo Packages containing libraries should build them as shared libraries. In addition, every binary RPM package which contains shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If the package has multiple subpackages with libraries, each subpackage should also have a &amp;lt;code&amp;gt;%post/%postun&amp;lt;/code&amp;gt; section that calls &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt;. An example of the correct syntax for this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post -p /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
%postun -p /sbin/ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this specific syntax only works if &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; is the only call in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If you have additional commands to run during the scriptlet, call &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; at the beginning of the scriptlet, like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --add&lt;br /&gt;
&lt;br /&gt;
%postun&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
Configuration files must be marked as such in packages.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, use &amp;lt;code&amp;gt;%config(noreplace)&amp;lt;/code&amp;gt; instead of plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; unless your best, educated guess is that doing so will break things.  In other words, think hard before overwriting local changes in configuration files on package upgrades.  An example case when /not/ to use &amp;lt;code&amp;gt;noreplace&amp;lt;/code&amp;gt; is when a package's configuration file changes so that the new package revision wouldn't work with the config file from the previous package revision.  Whenever plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; is used, add a brief comment to the specfile explaining why.&lt;br /&gt;
&lt;br /&gt;
Don't use %config or %config(noreplace) under /usr. /usr is deemed to not contain configuration files in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Initscripts ==&lt;br /&gt;
&lt;br /&gt;
Currently, only SystemV-style initscripts are supported in MeeGo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Desktop files ==&lt;br /&gt;
&lt;br /&gt;
If a package contains a GUI application, then it needs to also include a properly installed .desktop file.  For the purposes of these guidelines, a GUI application is defined as any application which draws an X window and runs from within that window.  Installed .desktop files MUST follow the [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec]  , paying particular attention to validating correct usage of Name, GenericName, [http://standards.freedesktop.org/menu-spec/latest/apa.html Categories]  ,&lt;br /&gt;
[http://www.freedesktop.org/Standards/startup-notification-spec StartupNotify]&lt;br /&gt;
entries.&lt;br /&gt;
&lt;br /&gt;
=== Icon tag in Desktop Files ===&lt;br /&gt;
The icon tag can be specified in two ways:&lt;br /&gt;
&lt;br /&gt;
* Full path to specific icon file:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=/usr/share/pixmaps/comical.png &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Short name without file extension:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=comical &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short name without file extension is preferred, because it allows for icon theming (it assumes .png by default, then tries .svg and finally .xpm), but either method is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== .desktop file creation ===&lt;br /&gt;
If the package doesn't already include and install its own .desktop file, you need to make your own. You can do this by including a .desktop file you create as a Source: (such as Source3: %{name}.desktop) or generating it in the spec file. Here are the contents of a sample .desktop file (comical.desktop): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Comical&lt;br /&gt;
GenericName=Comic Archive Reader&lt;br /&gt;
Comment=Open .cbr &amp;amp; .cbz files&lt;br /&gt;
Exec=comical&lt;br /&gt;
Icon=comical&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Graphics;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Localizing .desktop files ===&lt;br /&gt;
The values of Name or GenericName are displayed as captions to the graphical desktop icon, so they should be localized according to the [http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html Desktop Entry Specification].  Most of the time, only ''language'' codes or ''language/country'' codes are needed to select the intended system locale.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=Clocks&lt;br /&gt;
Name[de]=Uhrzeit&lt;br /&gt;
Name[es]=Relojes&lt;br /&gt;
Name[fr]=Horloges&lt;br /&gt;
Name[pt_BR]=Relógios&lt;br /&gt;
Name[zh_CN]=时钟&lt;br /&gt;
Icon=meego-app-clocks&lt;br /&gt;
Exec=meego-qml-launcher --opengl --fullscreen --app meego-app-clocks&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above .desktop file, &amp;lt;tt&amp;gt;[de]&amp;lt;/tt&amp;gt; specifies the German language locale, covering any German-speaking locale, such as &amp;lt;tt&amp;gt;de_DE&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;de_AT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Since a ''language/country'' code (e.g. &amp;lt;tt&amp;gt;pt_BR&amp;lt;/tt&amp;gt;) is more specific than a ''language'' code (e.g. &amp;lt;tt&amp;gt;pt&amp;lt;/tt&amp;gt;), a string for the &amp;lt;tt&amp;gt;pt_BR&amp;lt;/tt&amp;gt; locale will '''not''' be used for the Portuguese language locale (&amp;lt;tt&amp;gt;pt&amp;lt;/tt&amp;gt;).  If a string is appropriate for every Portuguese locale, you can use &amp;quot;&amp;lt;tt&amp;gt;Name[pt]&amp;lt;/tt&amp;gt;&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
=== desktop-file-install usage ===&lt;br /&gt;
It is not simply enough to just include the .desktop file in the package, one MUST run &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; OR &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;%install&amp;lt;/code&amp;gt; (and have &amp;lt;code&amp;gt;BuildRequires: desktop-file-utils&amp;lt;/code&amp;gt;), to help ensure .desktop file safety and spec-compliance. &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; MUST be used if the package does not install the file or there are changes desired to the .desktop file (such as add/removing categories, etc). &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; MAY be used instead if the .desktop file's content/location does not need modification.  Here are some examples of&lt;br /&gt;
usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \&lt;br /&gt;
%{SOURCE3}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--add-category=&amp;quot;AudioVideo&amp;quot;                             \&lt;br /&gt;
--delete-original                                       \&lt;br /&gt;
--dir=%{buildroot}%{_datadir}/applications              \&lt;br /&gt;
%{buildroot}/%{_datadir}/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-validate %{buildroot}/%{_datadir}/applications/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== .desktop file post-install ===&lt;br /&gt;
&lt;br /&gt;
After installing a .desktop file, it's typical to touch the file and the folder so that the UX will detect the change.  Otherwise, the new file will not be detected until reboot.  I.e.&lt;br /&gt;
&lt;br /&gt;
   %post&lt;br /&gt;
   touch %{_datadir}/applications/foo.desktop&lt;br /&gt;
   touch %{_datadir}/applications&lt;br /&gt;
&lt;br /&gt;
...will update the time-stamp of the folder and the .desktop file.&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
=== Using %{buildroot} and %{optflags} vs $RPM_BUILD_ROOT and $RPM_OPT_FLAGS ===&lt;br /&gt;
There are two styles of defining the rpm Build Root and Optimization Flags in a spec file:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ||macro style ||  variable style&lt;br /&gt;
|-&lt;br /&gt;
|Build Root||%{buildroot}||$RPM_BUILD_ROOT&lt;br /&gt;
|-&lt;br /&gt;
|Opt. Flags||%{optflags}||$RPM_OPT_FLAGS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is very little value in choosing one style over the other, since they will resolve to the same values in all scenarios. You should pick a style and use it consistently throughout your packaging.&lt;br /&gt;
&lt;br /&gt;
Mixing the two styles, while valid, is bad from a QA and usability point of view, and should not be done in MeeGo packages.&lt;br /&gt;
&lt;br /&gt;
== Handling Locale Files ==&lt;br /&gt;
&lt;br /&gt;
If the package includes translations, add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BuildRequires: gettext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you don't, your package could fail to generate translation files in the buildroot.&lt;br /&gt;
&lt;br /&gt;
MeeGo includes an rpm macro called &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is usually:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In some cases, the application may use a different &amp;quot;name&amp;quot; for its locales. You may have to look at the locale files and see what they are named. If they are named &amp;lt;code&amp;gt;myapp.mo&amp;lt;/code&amp;gt;, then you will need to pass &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;%{name&amp;lt;/code&amp;gt;}.&lt;br /&gt;
After &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; macro. Usually, it will be named &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt;. You should then use this file in the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; list to include the locales detected by &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. To do this, you should include it with the -f parameter to &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are already using the -f parameter for the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; section where the locales should live, just append the contents of &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt; to the end of the file that you are already using with -f. (Note that only one file may be used with &amp;lt;code&amp;gt;%files -f&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Here is an example of proper usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;foo.spec&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure --with-cheese&lt;br /&gt;
make %{?_smp_mflags}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
make DESTDIR=%{buildroot} install&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&lt;br /&gt;
%clean&lt;br /&gt;
rm -rf %{buildroot}&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%doc LICENSE README&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why do we need to use %find_lang? ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; helps keep the spec file simple, and helps avoid several other packaging mistakes.&lt;br /&gt;
&lt;br /&gt;
* Packages that use &amp;lt;code&amp;gt;%{_datadir}/*&amp;lt;/code&amp;gt; to grab all the locale files in one line also grab ownership of the locale directories, which is not permitted.&lt;br /&gt;
* Most packages that have locales have lots of locales. Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is much easier in the spec file than having to do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_datadir}/locale/ar/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/be/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/cs/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/de/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/es/LC_MESSAGES/%{name}.mo&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* As new locale files appear in later package revisions, &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; will automatically include them when it is run, preventing you from having to update the spec any more than is necessary.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; in packages containing locales is a MUST.&lt;br /&gt;
&lt;br /&gt;
== Scriptlets ==&lt;br /&gt;
Great care should be taken when using scriptlets in MeeGo packages. If scriptlets are used, those scriptlets must be sane. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scriptlets requirements ===&lt;br /&gt;
Do not use the &amp;lt;code&amp;gt;Requires(pre,post)&amp;lt;/code&amp;gt; style notation for scriptlet dependencies, because of two bugs in RPM. Instead, they should be split like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Requires(pre): ...&lt;br /&gt;
Requires(post): ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information, see [http://www.redhat.com/archives/fedora-devel-list/2004-April/msg00674.html www.redhat.com] .&lt;br /&gt;
&lt;br /&gt;
=== Running scriptlets only in certain situations ===&lt;br /&gt;
When the rpm command executes the scriptlets in a package it indicates if the action preformed is an install, erase, upgrade or reinstall by passing an integer argument to the script in question according to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          install   erase   upgrade  reinstall&lt;br /&gt;
%pre         1        -         2         2&lt;br /&gt;
%post        1        -         2         2&lt;br /&gt;
%preun       -        0         1         -&lt;br /&gt;
%postun      -        0         1         -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that for example a package that installs an init script with the &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; command should uninstall it only on erase and not upgrade with the following snippet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%preun&lt;br /&gt;
if [ $1 -eq 0 ] ; then&lt;br /&gt;
/sbin/chkconfig --del %{name}&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also &amp;lt;code&amp;gt;/usr/share/doc/rpm-*/triggers&amp;lt;/code&amp;gt;, which gives a more formal, generalized definition about the integer value(s) passed to various scripts.&lt;br /&gt;
&lt;br /&gt;
=== Scriplets are only allowed to write in certain directories ===&lt;br /&gt;
Build scripts of packages (%prep, %build, %install, %check and %clean) may only alter files (create, modify, delete) under %{buildroot}, %{_builddir} and valid temporary locations like /tmp, /var/tmp (or $TMPDIR or %{_tmppath} as set by the rpmbuild process) according to the following matrix&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|         || /tmp, /var/tmp, $TMPDIR, %{_tmppath} || %{_builddir} || %{buildroot}&lt;br /&gt;
|-&lt;br /&gt;
|%prep    || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%build   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%install || yes                                  || yes          || yes&lt;br /&gt;
|-&lt;br /&gt;
|%check   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%clean   || yes                                  || yes          || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Further clarification: That should hold true irrespective of the builder's uid.&lt;br /&gt;
&lt;br /&gt;
== Use of Epochs ==&lt;br /&gt;
The Epoch tag in RPM is to be used only as a last resort, and should be avoided whenever possible. However, it is sometimes necessary to use an Epoch to handle upstream versioning changes or to ease transition from third party repositories. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a package from scratch ==&lt;br /&gt;
&lt;br /&gt;
See [[Spectacle]]&lt;br /&gt;
&lt;br /&gt;
Spectacle is a great tool for straightforward packages, and we have many of those, hundreds, many of those packages already have been using spectacle happily for a while now. Generally, the 80/20 rule applies here, almost 80% of packages in MeeGo can be converted to this format, probably around 20% will need to stay as is for various reasons.&lt;br /&gt;
&lt;br /&gt;
Spectacle in general helps  a lot when you have a package that does:&lt;br /&gt;
* configure&lt;br /&gt;
* make&lt;br /&gt;
* make install&lt;br /&gt;
&lt;br /&gt;
and especially useful when for example you have to manage many build dependencies and patches or for common packaging of perl/python/X packages that usually follows the same packaging work flow. We have plans to add lots of nice features to make packaging easier and more fun with spectacle.&lt;br /&gt;
&lt;br /&gt;
While spectacle has many advanced options to cover all kind of corner cases, it should not be used for complex packages that would require lots of customization, especially now that we support multiple architectures and where we need to apply code and custom scripts to support different scenarios.&lt;br /&gt;
&lt;br /&gt;
Spectacle provides scripts to convert spec files to spectacle, those try to do their best but you SHOULD never just take the output as is and rely on the script, a review of the output is necessary, otherwise you might end up with lots of duplication in the spec file. This is the most common mistake, developers are relying on the output of the conversion script, basically picking some spec file from another distro and converting it. This can lead to major disasters in some cases.&lt;br /&gt;
&lt;br /&gt;
So to summarize:&lt;br /&gt;
* It is NOT mandatory to use spectacle&lt;br /&gt;
* If you try to convert and find yourself spending more than a few minutes on a package, then probably there is something wrong and you should not be using that or you should RTFM.&lt;br /&gt;
* Use it with care, especially when you first import the data from existing spec files or when you first create your YAML file&lt;br /&gt;
* Your distro maintainer might send you a note that certain packages you are maintaining could be converted to spectacle easily, but she/he should not reject your package because it does not use spectacle.&lt;br /&gt;
* If you find yourself forced to edit the spec file manually for some reason, then either:&lt;br /&gt;
** your package is not suitable to be used with spectacle&lt;br /&gt;
** or you might want to ask for a feature to support that special case&lt;br /&gt;
* packager should not change packaging format randomly.&lt;br /&gt;
** You need to be the main maintainer&lt;br /&gt;
** If a package is already using the yaml format, you need to have a valid reason why not to use the yaml format&lt;br /&gt;
&lt;br /&gt;
== Modifying existing Packages ==&lt;br /&gt;
&lt;br /&gt;
If you base a new package on an existing non-MeeGo package, make sure you verify its correctness of the package  and the spec file and to understand exactly what has been done to package the software exactly. Do not submit a package without knowing what those strange, but innocent-looking commands do.&lt;br /&gt;
&lt;br /&gt;
In particular, you should&lt;br /&gt;
&lt;br /&gt;
* ensure that original tarballs are self-contained pristine tarballs. The tarball should not contain symlinks that reference outside the tarball root directory&lt;br /&gt;
* verify any sources and patches and remove patches or sources that:&lt;br /&gt;
** are related to platforms we do not support (example: sparc, ia64, ppc, ...)&lt;br /&gt;
** Implement features we do not support (example: selinux)&lt;br /&gt;
** Read every patch and understand what it does, if it is needed, put an explanation in the header justifying why the patch is needed.&lt;br /&gt;
* verify that the license stated in the spec file matches the actual license of the software,&lt;br /&gt;
* skim the summary and description for typos and oddities (see Summary and description ),&lt;br /&gt;
* make sure that the correct build root is used,&lt;br /&gt;
* ensure that macro usage is consistent and that the macros are available in MeeGo (see Macros ). &lt;br /&gt;
&lt;br /&gt;
Keep old changelog entries to credit the original authors. Entries that are several years old or refer to ancient versions of the software may be erased. If you end up doing radical changes and re-write most of the spec file anyway, feel free to start the changelog from scratch. In other words, use your best judgement.&lt;br /&gt;
&lt;br /&gt;
== Changelogs ==&lt;br /&gt;
&lt;br /&gt;
This section describes the MeeGo policy for RPM changelogs. (Original changelogs included in the original source are not affected by this policy.) &lt;br /&gt;
&lt;br /&gt;
Please consider that a &amp;quot;normal end user with some technical skills&amp;quot; should be able to read and understand an RPM changelog. Changelog entries have to be in reverse chronological order: newer change log entries are listed above older entries, with the first entry being the most recent. &lt;br /&gt;
&lt;br /&gt;
Please bear in mind that MeeGo changelogs will be automatically parsed to prepare distribution release notes and to report on bugs and CVEs and malformed entries may not be read correctly.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* MeeGo uses a separate file for package changes which is similar to a debian changelog file. This file is named as the spec file, but ends in *.changes instead of *.spec. The %changelog% section must not be used in the .spec file.&lt;br /&gt;
* Entries in the changes file should have the following structure:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* dow mmm dd yyyy Name Goes Here &amp;lt;your@email.com&amp;gt; - [version]&lt;br /&gt;
- comment&lt;br /&gt;
- comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following exceptions are noted through observation:&lt;br /&gt;
* version is often omitted (such as: alsa-utils 1.0.15-1 -&amp;gt; 1.0.16-1)&lt;br /&gt;
* there are multiple changelog entries per version (such as: alsa-utils 1.0.19)&lt;br /&gt;
* the hyphen between email and version is often omitted (such as: alsa-utils)&lt;br /&gt;
* spaces between name and &amp;lt;email&amp;gt; are omitted (such as: Zhang, Qiang Z&amp;lt;qiang.z.zhang@intel.com&amp;gt; nano)&lt;br /&gt;
* name is sometimes omitted (such as: bitstream-vera-fonts nicolas.mailhot at laposte.net)&lt;br /&gt;
* &amp;lt;email&amp;gt; is sometimes omitted (such as: binutils Jim Kingdon)&lt;br /&gt;
This wide variation in formats makes automation tasks harder than they should be. Please use the correct format.&lt;br /&gt;
&lt;br /&gt;
=== External References ===&lt;br /&gt;
&lt;br /&gt;
Each external reference (bug numbers etc) should be of the form:&lt;br /&gt;
 &amp;quot;(&amp;quot; + external reference code + bug number +&amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently defined:&lt;br /&gt;
* MeeGo Bugs : BMC#&lt;br /&gt;
* MeeGo Features: FEA#&lt;br /&gt;
* Common Vulnerability / Exposure : CVE&lt;br /&gt;
&lt;br /&gt;
==== Bug Numbers in the change log ====&lt;br /&gt;
&lt;br /&gt;
During maintenance of a distribution, every change has to be marked with the correct bug number. Normally this has to be an number from https://bugzilla.meego.com/. Add an entry with bugzilla number and a short description of the bug-summary. For example:&lt;br /&gt;
 - Removed invalid desktop Category &amp;quot;Application&amp;quot; (BMC#4654).&lt;br /&gt;
 - Symlink icon to pixmaps dir (BMC#2108)&lt;br /&gt;
 - Added gnome-ui-properties to control-center (BMC#1960).&lt;br /&gt;
&lt;br /&gt;
New packages related to new features will refer to the corresponding bug number in bugzilla, preceded with an FEA.  For example:&lt;br /&gt;
 - Adding Qt Contacts support FEA#8011&lt;br /&gt;
&lt;br /&gt;
==== CVE numbers in change log ====&lt;br /&gt;
&lt;br /&gt;
As with bug numbers: Add a short description (normally the CVE summary should be enough), the Bugzilla and the CVE number to the changelog entry. Examples:&lt;br /&gt;
 - Add gdk-pixbuf-226710.patch (BMC#226710), and (CVE-2007-0010).&lt;br /&gt;
 - More XPM fixes: (CVE-2005-2975) xpm too many colors DoS (BMC#129642)&lt;br /&gt;
 - fix ~/.dmrc symlink attack (BMC#180704), (CVE-2006-2449)&lt;br /&gt;
&lt;br /&gt;
=== Spec File changes ===&lt;br /&gt;
Be as precise as possible! This is especially important if you remove something from the spec file. &lt;br /&gt;
&lt;br /&gt;
* Removing original source code must be declared in spec file with a comment (&amp;quot;useful for FreeBSD only&amp;quot; for example) - not necessary to repeat the comment in specfile.&lt;br /&gt;
* Extra commands (for example during %install) can be illustrated with a short comment in spec file&lt;br /&gt;
* Adding/Removing packages from Requires/Provides must be described in the changelog&lt;br /&gt;
&lt;br /&gt;
=== Source Code changes ===&lt;br /&gt;
&lt;br /&gt;
Document the most important changes but limit verbosity.&lt;br /&gt;
&lt;br /&gt;
* look into the source changelog and pick up the most important changes for the distribution (changes for other operation systems are not important). What has changed in the new version, usually in the level of detail of a NEWS file, the change log files are usually too long. More than '''10-15 lines''' shouldn't be necessary to describe the most important changes.&lt;br /&gt;
* arrange the original changes behind the version update information. Example:&lt;br /&gt;
  - Update to 1.3.2:&lt;br /&gt;
    + fixes memory leak in import function&lt;br /&gt;
    + new API command: unlock_client()&lt;br /&gt;
    + the following bugs are closed by this new upstream release:&lt;br /&gt;
    ++ ............ [MGN:332]&lt;br /&gt;
    ++ .............[MGN:337]&lt;br /&gt;
  - split of devel package&lt;br /&gt;
* If upstream does not provide a meaningful change log, then only do best effort. Don't waste too much time over it.&lt;br /&gt;
* If the upstream tarball really has not changed except for the version number, just the version number in the change log would be fine. Same goes for packages just containing some graphics or theming (unless upstream already provides something that fits). If the upstream changes just consists of &amp;quot;updated translation&amp;quot; or &amp;quot;several bug fixes&amp;quot; even that can be sufficient for a changelog entry (unless these bug fixes contain something you find worth mentioning).&lt;br /&gt;
&lt;br /&gt;
== Packaging Static Libraries ==&lt;br /&gt;
Packages including libraries should exclude static libs as far as possible (eg by configuring with ''--disable-static'').  Static libraries should only be included in exceptional circumstances.  Applications linking against libraries should as far as possible link against shared libraries not static versions.&lt;br /&gt;
&lt;br /&gt;
Libtool archives, ''foo.la'' files, should not be included. Packages using libtool will install these by default even if you configure with ''--disable-static'', so they may need to be removed before packaging.  Due to bugs in older versions of libtool or bugs in programs  that use it, there are times when it is not always possible to remove *.la files without modifying the program.  In most cases it is fairly easy to work with upstream to fix these issues.  Note that if you are updating a library in a stable release (not devel) and the package already contains *.la files, removing the *.la files should be treated as an API/ABI change -- ie: Removing them changes the interface that the library gives to the rest of the world and should not be undertaken lightly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packaging Static Libraries ===&lt;br /&gt;
* In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.&lt;br /&gt;
&lt;br /&gt;
* We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:&lt;br /&gt;
# '''Static libraries and shared libraries.''' In this case, the static libraries must be placed in a ''*-static'' subpackage. Separating the static libraries from the other development files in ''*-devel'' allow us to track this usage by checking which packages &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries.&lt;br /&gt;
# '''Static libraries only.''' When a package only provides static libraries you can place all the static library files in the ''*-devel'' subpackage.  When doing this you also must have a virtual Provide for the ''*-static'' package:&lt;br /&gt;
&amp;lt;pre&amp;gt;%package devel&lt;br /&gt;
Provides: foo-static = %{version}-%{release}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages which explicitly need to link against the static version must &amp;lt;code&amp;gt;BuildRequire: foo-static&amp;lt;/code&amp;gt;, so that the usage can be tracked.&lt;br /&gt;
&lt;br /&gt;
* If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the ''*-devel'' subpackage. The devel subpackage must have a virtual Provide for the ''*-static'' package, and packages dependent on it must &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Staticly Linking Executables ===&lt;br /&gt;
* Static linkage is a special exception and should be decided on a case-by-case basis.  The packager must provide rationale for linking statically, including precedences where available, to release engineering for approval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Packaging]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Vendor_Landing_Page/Continuous_Integration</id>
		<title>Vendor Landing Page/Continuous Integration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Vendor_Landing_Page/Continuous_Integration"/>
				<updated>2011-07-05T10:49:57Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Created page with &amp;quot;= Vendor Continuous Integration =  Continuous Integration against MeeGo follows two basic patterns: * Track an active baseline * Build on a stable baseline  The overall CI proces...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vendor Continuous Integration =&lt;br /&gt;
&lt;br /&gt;
Continuous Integration against MeeGo follows two basic patterns:&lt;br /&gt;
* Track an active baseline&lt;br /&gt;
* Build on a stable baseline&lt;br /&gt;
&lt;br /&gt;
The overall CI process looks like [[File:MeeGo_CI_Process_outline.pdf]]&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:MeeGo_CI_Process_outline.pdf</id>
		<title>File:MeeGo CI Process outline.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:MeeGo_CI_Process_outline.pdf"/>
				<updated>2011-07-05T10:46:13Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Community_Office/Community_device_program/Nokia</id>
		<title>Community Office/Community device program/Nokia</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Community_Office/Community_device_program/Nokia"/>
				<updated>2011-06-30T19:50:17Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: Update for lbt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nokia Participation Details =&lt;br /&gt;
* Program Contact: [[User:qgil|Quim Gil]]&lt;br /&gt;
Update: Nokia N950 handsets are ready!  https://meego.com/community/device-program/devices/nokia-n9-devkit&lt;br /&gt;
&lt;br /&gt;
== N950 Devkit Program Details ==&lt;br /&gt;
* Device: Nokia N950 loaded with MeeGo 1.2 Harmattan &lt;br /&gt;
* Quantity: 250&lt;br /&gt;
* Additional Criteria / Terms: &lt;br /&gt;
** One submission per developer please&lt;br /&gt;
** Device to be loaned to participant for [period needed].&lt;br /&gt;
** May not be able to ship to certain countries / locations.&lt;br /&gt;
** Nokia employees are not eligible.&lt;br /&gt;
* Timeframe: distribution active.&lt;br /&gt;
&lt;br /&gt;
 '''QUESTIONS / ANSWERS &amp;amp; UPDATES:''' http://forum.meego.com/showthread.php?t=3597&lt;br /&gt;
&lt;br /&gt;
== General thoughts on device program ==&lt;br /&gt;
&lt;br /&gt;
The Nokia N950 is a platform available now for developers targeting the Nokia N9 and MeeGo handset apps in general. Technical details are available at http://developer.nokia.com/swipe&lt;br /&gt;
&lt;br /&gt;
Candidates must be community developers ready to start working on new or existing open source applications, to be published in apps.meego.com and the Nokia Store. Links to your current projects are relevant! Deadline for applications: end of Tuesday, June 28th.&lt;br /&gt;
&lt;br /&gt;
Questions &amp;amp; comments: http://forum.meego.com/showthread.php?t=3597&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: *commercial* developers are encouraged to apply directly at http://developer.nokia.com - thank you for your understanding.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
&lt;br /&gt;
 '''WORK IN PROGRESS'''&lt;br /&gt;
&lt;br /&gt;
=== Accepted ===&lt;br /&gt;
&lt;br /&gt;
 This is the first list of accepted candidates. More will come! You will receive an email with instructions on 30-06-2011.&lt;br /&gt;
&lt;br /&gt;
 For the sake of transparency and collaboration:&lt;br /&gt;
 * Please link your name to a page describing your Nokia N950 related work e.g. a wiki page.&lt;br /&gt;
 * Add here one line of text summarizing the project(s) and feature(s) you are concentrating. &lt;br /&gt;
 * We haven't done the 'Nokia employee' check yet. If you happen to be one, contact Quim Gil.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:aaporantalainen|Aapo Rantalainen]] '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
First goal: [http://www.umsic.org/jammo/  JamMo] (will need some underlying libraries, e.g. [http://www.clutter-project.org/ clutter])&lt;br /&gt;
&lt;br /&gt;
Ádám Balázs&lt;br /&gt;
&lt;br /&gt;
Adam Pigg &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting my Qt/QML apps/games from maemo, and further work on Kexi and some more QML games&lt;br /&gt;
[http://www.piggz.co.uk My Site]&lt;br /&gt;
&lt;br /&gt;
[[User:Captianigloo|Aguirre Nicolas]] (captainigloo) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://enna.geexbox.org Enna], [http://svn.enlightenment.org/svn/e/trunk/E-MODULES-EXTRA/elfe elfe] and all [http://www.enlightenment.org EFL/Enlightenment] libraries to Meego.&lt;br /&gt;
&lt;br /&gt;
Alan M Bruce&lt;br /&gt;
&lt;br /&gt;
[[User:mardy|Alberto Mardegan]] (Mardy) &amp;lt;br /&amp;gt;&lt;br /&gt;
Developing QML port of [http://www.mardy.it/mappero Mappero], possibly [http://www.mardy.it/oculo Oculo] and [http://neverball.org Neverball] (for the latter I'm now working on a N900 port).&lt;br /&gt;
&lt;br /&gt;
Aleix Pol (apol) &amp;lt;br/&amp;gt;&lt;br /&gt;
Porting &amp;quot;horaris&amp;quot; and &amp;quot;kanban&amp;quot; maemo applications, finally get to have a usable KAlgebra Mobile version working on MeeGo, hopefully drag other KDE applications with this effort.&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/avis Alexander Terekhov] (Avis) '''ID sent, already a Launchpad member''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting and improving [http://qt-apps.org/content/show.php/Smart+Shopper?content=139742 Smart Shopper] project. &lt;br /&gt;
&lt;br /&gt;
[[User:amandalam|Amanda Hoi Ching Lam]] (amandalam)  '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Traditional Chinese language and utility apps for the MeeGo &amp;amp; Harmattan platforms, including but not limited to a Chinese character lookup app, and applications localized for the Traditional Chinese communities in Hong Kong, Macau and Taiwan.  [https://sites.google.com/site/amandahoic/Home/ Amanda's Software Projects]&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/andreagrandi Andrea Grandi] (Andy80) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
QML native client for Soma.fm radio. Based on the old mSoma: https://gitorious.org/msoma&lt;br /&gt;
&lt;br /&gt;
Andrei Mirestean&lt;br /&gt;
&lt;br /&gt;
[[User:Jaffa|Andrew Flegg]] (Jaffa) '''ID sent''', '''DDP order placed'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting apps from Maemo (Attitude &amp;amp; Hermes), developer tools, and apps.meego.com workflow. [[User:Jaffa|&amp;quot;Want to know more?&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[User:fiferboy|Andrew Olmsted]] (fiferboy) '''ID sent''', '''Already a Launchpad member (but my Launchpad account hasn't activated)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://andrew.olmsted.ca/meego Fiferboy's Projects] (Birdlist, Personal Lexicon, other ideas), porting and packaging some pure Qt apps&lt;br /&gt;
&lt;br /&gt;
[[User:anidel|Aniello Del Sorbo]] (anidel) &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://maemo.org/downloads/product/Maemo5/xournal/ Xournal] from Maemo to Harmattan/MeeGo&lt;br /&gt;
&lt;br /&gt;
[[User:antman8969|Anthony Naddeo]] (antman8969) &amp;lt;br /&amp;gt;&lt;br /&gt;
Creator and maintainer of [http://linkedup.googlecode.com Linkedup] - LinkedIn client for Maemo, Meego, Harmattan..... anything Qt&lt;br /&gt;
&lt;br /&gt;
Antti Pohjola (Summel1) ''' ID sent, Applied for the Nokia Developer Launchpad program '''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://www.summeli.fi/?p=2453 AntSnes] and [http://www.summeli.fi/?p=2520 gpSP] from Symbian^3 to Harmattan/MeeGo.&lt;br /&gt;
&lt;br /&gt;
[[User:awhiemstra|Arjen-Wander Hiemstra]] &amp;lt;br/&amp;gt;&lt;br /&gt;
Porting [http://gluon.gamingfreedom.org Gluon] to MeeGo/Harmattan.&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/djarty Artem Sereda] (DJArty) &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting qutIM, openpref, arora, links, groove, microdc, Ukrainian localization.&lt;br /&gt;
&lt;br /&gt;
Assaf Paz '''ID sent''', '''applied for Nokia Launchpad'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Adapting [http://code.google.com/p/qwazer/ Qwazer] to also work on Meego, hopefully create an Exchange Webmail client in pure QML (N900 was the initial target), Hebrew support &lt;br /&gt;
&lt;br /&gt;
[[User:Bart-cerneels|Bart Cerneels]](Stecchino)&amp;lt;br /&amp;gt;&lt;br /&gt;
Mobile UX' for Amarok using QML. [http://amarok.kde.org Amarok website]&lt;br /&gt;
&lt;br /&gt;
[[User:khertan|Benoît HERVIER]] (Khertan)&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://khertan.net/khteditor KhtEditor] a source code editor, [http://khertan.net/khweeteur Khweeteur] a twitter/identi.ca client, [http://khertan.net/python_sdist_maemo Sdist_maemo] and developping KhtSync a automated file synchronization application, and KhtDrive an app to measure car and driver performances for eco driving.&lt;br /&gt;
&lt;br /&gt;
[[User:Termana|Bradley Smith]] (Termana) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Developing a karaoke game with built-in pitch correction.&lt;br /&gt;
&lt;br /&gt;
[[User:arfoll|Brendan Le Foll]], '''ID sent''', '''applied for Nokia Launchpad'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting XBMC + MeeGo TV stuff + doing audio continuums using pulseaudio.&lt;br /&gt;
&lt;br /&gt;
Carsten Munk&lt;br /&gt;
&lt;br /&gt;
Christian Pühringer (cip) '''ID sent, already a Launchpad member'''&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/cip/WikiOnBoard/wiki WikiOnBoard] Offline reader for Wikipedia using [http://openzim.org zim] format.  &lt;br /&gt;
&lt;br /&gt;
[[User:Cpscotti|Clovis Scotti]] (cpscotti) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Developing the &amp;quot;connected snowboarding&amp;quot; [http://www.pushsnowboarding.com Push Snowboarding] application/project. Also, I'll be very happy to port other apps I did (mainly for Maemo) + new projects.&lt;br /&gt;
&lt;br /&gt;
Cornelius Hald&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/zehjotkah Cosimo Kroll] (zehjotkah) '''ID sent''', '''already a Launchpad member'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://wiki.maemo.org/MeeGo_Coding_Competition_2011 MeeGo Coding Competition 2011]&lt;br /&gt;
&lt;br /&gt;
Cristian Grozea '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
magnus-plus photo: an application that combines a camera-based magnifier with more advanced image processing techniques, that would enable one to:&amp;lt;br /&amp;gt;&lt;br /&gt;
- use it as a magnifier (with optional light from the camera LED).&amp;lt;br /&amp;gt;&lt;br /&gt;
- use it as a photo negatives lightbox that automatically inverts the negatives and adjusts the colors for proper display:&lt;br /&gt;
the user just have to hover it over the (back-lit) negatives and on the screen the corresponding positive (or magnified part of it) is displayed in real-time.&amp;lt;br /&amp;gt;&lt;br /&gt;
- use it as an EVF add-on to SLRs to help with manual focus, leveraging the possibility of amplifying contrast and magnifying.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damian Waradzyn&amp;lt;br/&amp;gt;&lt;br /&gt;
Porting and further development of [http://talk.maemo.org/showthread.php?t=58402 CloudGPS]&lt;br /&gt;
&lt;br /&gt;
Daniel Martin Yerga&lt;br /&gt;
&lt;br /&gt;
David Derby&lt;br /&gt;
&lt;br /&gt;
David Galindo&lt;br /&gt;
&lt;br /&gt;
[[User:Lbt|David Greaves]] '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Mainly CE, Harmattan and Apps to start with. Hopefully Surrounds later.&lt;br /&gt;
&lt;br /&gt;
Diego Marcos&lt;br /&gt;
&lt;br /&gt;
Dimitar Pashov&lt;br /&gt;
&lt;br /&gt;
Dru Moore&lt;br /&gt;
&lt;br /&gt;
Eero af Heurlin&lt;br /&gt;
&lt;br /&gt;
[[User:Emocow | Ferdinand Mayet]] ('''Nokia Developer ID sent''')&amp;lt;br/&amp;gt;&lt;br /&gt;
Development of a golf GPS application&lt;br /&gt;
&lt;br /&gt;
Frank Sievertsen&lt;br /&gt;
&lt;br /&gt;
Gary Birkett&lt;br /&gt;
&lt;br /&gt;
[http://meego.com/users/garyd Gary Driggs] ('''dev ID sent, already reg'd as Launchpad member''')&lt;br /&gt;
Porting [http://www.gnu.org/s/gnash Gnash] to MeeGo ARM devices.&lt;br /&gt;
&lt;br /&gt;
George Ruinelli '''ID sent, Applied for the Nokia Developer Launchpad program'''&amp;lt;br&amp;gt;&lt;br /&gt;
Porting my [http://maemo.org/packages/view/sleepanalyser/ SleepAnalyser] from MAEMO as well as other smaller apps I wrote/ported. See [http://wiki.maemo.org/User:Caco3] for details.&lt;br /&gt;
&lt;br /&gt;
Gerard Braad&lt;br /&gt;
&lt;br /&gt;
Harald Sitter&lt;br /&gt;
&lt;br /&gt;
[[User:helihyv|Heli Hyvättinen]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting Ghosts Overboard (a game) and Chess Clock from Maemo and adding new features to the former.&lt;br /&gt;
&lt;br /&gt;
[[User:bergie|Henri Bergius]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting Buscatcher, Midgard and Node.js -related tools to MeeGo. However, I've withdrawn my device program application because I already got a N950 via Helsinki MeeGo Network.&lt;br /&gt;
&lt;br /&gt;
Hiemanshu Sharma '''ID Sent, Applied for Nokia Developer Launchpad program''' &amp;lt;br/&amp;gt;&lt;br /&gt;
Currently working on porting [[http://forum.meego.com/showthread.php?t=3660|Komedia]]. More apps in the pipeline including Quassel (IRC Client), a Google Reader (name suggestions are welcome) and a 'Line of the day' kind of app (a glorified version of cowsay). Also working on getting an opencv port to give way for Face Detection/Facial recognition APIs.&lt;br /&gt;
&lt;br /&gt;
[[User:Divan|Ivan Daniluk]] ''' ID sent, Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting  [[User:Divan|my Maemo5 applications]], adding full Vkontakte support, Russian and Ukrainian localization and developing new apps in progress..&lt;br /&gt;
&lt;br /&gt;
Janne Mäkinen&lt;br /&gt;
&lt;br /&gt;
[[User:Javispedro|Javier de San Pedro Martín]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting my [http://wiki.maemo.org/User:Javispedro Maemo 5 applications and SDL games], and [http://gitorious.org/hsdl/pages/Home SDL] itself.&lt;br /&gt;
&lt;br /&gt;
Jeremias Bosch&lt;br /&gt;
&lt;br /&gt;
Jos van den Oever&lt;br /&gt;
&lt;br /&gt;
[[User:Metropt|Jose Xavier]], '''ID sent''', '''waiting answer from Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
My goal is to port the OpenPilot Ground Control Station to the MeeGo platform and adapt the UI for a better mobile experience. You can see more information about OpenPilot GCS here: http://wiki.openpilot.org/display/Doc/Ground+Control+Station+User+Manual&lt;br /&gt;
&lt;br /&gt;
[[User:Bundyo|Kamen Bundev]] (Bundyo), '''ID sent''', '''applied for Nokia Launchpad''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Rewriting Search Tool, porting Maemo 5 work, NodeJS, possible Tear rewrite.&lt;br /&gt;
&lt;br /&gt;
Karl Johan Grøttum&lt;br /&gt;
&lt;br /&gt;
kemar grant&lt;br /&gt;
&lt;br /&gt;
Ken Young&amp;lt;br /&amp;gt;&lt;br /&gt;
Initially I will port the Maemo [http://wiki.maemo.org/Orrery Orrery] program, and add support for the magnetometer.   I will&lt;br /&gt;
also port some other apps from Maemo 5.&lt;br /&gt;
&lt;br /&gt;
[[User:Kimitake|Kimitake]] '''ID sent, already a Launchpad member'''&amp;lt;br&amp;gt;&lt;br /&gt;
developing Qt-based micro blogging client for twitter, identi.ca, wassr, jp&lt;br /&gt;
&lt;br /&gt;
Kirill Kulakov&lt;br /&gt;
&lt;br /&gt;
[[User:lostinmirkwood|Kristopher C. Kantor]]  '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
* Continuing Development of [http://ansela.garage.maemo.org/ Ansel-A]: Digital Darkroom for Qt Devices&lt;br /&gt;
&lt;br /&gt;
[[User:shadymilkman|Kyle Thomas]]  &amp;lt;br/&amp;gt;&lt;br /&gt;
Creating Reedit: [http://www.shadymilkman.com/p/n9-project.html Reedit] A full featured Reddit list browser &amp;lt;br/&amp;gt;&lt;br /&gt;
Submitted credentials to the N.D.Launchpad for application review, waiting for instructions.&lt;br /&gt;
&lt;br /&gt;
[[User:Creamygoodness|Lance Colton]]   '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Working on Proximus during July, I will see what we can do with Conky after that.&lt;br /&gt;
&lt;br /&gt;
Lasse Kärkkäinen&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://performous.org/ Performous] singing/band game from PC to N900 and MeeGo&lt;br /&gt;
&lt;br /&gt;
Lasse Stenberg&lt;br /&gt;
&lt;br /&gt;
Laszlo Papp (Already got one earlier, thus I do not need a new one ;) )&lt;br /&gt;
&lt;br /&gt;
liang wei (foolegg)&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Cuteinputmethod]] is a Chinese Input Method, designed for handset device.&amp;lt;br/&amp;gt;&lt;br /&gt;
(received notify mail, and sent reply with Nokia Developer Account Id)&lt;br /&gt;
&lt;br /&gt;
Luis Felipe Strano Moraes '''ID sent''', '''applied for Launchpad membership''' &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Luiz Augusto von Dentz&lt;br /&gt;
&lt;br /&gt;
Marat Fayzullin (fms) '''ID sent''', '''already a Launchpad member'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Porting the following: &lt;br /&gt;
[http://fms.komkon.org/SlideRule/ SlideRule],&lt;br /&gt;
[http://fms.komkon.org/ColEm/ ColEm], &lt;br /&gt;
[http://fms.komkon.org/fMSX/ fMSX], &lt;br /&gt;
[http://fms.komkon.org/Speccy/ Speccy], &lt;br /&gt;
[http://fms.komkon.org/ATI85/ AlmostTI], &lt;br /&gt;
[http://fms.komkon.org/MG/ MasterGear], &lt;br /&gt;
[http://fms.komkon.org/iNES/ iNES], &lt;br /&gt;
[http://fms.komkon.org/VGB/ VGB], &lt;br /&gt;
[http://fms.komkon.org/VGBA/ VGBA]. &lt;br /&gt;
Also expecting to port the FBReader and an IRC client (although most likely not XChat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Marco Bavagnoli&lt;br /&gt;
&lt;br /&gt;
[[User:Mece|Marcus Wikström]] (mece)&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://talk.maemo.org/showthread.php?t=73490 Tweed Suit] for N9/50. Probably Qlister and also planning an location based tracking service/app.&lt;br /&gt;
&lt;br /&gt;
Marijn Kruisselbrink&lt;br /&gt;
&lt;br /&gt;
Marius Gedminas&lt;br /&gt;
&lt;br /&gt;
Marko Mattila&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Vgrade Martin Brook] ID sent&lt;br /&gt;
&lt;br /&gt;
I would plan to contnue my contributions to the N900 Community Edition of MeeGo which I assume will push right through into the N9. I am very interested in contributing to the exciting new architecture built on Wayland to give this device the best user experience.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Local Network Meetups, Cambridge, Birmingham, Koln, Dusseldorf&lt;br /&gt;
&lt;br /&gt;
Martin Grimme (pycage) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br&amp;gt;&lt;br /&gt;
Doing the Community Apps installer client. Also targetting Harmattan with my OSS MeeGo apps (which are currently mostly running on the WeTab).&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Martink Martin Kolman] (MartinK)&amp;lt;br&amp;gt;&lt;br /&gt;
Porting the modRana GPS navigation system and Mieru manga and comic book reader.&lt;br /&gt;
&lt;br /&gt;
Matt Hawkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:zas|Matti Henrik Karjalainen]] (zas) '''ID sent, applied for Nokia Launchpad'''&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://tols17.oulu.fi/~matkarja/meego/ Projects] (Currently working on Tap 'em (game))&lt;br /&gt;
&lt;br /&gt;
[http://forum.meego.com/member.php?u=9286 Michael Muth] (helex) '''ID sent, already a Launchpad member'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://talk.maemo.org/showthread.php?p=1001316 ClipMan], [http://talk.maemo.org/showthread.php?t=52589 DreamRemote], TcpKeyboard, something like [http://talk.maemo.org/showthread.php?t=72408 ConkyLayoutSwitcher] (have to see how the UI works in detail - need to create it from scratch)&lt;br /&gt;
&lt;br /&gt;
[http://blog.mikeasoft.com/tag/maemo/ Michael Sheldon] (Elleo) '''ID sent, applied for Nokia Launchpad'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Creating a [http://libre.fm Libre.fm] radio client and porting [http://www.jokosher.org Jokosher] to small screen devices.&lt;br /&gt;
&lt;br /&gt;
[http://blog.cihar.com/ Michal Čihař] (Nijel) '''ID sent, applied for Nokia Launchpad'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Creating a [http://wammu.eu/ Gammu] application for phone for data synchronization and backup.&lt;br /&gt;
&lt;br /&gt;
Michele Tameni ( netvandal ) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
&lt;br /&gt;
- Luca's Mirror:  It’s a simple app that transform your phone into a hand-held mirror with some other cool addictions.&lt;br /&gt;
&lt;br /&gt;
- Semantic experiment : Experiment with Notification Area mixed with the semantic information stored in tracker, reacting to user action with usefull notification&lt;br /&gt;
More info  [http://michele.tameni.it/project/meego/ Here]&lt;br /&gt;
&lt;br /&gt;
Mike Choy : Porting Maesynth and Maelophone from N900 Python to QML and C++. Stress testing the new [https://projects.developer.nokia.com/qtgameenabler Qt Game Enabler] to see if we finally have  low latency audio support in Qt. Will also look to see if we can get midi sample support via Wild Midi or equivalent. &lt;br /&gt;
&lt;br /&gt;
Mikko Vartiainen '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
http://forum.meego.com/showthread.php?t=3607&lt;br /&gt;
&lt;br /&gt;
[https://projects.developer.nokia.com/home/user/mmlado Mladen Milankovic] '''IDs sent'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Develop games in QML&lt;br /&gt;
&lt;br /&gt;
Mures Andone&lt;br /&gt;
&lt;br /&gt;
[[User:Nielsmayer|Niels Mayer]] '''[https://projects.developer.nokia.com/home/user/NielsMayer Nokia Developer ID] sent''', '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://wiki.meego.com/Tubelet-and-cutetube-port Port cutetube-qml to MeeGo tablet UX/harmattan UX.]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://code.google.com/p/ytd-meego/wiki/CitizenJournalismWithYoutubeDirectForMeego YouTube Direct For MeeGo]&lt;br /&gt;
&lt;br /&gt;
Oleksandr Kachur&lt;br /&gt;
&lt;br /&gt;
Olle Tränk (zeamoceq) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting [http://qticksize.zeamoceq.net qTickSize] (interface to Swedish online stock broker)&lt;br /&gt;
&lt;br /&gt;
Oscar Martinez '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Port 2d puzzle board game [http://kde-apps.org/content/show.php/kMagnet?content=109111 kMagnet]&lt;br /&gt;
&lt;br /&gt;
[[User:Lorenzph|Philip Lorenz]] (Nokia Developer ID sent)&amp;lt;br /&amp;gt;&lt;br /&gt;
Development of a hiking application supporting the user when planning and executing the trip.&lt;br /&gt;
&lt;br /&gt;
Philipp Zabel&amp;lt;br /&amp;gt;&lt;br /&gt;
Integration of Tor support, porting of Frogatto, Beifahrer and Cinaest&lt;br /&gt;
&lt;br /&gt;
Randall Arnold&lt;br /&gt;
Application testing, local and regional meetup/event demos, product evangelism, peripheral design&lt;br /&gt;
&lt;br /&gt;
Ravi Vagadia '''ID Sent''', '''Applied for the Nokia Developer Launchpad Program''' &amp;lt;br/&amp;gt;&lt;br /&gt;
VLC Remote &amp;amp; Trip Management App.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ray Donnelly&lt;br /&gt;
&lt;br /&gt;
[[User:Rlinfati|Rodrigo Linfati]]  '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
* Upgrade GoogleLatitude to the current API&lt;br /&gt;
* Find your Frient: a apps that inform you position directly to you friend without any external server.&lt;br /&gt;
&lt;br /&gt;
Roman Morawek&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Wonko Ruediger Gad (wonko)] '''ID sent''',  '''Applied for the Nokia Developer Launchpad program''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Amongst other things I'll port my existing applications for Maemo5/Fremantle to MeeGo/Harmattan: VU Meter, StultitiaSimplex, Zeecontrol, Advanced Clock Plugin (for details please see my page).&lt;br /&gt;
&lt;br /&gt;
[[User:generalantilles|Ryan Abel]] (GeneralAntilles) &amp;lt;br /&amp;gt;&lt;br /&gt;
Working with fiferboy on a photographer's application suite ([http://thousandsparrows.com/meego/ SnapGo], currently) to include feature like a light meter and GPS track recording.&lt;br /&gt;
&lt;br /&gt;
Sam Bristow&lt;br /&gt;
&lt;br /&gt;
[[User:Eipi|Sanjeev Visvanatha]] (EIPI) , '''d.n.c ID sent''', '''could not apply for Nokia Launchpad''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Porting MaeFlight from Maemo 5, and adding functionality for Harmattan &lt;br /&gt;
&lt;br /&gt;
Seif Lotfy&lt;br /&gt;
&lt;br /&gt;
Sergey Ivanov&lt;br /&gt;
&lt;br /&gt;
Sergey Ivanov&lt;br /&gt;
&lt;br /&gt;
[[User:Spenap|Simón Pena]] '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting and enhancing Maevies from Maemo 5 to Meego/Harmattan&lt;br /&gt;
&lt;br /&gt;
Simon Pickering (lardman) '''ID sent''',  '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Porting mBarcode, working on Augmented Reality app (mAR), time and location event app (Proximus), additional location methods (offline cellid, magnetic field line direction)&lt;br /&gt;
Page here: http://wiki.meego.com/User_talk:Lardman&lt;br /&gt;
&lt;br /&gt;
somnath banik&lt;br /&gt;
&lt;br /&gt;
Stani Michiels&lt;br /&gt;
&lt;br /&gt;
Stefanos Harhalakis&lt;br /&gt;
&lt;br /&gt;
Stephen Gadsby (sjgadsby) '''ID sent''', '''applied for Nokia Launchpad''' &amp;lt;br /&amp;gt;&lt;br /&gt;
writing a [[User:Sjgadsby#Preferred Shopper Card Wallet|not-yet-named wallet for store loyalty cards]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:vitaminj|Stephen Spencer]] (VitaminJ) '''ID sent, applied for the Nokia Developer Launchpad program'''&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://jenkins.vitaminj.co.uk/job/meex/ Meex], a portable DJing application&lt;br /&gt;
&lt;br /&gt;
Susanna Huhtanen&lt;br /&gt;
&lt;br /&gt;
Tadej Novak&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Kenya888 Takahiro Hashimoto] &amp;lt;br&amp;gt;&lt;br /&gt;
porting qimsys/mozc to Harmattan/MeeGo, developing streaming multimedia player with QML&lt;br /&gt;
&lt;br /&gt;
Tasuku Suzuki&lt;br /&gt;
&lt;br /&gt;
Teemu Hukkanen&lt;br /&gt;
&lt;br /&gt;
[http://teom.wordpress.com Teo Mrnjavac] '''ID sent, applied for the Nokia Developer Launchpad program'''&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://ur1.ca/4kkwh Porting] [http://amarok.kde.org Amarok] to tablets and handsets running MeeGo/Harmattan.&lt;br /&gt;
&lt;br /&gt;
Thomas Cherryhomes - Lead Developer for LinuxMCE&lt;br /&gt;
* LinuxMCE is a next generation smart home platform encompassing media, home automation, telecom, and security features. http://www.linuxmce.org/&lt;br /&gt;
* A 25 min demo of the software can be seen here: http://video.google.com/videoplay?docid=2176025602905109829&lt;br /&gt;
* Nokia N950 will be used as a test platform for the new QML/Qt Quick based qOrbiter we are writing to replace our existing Orbiter software, qOrbiter videos here: &lt;br /&gt;
** http://www.youtube.com/watch?v=NDGagn3EciA&lt;br /&gt;
** http://www.youtube.com/watch?v=oUHrCdBgoyQ&lt;br /&gt;
&lt;br /&gt;
[[user:thp|Thomas Perl]]  '''ID sent'''&lt;br /&gt;
* [http://gpodder.org/ gPodder] - Integrating gPodder with Harmattan (including specific APIs)&lt;br /&gt;
* Open source work on Python-related APIs (PySide, etc..) + Python tutorials&lt;br /&gt;
* Get [[Games|Mong]] in shape for Harmattan&lt;br /&gt;
* Port over some of my existing [http://maemo.org/profile/view/thp/ Maemo 5 apps]&lt;br /&gt;
&lt;br /&gt;
[[user:harbaum|Till Harbaum]] '''ID sent, applied for the Nokia Developer Launchpad program'''&lt;br /&gt;
* First action: Try to get [http://www.harbaum.org/till/cacheme CacheMe] to work nicely &lt;br /&gt;
* Might have to work on qt theming (and convince people that this is a good thing :-)&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=home%3Aharbaum Community OBS home project]&lt;br /&gt;
* And of course i'd like to port some of my previous Maemo projects ...&lt;br /&gt;
&lt;br /&gt;
[[User:timsamoff|Tim Samoff]]&lt;br /&gt;
* [http://thp.io/2011/mong/ &amp;quot;Mong&amp;quot;]&lt;br /&gt;
* MeeGo Community Apps website design&lt;br /&gt;
* A few other things that are brewing (games, sound generators, etc.)&lt;br /&gt;
&lt;br /&gt;
[[User:timoph|Timo Härkönen]] (timoph) '''ID sent, applied for Launchpad membership'''&lt;br /&gt;
* [http://gitorious.org/random-timoph impuzzle, etc.]&lt;br /&gt;
* [http://timoph.fi timoph.fi]&lt;br /&gt;
* [https://build.pub.meego.com/project/show?project=home%3Atimoph Community OBS home project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/User:Venemo Timur Kristóf]&lt;br /&gt;
&lt;br /&gt;
* '''Sent my Account ID to Quim, applied at Nokia launchpad. Awaiting any reply.'''&lt;br /&gt;
* [http://wiki.meego.com/User:Venemo/HarmattanPlans My Harmattan Plans]&lt;br /&gt;
** [http://gitorious.org/colorful-apps/puzzle-master Puzzle Master]&lt;br /&gt;
** [http://forum.meego.com/showthread.php?t=3711 Public transportation app] (Click on the [http://forum.meego.com/showthread.php?t=3711 link] and post to the thread if you are interested to contribute.)&lt;br /&gt;
** [https://gitorious.org/colorful-apps/memory-game Memory game]&lt;br /&gt;
** Labirynth game (No code available yet)&lt;br /&gt;
&lt;br /&gt;
Tom Swindell&lt;br /&gt;
* [[User:Tswindell/CommunityApplicationDevelopment]]: Columbus Navigation Toolkit, Media IM Status Updater.&lt;br /&gt;
&lt;br /&gt;
Tommi Laukkanen&lt;br /&gt;
&lt;br /&gt;
Toni Nikkanen&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/sandst1 Topi Santakivi] '''ID sent''', '''applied for Nokia Launchpad'''&lt;br /&gt;
* Porting FunkeySynth, a MeeGo Tablet synthesizer to Harmattan &lt;br /&gt;
* Demo clip and further info in [http://sandst1.wordpress.com/ my blog]&lt;br /&gt;
&lt;br /&gt;
Tuomas Kulve&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://meego.com/users/vasvlad Uladzislau Vasilyeu] (Vasvlad) '''ID sent, applied for the Nokia Developer Launchpad program'''&amp;lt;br/&amp;gt;&lt;br /&gt;
* Porting OMWeather to Harmattan&lt;br /&gt;
&lt;br /&gt;
[[User:drowne|Valerio Di Donato]] '''ID sent, applied for Nokia Launchpad '''&amp;lt;br /&amp;gt;&lt;br /&gt;
Location-Based games and application development, mobile game design. Junomi Developer ( serious game presented at Games for Health Conference in Boston, May 2011 )&lt;br /&gt;
&lt;br /&gt;
Ville Jyrkkä&lt;br /&gt;
&lt;br /&gt;
Ville Ranki&lt;br /&gt;
&lt;br /&gt;
Willem Liu&lt;br /&gt;
&lt;br /&gt;
[[User:ph0b|Xavier Hallade]] '''ID sent, applied for Nokia Launchpad '''&amp;lt;br /&amp;gt;&lt;br /&gt;
Writing tutorials to help other developers to step in MeeGo / Building MeeGo Paris network / Developing an audio player to access to more than 47 000 webradios referenced on AOL shoutcast (by name, genre, current track)&lt;br /&gt;
&lt;br /&gt;
Yann Bieber&lt;br /&gt;
&lt;br /&gt;
Zaheer Merali '''ID sent''' '''Applied for the Nokia Developer Launchpad (for individuals) program'''&lt;br /&gt;
* Porting [http://gstreamer.freedesktop.org GStreamer] plugins not shipped by Nokia to Harmattan&lt;br /&gt;
* Porting [http://www.flumotion.net Flumotion] an open source streaming solution to Harmattan taking advantage of the hardware encoding and the camera&lt;br /&gt;
&lt;br /&gt;
Zap Andersson&lt;br /&gt;
&lt;br /&gt;
Zeeshan Ali&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
Second batch - to be integrated witrh the list above.&lt;br /&gt;
&lt;br /&gt;
Max Waterman&lt;br /&gt;
&lt;br /&gt;
Sławomir Musiał&lt;br /&gt;
&lt;br /&gt;
Sudheer K.&lt;br /&gt;
&lt;br /&gt;
Mohannad Hammadeh&lt;br /&gt;
&lt;br /&gt;
Anthony Naddeo&lt;br /&gt;
&lt;br /&gt;
Leaf Johnson&lt;br /&gt;
&lt;br /&gt;
Ed Page&lt;br /&gt;
&lt;br /&gt;
William Su&lt;br /&gt;
&lt;br /&gt;
Anthony Day&lt;br /&gt;
&lt;br /&gt;
Matt Austin&lt;br /&gt;
&lt;br /&gt;
Tomasz Sterna&lt;br /&gt;
&lt;br /&gt;
Olli Laasonen&lt;br /&gt;
&lt;br /&gt;
Ville Syrjälä&lt;br /&gt;
&lt;br /&gt;
Shane Bryan&lt;br /&gt;
&lt;br /&gt;
Jure Repinc&lt;br /&gt;
&lt;br /&gt;
Adam Harwell&lt;br /&gt;
&lt;br /&gt;
Boris Pohler&lt;br /&gt;
&lt;br /&gt;
Eike Hein&lt;br /&gt;
&lt;br /&gt;
Jeffrey Malone&lt;br /&gt;
&lt;br /&gt;
Thomas Boutroue (aka TheBootroo)&lt;br /&gt;
Making a small and smart mobile widgets toolkit on top of plain QWidget + CSS for styling, named MWTk.&lt;br /&gt;
And using this toolkit to make several apps for MeeGo (and runs onto Maemo5 and Symbian too, even on desktop OS) and a new environment, that aims to be a good alternative to default MeeGo Handset UX, bringing it on pair with Harmattan UX, by giving it a successor to the deprecated MeeGoTouchFramework.&lt;br /&gt;
Already some testable sources can be found on the project gitorious repos.&lt;br /&gt;
https://gitorious.org/meego-community-mobile-ux-ng&lt;br /&gt;
And there is a page with some screenshots of the  look that MTWk can do (this page will be moved on gitorious wiki soon) :&lt;br /&gt;
http://modern-os.projects.servhome.org/mobileApps/&lt;br /&gt;
&lt;br /&gt;
Stephan Bulgin&lt;br /&gt;
&lt;br /&gt;
Martin Dengler&lt;br /&gt;
&lt;br /&gt;
[[User:Rafael2k|Rafael Diniz]] &lt;br /&gt;
I plan to develop FM RDS applications with focus in the new standards from RadioDNS like the RadioVIS (partly based in the already existent the N900-fmvis  http://code.google.com/p/n900-fmvis/).&lt;br /&gt;
I'm a member of a university radio station (Radio Muda FM, 88.5MHz) and my plan is to develop &amp;quot;real life&amp;quot; radio station applications.&lt;br /&gt;
Also, I'll rewrite an application I did for audio streaming, darknow (a gui for darkice, http://darksnow.radiolivre.org) which is an icecast2 client, and also write an audio/video icecast2 client (based in a software I did called theorur, http://theorur.sarava.org), all using QT.&lt;br /&gt;
&lt;br /&gt;
Anderson Briglia&lt;br /&gt;
&lt;br /&gt;
[[User:Milhouse|Neil MacLeod]] '''ID sent, Applied for the Nokia Developer Launchpad program'''&amp;lt;br&amp;gt;&lt;br /&gt;
Develop an audio recording application with geo-location support, plus other applications to improve personal productivity utilising the Harmattan notification/event view.&lt;br /&gt;
&lt;br /&gt;
Nilanjan Chakravorty&lt;br /&gt;
&lt;br /&gt;
David Perlow&lt;br /&gt;
&lt;br /&gt;
Pawel Kurdybacha&lt;br /&gt;
&lt;br /&gt;
Philippe Coval&lt;br /&gt;
&lt;br /&gt;
Philipp Engelhard '''[https://www.developer.nokia.com/Profile/?u=-philipp Nokia Developer ID] sent''', '''Applied for the Nokia Developer Launchpad program'''&amp;lt;br /&amp;gt;&lt;br /&gt;
* Develop a maze game for children and adults&lt;br /&gt;
* Develop a &amp;quot;Nokia Bots&amp;quot; like program for alarm and battery&lt;br /&gt;
&lt;br /&gt;
Ruslan Nazarov&lt;br /&gt;
&lt;br /&gt;
Moritz Mühlenhoff&lt;br /&gt;
&lt;br /&gt;
Matt Williams&lt;br /&gt;
&lt;br /&gt;
Uwe Koch&lt;br /&gt;
&lt;br /&gt;
Frank Banul&lt;br /&gt;
&lt;br /&gt;
Clint Adams&lt;br /&gt;
&lt;br /&gt;
Felipe Erias Morandeira&lt;br /&gt;
&lt;br /&gt;
Ryan Faulkner&lt;br /&gt;
&lt;br /&gt;
Arkadiusz Stopczynski&lt;br /&gt;
&lt;br /&gt;
Ferenc Szekely&lt;br /&gt;
&lt;br /&gt;
[[User:w00t|Robin Burchell]] (w00t) '''ID sent''', '''Already a Launchpad member (but my Launchpad account hasn't activated)'''&amp;lt;br /&amp;gt;&lt;br /&gt;
meego.com hackery, meego-ux in particular. Qt Components. Anything else I find interesting - see [[User:w00t/N950Development]] for plans, as I think of anything interesting to write.&lt;br /&gt;
&lt;br /&gt;
Mohammad Abu-Garbeyyeh&lt;br /&gt;
&lt;br /&gt;
Sebastian Kügler&lt;br /&gt;
&lt;br /&gt;
Juha Ristolainen&lt;br /&gt;
&lt;br /&gt;
Ilya Skriblovsky&lt;br /&gt;
&lt;br /&gt;
Rich Jones&lt;br /&gt;
&lt;br /&gt;
[[User:Bemasc/N950_Project|Benjamin Schwartz]] '''ID sent, applied for Nokia Launchpad ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
I will attempt to convert [http://sugarlabs.org Sugar] [http://activities.sugarlabs.org Activities] into MeeGo apps, and hopefully in the process acquire some insight into the potential for MeeGo to form the basis of future Sugar revisions&lt;br /&gt;
&lt;br /&gt;
Nicolai Hess&lt;br /&gt;
&lt;br /&gt;
Hussain Shafiu '''ID sent''', '''Already a Launchpad member waiting for Launchpad account to be activated)''' &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shan Yafeng&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/User:Lbt</id>
		<title>User:Lbt</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/User:Lbt"/>
				<updated>2011-06-30T19:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lbt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Me==&lt;br /&gt;
I'm a longtime and passionate linux user and developer:&lt;br /&gt;
* My TV runs linux (MythTV)&lt;br /&gt;
* My desktop is linux (Debian)&lt;br /&gt;
* My '''wife's''' desktop is linux (Debian)&lt;br /&gt;
* My dom0 is linux and so are my domUs&lt;br /&gt;
* My car stereos run linux (Empegs)&lt;br /&gt;
* My PDAs run linux (Zaurus, N800)&lt;br /&gt;
* My hifi runs off linux (Squeezebox, Rio Receiver)&lt;br /&gt;
* One day my pictureframe will run linux&lt;br /&gt;
* My N800 runs Diablo and Mer&lt;br /&gt;
* My SmartQ7 runs Mer&lt;br /&gt;
* My N900 runs Fremantle and will run MeeGo&lt;br /&gt;
* My Joggler will run MeeGo&lt;br /&gt;
* My Wifi routers run linux&lt;br /&gt;
I think I have 21 discrete linux machines around the house - and no Windows or Mac&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
Things I do:&lt;br /&gt;
* manage the [[OBS/Community OBS|Community OBS]] with [[User:Xfade|Niels]]&lt;br /&gt;
* proud to be a part of the openSuSE OBS development team&lt;br /&gt;
* designed (and develop) [[Release_Infrastructure/BOSS|BOSS]], the process automation system for MeeGo building&lt;br /&gt;
* designed (and develop) [[Release_Infrastructure/REVS|REVS]], the package database and RE reporting tool&lt;br /&gt;
* support the [[ARM/N900|CE project]]&lt;br /&gt;
* work on [[MeeGo Apps]] and [[Community_Office/Task_Forces/MeeGo_Surrounds_and_Extras|MeeGo Surrounds and Extras]]&lt;br /&gt;
* part of the [[Meego IT]] team&lt;br /&gt;
* working on the [[Vendor Landing Page]]&lt;br /&gt;
* Nokia's MeeGo Devices Build Systems Architect&lt;br /&gt;
* [http://maemo.org/downloads/product/OS2008/shopper/ Shopper] - A very useful shopping list application that's badly in need of some TLC :)&lt;br /&gt;
&lt;br /&gt;
* I am currently advising Teleca how to setup their OBS and product build processes for LGE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Things I've done elsewhere:&lt;br /&gt;
* I used to be the Mer Build Tools Mentor too. I worked on a lot of the Mer build system including doing cross-compilation in the OBS for Mer and Fremantle.&lt;br /&gt;
* I help run the http://raid.wiki.kernel.org/&lt;br /&gt;
* I started the git documentation&lt;br /&gt;
* I was a lead designer/architect at BT for 9 years - &lt;br /&gt;
&lt;br /&gt;
I'm a strong believer in the social and economic values of OpenSource to the community and to businesses.&lt;br /&gt;
&lt;br /&gt;
contact me at david at dgreaves dot com&lt;/div&gt;</summary>
		<author><name>Lbt</name></author>	</entry>

	</feed>