<?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/Iamer&amp;feed=atom&amp;limit=50&amp;target=Iamer&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/Iamer&amp;feed=atom&amp;limit=50&amp;target=Iamer&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Iamer"/>
		<updated>2013-05-22T00:56:20Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/Getting_started_with_OBS</id>
		<title>Getting started with OBS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Getting_started_with_OBS"/>
				<updated>2011-12-06T15:39:22Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Adding repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MeeGo Open Build System (OBS) seems rather complicated, this page will attempt to make it nice and easy to get started. See also the Mer project's documentation on [http://wiki.maemo.org/Mer/Build/Application_Building application building] with OBS.&lt;br /&gt;
&lt;br /&gt;
It's a work in progress, feel free to add and modify!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
* You need a meego.com login to be able to access the OBS&lt;br /&gt;
* Install osc (for example, &amp;lt;code&amp;gt;apt-get install osc&amp;lt;/code&amp;gt; may work out-of-the-box on recent versions of Ubuntu &amp;amp; Debian, other repositories are available on [http://download.opensuse.org/repositories/openSUSE:/Tools/ openSUSE tools])&lt;br /&gt;
* As an alternative to osc you may use the web interface to upload your files&lt;br /&gt;
&lt;br /&gt;
=Preparations=&lt;br /&gt;
&lt;br /&gt;
OBS is based around ''projects'', ''packages'' and ''repositories''. '''Packages''' have a set of files (source code, packaging meta-data, etc.) which are compiled by build servers against particular distributions. Each distribution results in your code being available in a '''repository'''.&lt;br /&gt;
&lt;br /&gt;
==Setting up your home project==&lt;br /&gt;
&lt;br /&gt;
Your home project is like a home directory in which you can create sub-projects, repositories, etc.&lt;br /&gt;
&lt;br /&gt;
* Visit the [https://build.pub.meego.com/ OBS page]&lt;br /&gt;
* Follow the extra [https://build.pub.meego.com/user/register_user registration instructions]&lt;br /&gt;
* Log in and click on 'create home project' (down at the bottom of the page iirc)&lt;br /&gt;
&lt;br /&gt;
==Creating a project==&lt;br /&gt;
A project is required before anything can be built.&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Projects&amp;quot; tab for the project in which you wish to create it&lt;br /&gt;
* Select &amp;quot;Add a new package&amp;quot;&lt;br /&gt;
* Enter a UNIX-style (all lower case) &amp;quot;Name&amp;quot;&lt;br /&gt;
* Enter a title-case, with appropriate spacing, &amp;quot;Title&amp;quot;&lt;br /&gt;
* Enter a brief &amp;quot;Description&amp;quot;&lt;br /&gt;
* Click &amp;quot;Save Changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Setting up a sub-project (optional)==&lt;br /&gt;
A sub-project allows you to group related activities together.&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Overview&amp;quot; tab for your home project, select &amp;quot;Actions &amp;gt; Create subproject&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Adding repositories==&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Repositories&amp;quot; tab for the project in question&lt;br /&gt;
* Click &amp;quot;Add Repository&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As Harmattan OBS support is still in development, you can [http://forum.meego.com/showpost.php?p=25005&amp;amp;postcount=29 add it through the advanced interface].&lt;br /&gt;
&lt;br /&gt;
Before trying to issue submit requests to projects that are under automated integration (ex. CE:* projects on community OBS), make sure you have created the correct set of repositories needed.&lt;br /&gt;
&lt;br /&gt;
For each repository in target project, there should be a repository in source project which builds only against the target repository and have at least the same architectures as the target repository they build against.&lt;br /&gt;
&lt;br /&gt;
This can be done easily using [https://github.com/MeeGoIntegration/mint-utils/blob/master/addrepos.py the addrepos osc plugin ], drop it in your ~/.osc-plugins and run the command :&lt;br /&gt;
&lt;br /&gt;
osc -A https://api.pub.meego.com addrepos MYPROJECT TARGETPROJECT&lt;br /&gt;
&lt;br /&gt;
It will open an editor with the repositories appended to the bottom of your prj meta.&lt;br /&gt;
&lt;br /&gt;
=Adding files to a package and building them=&lt;br /&gt;
&lt;br /&gt;
==Needed files==&lt;br /&gt;
&lt;br /&gt;
===MeeGo===&lt;br /&gt;
For MeeGo you need a .spec file and a tarball containing your source code, etc.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
For Harmattan you need a &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; file, source tarball and &amp;lt;code&amp;gt;.debian.tar.gz&amp;lt;/code&amp;gt; (this allows one to keep the debian directory out of the source). The source is extracted using &amp;lt;code&amp;gt;dpkg-source -x ....dsc&amp;lt;/code&amp;gt;, so restrictions on file formats apply (e.g. &amp;lt;code&amp;gt;mypkg_1.0.0.tar.gz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.debian.tar.gz&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may just use the &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; together with a &amp;lt;code&amp;gt;.tar.gz&amp;lt;/code&amp;gt; file containing both, the sources and the debian directory.&lt;br /&gt;
&lt;br /&gt;
====Use an additional tool====&lt;br /&gt;
The steps below are encapsulated in a follow-up to [http://mud-builder.garage.maemo.org/ mud-builder], called &amp;lt;code&amp;gt;mud2&amp;lt;/code&amp;gt;. The [http://forum.meego.com/showpost.php?p=24047&amp;amp;postcount=15 tool only has a dependency on Perl] and performs all the steps below, hoping to streamline the process of taking Qt Creator projects and producing MeeGo, Harmattan and Fremantle OBS-compatible files.&lt;br /&gt;
&lt;br /&gt;
====Set up QtCreator to produce files====&lt;br /&gt;
'''First''', you need to modify the rules file (&amp;lt;code&amp;gt;qtc_packaging/debian_harmattan/rules&amp;lt;/code&amp;gt;, which is then copied to &amp;lt;code&amp;gt;debian/rules&amp;lt;/code&amp;gt;):&lt;br /&gt;
* Uncomment the lines marked with &amp;lt;code&amp;gt;# Uncomment this line for use without Qt Creator&amp;lt;/code&amp;gt;.&lt;br /&gt;
* In the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; section, comment the line &amp;lt;code&amp;gt;$(MAKE) clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Second''', to get the files needed for building you may add a custom build step:&lt;br /&gt;
* Projects -&amp;gt; Harmattan -&amp;gt; Build -&amp;gt; Build Steps -&amp;gt; Add Build Step&lt;br /&gt;
* Enter Command: &amp;lt;code&amp;gt;C:\QtSDK\Madde\wbin\mad.cmd&amp;lt;/code&amp;gt; or in Linux use &amp;lt;code&amp;gt;/opt/QtSDK/Madde/bin/mad&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leave Working directory unchanged: &amp;lt;code&amp;gt;%{buildDir}&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter Command arguments: &amp;lt;code&amp;gt;-t harmattan-platform-api dpkg-buildpackage -sa -S -uc -us -Imoc -Iobj -Ircc -Iui -I.svn -I*.deb -I*.changes -Iqtc_packaging -IMakefile -I*.pro.user -I&amp;lt;packagename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Notice that most of the command arguments remove unneccessary files from the tar package. They are not mandatory but reduce file size.&lt;br /&gt;
* Build it&lt;br /&gt;
You will get the resulting &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.tar.gz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.dsc&amp;lt;/code&amp;gt; (together with a non-needed &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.source.changes&amp;lt;/code&amp;gt;) in the directory above the source directory.&lt;br /&gt;
&lt;br /&gt;
'''Take care''':&lt;br /&gt;
QtCreator uses the &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; directory for packaging. However, it only copies the content of &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; when you deploy the package (thus press run or debug). If you change something in &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; and only run a build without run/debug, you must manually copy the changes to &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; before.&lt;br /&gt;
&lt;br /&gt;
'''Security framework relevant applications''':&lt;br /&gt;
The &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file must include a step to add the &amp;lt;code&amp;gt;&amp;lt;package name&amp;gt;.aegis&amp;lt;/code&amp;gt; manifest into the built debian archive. For this, add &amp;lt;code&amp;gt;aegis-deb-add -control debian/&amp;lt;package name&amp;gt;/DEBIAN/control .. debian/&amp;lt;package name&amp;gt;.aegis=_aegis&amp;lt;/code&amp;gt; at the end (after &amp;lt;code&amp;gt;dh_builddeb&amp;lt;/code&amp;gt;). Needed build dependency in the &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; file is &amp;lt;code&amp;gt;aegis-builder (&amp;gt;= 1.6)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''If you are using Windows or having build problems with changelog or rules file:'''&lt;br /&gt;
It seams that QTCreator for Windows sometimes creates the changelog and rules file with windows lineendings.&lt;br /&gt;
Which causes the OBS to fail. (a &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file with wrong lineendings causes the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; step to fail.&lt;br /&gt;
&lt;br /&gt;
==Start building==&lt;br /&gt;
&lt;br /&gt;
===From the terminal===&lt;br /&gt;
* Checkout (like SVN) your home project, which will contain all your sub-projects and packages&lt;br /&gt;
  osc -A https://api.pub.meego.com co home:[username]&lt;br /&gt;
&lt;br /&gt;
* Add files to your local copy&lt;br /&gt;
  osc add [filename]&lt;br /&gt;
&lt;br /&gt;
* Commit the files&lt;br /&gt;
  osc commit&lt;br /&gt;
&lt;br /&gt;
At this point the OBS will try to build your project remotely. You can also build locally by doing &amp;lt;code&amp;gt;osc build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you add new packages later on or commit changes from another computer you can update your local copy by doing&lt;br /&gt;
 osc update&lt;br /&gt;
&lt;br /&gt;
===Using the webinterface===&lt;br /&gt;
* Add the correct files as listed above and they will be automatically built for you&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
What to do if packages don't build in OBS.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
It is advised to first try if a package builds in the Scratchbox based SDK before submitting it to OBS. The Scratchbox environment should be reasonably similar to OBS and lower rebuild time enables faster debugging of packaging issues.&lt;br /&gt;
&lt;br /&gt;
Also, some packages from recent distributions might complain about out of date build dependencies, mostly concerning debhelper and cdbs. As debhelper and cdb are generally not easy to replace with newer versions, it is possible to either use older packages or edit the '''debian/control''' and '''debian/control.in''' and downgrade the dependencies.&lt;br /&gt;
&lt;br /&gt;
===OBS local build===&lt;br /&gt;
It is possible to build packages locally, using the osc tool. Also unlike during the online build, it is possible to enter the build chroot and inspect its state. Also, local builds do not need to wait in the online build queue and may be faster (depending on local hardware).&lt;br /&gt;
&lt;br /&gt;
* install osc&lt;br /&gt;
* install [http://download.opensuse.org/repositories/openSUSE:/Tools/ OBS build tools]&lt;br /&gt;
* install quemu&lt;br /&gt;
* check out a project with some packages&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc co home:name:project&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* enter a package folder folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home:name:project/package&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* initiate local build&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====COBS+Harmattan====&lt;br /&gt;
* to do a local build with the Harmattan target from COBS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build MeeGo_1.2_Harmattan_Maemo.org_MeeGo_1.2_Harmattan_standard  armv7el&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Possible pitfalls====&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
Harmattan packages might fail to download (404) during a local build.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
Just wait, after all of the packages have failed it will use an alternate download method that will work.&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
failed to run command `/sbin/ldconfig': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chroot: failed to run command `dpkg': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Solution:'''There are some Qemu packages missing in you system (most probably qemu-user-static or an equivalent). &lt;br /&gt;
&lt;br /&gt;
On Ubuntu 11.04, these packages should be installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qemu-user-static qemu-common qemu-kvm qemu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Looks like even just ''qemu-user-static'' package suffices for builds to run to completion.&lt;br /&gt;
&lt;br /&gt;
=Installing packages=&lt;br /&gt;
== Into your MeeGo system ==&lt;br /&gt;
{{main|Zypper#Adding_a_repository}}&lt;br /&gt;
* Once packages are built, you can include them in your MeeGo installation.&lt;br /&gt;
* The general method is:&lt;br /&gt;
   zypper ar -f &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/username/repository/&amp;lt;/nowiki&amp;gt; title&lt;br /&gt;
   zypper in &amp;lt;package&amp;gt;&lt;br /&gt;
** Where:&lt;br /&gt;
** ''username'' is your user&lt;br /&gt;
** ''repository'' is the repository branch name&lt;br /&gt;
** ''title'' is the name zypper will use for the repository&lt;br /&gt;
&lt;br /&gt;
== Into Harmattan ==&lt;br /&gt;
# Find the repository address:&lt;br /&gt;
## Go to the appropriate project's ''Overview'' page (e.g. your home project, or sub-project)&lt;br /&gt;
## Click on the MeeGo 1.2 Harmattan repository on the ''Build Status''&lt;br /&gt;
## Copy the link for the ''Download Repository''&lt;br /&gt;
* Create &amp;lt;code&amp;gt;/etc/apt/sources.list.d/project.list&amp;lt;/code&amp;gt; (where ''project'' is a memorable name, e.g. your username for your home project), containing the download link, prefixed with '''&amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt;''' and suffixed by '''&amp;lt;code&amp;gt;./&amp;lt;/code&amp;gt;'''. For example:&lt;br /&gt;
  deb &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/jaffa/Harmattan/&amp;lt;/nowiki&amp;gt; ./&lt;br /&gt;
* Run:&lt;br /&gt;
  apt-get update&lt;br /&gt;
  apt-get install package&lt;br /&gt;
:...where ''package'' is, of course, your package name.&lt;br /&gt;
&lt;br /&gt;
Updates to the installed applications will appear at ''Settings &amp;gt; Applications &amp;gt; Manage Applications &amp;gt; Updates''&lt;br /&gt;
&lt;br /&gt;
== Into Maemo 5 ==&lt;br /&gt;
Enable Extras-devel.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Getting_started_with_OBS</id>
		<title>Getting started with OBS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Getting_started_with_OBS"/>
				<updated>2011-11-22T06:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Adding repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MeeGo Open Build System (OBS) seems rather complicated, this page will attempt to make it nice and easy to get started. See also the Mer project's documentation on [http://wiki.maemo.org/Mer/Build/Application_Building application building] with OBS.&lt;br /&gt;
&lt;br /&gt;
It's a work in progress, feel free to add and modify!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
* You need a meego.com login to be able to access the OBS&lt;br /&gt;
* Install osc (for example, &amp;lt;code&amp;gt;apt-get install osc&amp;lt;/code&amp;gt; may work out-of-the-box on recent versions of Ubuntu &amp;amp; Debian, other repositories are available on [http://download.opensuse.org/repositories/openSUSE:/Tools/ openSUSE tools])&lt;br /&gt;
* As an alternative to osc you may use the web interface to upload your files&lt;br /&gt;
&lt;br /&gt;
=Preparations=&lt;br /&gt;
&lt;br /&gt;
OBS is based around ''projects'', ''packages'' and ''repositories''. '''Packages''' have a set of files (source code, packaging meta-data, etc.) which are compiled by build servers against particular distributions. Each distribution results in your code being available in a '''repository'''.&lt;br /&gt;
&lt;br /&gt;
==Setting up your home project==&lt;br /&gt;
&lt;br /&gt;
Your home project is like a home directory in which you can create sub-projects, repositories, etc.&lt;br /&gt;
&lt;br /&gt;
* Visit the [https://build.pub.meego.com/ OBS page]&lt;br /&gt;
* Follow the extra [https://build.pub.meego.com/user/register_user registration instructions]&lt;br /&gt;
* Log in and click on 'create home project' (down at the bottom of the page iirc)&lt;br /&gt;
&lt;br /&gt;
==Creating a project==&lt;br /&gt;
A project is required before anything can be built.&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Projects&amp;quot; tab for the project in which you wish to create it&lt;br /&gt;
* Select &amp;quot;Add a new package&amp;quot;&lt;br /&gt;
* Enter a UNIX-style (all lower case) &amp;quot;Name&amp;quot;&lt;br /&gt;
* Enter a title-case, with appropriate spacing, &amp;quot;Title&amp;quot;&lt;br /&gt;
* Enter a brief &amp;quot;Description&amp;quot;&lt;br /&gt;
* Click &amp;quot;Save Changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Setting up a sub-project (optional)==&lt;br /&gt;
A sub-project allows you to group related activities together.&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Overview&amp;quot; tab for your home project, select &amp;quot;Actions &amp;gt; Create subproject&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Adding repositories==&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Repositories&amp;quot; tab for the project in question&lt;br /&gt;
* Click &amp;quot;Add Repository&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As Harmattan OBS support is still in development, you can [http://forum.meego.com/showpost.php?p=25005&amp;amp;postcount=29 add it through the advanced interface].&lt;br /&gt;
&lt;br /&gt;
Before trying to issue submit requests to projects that are under automated integration (ex. CE:* projects on community OBS), make sure you have created the correct set of repositories needed.&lt;br /&gt;
&lt;br /&gt;
For each repository in target project, there should be a repository in source project which builds only against the target repository and have at least the same architectures as the target repository they build against.&lt;br /&gt;
&lt;br /&gt;
This can be done easily using [https://github.com/iamer/useful-scripts/blob/master/addrepos.py the addrepos osc plugin ], drop it in your ~/.osc-plugins and run the command :&lt;br /&gt;
&lt;br /&gt;
osc -A https://api.pub.meego.com addrepos MYPROJECT TARGETPROJECT&lt;br /&gt;
&lt;br /&gt;
It will open an editor with the repositories appended to the bottom of your prj meta.&lt;br /&gt;
&lt;br /&gt;
=Adding files to a package and building them=&lt;br /&gt;
&lt;br /&gt;
==Needed files==&lt;br /&gt;
&lt;br /&gt;
===MeeGo===&lt;br /&gt;
For MeeGo you need a .spec file and a tarball containing your source code, etc.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
For Harmattan you need a &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; file, source tarball and &amp;lt;code&amp;gt;.debian.tar.gz&amp;lt;/code&amp;gt; (this allows one to keep the debian directory out of the source). The source is extracted using &amp;lt;code&amp;gt;dpkg-source -x ....dsc&amp;lt;/code&amp;gt;, so restrictions on file formats apply (e.g. &amp;lt;code&amp;gt;mypkg_1.0.0.tar.gz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.debian.tar.gz&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may just use the &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; together with a &amp;lt;code&amp;gt;.tar.gz&amp;lt;/code&amp;gt; file containing both, the sources and the debian directory.&lt;br /&gt;
&lt;br /&gt;
====Use an additional tool====&lt;br /&gt;
The steps below are encapsulated in a follow-up to [http://mud-builder.garage.maemo.org/ mud-builder], called &amp;lt;code&amp;gt;mud2&amp;lt;/code&amp;gt;. The [http://forum.meego.com/showpost.php?p=24047&amp;amp;postcount=15 tool only has a dependency on Perl] and performs all the steps below, hoping to streamline the process of taking Qt Creator projects and producing MeeGo, Harmattan and Fremantle OBS-compatible files.&lt;br /&gt;
&lt;br /&gt;
====Set up QtCreator to produce files====&lt;br /&gt;
'''First''', you need to modify the rules file (&amp;lt;code&amp;gt;qtc_packaging/debian_harmattan/rules&amp;lt;/code&amp;gt;, which is then copied to &amp;lt;code&amp;gt;debian/rules&amp;lt;/code&amp;gt;):&lt;br /&gt;
* Uncomment the lines marked with &amp;lt;code&amp;gt;# Uncomment this line for use without Qt Creator&amp;lt;/code&amp;gt;.&lt;br /&gt;
* In the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; section, comment the line &amp;lt;code&amp;gt;$(MAKE) clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Second''', to get the files needed for building you may add a custom build step:&lt;br /&gt;
* Projects -&amp;gt; Harmattan -&amp;gt; Build -&amp;gt; Build Steps -&amp;gt; Add Build Step&lt;br /&gt;
* Enter Command: &amp;lt;code&amp;gt;C:\QtSDK\Madde\wbin\mad.cmd&amp;lt;/code&amp;gt; or in Linux use &amp;lt;code&amp;gt;/opt/QtSDK/Madde/bin/mad&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leave Working directory unchanged: &amp;lt;code&amp;gt;%{buildDir}&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter Command arguments: &amp;lt;code&amp;gt;-t harmattan-platform-api dpkg-buildpackage -sa -S -uc -us -Imoc -Iobj -Ircc -Iui -I.svn -I*.deb -I*.changes -Iqtc_packaging -IMakefile -I*.pro.user -I&amp;lt;packagename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Notice that most of the command arguments remove unneccessary files from the tar package. They are not mandatory but reduce file size.&lt;br /&gt;
* Build it&lt;br /&gt;
You will get the resulting &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.tar.gz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.dsc&amp;lt;/code&amp;gt; (together with a non-needed &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.source.changes&amp;lt;/code&amp;gt;) in the directory above the source directory.&lt;br /&gt;
&lt;br /&gt;
'''Take care''':&lt;br /&gt;
QtCreator uses the &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; directory for packaging. However, it only copies the content of &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; when you deploy the package (thus press run or debug). If you change something in &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; and only run a build without run/debug, you must manually copy the changes to &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; before.&lt;br /&gt;
&lt;br /&gt;
'''Security framework relevant applications''':&lt;br /&gt;
The &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file must include a step to add the &amp;lt;code&amp;gt;&amp;lt;package name&amp;gt;.aegis&amp;lt;/code&amp;gt; manifest into the built debian archive. For this, add &amp;lt;code&amp;gt;aegis-deb-add -control debian/&amp;lt;package name&amp;gt;/DEBIAN/control .. debian/&amp;lt;package name&amp;gt;.aegis=_aegis&amp;lt;/code&amp;gt; at the end (after &amp;lt;code&amp;gt;dh_builddeb&amp;lt;/code&amp;gt;). Needed build dependency in the &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; file is &amp;lt;code&amp;gt;aegis-builder (&amp;gt;= 1.6)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''If you are using Windows or having build problems with changelog or rules file:'''&lt;br /&gt;
It seams that QTCreator for Windows sometimes creates the changelog and rules file with windows lineendings.&lt;br /&gt;
Which causes the OBS to fail. (a &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file with wrong lineendings causes the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; step to fail.&lt;br /&gt;
&lt;br /&gt;
==Start building==&lt;br /&gt;
&lt;br /&gt;
===From the terminal===&lt;br /&gt;
* Checkout (like SVN) your home project, which will contain all your sub-projects and packages&lt;br /&gt;
  osc -A https://api.pub.meego.com co home:[username]&lt;br /&gt;
&lt;br /&gt;
* Add files to your local copy&lt;br /&gt;
  osc add [filename]&lt;br /&gt;
&lt;br /&gt;
* Commit the files&lt;br /&gt;
  osc commit&lt;br /&gt;
&lt;br /&gt;
At this point the OBS will try to build your project remotely. You can also build locally by doing &amp;lt;code&amp;gt;osc build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you add new packages later on or commit changes from another computer you can update your local copy by doing&lt;br /&gt;
 osc update&lt;br /&gt;
&lt;br /&gt;
===Using the webinterface===&lt;br /&gt;
* Add the correct files as listed above and they will be automatically built for you&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
What to do if packages don't build in OBS.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
It is advised to first try if a package builds in the Scratchbox based SDK before submitting it to OBS. The Scratchbox environment should be reasonably similar to OBS and lower rebuild time enables faster debugging of packaging issues.&lt;br /&gt;
&lt;br /&gt;
Also, some packages from recent distributions might complain about out of date build dependencies, mostly concerning debhelper and cdbs. As debhelper and cdb are generally not easy to replace with newer versions, it is possible to either use older packages or edit the '''debian/control''' and '''debian/control.in''' and downgrade the dependencies.&lt;br /&gt;
&lt;br /&gt;
===OBS local build===&lt;br /&gt;
It is possible to build packages locally, using the osc tool. Also unlike during the online build, it is possible to enter the build chroot and inspect its state. Also, local builds do not need to wait in the online build queue and may be faster (depending on local hardware).&lt;br /&gt;
&lt;br /&gt;
* install osc&lt;br /&gt;
* install [http://download.opensuse.org/repositories/openSUSE:/Tools/ OBS build tools]&lt;br /&gt;
* install quemu&lt;br /&gt;
* check out a project with some packages&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc co home:name:project&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* enter a package folder folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home:name:project/package&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* initiate local build&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====COBS+Harmattan====&lt;br /&gt;
* to do a local build with the Harmattan target from COBS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build MeeGo_1.2_Harmattan_Maemo.org_MeeGo_1.2_Harmattan_standard  armv7el&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Possible pitfalls====&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
Harmattan packages might fail to download (404) during a local build.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
Just wait, after all of the packages have failed it will use an alternate download method that will work.&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
failed to run command `/sbin/ldconfig': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chroot: failed to run command `dpkg': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Solution:'''There are some Qemu packages missing in you system (most probably qemu-user-static or an equivalent). &lt;br /&gt;
&lt;br /&gt;
On Ubuntu 11.04, these packages should be installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qemu-user-static qemu-common qemu-kvm qemu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Looks like even just ''qemu-user-static'' package suffices for builds to run to completion.&lt;br /&gt;
&lt;br /&gt;
=Installing packages=&lt;br /&gt;
== Into your MeeGo system ==&lt;br /&gt;
{{main|Zypper#Adding_a_repository}}&lt;br /&gt;
* Once packages are built, you can include them in your MeeGo installation.&lt;br /&gt;
* The general method is:&lt;br /&gt;
   zypper ar -f &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/username/repository/&amp;lt;/nowiki&amp;gt; title&lt;br /&gt;
   zypper in &amp;lt;package&amp;gt;&lt;br /&gt;
** Where:&lt;br /&gt;
** ''username'' is your user&lt;br /&gt;
** ''repository'' is the repository branch name&lt;br /&gt;
** ''title'' is the name zypper will use for the repository&lt;br /&gt;
&lt;br /&gt;
== Into Harmattan ==&lt;br /&gt;
# Find the repository address:&lt;br /&gt;
## Go to the appropriate project's ''Overview'' page (e.g. your home project, or sub-project)&lt;br /&gt;
## Click on the MeeGo 1.2 Harmattan repository on the ''Build Status''&lt;br /&gt;
## Copy the link for the ''Download Repository''&lt;br /&gt;
* Create &amp;lt;code&amp;gt;/etc/apt/sources.list.d/project.list&amp;lt;/code&amp;gt; (where ''project'' is a memorable name, e.g. your username for your home project), containing the download link, prefixed with '''&amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt;''' and suffixed by '''&amp;lt;code&amp;gt;./&amp;lt;/code&amp;gt;'''. For example:&lt;br /&gt;
  deb &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/jaffa/Harmattan/&amp;lt;/nowiki&amp;gt; ./&lt;br /&gt;
* Run:&lt;br /&gt;
  apt-get update&lt;br /&gt;
  apt-get install package&lt;br /&gt;
:...where ''package'' is, of course, your package name.&lt;br /&gt;
&lt;br /&gt;
Updates to the installed applications will appear at ''Settings &amp;gt; Applications &amp;gt; Manage Applications &amp;gt; Updates''&lt;br /&gt;
&lt;br /&gt;
== Into Maemo 5 ==&lt;br /&gt;
Enable Extras-devel.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Getting_started_with_OBS</id>
		<title>Getting started with OBS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Getting_started_with_OBS"/>
				<updated>2011-11-22T06:18:47Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Adding repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MeeGo Open Build System (OBS) seems rather complicated, this page will attempt to make it nice and easy to get started. See also the Mer project's documentation on [http://wiki.maemo.org/Mer/Build/Application_Building application building] with OBS.&lt;br /&gt;
&lt;br /&gt;
It's a work in progress, feel free to add and modify!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Prerequisites=&lt;br /&gt;
&lt;br /&gt;
* You need a meego.com login to be able to access the OBS&lt;br /&gt;
* Install osc (for example, &amp;lt;code&amp;gt;apt-get install osc&amp;lt;/code&amp;gt; may work out-of-the-box on recent versions of Ubuntu &amp;amp; Debian, other repositories are available on [http://download.opensuse.org/repositories/openSUSE:/Tools/ openSUSE tools])&lt;br /&gt;
* As an alternative to osc you may use the web interface to upload your files&lt;br /&gt;
&lt;br /&gt;
=Preparations=&lt;br /&gt;
&lt;br /&gt;
OBS is based around ''projects'', ''packages'' and ''repositories''. '''Packages''' have a set of files (source code, packaging meta-data, etc.) which are compiled by build servers against particular distributions. Each distribution results in your code being available in a '''repository'''.&lt;br /&gt;
&lt;br /&gt;
==Setting up your home project==&lt;br /&gt;
&lt;br /&gt;
Your home project is like a home directory in which you can create sub-projects, repositories, etc.&lt;br /&gt;
&lt;br /&gt;
* Visit the [https://build.pub.meego.com/ OBS page]&lt;br /&gt;
* Follow the extra [https://build.pub.meego.com/user/register_user registration instructions]&lt;br /&gt;
* Log in and click on 'create home project' (down at the bottom of the page iirc)&lt;br /&gt;
&lt;br /&gt;
==Creating a project==&lt;br /&gt;
A project is required before anything can be built.&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Projects&amp;quot; tab for the project in which you wish to create it&lt;br /&gt;
* Select &amp;quot;Add a new package&amp;quot;&lt;br /&gt;
* Enter a UNIX-style (all lower case) &amp;quot;Name&amp;quot;&lt;br /&gt;
* Enter a title-case, with appropriate spacing, &amp;quot;Title&amp;quot;&lt;br /&gt;
* Enter a brief &amp;quot;Description&amp;quot;&lt;br /&gt;
* Click &amp;quot;Save Changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Setting up a sub-project (optional)==&lt;br /&gt;
A sub-project allows you to group related activities together.&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Overview&amp;quot; tab for your home project, select &amp;quot;Actions &amp;gt; Create subproject&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Adding repositories==&lt;br /&gt;
&lt;br /&gt;
* Go to the &amp;quot;Repositories&amp;quot; tab for the project in question&lt;br /&gt;
* Click &amp;quot;Add Repository&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As Harmattan OBS support is still in development, you can [http://forum.meego.com/showpost.php?p=25005&amp;amp;postcount=29 add it through the advanced interface].&lt;br /&gt;
&lt;br /&gt;
Before trying to issue submit requests to projects that are under automated integration (ex. CE:* projects on community OBS), make sure you have created the correct set of repositories needed.&lt;br /&gt;
&lt;br /&gt;
For each repository in target project, there should be a repository in source project which builds only against the target repository and have at least the same architectures as the target repository they build against.&lt;br /&gt;
&lt;br /&gt;
This can be done easily using the attached osc plugin, drop it in your ~/.osc-plugins and run the command :&lt;br /&gt;
&lt;br /&gt;
osc -A https://api.pub.meego.com addrepos MYPROJECT TARGETPROJECT&lt;br /&gt;
&lt;br /&gt;
It will open an editor with the repositories appended to the bottom of your prj meta.&lt;br /&gt;
&lt;br /&gt;
=Adding files to a package and building them=&lt;br /&gt;
&lt;br /&gt;
==Needed files==&lt;br /&gt;
&lt;br /&gt;
===MeeGo===&lt;br /&gt;
For MeeGo you need a .spec file and a tarball containing your source code, etc.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
For Harmattan you need a &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; file, source tarball and &amp;lt;code&amp;gt;.debian.tar.gz&amp;lt;/code&amp;gt; (this allows one to keep the debian directory out of the source). The source is extracted using &amp;lt;code&amp;gt;dpkg-source -x ....dsc&amp;lt;/code&amp;gt;, so restrictions on file formats apply (e.g. &amp;lt;code&amp;gt;mypkg_1.0.0.tar.gz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mypkg_1.0.0.debian.tar.gz&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may just use the &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; together with a &amp;lt;code&amp;gt;.tar.gz&amp;lt;/code&amp;gt; file containing both, the sources and the debian directory.&lt;br /&gt;
&lt;br /&gt;
====Use an additional tool====&lt;br /&gt;
The steps below are encapsulated in a follow-up to [http://mud-builder.garage.maemo.org/ mud-builder], called &amp;lt;code&amp;gt;mud2&amp;lt;/code&amp;gt;. The [http://forum.meego.com/showpost.php?p=24047&amp;amp;postcount=15 tool only has a dependency on Perl] and performs all the steps below, hoping to streamline the process of taking Qt Creator projects and producing MeeGo, Harmattan and Fremantle OBS-compatible files.&lt;br /&gt;
&lt;br /&gt;
====Set up QtCreator to produce files====&lt;br /&gt;
'''First''', you need to modify the rules file (&amp;lt;code&amp;gt;qtc_packaging/debian_harmattan/rules&amp;lt;/code&amp;gt;, which is then copied to &amp;lt;code&amp;gt;debian/rules&amp;lt;/code&amp;gt;):&lt;br /&gt;
* Uncomment the lines marked with &amp;lt;code&amp;gt;# Uncomment this line for use without Qt Creator&amp;lt;/code&amp;gt;.&lt;br /&gt;
* In the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; section, comment the line &amp;lt;code&amp;gt;$(MAKE) clean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Second''', to get the files needed for building you may add a custom build step:&lt;br /&gt;
* Projects -&amp;gt; Harmattan -&amp;gt; Build -&amp;gt; Build Steps -&amp;gt; Add Build Step&lt;br /&gt;
* Enter Command: &amp;lt;code&amp;gt;C:\QtSDK\Madde\wbin\mad.cmd&amp;lt;/code&amp;gt; or in Linux use &amp;lt;code&amp;gt;/opt/QtSDK/Madde/bin/mad&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leave Working directory unchanged: &amp;lt;code&amp;gt;%{buildDir}&amp;lt;/code&amp;gt;&lt;br /&gt;
* Enter Command arguments: &amp;lt;code&amp;gt;-t harmattan-platform-api dpkg-buildpackage -sa -S -uc -us -Imoc -Iobj -Ircc -Iui -I.svn -I*.deb -I*.changes -Iqtc_packaging -IMakefile -I*.pro.user -I&amp;lt;packagename&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Notice that most of the command arguments remove unneccessary files from the tar package. They are not mandatory but reduce file size.&lt;br /&gt;
* Build it&lt;br /&gt;
You will get the resulting &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.tar.gz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.dsc&amp;lt;/code&amp;gt; (together with a non-needed &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;-&amp;lt;version&amp;gt;.source.changes&amp;lt;/code&amp;gt;) in the directory above the source directory.&lt;br /&gt;
&lt;br /&gt;
'''Take care''':&lt;br /&gt;
QtCreator uses the &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; directory for packaging. However, it only copies the content of &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; when you deploy the package (thus press run or debug). If you change something in &amp;lt;code&amp;gt;qtc_packaging/debian_harmattan&amp;lt;/code&amp;gt; and only run a build without run/debug, you must manually copy the changes to &amp;lt;code&amp;gt;debian&amp;lt;/code&amp;gt; before.&lt;br /&gt;
&lt;br /&gt;
'''Security framework relevant applications''':&lt;br /&gt;
The &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file must include a step to add the &amp;lt;code&amp;gt;&amp;lt;package name&amp;gt;.aegis&amp;lt;/code&amp;gt; manifest into the built debian archive. For this, add &amp;lt;code&amp;gt;aegis-deb-add -control debian/&amp;lt;package name&amp;gt;/DEBIAN/control .. debian/&amp;lt;package name&amp;gt;.aegis=_aegis&amp;lt;/code&amp;gt; at the end (after &amp;lt;code&amp;gt;dh_builddeb&amp;lt;/code&amp;gt;). Needed build dependency in the &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; file is &amp;lt;code&amp;gt;aegis-builder (&amp;gt;= 1.6)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''If you are using Windows or having build problems with changelog or rules file:'''&lt;br /&gt;
It seams that QTCreator for Windows sometimes creates the changelog and rules file with windows lineendings.&lt;br /&gt;
Which causes the OBS to fail. (a &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; file with wrong lineendings causes the &amp;lt;code&amp;gt;clean&amp;lt;/code&amp;gt; step to fail.&lt;br /&gt;
&lt;br /&gt;
==Start building==&lt;br /&gt;
&lt;br /&gt;
===From the terminal===&lt;br /&gt;
* Checkout (like SVN) your home project, which will contain all your sub-projects and packages&lt;br /&gt;
  osc -A https://api.pub.meego.com co home:[username]&lt;br /&gt;
&lt;br /&gt;
* Add files to your local copy&lt;br /&gt;
  osc add [filename]&lt;br /&gt;
&lt;br /&gt;
* Commit the files&lt;br /&gt;
  osc commit&lt;br /&gt;
&lt;br /&gt;
At this point the OBS will try to build your project remotely. You can also build locally by doing &amp;lt;code&amp;gt;osc build&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you add new packages later on or commit changes from another computer you can update your local copy by doing&lt;br /&gt;
 osc update&lt;br /&gt;
&lt;br /&gt;
===Using the webinterface===&lt;br /&gt;
* Add the correct files as listed above and they will be automatically built for you&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
What to do if packages don't build in OBS.&lt;br /&gt;
&lt;br /&gt;
===Harmattan===&lt;br /&gt;
It is advised to first try if a package builds in the Scratchbox based SDK before submitting it to OBS. The Scratchbox environment should be reasonably similar to OBS and lower rebuild time enables faster debugging of packaging issues.&lt;br /&gt;
&lt;br /&gt;
Also, some packages from recent distributions might complain about out of date build dependencies, mostly concerning debhelper and cdbs. As debhelper and cdb are generally not easy to replace with newer versions, it is possible to either use older packages or edit the '''debian/control''' and '''debian/control.in''' and downgrade the dependencies.&lt;br /&gt;
&lt;br /&gt;
===OBS local build===&lt;br /&gt;
It is possible to build packages locally, using the osc tool. Also unlike during the online build, it is possible to enter the build chroot and inspect its state. Also, local builds do not need to wait in the online build queue and may be faster (depending on local hardware).&lt;br /&gt;
&lt;br /&gt;
* install osc&lt;br /&gt;
* install [http://download.opensuse.org/repositories/openSUSE:/Tools/ OBS build tools]&lt;br /&gt;
* install quemu&lt;br /&gt;
* check out a project with some packages&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc co home:name:project&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* enter a package folder folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home:name:project/package&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* initiate local build&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====COBS+Harmattan====&lt;br /&gt;
* to do a local build with the Harmattan target from COBS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
osc build MeeGo_1.2_Harmattan_Maemo.org_MeeGo_1.2_Harmattan_standard  armv7el&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Possible pitfalls====&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
Harmattan packages might fail to download (404) during a local build.&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
Just wait, after all of the packages have failed it will use an alternate download method that will work.&lt;br /&gt;
&lt;br /&gt;
'''Problem:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
failed to run command `/sbin/ldconfig': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chroot: failed to run command `dpkg': No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Solution:'''There are some Qemu packages missing in you system (most probably qemu-user-static or an equivalent). &lt;br /&gt;
&lt;br /&gt;
On Ubuntu 11.04, these packages should be installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qemu-user-static qemu-common qemu-kvm qemu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Looks like even just ''qemu-user-static'' package suffices for builds to run to completion.&lt;br /&gt;
&lt;br /&gt;
=Installing packages=&lt;br /&gt;
== Into your MeeGo system ==&lt;br /&gt;
{{main|Zypper#Adding_a_repository}}&lt;br /&gt;
* Once packages are built, you can include them in your MeeGo installation.&lt;br /&gt;
* The general method is:&lt;br /&gt;
   zypper ar -f &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/username/repository/&amp;lt;/nowiki&amp;gt; title&lt;br /&gt;
   zypper in &amp;lt;package&amp;gt;&lt;br /&gt;
** Where:&lt;br /&gt;
** ''username'' is your user&lt;br /&gt;
** ''repository'' is the repository branch name&lt;br /&gt;
** ''title'' is the name zypper will use for the repository&lt;br /&gt;
&lt;br /&gt;
== Into Harmattan ==&lt;br /&gt;
# Find the repository address:&lt;br /&gt;
## Go to the appropriate project's ''Overview'' page (e.g. your home project, or sub-project)&lt;br /&gt;
## Click on the MeeGo 1.2 Harmattan repository on the ''Build Status''&lt;br /&gt;
## Copy the link for the ''Download Repository''&lt;br /&gt;
* Create &amp;lt;code&amp;gt;/etc/apt/sources.list.d/project.list&amp;lt;/code&amp;gt; (where ''project'' is a memorable name, e.g. your username for your home project), containing the download link, prefixed with '''&amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt;''' and suffixed by '''&amp;lt;code&amp;gt;./&amp;lt;/code&amp;gt;'''. For example:&lt;br /&gt;
  deb &amp;lt;nowiki&amp;gt;http://repo.pub.meego.com/home:/jaffa/Harmattan/&amp;lt;/nowiki&amp;gt; ./&lt;br /&gt;
* Run:&lt;br /&gt;
  apt-get update&lt;br /&gt;
  apt-get install package&lt;br /&gt;
:...where ''package'' is, of course, your package name.&lt;br /&gt;
&lt;br /&gt;
Updates to the installed applications will appear at ''Settings &amp;gt; Applications &amp;gt; Manage Applications &amp;gt; Updates''&lt;br /&gt;
&lt;br /&gt;
== Into Maemo 5 ==&lt;br /&gt;
Enable Extras-devel.&lt;/div&gt;</summary>
		<author><name>Iamer</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-08-25T14:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Configuration */&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 : 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 https://build.pub.meego.com/project/monitor?project=Project:MINT:RC&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>Iamer</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-06-16T13:55:04Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* 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 Launcer ===&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;
NOTE: robogrator is just a name , the real name of the participant is obs_event so register the skynet participant 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 create 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>Iamer</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-05-16T10:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Bugzilla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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>Iamer</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-05-16T10:52:47Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Bugzilla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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>Iamer</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-05-16T10:51:46Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Bugzilla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
* GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-bugzilla&lt;br /&gt;
&lt;br /&gt;
* Package : https://build.pub.meego.com/package/show?package=boss-participant-bugzilla&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&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;
&lt;br /&gt;
For the comment :&lt;br /&gt;
&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>Iamer</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-05-16T10:50:44Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: Document bugzilla participant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-bugzilla&lt;br /&gt;
&lt;br /&gt;
Package : https://build.pub.meego.com/package/show?package=boss-participant-bugzilla&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&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;
Interacts with bugzilla to:&lt;br /&gt;
* add comments to bugs&lt;br /&gt;
* change bug status&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;
* 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>Iamer</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-05-11T21:02:47Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* 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;
== 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&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;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* last changelog version matches spec file version&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;/div&gt;</summary>
		<author><name>Iamer</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-05-11T20:55:37Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* 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;
== 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_if_submitter_is_maintainer check_if_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&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;
* content of source tar ball should not change without its changing.&lt;br /&gt;
* last changelog version matches spec file version&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;/div&gt;</summary>
		<author><name>Iamer</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-05-01T21:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* get_changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
==  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;
&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;/div&gt;</summary>
		<author><name>Iamer</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-05-01T21:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* get_relevant_changelog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
==  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.  get_relevant_changelog&lt;br /&gt;
may be more relevant&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;
&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;/div&gt;</summary>
		<author><name>Iamer</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-04-29T10:32:04Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== 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;
=== 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;
=== 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;
==  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;
=== get_relevant_changelog ===&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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-27T06:58:49Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== 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;
=== 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;
=== 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;
=== check_package_built_at_source ===&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;
== 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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-27T06:41:41Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;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;
=== has_changes -&amp;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;
=== multiple_destinations -&amp;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;
=== package_complete -&amp;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;
=== package_successful -&amp;gt; check_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;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;
=== target_repo -&amp;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;
== 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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* submitter_maintainer -&amp;gt; check_submitter_is_maintainer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;gt; check_if_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;
=== has_changes -&amp;gt; check_if_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;
=== multiple_destinations -&amp;gt; check_if_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;
=== package_complete -&amp;gt; check_if_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;
=== package_successful -&amp;gt; check_if_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;gt; check_if_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;
=== target_repo -&amp;gt; check_if_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;
== 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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:32:03Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* target_repo -&amp;gt; check_has_valid_repo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;gt; check_if_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;
=== has_changes -&amp;gt; check_if_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;
=== multiple_destinations -&amp;gt; check_if_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;
=== package_complete -&amp;gt; check_if_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;
=== package_successful -&amp;gt; check_if_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;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;
=== target_repo -&amp;gt; check_if_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;
== 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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:31:35Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* package_successful -&amp;gt; check_package_built_at_source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;gt; check_if_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;
=== has_changes -&amp;gt; check_if_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;
=== multiple_destinations -&amp;gt; check_if_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;
=== package_complete -&amp;gt; check_if_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;
=== package_successful -&amp;gt; check_if_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;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;
=== target_repo -&amp;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;
&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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* package_complete -&amp;gt; check_package_is_complete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;gt; check_if_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;
=== has_changes -&amp;gt; check_if_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;
=== multiple_destinations -&amp;gt; check_if_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;
=== package_complete -&amp;gt; check_if_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;
=== package_successful -&amp;gt; check_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;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;
=== target_repo -&amp;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;
&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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
=== already_testing -&amp;gt; check_if_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;
=== has_changes -&amp;gt; check_if_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;
=== multiple_destinations -&amp;gt; check_if_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;
=== package_complete -&amp;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;
=== package_successful -&amp;gt; check_package_built_at_source ===&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;
=== spec_valid -&amp;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;
=== submitter_email -&amp;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;
=== submitter_maintainer -&amp;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;
=== target_repo -&amp;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;
&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 process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
=== robogrator ===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
=== standard_workflow_handler ===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T14:01:02Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Next steps */&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;
== 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 file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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.2/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;
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 already available participants and launchers : http://wiki.meego.com/Release_Infrastructure/BOSS/Participants&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:57:52Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &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;
== 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 file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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.2/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;
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 already available participants and launchers : [[/Release_Infrastructure/BOSS/Participants|Participants]]&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:55:40Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &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;
== 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 file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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.2/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;
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 already available participants and launchers : [[/BOSS/Participants|Participants]]&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:53:59Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Describe the overall release and build infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[/BOSS|Build Orchestration BOSS]]&lt;br /&gt;
* [[/REVS|Release reporting REVS]]&lt;br /&gt;
* [[/IMG|Image Creation IMG]]&lt;br /&gt;
* Build System OBS&lt;br /&gt;
&lt;br /&gt;
* [[/Packaging|Release team packaging information]]&lt;br /&gt;
* [[/BOSS_Participant|Participant documentation]]&lt;br /&gt;
* [[/BOSS_Launcher|Launcher documentation]]&lt;br /&gt;
* [[/BOSS_Process|Process documentation]]&lt;br /&gt;
* [[/BOSS_Testing|Testing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==New BOSS SkyNET==&lt;br /&gt;
* [[/BOSS/Installation|BOSS and Skynet]]&lt;br /&gt;
* [[/BOSS/Participants|Participants]]&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:52:22Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
===already_testing===&lt;br /&gt;
&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;
===has_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;
===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;
===package_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;
===package_successful===&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;
===spec_valid===&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;
===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;
===submitter_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;
===target_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;
== 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;
===irc_notify===&lt;br /&gt;
TODO: IRC notification to an IRC bot.&lt;br /&gt;
&lt;br /&gt;
== OBS process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
===robogrator===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
===standard_workflow_handler===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:51:35Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* OBS process / workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
===* already_testing===&lt;br /&gt;
&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;
===* has_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;
===* 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;
===* package_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;
===* package_successful===&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;
===* spec_valid===&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;
===* 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;
===* submitter_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;
===* target_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;
== 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;
===* irc_notify===&lt;br /&gt;
TODO: IRC notification to an IRC bot.&lt;br /&gt;
&lt;br /&gt;
== OBS process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&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-launcher-robogrator&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
===* robogrator===&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
===* standard_workflow_handler===&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Notification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
===* already_testing===&lt;br /&gt;
&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;
===* has_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;
===* 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;
===* package_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;
===* package_successful===&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;
===* spec_valid===&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;
===* 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;
===* submitter_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;
===* target_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;
== 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;
===* irc_notify===&lt;br /&gt;
TODO: IRC notification to an IRC bot.&lt;br /&gt;
&lt;br /&gt;
== OBS process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
** skynet branch for now&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;
* robogrator&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
* standard_workflow_handler&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:50:13Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* OBS prechecks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
===* already_testing===&lt;br /&gt;
&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;
===* has_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;
===* 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;
===* package_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;
===* package_successful===&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;
===* spec_valid===&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;
===* 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;
===* submitter_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;
===* target_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;
== 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;
** 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;
* irc_notify&lt;br /&gt;
#TODO IRC notification to an IRC bot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OBS process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
** skynet branch for now&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;
* robogrator&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
* standard_workflow_handler&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-26T13:07:38Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: Created page with &amp;quot;List of participants ported / implemented for BOSS SkyNET :   == OBS prechecks ==  GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-participant-prechecks Package...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of participants ported / implemented for BOSS SkyNET :&lt;br /&gt;
&lt;br /&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;
Package : https://build.pub.meego.com/package/show?package=boss-participant-prechecks&amp;amp;project=Project:MINT:Testing&lt;br /&gt;
&lt;br /&gt;
* 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;
* has_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;
* 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;
* package_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;
* package_successful&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;
* spec_valid&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;
* 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;
* submitter_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;
* target_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;
&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;
** 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;
* irc_notify&lt;br /&gt;
#TODO IRC notification to an IRC bot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OBS process / workflow ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GIT : https://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-robogrator&lt;br /&gt;
&lt;br /&gt;
** skynet branch for now&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;
* robogrator&lt;br /&gt;
Listens to the obsEvent queue for OBS events and launches ruote processes from &lt;br /&gt;
the matching namesepace (directory hierarchy) configured in /etc/skynet/robogrator.conf&lt;br /&gt;
&lt;br /&gt;
http://wiki.meego.com/Release_Infrastructure/BOSS/OBS_Event_List&lt;br /&gt;
&lt;br /&gt;
* standard_workflow_handler&lt;br /&gt;
Reference implementation of how to do useful things with OBS events.&lt;/div&gt;</summary>
		<author><name>Iamer</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-04-13T06:52:14Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* 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&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;
== 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 file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&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.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;
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;/div&gt;</summary>
		<author><name>Iamer</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-04-12T14:30:48Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &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 :Testing).&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;
=== 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&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:/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;
=== SUSE ===&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 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;
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;
=== Debian 6 ===&lt;br /&gt;
Currently n/a&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:/Testing/openSUSE_11.4/Project:MINT:Testing.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 6 ===&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 install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&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.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; 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;
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;/div&gt;</summary>
		<author><name>Iamer</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-04-12T14:12:56Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* SUSE */  start documenting 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 change. In particular the&lt;br /&gt;
repositories are not yet finalised (eg installing from :Testing).&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;
=== 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&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:/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;
=== SUSE ===&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 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;
The default port is 9292, point your browser at 127.0.0.1:9292 (if you are running on the same machine)&lt;br /&gt;
&lt;br /&gt;
=== Debian 6 ===&lt;br /&gt;
Currently n/a&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:/Testing/openSUSE_11.4/Project:MINT:Testing.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 6 ===&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 install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.2/devel:languages:perl.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-obs-plugin&lt;br /&gt;
&lt;br /&gt;
(new version of BOSS on opensuse 11.4)&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.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; 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;
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;/div&gt;</summary>
		<author><name>Iamer</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-04-05T07:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: add note about proxy&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 finalized (eg installing from :Testing).&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;
=== 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&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:/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;
=== SUSE ===&lt;br /&gt;
Currently n/a&lt;br /&gt;
&lt;br /&gt;
=== Debian 6 ===&lt;br /&gt;
Currently n/a&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:/Testing/openSUSE_11.4/Project:MINT:Testing.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 6 ===&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 install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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 ref&lt;br /&gt;
 zypper in boss-obs-plugin&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&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;
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;/div&gt;</summary>
		<author><name>Iamer</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-04-04T23:56:57Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* SUSE */  mention possibly confusing dependency error&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 finalized (eg installing from :Testing).&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;
== 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;
=== 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&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:/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;
=== SUSE ===&lt;br /&gt;
Currently n/a&lt;br /&gt;
&lt;br /&gt;
=== Debian 6 ===&lt;br /&gt;
Currently n/a&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:/Testing/openSUSE_11.4/Project:MINT:Testing.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 6 ===&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 install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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 ref&lt;br /&gt;
 zypper in boss-obs-plugin&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&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;
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;/div&gt;</summary>
		<author><name>Iamer</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-04-04T23:33:27Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: Updated OpenSUSE 11.4 instructions.&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 finalized (eg installing from :Testing).&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;
== 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;
=== 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&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:/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;
=== SUSE ===&lt;br /&gt;
Currently n/a&lt;br /&gt;
&lt;br /&gt;
=== Debian 6 ===&lt;br /&gt;
Currently n/a&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:/Testing/openSUSE_11.4/Project:MINT:Testing.repo&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Debian 6 ===&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 install --no-install-recommends boss-skynet&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
The file /etc/skynet/boss.conf is used by all participants&lt;br /&gt;
&lt;br /&gt;
It 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;
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;
== 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;
(old version of BOSS on 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 ref&lt;br /&gt;
 zypper in boss-obs-plugin&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&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;
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;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/REVS</id>
		<title>Release Infrastructure/REVS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/REVS"/>
				<updated>2010-12-02T10:40:33Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* REVS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= REVS =&lt;br /&gt;
&lt;br /&gt;
So you want to get a ''grasp'' on what's going on when you release? Enter REVS – Release Engineering Visibility System (a software previously know as grasp).&lt;br /&gt;
&lt;br /&gt;
REVS...&lt;br /&gt;
* provides an authoritative package database handling Products, Platforms, Licenses, Bug/Feature Trackers, Roles, Packages etc&lt;br /&gt;
* contains a release data-warehouse section for Releases, Baselines, Changelogs, Bugs, Images etc&lt;br /&gt;
* has a flexible group hierarchy allowing data to be presented as it is needed&lt;br /&gt;
* provides high speed access to all aspects of a release&lt;br /&gt;
* allows management reports on bugs, features, changes, packages&lt;br /&gt;
&lt;br /&gt;
==Use cases (WIP)==&lt;br /&gt;
===Basic===&lt;br /&gt;
# Import releases of baselines from a repository of packages.&lt;br /&gt;
# Compare the delta between baselines showing packages added, removed, unchanged and changed and their versions.&lt;br /&gt;
# List bugs that were mentioned in the changelogs of packages that have changed as links to their respective bug trackers.&lt;br /&gt;
# Mix baselines into products and be able to visualise and compare them as above.&lt;br /&gt;
# List all packages of a certain release, product or baseline and present them in a printable or machine readable format.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
# Define and display all kinds of grouping of packages by : category or arbitrary naming.&lt;br /&gt;
# Group and display packages by license and maintainer.&lt;br /&gt;
# Associate audit trail of where a package originated (source control url and tag), and how it was accepted into a baseline (Promotion requests)&lt;br /&gt;
# Store URLs of repositories and build configuration templates (kickstarts) that can be used to reproduce an image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It integrates with, but isn't part of the [[BOSS]] workflow system.&lt;br /&gt;
&lt;br /&gt;
Implementation consists of :&lt;br /&gt;
* Data model&lt;br /&gt;
** Master python models&lt;br /&gt;
*** sack : for collections of packages&lt;br /&gt;
*** dwh : for the release datawarehouse&lt;br /&gt;
*** nyc : License audit support (No You Can't)&lt;br /&gt;
* Data IN&lt;br /&gt;
** Rest API for updates&lt;br /&gt;
** Data management via Django&lt;br /&gt;
** Import from changes, rpms etc&lt;br /&gt;
** BOSS continuous integration participant&lt;br /&gt;
* Data OUT&lt;br /&gt;
** Rest API for updates&lt;br /&gt;
** Package set comparison reporting via Django&lt;br /&gt;
&lt;br /&gt;
== Download Source Code ==&lt;br /&gt;
&lt;br /&gt;
REVS is currently available in gitorious:&lt;br /&gt;
&lt;br /&gt;
 http://meego.gitorious.org/meego-infrastructure-tools/revs&lt;br /&gt;
&lt;br /&gt;
 git clone git@gitorious.org:meego-infrastructure-tools/revs.git&lt;br /&gt;
&lt;br /&gt;
Installable packages (deb/rpm) can be found here :&lt;br /&gt;
&lt;br /&gt;
 https://build.opensuse.org/package/show?package=revs&amp;amp;project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
== Installing And Setting Up ==&lt;br /&gt;
&lt;br /&gt;
Installing and setting up REVS is guided in the [http://meego.gitorious.org/meego-infrastructure-tools/revs/blobs/master/README README] file in the source code. It includes the following sections&lt;br /&gt;
&lt;br /&gt;
* Setting REVS Up&lt;br /&gt;
** Prerequisites&lt;br /&gt;
** Running REVS&lt;br /&gt;
* Admin Interface and Trackers&lt;br /&gt;
** Admin interface&lt;br /&gt;
* Test Data&lt;br /&gt;
** Adding Data&lt;br /&gt;
&lt;br /&gt;
When installing on openSuse, the following extra repos are needed :&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/server:/http/openSUSE_11.2/server:http.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.2/devel:languages:python.repo&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
REVS allows usage of Django test framework to run unit tests on its components. Example is provided by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
run_tests.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the source root directory. It reports if all tests passed.&lt;br /&gt;
&lt;br /&gt;
== REST ==&lt;br /&gt;
&lt;br /&gt;
REVS has an API for controlling the models via HTTP. Currently Baseline, Package, Platform, Product, Product Release and Tracker models are modifiable and readable using our RESTful API.&lt;br /&gt;
&lt;br /&gt;
Our REST implementation of choice is [http://bitbucket.org/jespern/django-piston/wiki/Home Django Piston], as it allows direct model handling using the Django ORM.&lt;br /&gt;
&lt;br /&gt;
Currently the best way to use the API is using curl or anything that can GET / POST JSON. In curl this is achieved using &lt;br /&gt;
&lt;br /&gt;
 -d @file.json&lt;br /&gt;
&lt;br /&gt;
as the command line parameter to get data from a file. See the API section for details and examples for each model.&lt;br /&gt;
&lt;br /&gt;
Also the responses are given in JSON, so one might need eg. [http://packages.debian.org/lenny/edit-json edit-json] to view or edit JSON files.&lt;br /&gt;
&lt;br /&gt;
=== API ===&lt;br /&gt;
The API handlers all support either pure url-encoded data or JSON. Each model is capable of both but this document reviews only the JSON input and output.&lt;br /&gt;
----&lt;br /&gt;
==== Baseline ====&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;1.1.80.4.20101102.1&amp;quot;,&lt;br /&gt;
    &amp;quot;date&amp;quot;: &amp;quot;2010-11-10&amp;quot;,&lt;br /&gt;
    &amp;quot;pkgs&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;packageversion&amp;quot;: {&lt;br /&gt;
          &amp;quot;version&amp;quot;: &amp;quot;1.0.4&amp;quot;,&lt;br /&gt;
          &amp;quot;changelogentry_set&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
              &amp;quot;author&amp;quot;: &amp;quot;Anas Nashif &amp;quot;,&lt;br /&gt;
              &amp;quot;log&amp;quot;: &amp;quot;- Updated with latest spectacle\n- Include YAML file in source rpm\n&amp;quot;,&lt;br /&gt;
              &amp;quot;date&amp;quot;: &amp;quot;Sat Feb 27 2010&amp;quot;,&lt;br /&gt;
              &amp;quot;version&amp;quot;: &amp;quot;1.0.4&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            { &lt;br /&gt;
              &amp;quot;author&amp;quot;: &amp;quot;Li Peng &amp;quot;,&lt;br /&gt;
              &amp;quot;log&amp;quot;: &amp;quot;- libXres 1.0.4\n&amp;quot;,&lt;br /&gt;
              &amp;quot;date&amp;quot;: &amp;quot;Fri Dec 11 2009&amp;quot;,&lt;br /&gt;
              &amp;quot;version&amp;quot;: &amp;quot;1.0.4&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
          ]&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;libXres&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
     (many more packages)&lt;br /&gt;
    }&lt;br /&gt;
    &amp;quot;contains&amp;quot;: [&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;platform&amp;quot;: {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;MeeGo&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==== Package ====&lt;br /&gt;
&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;bluez&amp;quot;, &lt;br /&gt;
    &amp;quot;platform&amp;quot;: &amp;quot;MeeGo&amp;quot;, &lt;br /&gt;
    &amp;quot;latest_version&amp;quot;: &amp;quot;4.76&amp;quot;,&lt;br /&gt;
    &amp;quot;versions&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;version&amp;quot;: &amp;quot;4.70&amp;quot;, &lt;br /&gt;
            &amp;quot;package_system&amp;quot;: &amp;quot;rpm&amp;quot;, &lt;br /&gt;
            &amp;quot;changelogentries&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;date&amp;quot;: &amp;quot;Thu Sep 30 2010&amp;quot;, &lt;br /&gt;
                    &amp;quot;author&amp;quot;: &amp;quot;Zhu Yanhai &amp;quot;, &lt;br /&gt;
                    &amp;quot;email&amp;quot;: &amp;quot;&amp;lt;yanhai.zhu@linux.intel.com&amp;gt;&amp;quot;, &lt;br /&gt;
                    &amp;quot;links&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;log&amp;quot;: &amp;quot;- Add powered.patch to make sure the initial power status aligned\n  with connman's requirement.\n&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;date&amp;quot;: &amp;quot;Fri Aug 27 2010&amp;quot;, &lt;br /&gt;
                    &amp;quot;author&amp;quot;: &amp;quot;Zhu Yanhai &amp;quot;, &lt;br /&gt;
                    &amp;quot;email&amp;quot;: &amp;quot;&amp;lt;yanhai.zhu@linux.intel.com&amp;gt;&amp;quot;, &lt;br /&gt;
                    &amp;quot;links&amp;quot;: [], &lt;br /&gt;
                    &amp;quot;log&amp;quot;: &amp;quot;- Upgrade to 4.70\n&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            ]&lt;br /&gt;
        },&lt;br /&gt;
     ... (many more versions)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Platform ====&lt;br /&gt;
&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;MeeGo&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==== Product ====&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;platforms&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;MeeGo&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;foobar&amp;quot;, &lt;br /&gt;
    &amp;quot;target_hardware&amp;quot;: &amp;quot;n900&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Product Release ====&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;release_of&amp;quot;: &amp;quot;test&amp;quot;, &lt;br /&gt;
    &amp;quot;baselines&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;1.1.80.3.20101026.1&amp;quot;&lt;br /&gt;
        }, &lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;1.1.80.2.20101019.1&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;test_weekly_w45&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Tracker ====&lt;br /&gt;
'''JSON format for input and output'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;MeeGoBugzilla&amp;quot;, &lt;br /&gt;
        &amp;quot;key2url&amp;quot;: &amp;quot;http://bugs.meego.com/show_bug.cgi?id=%key%&amp;quot;, &lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://bugs.meego.com/&amp;quot;, &lt;br /&gt;
        &amp;quot;link_class&amp;quot;: &amp;quot;Bug&amp;quot;, &lt;br /&gt;
        &amp;quot;filter2url&amp;quot;: &amp;quot;&amp;lt;a ref=\&amp;quot;http://bugs.meego.com/show_bug.cgi?id=\\g&amp;lt;key&amp;gt;\&amp;quot;&amp;gt;\\g&amp;lt;1&amp;gt;&amp;lt;/a&amp;gt;&amp;quot;, &lt;br /&gt;
        &amp;quot;regexp&amp;quot;: &amp;quot;(\\BMC#(?P&amp;lt;key&amp;gt;\\ )\\))&amp;quot;&lt;br /&gt;
        &amp;quot;platforms&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;name&amp;quot;: &amp;quot;MeeGo&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Importing data to REVS ==&lt;br /&gt;
&lt;br /&gt;
To parse changelogs directly from source rpms, use [http://meego.gitorious.org/meego-infrastructure-tools/revs/blobs/master/bin/parse_release.py parse_release.py].&lt;br /&gt;
&lt;br /&gt;
To feed parse release with .changes files, copy this script and run it inside a MeeGo mirror directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
prjdir=$1&lt;br /&gt;
&lt;br /&gt;
[ -d $prjdir ] || {&lt;br /&gt;
  echo $prjdir is not a directory&lt;br /&gt;
  exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
prj=$(basename $prjdir)&lt;br /&gt;
dir=$(dirname $prjdir)&lt;br /&gt;
&lt;br /&gt;
mkdir $prj&lt;br /&gt;
cd $prj&lt;br /&gt;
&lt;br /&gt;
get_changes() {&lt;br /&gt;
        while read filename; do&lt;br /&gt;
            rpmname=$(rpm -qp --qf %{NAME} $filename)&lt;br /&gt;
            echo found $rpmname in $filename&lt;br /&gt;
            rpm -qp --changelog $filename &amp;gt; $rpmname.changes&lt;br /&gt;
        done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for area in core handset&lt;br /&gt;
do&lt;br /&gt;
    find $prjdir/$area -name *src.rpm* | get_changes&lt;br /&gt;
done&lt;br /&gt;
cd ..&lt;br /&gt;
tar cjf $prj.tar.bz $prj&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then bunzip and tar -x the files, then run parse release for each baseline and platform, like this script does:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import() {&lt;br /&gt;
        parse_release.py --force \&lt;br /&gt;
            --platform=${platform} \&lt;br /&gt;
            --baseline=${base} \&lt;br /&gt;
            releases/${base}&lt;br /&gt;
    }&lt;br /&gt;
    platform=MeeGo&lt;br /&gt;
    base=1.1.80.2.20101019.1&lt;br /&gt;
    import&lt;br /&gt;
    base=1.1.80.3.20101026.1&lt;br /&gt;
    import&lt;br /&gt;
    base=1.1.80.4.20101102.1&lt;br /&gt;
    import&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== REVS License ==&lt;br /&gt;
&lt;br /&gt;
REVS is free software: you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation, either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Iamer</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>2010-11-30T12:57:26Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Worker configuration */&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;
== 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 a form or the command line client.&lt;br /&gt;
# Django application receives the request and imports the information on a model object and saves it.&lt;br /&gt;
# When the object is saved, a message is sent via a broker to the image creation app, containing the details for the creation.&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;
= Worker =&lt;br /&gt;
&lt;br /&gt;
The worker code is responsible of 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;
The method &amp;quot;build&amp;quot; is where the actual business happens. It runs in two ways, as described earlier. &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;
== 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;
= BOSS participant =&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;
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;
= BOSS Client =&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;
 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;
= 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 =&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;
== 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;
== Input ==&lt;br /&gt;
&lt;br /&gt;
The following defines the input dictionary for the participant:&lt;br /&gt;
 &amp;quot;kickstart&amp;quot; : a kickstart file, in raw, 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;
== 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>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Process</id>
		<title>Release Infrastructure/BOSS Process</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Process"/>
				<updated>2010-10-13T13:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Process ===&lt;br /&gt;
&lt;br /&gt;
BOSS Process is the workflow definition. Process defines the business logic that is to be executed.&lt;br /&gt;
&lt;br /&gt;
Processes can be as simple or as complex as needed. They can define a linear execution of participants, have conditionals, loops and concurrency.&lt;br /&gt;
&lt;br /&gt;
Here's a simple example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
process['definition'] = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'notification' do&lt;br /&gt;
  sequence do&lt;br /&gt;
    notify&lt;br /&gt;
  end        &lt;br /&gt;
end&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more complex examples and the syntax reference please check the ruote documentation : http://ruote.rubyforge.org/definitions.html  and  http://ruote.rubyforge.org/expressions.html&lt;br /&gt;
&lt;br /&gt;
=== Process store ===&lt;br /&gt;
&lt;br /&gt;
The concept of a process store is helpful when dealing with multiple launchers and processes. It is simply a filesystem hierarchy that maps to a certain logical conditions and aids in the selection of the processes to launch which are stored in text files. The store can be managed using a VCS to track changes and ease deployment to production systems.&lt;br /&gt;
&lt;br /&gt;
Here's an example of such a structure :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
└── Domain&lt;br /&gt;
    └── Project&lt;br /&gt;
        ├── EventName1&lt;br /&gt;
        └── EventName2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The launcher script would traverse the tree matching the event data accordingly until it reaches a file with the event name, then it opens the file and reads the process definition inside.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Process</id>
		<title>Release Infrastructure/BOSS Process</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Process"/>
				<updated>2010-10-06T15:00:35Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: Created page with &amp;quot;== BOSS ==  BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around …&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Process ===&lt;br /&gt;
&lt;br /&gt;
BOSS Process is the workflow definition. Process defines the business logic that is to be executed.&lt;br /&gt;
&lt;br /&gt;
Processes can be as simple or as complex as needed. They can define a linear execution of participants, have conditionals, loops and concurrency.&lt;br /&gt;
&lt;br /&gt;
Here's a simple example :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
process['definition'] = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'notification' do&lt;br /&gt;
  sequence do&lt;br /&gt;
    notify&lt;br /&gt;
  end        &lt;br /&gt;
end&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more complex examples and the syntax reference please check the ruote documentation : http://ruote.rubyforge.org/definitions.html&lt;br /&gt;
&lt;br /&gt;
=== Process store ===&lt;br /&gt;
&lt;br /&gt;
The concept of a process store is helpful when dealing with multiple launchers and processes. It is simply a filesystem hierarchy that maps to a certain logical conditions and aids in the selection of the processes to launch which are stored in text files. The store can be managed using a VCS to track changes and ease deployment to production systems.&lt;br /&gt;
&lt;br /&gt;
Here's an example of such a structure :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
└── Domain&lt;br /&gt;
    └── Project&lt;br /&gt;
        ├── EventName1&lt;br /&gt;
        └── EventName2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The launcher script would traverse the tree matching the event data accordingly until it reaches a file with the event name, then it opens the file and reads the process definition inside.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher</id>
		<title>Release Infrastructure/BOSS Launcher</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher"/>
				<updated>2010-10-06T14:37:54Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Launcher ===&lt;br /&gt;
&lt;br /&gt;
BOSS Launcher is the process starter in BOSS architecture. Launcher waits for an event and then start a process by sending the process definition to BOSS. &lt;br /&gt;
&lt;br /&gt;
Launcher action is explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive any arbitrary event.&lt;br /&gt;
* Process the event and extract needed information from it.&lt;br /&gt;
* Select and or launch a process along with the associated work item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Launcher Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS launchers are written in Python language (other bindings will be available later). Following code snippets are from the generic launcher template (see chapter Example Code).&lt;br /&gt;
Launchers run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your launcher like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.launcher import Launcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Launcher defined in launcher.py of the route-amqp-pyclient package takes care of most of the details needed to create a launcher.&lt;br /&gt;
You just need to subclass it and use the &amp;quot;launch&amp;quot; member function.&lt;br /&gt;
&lt;br /&gt;
For an explanation of processes check [[/BOSS_Process|this page]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
process['definition'] = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'notification' do&lt;br /&gt;
  sequence do&lt;br /&gt;
    notify&lt;br /&gt;
  end        &lt;br /&gt;
end&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
process['fields'] = {'msg' : 'Template', 'result' : 'Result'}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example shows a loop that runs every 10 seconds and checks if a certain condition is met it launches the process defined above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def mainLoop(self):&lt;br /&gt;
  print &amp;quot;Template participant running&amp;quot;&lt;br /&gt;
  while True:&lt;br /&gt;
     # check condtion&lt;br /&gt;
    if itHappened:&lt;br /&gt;
        self.launch(process['definition'], process['fields'])&lt;br /&gt;
    time.sleep(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Registering BOSS Launcher to server ====&lt;br /&gt;
&lt;br /&gt;
To register your launcher you need to do the following :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l = templateLauncher(amqp_host=amqp_host,  amqp_user=amqp_user, amqp_pass=amqp_pwd, amqp_vhost=amqp_vhost)&lt;br /&gt;
l.mainLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Launcher Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following launcher template for example implementation with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
http://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-template&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher</id>
		<title>Release Infrastructure/BOSS Launcher</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher"/>
				<updated>2010-10-06T14:35:44Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Class definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS Launcher ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Launcher ===&lt;br /&gt;
&lt;br /&gt;
BOSS Launcher is the process starter in BOSS architecture. Launcher waits for an event and then start a process by sending the process definition to BOSS. &lt;br /&gt;
&lt;br /&gt;
Launcher action is explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive any arbitrary event.&lt;br /&gt;
* Process the event and extract needed information from it.&lt;br /&gt;
* Select and or launch a process along with the associated work item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Launcher Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS launchers are written in Python language (other bindings will be available later). Following code snippets are from the generic launcher template (see chapter Example Code).&lt;br /&gt;
Launchers run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your launcher like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.launcher import Launcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Launcher defined in launcher.py of the route-amqp-pyclient package takes care of most of the details needed to create a launcher.&lt;br /&gt;
You just need to subclass it and use the &amp;quot;launch&amp;quot; member function.&lt;br /&gt;
&lt;br /&gt;
For an explanation of processes check [[/BOSS_Process|this page]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
process['definition'] = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Ruote.process_definition :name =&amp;gt; 'notification' do&lt;br /&gt;
  sequence do&lt;br /&gt;
    notify&lt;br /&gt;
  end        &lt;br /&gt;
end&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
process['fields'] = {'msg' : 'Template', 'result' : 'Result'}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example shows a loop that runs every 10 seconds and checks if a certain condition is met it launches the process defined above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def mainLoop(self):&lt;br /&gt;
  print &amp;quot;Template participant running&amp;quot;&lt;br /&gt;
  while True:&lt;br /&gt;
     # check condtion&lt;br /&gt;
    if itHappened:&lt;br /&gt;
        self.launch(process['definition'], process['fields'])&lt;br /&gt;
    time.sleep(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Registering BOSS Launcher to server ====&lt;br /&gt;
&lt;br /&gt;
To register your launcher you need to do the following :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l = templateLauncher(amqp_host=amqp_host,  amqp_user=amqp_user, amqp_pass=amqp_pwd, amqp_vhost=amqp_vhost)&lt;br /&gt;
l.mainLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Launcher Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following launcher template for example implementation with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
http://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-template&lt;/div&gt;</summary>
		<author><name>Iamer</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>2010-10-06T14:32:23Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
Describe the overall release and build infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[/BOSS|Build Orchestration BOSS]]&lt;br /&gt;
* [[/REVS|Release reporting REVS]]&lt;br /&gt;
* [[/IMG|Image Creation IMG]]&lt;br /&gt;
* Build System OBS&lt;br /&gt;
&lt;br /&gt;
* [[/Packaging|Release team packaging information]]&lt;br /&gt;
* [[/BOSS_Participant|Participant documentation]]&lt;br /&gt;
* [[/BOSS_Launcher|Launcher documentation]]&lt;br /&gt;
* [[/BOSS_Process|Process documentation]]&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher</id>
		<title>Release Infrastructure/BOSS Launcher</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher"/>
				<updated>2010-10-06T14:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Class definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS Launcher ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Launcher ===&lt;br /&gt;
&lt;br /&gt;
BOSS Launcher is the process starter in BOSS architecture. Launcher waits for an event and then start a process by sending the process definition to BOSS. &lt;br /&gt;
&lt;br /&gt;
Launcher action is explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive any arbitrary event.&lt;br /&gt;
* Process the event and extract needed information from it.&lt;br /&gt;
* Select and or launch a process along with the associated work item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Launcher Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS launchers are written in Python language (other bindings will be available later). Following code snippets are from the generic launcher template (see chapter Example Code).&lt;br /&gt;
Launchers run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your launcher like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.launcher import Launcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Launcher defined in launcher.py of the route-amqp-pyclient package takes care of most of the details needed to create a launcher.&lt;br /&gt;
You just need to subclass it and use the &amp;quot;launch&amp;quot; member function.&lt;br /&gt;
&lt;br /&gt;
For an explanation of processes check [[/BOSS_Process|this page]]&lt;br /&gt;
&lt;br /&gt;
This example shows a loop that runs every 10 seconds and checks if a certain condition is met it launches a process:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def mainLoop(self):&lt;br /&gt;
  print &amp;quot;Template participant running&amp;quot;&lt;br /&gt;
  while True:&lt;br /&gt;
     # check condtion&lt;br /&gt;
    if itHappened:&lt;br /&gt;
        self.launch(process['definition'], process['fields'])&lt;br /&gt;
    time.sleep(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Registering BOSS Launcher to server ====&lt;br /&gt;
&lt;br /&gt;
To register your launcher you need to do the following :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l = templateLauncher(amqp_host=amqp_host,  amqp_user=amqp_user, amqp_pass=amqp_pwd, amqp_vhost=amqp_vhost)&lt;br /&gt;
l.mainLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Launcher Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following launcher template for example implementation with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
http://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-template&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher</id>
		<title>Release Infrastructure/BOSS Launcher</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Launcher"/>
				<updated>2010-10-06T14:28:01Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: Created page with &amp;quot;== BOSS Launcher ==  BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and system…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS Launcher ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Launcher ===&lt;br /&gt;
&lt;br /&gt;
BOSS Launcher is the process starter in BOSS architecture. Launcher waits for an event and then start a process by sending the process definition to BOSS. &lt;br /&gt;
&lt;br /&gt;
Launcher action is explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive any arbitrary event.&lt;br /&gt;
* Process the event and extract needed information from it.&lt;br /&gt;
* Select and or launch a process along with the associated work item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Launcher Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS launchers are written in Python language (other bindings will be available later). Following code snippets are from the generic launcher template (see chapter Example Code).&lt;br /&gt;
Launchers run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your launcher like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.launcher import Launcher&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Launcher defined in launcher.py of the route-amqp-pyclient package takes care of most of the details needed to create a launcher.&lt;br /&gt;
You just need to subclass it and use the &amp;quot;launch&amp;quot; member function.&lt;br /&gt;
&lt;br /&gt;
For an explanation of processes check [BOSS_Process]&lt;br /&gt;
&lt;br /&gt;
This example shows a loop that runs every 10 seconds and checks if a certain condition is met it launches a process:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def mainLoop(self):&lt;br /&gt;
  print &amp;quot;Template participant running&amp;quot;&lt;br /&gt;
  while True:&lt;br /&gt;
     # check condtion&lt;br /&gt;
    if itHappened:&lt;br /&gt;
        self.launch(process['definition'], process['fields'])&lt;br /&gt;
    time.sleep(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Registering BOSS Launcher to server ====&lt;br /&gt;
&lt;br /&gt;
To register your launcher you need to do the following :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l = templateLauncher(amqp_host=amqp_host,  amqp_user=amqp_user, amqp_pass=amqp_pwd, amqp_vhost=amqp_vhost)&lt;br /&gt;
l.mainLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Launcher Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following launcher template for example implementation with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
http://meego.gitorious.org/meego-infrastructure-tools/boss-launcher-template&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Participant</id>
		<title>Release Infrastructure/BOSS Participant</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Participant"/>
				<updated>2010-10-06T13:38:16Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS Participant ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Participant ===&lt;br /&gt;
&lt;br /&gt;
BOSS Participant is the actual actor in BOSS architecture. Participant wraps other systems and services related to software development, quality assurance and integration, allowing BOSS to interact with different parties in automated way.&lt;br /&gt;
&lt;br /&gt;
BOSS Participant action explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive a workitem from BOSS server&lt;br /&gt;
* Process it, interacting with underlying (read: wrapped) system or service&lt;br /&gt;
* Return the filled worksheet back to BOSS server&lt;br /&gt;
&lt;br /&gt;
=== Participant Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS participant is written in Python language (other bindings will be available later). Following code snippets are from Notifier Participant (see chapter Example Code).&lt;br /&gt;
Participants run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Participant Naming Convention ====&lt;br /&gt;
The participant's name should give an indication of the function it does, usually in the form noun_verb.py&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your participant like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.workitem import Workitem&lt;br /&gt;
from  RuoteAMQP.participant import Participant&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Participant defined in participant.py of the route-amqp-pyclient package takes care of most of the details needed to create a participant.&lt;br /&gt;
You just need to subclass it and define a &amp;quot;consume&amp;quot; member function. &lt;br /&gt;
&lt;br /&gt;
The received work item is stored as an attribute, it contains the information that was passed from previous steps in the workflow. Usually you would read the work item, do some processing, and then store results in the work item. &lt;br /&gt;
&lt;br /&gt;
For participants in a certain workflow to be able to communicate effectively, they need to follow the agreed upon &amp;quot;WID&amp;quot; or work item definition. The work item is just a JSON hash with the information stored in nested hashes and the WID is a namespace definition.&lt;br /&gt;
&lt;br /&gt;
The WID should also be generic enough to allow for many participants storing their results in the work item without collisions. Namespacing is a good idea so for example a generic &amp;quot;id&amp;quot; hash could be troublesome, while &amp;quot;notification.id&amp;quot; is clearer.&lt;br /&gt;
&lt;br /&gt;
That's all there is to it, the parent class will take care of putting the workitem back on the amqp queue. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NotifierParticipant(Participant):&lt;br /&gt;
    def consume(self):&lt;br /&gt;
       # look at workitem&lt;br /&gt;
       print json.dumps(self.workitem.to_h(), indent=4)&lt;br /&gt;
       #get some data from it&lt;br /&gt;
       package = self.workitem.lookup(&amp;quot;package&amp;quot;)&lt;br /&gt;
       # do some work &lt;br /&gt;
       # write some results to workitem&lt;br /&gt;
       self.workitem.set_field(&amp;quot;accepted&amp;quot;, &amp;quot;yes&amp;quot;)&lt;br /&gt;
       self.workitem.set_result(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is an example of a workitem :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;fei&amp;quot;: {&lt;br /&gt;
        &amp;quot;engine_id&amp;quot;: &amp;quot;engine&amp;quot;,&lt;br /&gt;
        &amp;quot;expid&amp;quot;: &amp;quot;0_0_2&amp;quot;,&lt;br /&gt;
        &amp;quot;sub_wfid&amp;quot;: null,&lt;br /&gt;
        &amp;quot;wfid&amp;quot;: &amp;quot;20100905-binapoyachi&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;__result__&amp;quot;: true,&lt;br /&gt;
        &amp;quot;comment&amp;quot;: null,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Another trigger!&amp;quot;,&lt;br /&gt;
        &amp;quot;dispatched_at&amp;quot;: &amp;quot;2010-09-05 13:24:44.051971 UTC&amp;quot;,&lt;br /&gt;
        &amp;quot;dst_package&amp;quot;: &amp;quot;boss-launcher-srhandler&amp;quot;,&lt;br /&gt;
        &amp;quot;dst_project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;email&amp;quot;: &amp;quot;example@example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;msg&amp;quot;: &amp;quot;Passes quality checks\n&amp;quot;,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;new&amp;quot;,&lt;br /&gt;
        &amp;quot;params&amp;quot;: {&lt;br /&gt;
            &amp;quot;forget&amp;quot;: false,&lt;br /&gt;
            &amp;quot;participant_options&amp;quot;: {&lt;br /&gt;
                &amp;quot;forget&amp;quot;: false,&lt;br /&gt;
                &amp;quot;queue&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ref&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;rid&amp;quot;: 41,&lt;br /&gt;
        &amp;quot;src_package&amp;quot;: &amp;quot;boss-launcher-srhandler&amp;quot;,&lt;br /&gt;
        &amp;quot;src_project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;src_rev&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
        &amp;quot;status&amp;quot;: &amp;quot;ACCEPTED&amp;quot;,&lt;br /&gt;
        &amp;quot;when&amp;quot;: &amp;quot;2010-09-05T16:20:53&amp;quot;,&lt;br /&gt;
        &amp;quot;who&amp;quot;: &amp;quot;iamer&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;participant_name&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Registering BOSS Participant to server ====&lt;br /&gt;
&lt;br /&gt;
To register your participant you need to have : a queue name, amqp host, and probably usrename and password for amqp authentication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    print &amp;quot;Notifier participant running&amp;quot;&lt;br /&gt;
    p = NotifierParticipant(ruote_queue=&amp;quot;notifier&amp;quot;, amqp_vhost=&amp;quot;ruote-test&amp;quot;)&lt;br /&gt;
    p.register(&amp;quot;notifier&amp;quot;, {'queue':'notifier'})&lt;br /&gt;
    p.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Participant Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following participants template for example implementation with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
http://meego.gitorious.org/meego-infrastructure-tools/boss-participant-template&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS_Participant</id>
		<title>Release Infrastructure/BOSS Participant</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS_Participant"/>
				<updated>2010-09-23T12:31:58Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== BOSS Participant ==&lt;br /&gt;
&lt;br /&gt;
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see [[Infrastructure/BOSS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What is BOSS Participant ===&lt;br /&gt;
&lt;br /&gt;
BOSS Participant is the actual actor in BOSS architecture. Participant wraps other systems and services related to software development, quality assurance and integration, allowing BOSS to interact with different parties in automated way.&lt;br /&gt;
&lt;br /&gt;
BOSS Participant action explained in three simple steps:&lt;br /&gt;
&lt;br /&gt;
* Receive a workitem from BOSS server&lt;br /&gt;
* Process it, interacting with underlying (read: wrapped) system or service&lt;br /&gt;
* Return the filled worksheet back to BOSS server&lt;br /&gt;
&lt;br /&gt;
=== Participant Coding Guidelines ===&lt;br /&gt;
&lt;br /&gt;
BOSS participant is written in Python language (other bindings will be available later). Following code snippets are from Notifier Participant (see chapter Example Code).&lt;br /&gt;
Participants run continuously as daemons. It is convenient to write an init script to wrap and manage them.&lt;br /&gt;
&lt;br /&gt;
==== Participant Naming Convention ====&lt;br /&gt;
The participant's name should give an indication of the function it does, usually in the form noun_verb.py&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
You need to install two libraries: &lt;br /&gt;
  * AIR: An RPC library used by BOSS&lt;br /&gt;
  * route-amqp-pyclient : The Python client library for Ruoute::AMQP&lt;br /&gt;
These libraries are open source and the code is published on gitorious :&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
  * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient&lt;br /&gt;
&lt;br /&gt;
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Once you have these libraries installed, you need to import them in your participant like this :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from  RuoteAMQP.workitem import Workitem&lt;br /&gt;
from  RuoteAMQP.participant import Participant&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Class definition ====&lt;br /&gt;
&lt;br /&gt;
The parent class Participant defined in participant.py of the route-amqp-pyclient package takes care of most of the details needed to create a participant.&lt;br /&gt;
You just need to subclass it and define a &amp;quot;consume&amp;quot; member function. &lt;br /&gt;
&lt;br /&gt;
The received work item is stored as an attribute, it contains the information that was passed from previous steps in the workflow. Usually you would read the work item, do some processing, and then store results in the work item. &lt;br /&gt;
&lt;br /&gt;
For participants in a certain workflow to be able to communicate effectively, they need to follow the agreed upon &amp;quot;WID&amp;quot; or work item definition. The work item is just a JSON hash with the information stored in nested hashes and the WID is a namespace definition.&lt;br /&gt;
&lt;br /&gt;
The WID should also be generic enough to allow for many participants storing their results in the work item without collisions. Namespacing is a good idea so for example a generic &amp;quot;id&amp;quot; hash could be troublesome, while &amp;quot;notification.id&amp;quot; is clearer.&lt;br /&gt;
&lt;br /&gt;
That's all there is to it, the parent class will take care of putting the workitem back on the amqp queue. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class NotifierParticipant(Participant):&lt;br /&gt;
    def consume(self):&lt;br /&gt;
       # look at workitem&lt;br /&gt;
       print json.dumps(self.workitem.to_h(), indent=4)&lt;br /&gt;
       #get some data from it&lt;br /&gt;
       package = self.workitem.lookup(&amp;quot;package&amp;quot;)&lt;br /&gt;
       # do some work &lt;br /&gt;
       # write some results to workitem&lt;br /&gt;
       self.workitem.set_field(&amp;quot;accepted&amp;quot;, &amp;quot;yes&amp;quot;)&lt;br /&gt;
       self.workitem.set_result(True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is an example of a workitem :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;fei&amp;quot;: {&lt;br /&gt;
        &amp;quot;engine_id&amp;quot;: &amp;quot;engine&amp;quot;,&lt;br /&gt;
        &amp;quot;expid&amp;quot;: &amp;quot;0_0_2&amp;quot;,&lt;br /&gt;
        &amp;quot;sub_wfid&amp;quot;: null,&lt;br /&gt;
        &amp;quot;wfid&amp;quot;: &amp;quot;20100905-binapoyachi&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;__result__&amp;quot;: true,&lt;br /&gt;
        &amp;quot;comment&amp;quot;: null,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Another trigger!&amp;quot;,&lt;br /&gt;
        &amp;quot;dispatched_at&amp;quot;: &amp;quot;2010-09-05 13:24:44.051971 UTC&amp;quot;,&lt;br /&gt;
        &amp;quot;dst_package&amp;quot;: &amp;quot;boss-launcher-srhandler&amp;quot;,&lt;br /&gt;
        &amp;quot;dst_project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;email&amp;quot;: &amp;quot;example@example.com&amp;quot;,&lt;br /&gt;
        &amp;quot;msg&amp;quot;: &amp;quot;Passes quality checks\n&amp;quot;,&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;new&amp;quot;,&lt;br /&gt;
        &amp;quot;params&amp;quot;: {&lt;br /&gt;
            &amp;quot;forget&amp;quot;: false,&lt;br /&gt;
            &amp;quot;participant_options&amp;quot;: {&lt;br /&gt;
                &amp;quot;forget&amp;quot;: false,&lt;br /&gt;
                &amp;quot;queue&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;ref&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;reason&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;rid&amp;quot;: 41,&lt;br /&gt;
        &amp;quot;src_package&amp;quot;: &amp;quot;boss-launcher-srhandler&amp;quot;,&lt;br /&gt;
        &amp;quot;src_project&amp;quot;: &amp;quot;Meego&amp;quot;,&lt;br /&gt;
        &amp;quot;src_rev&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
        &amp;quot;status&amp;quot;: &amp;quot;ACCEPTED&amp;quot;,&lt;br /&gt;
        &amp;quot;when&amp;quot;: &amp;quot;2010-09-05T16:20:53&amp;quot;,&lt;br /&gt;
        &amp;quot;who&amp;quot;: &amp;quot;iamer&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;participant_name&amp;quot;: &amp;quot;notify&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Registering BOSS Participant to server ====&lt;br /&gt;
&lt;br /&gt;
To register your participant you need to have : a queue name, amqp host, and probably usrename and password for amqp authentication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    print &amp;quot;Notifier participant running&amp;quot;&lt;br /&gt;
    p = NotifierParticipant(ruote_queue=&amp;quot;notifier&amp;quot;, amqp_vhost=&amp;quot;ruote-test&amp;quot;)&lt;br /&gt;
    p.register(&amp;quot;notifier&amp;quot;, {'queue':'notifier'})&lt;br /&gt;
    p.run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Participant Example Code ===&lt;br /&gt;
&lt;br /&gt;
See following participants for example implementation:&lt;br /&gt;
[[http://gitorious.org/locusf-home/boss-participants/blobs/master/notifier/notifier_participant.py notifier_participant.py]] [[http://gitorious.org/locusf-home/boss-participants/blobs/master/build-ks-participant/build_ks_participant.py build_ks_participant.py]]&lt;br /&gt;
&lt;br /&gt;
For a more advanced template with configuration, daemonization and packaging for Debian and opensuse look here :&lt;br /&gt;
[[http://gitorious.org/locusf-home/boss-participants/trees/master/ots ots_participant]]&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/BOSS/Code</id>
		<title>Release Infrastructure/BOSS/Code</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/BOSS/Code"/>
				<updated>2010-09-17T00:00:08Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following packages are part of the Release Infrastructure team's codebase&lt;br /&gt;
Additional external dependencies will need to be packaged from eggs/gems to support BOSS installation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Maemo:MeeGo-Infra ==&lt;br /&gt;
=== BOSS ===&lt;br /&gt;
BOSS source is managed in gitorious:&lt;br /&gt;
* http://meego.gitorious.org/meego-infrastructure-tools/boss&lt;br /&gt;
&lt;br /&gt;
There should be enough information by each package to build a new version : FIXME.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo-IMG ===&lt;br /&gt;
Aleksi... FIXME ... link to IMG page?&lt;br /&gt;
&lt;br /&gt;
=== AIR ===&lt;br /&gt;
AIR for ruby&lt;br /&gt;
 http://meego.gitorious.org/meego-infrastructure-tools/air&lt;br /&gt;
==== libair-python ====&lt;br /&gt;
debian package&lt;br /&gt;
==== libair-ruby ====&lt;br /&gt;
debian package&lt;br /&gt;
==== rubygem-air ====&lt;br /&gt;
suse package&lt;br /&gt;
Suse: Uses [[Release Infrastructure/Packaging#openSuse|update-gem tool]]&lt;br /&gt;
==== python-air?? ====&lt;br /&gt;
suse package : no suse package yet.&lt;br /&gt;
&lt;br /&gt;
=== ruote ===&lt;br /&gt;
Should be virgin but is likely to be modified slightly and/or tagged&lt;br /&gt;
 http://github.com/lbt/ruote&lt;br /&gt;
&lt;br /&gt;
Current snapshots:&lt;br /&gt;
 * 2.1.11.lbt2  b93c6d5f1798a07546c881e909e28a78673ba696&lt;br /&gt;
&lt;br /&gt;
=== libruote-ruby ===&lt;br /&gt;
Debian : http://github.com/lbt/pkg-ruote&lt;br /&gt;
&lt;br /&gt;
=== ruote-amqp-pyclient ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git checkout pkg&lt;br /&gt;
git merge master&lt;br /&gt;
#edit changelogs&lt;br /&gt;
git commit -am&amp;quot;Update to packaging&amp;quot;&lt;br /&gt;
rm /maemo/obs/opensuse/Maemo:MeeGo-Infra/route-amqp-pyclient/*.gz&lt;br /&gt;
git archive $TAG --format=tar --prefix=route-amqp-pyclient-$TAG/ | gzip &amp;gt; /maemo/obs/opensuse/Maemo:MeeGo-Infra/route-amqp-pyclient/route-amqp-pyclient-$TAG.tar.gz&lt;br /&gt;
cp *.spec /maemo/obs/opensuse/Maemo:MeeGo-Infra/route-amqp-pyclient/&lt;br /&gt;
cd /maemo/obs/opensuse/Maemo:MeeGo-Infra/route-amqp-pyclient/&lt;br /&gt;
osc -A suse ar&lt;br /&gt;
osc -A suse commit -m&amp;quot;Update to $TAG&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== rubygem-ruote ===&lt;br /&gt;
Suse: Uses [[Release Infrastructure/Packaging#openSuse|update-gem tool]]&lt;br /&gt;
&lt;br /&gt;
=== ruote-amqp ===&lt;br /&gt;
Source:&lt;br /&gt;
 http://github.com/lbt/ruote-amqp&lt;br /&gt;
=== libruote-amqp-ruby ===&lt;br /&gt;
Debian : http://github.com/lbt/pkg-ruote-amqp&lt;br /&gt;
=== rubygem-ruote-amqp ===&lt;br /&gt;
Suse: Uses [[Release Infrastructure/Packaging#openSuse|update-gem tool]]&lt;br /&gt;
&lt;br /&gt;
=== python-amqlib ===&lt;br /&gt;
Local version of python amqp library&lt;br /&gt;
 http://github.com/lbt/py-amqplib&lt;br /&gt;
&lt;br /&gt;
=== libsetup-ruby ===&lt;br /&gt;
Required for Debian 5 support for ruby packaging&lt;br /&gt;
=== ruby-pkg-tools ===&lt;br /&gt;
Required for Debian 5 support for ruby packaging&lt;br /&gt;
=== ruby1.9.1 ===&lt;br /&gt;
Required for Debian 5 support for ruby packaging&lt;br /&gt;
=== python-support ===&lt;br /&gt;
&lt;br /&gt;
== Maemo:MeeGo-Infra:Req ==&lt;br /&gt;
=== ejabberd ===&lt;br /&gt;
=== erlang ===&lt;br /&gt;
=== hevea ===&lt;br /&gt;
=== image-creator ===&lt;br /&gt;
=== isomd5sum ===&lt;br /&gt;
=== pykickstart ===&lt;br /&gt;
=== rabbitmq-server ===&lt;br /&gt;
=== rabbitmq-server-1.8.0 ===&lt;br /&gt;
=== squashfs-tools ===&lt;br /&gt;
=== yum ===&lt;br /&gt;
&lt;br /&gt;
== Maemo:MeeGo-Infra:OBS ==&lt;br /&gt;
The team will build and package custom versions of OBS to allow for testing as packages before patches are submitted upstream.&lt;br /&gt;
&lt;br /&gt;
http://gitorious.org/~lbt/opensuse/lbt-build-service&lt;br /&gt;
&lt;br /&gt;
To package:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
W I P &lt;br /&gt;
=== Server ===&lt;br /&gt;
&lt;br /&gt;
11.2 type:&lt;br /&gt;
&amp;lt;pre&amp;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/network:/messaging:/amqp/openSUSE_11.2/network:messaging:amqp.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/devel:/languages:/ruby:/extensions/openSUSE_11.2/devel:languages:ruby:extensions.repo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11.3 is similar but some build problems on suse OBS (24 July) mean you need http://download.opensuse.org/repositories/home:/lbt:/branches:/network:/messaging:/amqp/openSUSE_11.3/&lt;br /&gt;
&lt;br /&gt;
Then&lt;br /&gt;
 zypper ref&lt;br /&gt;
 zypper in boss&lt;br /&gt;
&lt;br /&gt;
To start BOSS:&lt;br /&gt;
 rcboss start&lt;br /&gt;
&lt;br /&gt;
Don't forget to follow the instructions in /usr/share/doc/packages/boss/INSTALL&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/REVS</id>
		<title>Release Infrastructure/REVS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/REVS"/>
				<updated>2010-09-16T22:45:07Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Installing And Setting Up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= REVS =&lt;br /&gt;
&lt;br /&gt;
So you want to get a ''grasp'' on what's going on when you release? Enter REVS – Release Engineering Visibility System (a software previously know as grasp).&lt;br /&gt;
&lt;br /&gt;
REVS...&lt;br /&gt;
* is a data-warehouse, it's not a master data source. Updates may be lost.&lt;br /&gt;
* provides high speed access to all aspects of a release&lt;br /&gt;
* allows management reports on bugs, features, changes, packages&lt;br /&gt;
&lt;br /&gt;
It integrates with, but isn't part of the [[BOSS]] workflow system.&lt;br /&gt;
&lt;br /&gt;
Implementation consists of three areas:&lt;br /&gt;
* Data model&lt;br /&gt;
** Master python model&lt;br /&gt;
** Reporting model (django)&lt;br /&gt;
* Data uptake&lt;br /&gt;
** Sqlalchemy based; uses the revs object&lt;br /&gt;
** Per data-source feeds&lt;br /&gt;
* Reporting via Django&lt;br /&gt;
&lt;br /&gt;
== Download Source Code ==&lt;br /&gt;
&lt;br /&gt;
REVS is currently available in gitorious:&lt;br /&gt;
&lt;br /&gt;
 http://meego.gitorious.org/meego-infrastructure-tools/revs&lt;br /&gt;
&lt;br /&gt;
 git clone git@gitorious.org:meego-infrastructure-tools/revs.git&lt;br /&gt;
&lt;br /&gt;
Installable packages (deb/rpm) can be found here :&lt;br /&gt;
&lt;br /&gt;
 https://build.opensuse.org/package/show?package=revs&amp;amp;project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
== Installing And Setting Up ==&lt;br /&gt;
&lt;br /&gt;
Installing and setting up REVS is guided in the [http://meego.gitorious.org/meego-infrastructure-tools/revs/blobs/master/README README] file in the source code. It includes the following sections&lt;br /&gt;
&lt;br /&gt;
* Setting REVS Up&lt;br /&gt;
** Prerequisites&lt;br /&gt;
** Running REVS&lt;br /&gt;
* Admin Interface and Trackers&lt;br /&gt;
** Admin interface&lt;br /&gt;
* Test Data&lt;br /&gt;
** Adding Data&lt;br /&gt;
&lt;br /&gt;
When installing on openSuse, the following extra repos are needed :&lt;br /&gt;
&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/server:/http/openSUSE_11.2/server:http.repo&lt;br /&gt;
  zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.2/devel:languages:python.repo&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
REVS allows usage of Django test framework to run unit tests on its components. Example is provided by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
run_tests.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the source root directory. It reports if all tests passed.&lt;br /&gt;
&lt;br /&gt;
== REVS License ==&lt;br /&gt;
&lt;br /&gt;
REVS is free software: you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation, either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Release_Infrastructure/REVS</id>
		<title>Release Infrastructure/REVS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Release_Infrastructure/REVS"/>
				<updated>2010-09-16T22:44:49Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: /* Installing And Setting Up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= REVS =&lt;br /&gt;
&lt;br /&gt;
So you want to get a ''grasp'' on what's going on when you release? Enter REVS – Release Engineering Visibility System (a software previously know as grasp).&lt;br /&gt;
&lt;br /&gt;
REVS...&lt;br /&gt;
* is a data-warehouse, it's not a master data source. Updates may be lost.&lt;br /&gt;
* provides high speed access to all aspects of a release&lt;br /&gt;
* allows management reports on bugs, features, changes, packages&lt;br /&gt;
&lt;br /&gt;
It integrates with, but isn't part of the [[BOSS]] workflow system.&lt;br /&gt;
&lt;br /&gt;
Implementation consists of three areas:&lt;br /&gt;
* Data model&lt;br /&gt;
** Master python model&lt;br /&gt;
** Reporting model (django)&lt;br /&gt;
* Data uptake&lt;br /&gt;
** Sqlalchemy based; uses the revs object&lt;br /&gt;
** Per data-source feeds&lt;br /&gt;
* Reporting via Django&lt;br /&gt;
&lt;br /&gt;
== Download Source Code ==&lt;br /&gt;
&lt;br /&gt;
REVS is currently available in gitorious:&lt;br /&gt;
&lt;br /&gt;
 http://meego.gitorious.org/meego-infrastructure-tools/revs&lt;br /&gt;
&lt;br /&gt;
 git clone git@gitorious.org:meego-infrastructure-tools/revs.git&lt;br /&gt;
&lt;br /&gt;
Installable packages (deb/rpm) can be found here :&lt;br /&gt;
&lt;br /&gt;
 https://build.opensuse.org/package/show?package=revs&amp;amp;project=Maemo%3AMeeGo-Infra&lt;br /&gt;
&lt;br /&gt;
== Installing And Setting Up ==&lt;br /&gt;
&lt;br /&gt;
Installing and setting up REVS is guided in the [http://meego.gitorious.org/meego-infrastructure-tools/revs/blobs/master/README README] file in the source code. It includes the following sections&lt;br /&gt;
&lt;br /&gt;
* Setting REVS Up&lt;br /&gt;
** Prerequisites&lt;br /&gt;
** Running REVS&lt;br /&gt;
* Admin Interface and Trackers&lt;br /&gt;
** Admin interface&lt;br /&gt;
* Test Data&lt;br /&gt;
** Adding Data&lt;br /&gt;
&lt;br /&gt;
When installing on openSuse, the following extra repos are needed :&lt;br /&gt;
&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/server:/http/openSUSE_11.2/server:http.repo&lt;br /&gt;
zypper ar http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.2/devel:languages:python.repo&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
REVS allows usage of Django test framework to run unit tests on its components. Example is provided by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
run_tests.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the source root directory. It reports if all tests passed.&lt;br /&gt;
&lt;br /&gt;
== REVS License ==&lt;br /&gt;
&lt;br /&gt;
REVS is free software: you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation, either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Build_Infrastructure/Community_Builder/Upgrade</id>
		<title>Build Infrastructure/Community Builder/Upgrade</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Build_Infrastructure/Community_Builder/Upgrade"/>
				<updated>2010-09-08T20:49:47Z</updated>
		
		<summary type="html">&lt;p&gt;Iamer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Backup /srv &lt;br /&gt;
# Backup /etc/&lt;br /&gt;
# Backup /usr/lib/obs&lt;br /&gt;
# Backup databases webui_production and api_production&lt;br /&gt;
# stop services &lt;br /&gt;
# upgrade packages &lt;br /&gt;
# merge changed config files&lt;br /&gt;
# perform database migrations&lt;br /&gt;
# start services.&lt;/div&gt;</summary>
		<author><name>Iamer</name></author>	</entry>

	</feed>