OpenSuse Build Service

(Undo revision 34022 by lbt (Talk))
(How do we move to an OBS)
Line 1: Line 1:
-
[[/Installation | Installing OpenSuse Build Service]] is a prerequisite for setting up a specific OBS project.
+
= OBS Intro =
 +
== Our Goals ==
 +
We want:
 +
* to allow freedom for developers to develop;
 +
* to provide a build service and SDK
 +
* to work with the core distro as much as possible
 +
* to provide excellent quality assured applications for our "app store";
 +
* to extend the core distro with a community supported Surrounds area for libraries and packages that are depended upon by more than one application.
-
= Fremantle =
+
== Basics ==
-
This currently refers to some inaccessible repos. I'll open them up as I get time.
+
Lets set out some basics about the OBS.
-
Approach:
+
# It's a build system. You put source on it and say "use this repository" and it builds a minimal SDK-like chroot using the deb/rpms it finds in that repository
-
* Copy all Nokia Fremantle Binaries to Fremantle:1.1:Std
+
# It has packages - a package corresponds to a tarball and a spec/dsc
-
* Create Fremantle:1.1:Bootstrap/<pkg> to create packages (use useforbuild = no?)
+
# It has projects - a project is like a directory with packages
-
* Create Fremantle:1.1:Loaded to include additional binaries needed by OBS
+
# When a package is built it is 'published' from the project where it was uploaded into a corresponding repository (which can be used to build other projects)
-
* Create Fremantle:1.1 as the nominal target for :Extras and the main prjconf
+
# The repositories can also be used by devices to download binary packages.
-
(see https://projects.maemo.org/trac/maemoobs/wiki/Fremantle too)
+
The 'trick' then, is to set up a structure of projects that we can use to support the publishing and sharing activities that we need.
-
Setup the projects:
+
Some tasks needed to get the OBS running:
-
 
+
* [[/Installation|OBS Installation]]
-
=== Fremantle:1.1:Std ===
+
* [[/Application QA Process|Application QA Process on the OBS]]
-
<pre>
+
* [[/Fremantle_Setup|Setting up Fremantle]]
-
# Specify the OBS we're working on
+
* [[/Cross_Setup|Setting up cross-building]]
-
API=http://api17/
+
* [[/Autobuild|An OBS Autobuilder queue]]
-
 
+
* [[/Reporting|Reporting]]
-
# Get the Fremantle binaries
+
-
mkdir -p /Downloads/fremantle1.1/
+
-
cd /Downloads/fremantle1.1/
+
-
wget -e robots=off --accept \*.deb --mirror --no-parent --progress=dot \
+
-
  --no-host-directories --cut-dirs=2 -nv \
+
-
  http://repository.maemo.org /pool/fremantle-update2/
+
-
 
+
-
# Prepare for the :full dir for the OBS
+
-
mkdir all all/all all/armel all/i386
+
-
find free non-free -name *armel.deb | xargs -I@ ln @ all/armel
+
-
find free non-free -name *i386.deb | xargs -I@ ln @ all/i386
+
-
find free non-free -name *all.deb | xargs -I@ ln @ all/all
+
-
 
+
-
# On an OBS client
+
-
osc -A $API meta prj Fremantle:1.1:Std -F - <<XML
+
-
<project name="Fremantle:1.1:Std">
+
-
  <title>Fremantle 1.1</title>
+
-
  <description>
+
-
The standard binaries from Nokia
+
-
  </description>
+
-
  <person role="maintainer" userid="Admin"/>
+
-
  <person role="bugowner" userid="Admin"/>
+
-
  <build>
+
-
    <enable/>
+
-
  </build>
+
-
  <publish>
+
-
    <disable/>
+
-
  </publish>
+
-
  <debuginfo>
+
-
    <disable/>
+
-
  </debuginfo>
+
-
  <repository name="standard">
+
-
    <arch>armv7el</arch>
+
-
    <arch>i586</arch>
+
-
  </repository>
+
-
</project>
+
-
XML
+
-
 
+
-
# Back on OBS server
+
-
# Copy the binaries into the new project
+
-
cd /srv/obs/build/Fremantle\:1.1\:Std/standard/
+
-
mkdir -p i586/:full armv7el/:full
+
-
 
+
-
ln /Downloads/fremantle1.1/all/armel/* armv7el/:full/
+
-
ln /Downloads/fremantle1.1/all/all/* armv7el/:full/
+
-
 
+
-
ln /Downloads/fremantle1.1/all/i386/* i586/:full/
+
-
ln /Downloads/fremantle1.1/all/all/* i586/:full/
+
-
 
+
-
/usr/lib/obs/server/bs_admin --rescan-repository Fremantle:1.1:Std standard i586
+
-
/usr/lib/obs/server/bs_admin --rescan-repository Fremantle:1.1:Std standard armv7el
+
-
/usr/lib/obs/server/bs_admin --rescan-repository Fremantle:1.1:Std standard armv5el
+
-
 
+
-
chown -R obsrun:obsrun /srv/obs/build/Fremantle*
+
-
</pre>
+
-
 
+
-
=== Fremantle:1.1:Bootstrap ===
+
-
<pre>
+
-
# On an OBS client
+
-
osc -A $API meta prj Fremantle:1.1:Bootstrap -F - <<XML
+
-
<project name="Fremantle:1.1:Std">
+
-
  <title>Fremantle 1.1</title>
+
-
  <description>
+
-
The standard binaries from Nokia
+
-
  </description>
+
-
  <person role="maintainer" userid="Admin"/>
+
-
  <person role="bugowner" userid="Admin"/>
+
-
  <build>
+
-
    <enable/>
+
-
  </build>
+
-
  <publish>
+
-
    <disable/>
+
-
  </publish>
+
-
  <debuginfo>
+
-
    <disable/>
+
-
  </debuginfo>
+
-
  <useforbuild>
+
-
    <disable/>
+
-
  </useforbuild>
+
-
  <repository name="Debian_5.0_standard">
+
-
    <path project="openSUSE.org:Debian:5.0" repository="standard"/>
+
-
    <arch>armv5el</arch>
+
-
    <arch>armv7el</arch>
+
-
    <arch>i586</arch>
+
-
  </repository>
+
-
  <repository name="Ubunty_9.04_standard">
+
-
    <path project="openSUSE.org:Ubuntu:9.04" repository="standard"/>
+
-
    <arch>armv5el</arch>
+
-
    <arch>armv7el</arch>
+
-
    <arch>i586</arch>
+
-
  </repository>
+
-
</project>
+
-
XML
+
-
 
+
-
This project has <useforbuild> disabled. This means that a package built in this project will not attempt to resolve dependencies from peer packages.
+
-
 
+
-
Now ensure the Ubuntu/Debian bootstrapped armv5el binaries are copied to the armv7el repo
+
-
echo ExportFilter: armel\.deb$ armv5el | osc -A $API meta prjconf Fremantle:1.1:Bootstrap -F -
+
-
</pre>
+
-
 
+
-
 
+
-
=== Fremantle:1.1:Loaded ===
+
-
This project
+
-
<pre>
+
-
osc -A $API meta prj Fremantle:1.1:Loaded -F - <<XML
+
-
<project name="Fremantle:1.1:Loaded">
+
-
  <title>Fremantle 1.1 Loaded</title>
+
-
  <description>
+
-
This project contains all the binaries used in addition to the
+
-
standard Nokia ones. They are built in Fremantle:1.1:Bootstrap and
+
-
then copied into here.
+
-
  </description>
+
-
  <person role="maintainer" userid="Admin"/>
+
-
  <person role="bugowner" userid="Admin"/>
+
-
  <build>
+
-
    <enable/>
+
-
  </build>
+
-
  <publish>
+
-
    <disable/>
+
-
  </publish>
+
-
  <debuginfo>
+
-
    <disable/>
+
-
  </debuginfo>
+
-
  <repository name="standard">
+
-
    <arch>armv7el</arch>
+
-
    <arch>i586</arch>
+
-
  </repository>
+
-
</project>
+
-
XML
+
-
</pre>
+
-
 
+
-
=== Fremantle:1.1 ===
+
-
This project is used as a target by applications. It is a multi-path project looking first in :Loaded and then in :Std
+
-
 
+
-
<pre>
+
-
osc -A $API meta prj Fremantle:1.1 -F - <<XML
+
-
<project name="Fremantle:1.1">
+
-
  <title>Fremantle 1.1</title>
+
-
  <description>
+
-
This project is the OBS Fremantle target.  It is based on the standard
+
-
Nokia binaries with some additional binaries needed for Fremantle.
+
-
  </description>
+
-
  <person role="maintainer" userid="Admin"/>
+
-
  <person role="bugowner" userid="Admin"/>
+
-
  <build>
+
-
    <enable/>
+
-
  </build>
+
-
  <publish>
+
-
    <disable/>
+
-
  </publish>
+
-
  <debuginfo>
+
-
    <disable/>
+
-
  </debuginfo>
+
-
  <repository name="standard">
+
-
    <path project="Fremantle:1.1:Loaded" repository="standard"/>
+
-
    <path project="Fremantle:1.1:Std" repository="standard"/>
+
-
    <arch>armv7el</arch>
+
-
    <arch>i586</arch>
+
-
  </repository>
+
-
</project>
+
-
XML
+
-
</pre>
+
-
 
+
-
Since this project is a target it needs a prjconf:
+
-
https://dvcs.projects.maemo.org/git/?p=OBS/maemoConf;a=blob_plain;f=Maemo_Fremantle.conf;h=818bd5a0c9136d13e1bb698cfcf861f64522b1d1;hb=573b391ccecd8fef6e4f5328a272a3ab1c4cdee5
+
-
 
+
-
 
+
-
== Extras ==
+
-
 
+
-
Binaries for :Loaded
+
-
 
+
-
<pre>
+
-
scratchbox-fake
+
-
osc -A $API meta pkg Fremantle:1.1:Bootstrap scratchbox-fake -e
+
-
osc -A $API co Fremantle:1.1:Bootstrap scratchbox-fake
+
-
cd Fremantle:1.1:Bootstrap/scratchbox-fake
+
-
git clone git@dvcs.projects.maemo.org:OBS/fremantle-deltas/scratchbox-fake
+
-
cd scratchbox-fake
+
-
dpkg-buildpackage -S -uc -us
+
-
cd ..
+
-
osc addremove
+
-
osc commit -m"From git"
+
-
</pre>
+
-
 
+
-
=== busybox ===
+
-
This just provides 'su' through busybox-login.
+
-
 
+
-
Stskeeps reports that there's a login pkg inside Nokia that would be better.
+
-
 
+
-
<pre>
+
-
osc -A $API meta pkg Fremantle:1.1:Bootstrap busybox -e
+
-
osc -A $API co Fremantle:1.1:Bootstrap busybox
+
-
cd Fremantle:1.1:Bootstrap/busybox
+
-
git clone git@dvcs.projects.maemo.org:OBS/fremantle-deltas/busybox
+
-
cd busybox
+
-
dpkg-buildpackage -S -uc -us
+
-
cd ..
+
-
osc addremove
+
-
osc commit -m"From git"
+
-
</pre>
+
-
 
+
-
=== fakeroot ===
+
-
<pre>
+
-
osc -A $API meta pkg Fremantle:1.1:Bootstrap fakeroot -e
+
-
osc -A $API co Fremantle:1.1:Bootstrap fakeroot
+
-
cd Fremantle:1.1:Bootstrap/fakeroot
+
-
git clone git@dvcs.projects.maemo.org:OBS/fremantle-deltas/fakeroot
+
-
cd fakeroot
+
-
dpkg-buildpackage -S -uc -us
+
-
cd ..
+
-
osc addremove
+
-
osc commit -m"From git"
+
-
</pre>
+

Revision as of 11:55, 8 May 2010

OBS Intro

Our Goals

We want:

  • to allow freedom for developers to develop;
  • to provide a build service and SDK
  • to work with the core distro as much as possible
  • to provide excellent quality assured applications for our "app store";
  • to extend the core distro with a community supported Surrounds area for libraries and packages that are depended upon by more than one application.

Basics

Lets set out some basics about the OBS.

  1. It's a build system. You put source on it and say "use this repository" and it builds a minimal SDK-like chroot using the deb/rpms it finds in that repository
  2. It has packages - a package corresponds to a tarball and a spec/dsc
  3. It has projects - a project is like a directory with packages
  4. When a package is built it is 'published' from the project where it was uploaded into a corresponding repository (which can be used to build other projects)
  5. The repositories can also be used by devices to download binary packages.

The 'trick' then, is to set up a structure of projects that we can use to support the publishing and sharing activities that we need.

Some tasks needed to get the OBS running: