Difference between revisions of "School Network/Open Build Service"

From Sugar Labs
Jump to navigation Jump to search
m
 
(28 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Summary ==
 
== Summary ==
  
This is a [http://git.sugarlabs.org/0sugar/build-service patched] Sugar Labs instance of [http://openbuildservice.org/ Open Build System] (OBS) that is intended to be a:
+
This [http://git.sugarlabs.org/0sugar/build-service patched] Sugar Labs instance of the [http://openbuildservice.org/ Open Build Service] (OBS) has the following intentions:
  
* Hosting sources and making binaries, if there is need, for [[Platform_Team/Sweets|Sweets]].
+
* Unattended building of software hosted on [[Sugar Network]] for all [[Sweets_Distribution/Supported_platforms|supported]] platforms.
* Convenient instrument to create 3rd party repositories with native packages for all [[#Supported_platforms|supported]] GNU/Linux distributions.
 
  
For detailed information, read the original Open Build System [http://openbuildservice.org/documentation.html documentation].
+
* Be a convenient instrument to create 3rd party repositories with native packages for all [[Sweets_Distribution/Supported_platforms|supported]] GNU/Linux distributions.
  
 
== Sites ==
 
== Sites ==
  
=== obs.sugarlabs.org ===
+
* [https://obs.sugarlabs.org obs.sugarlabs.org]<br>This is an [https://obs.sugarlabs.org/apidocs/ API] site, all OBS clients use it to get access to OBS. There is no need to work with the site directly, although that is [http://en.opensuse.org//openSUSE:Build_Service_Curl possible].
  
This is an [https://obs.sugarlabs.org/apidocs/ API] site, all OBS clients use it to get access to OBS. There is no need to work with site directly but it is [http://en.opensuse.org//openSUSE:Build_Service_Curl possible].
+
* [https://packages.sugarlabs.org packages.sugarlabs.org]<br>This is an original OBS Web client. It is intended to be used only by people who need to create native packages, i.e., it is not needed for most Sugar developers assuming that [[Sugar Network]] will process building procedures in unattended mode.
  
Site uses HTTP Basic authentication. To get access, [[Service/Account#Sugar_Labs_Central_Login|create]] Sugar Labs Central Login account.
+
* [http://download.sugarlabs.org/packages/ download.sugarlabs.org]<br>After building, binary packages will be acceptable from the Sugar Labs download site.
  
=== packages.sugarlabs.org ===
+
== Usage ==
 
 
This is an original OBS Web client. It is intended to be used only by people who need to create native packages, i.e., not for most of Sugar developers. But, until creating more appropriate tool for Sugar needs, it is the only one Web client to manage already released software (the releasing is being processed by [[Platform_Team/Guide/Sweets_Packaging#Releasing|sweets command]]).
 
 
 
== Content ==
 
 
 
The contend on OBS might be several kinds:
 
 
 
=== Projects ===
 
 
 
Projects are directories of Packages and might be two types:
 
 
 
* top level, regular projects, like {{Code|base}} or {{Code|sdk}};
 
* user's home projects, like {{Code|home:''<user>''}}.
 
 
 
=== Packages ===
 
 
 
Packages represent particular software projects and contain all files associated with these projects, e.g., tarballs with sources.
 
 
 
There are several types of package supported on OBS:
 
  
* packages that represent sweets,
+
See original [http://openbuildservice.org/help/manuals/ manuals] and [http://openbuildservice.org/help/materials/ materials] to learn more about what functionality OBS provides.
* native packages based on sweets,
 
* native packages with using sweet recipes as spec files,
 
* aliases,
 
* regular OBS packages.
 
  
See [[#Usage|Usage]] section for more details.
+
On top of original OBS behavior, the Sugar Labs instance brings the following new features and common practices.
  
=== Repositories ===
+
=== Special projects ===
  
Every project has repositories to build its packages against. Repositories might be two types:
+
There is a special project, named [https://packages.sugarlabs.org/project/repositories?project=base base]; it contains all GNU/Linux distributions that are supported on OBS. All other projects, that are intended for building packages, need to inherit repositories from this project.
  
* inherited from another project;
+
=== GNU/Linux distribution agnostic packages ===
* initial repositories, aka downloaded-on-demand, that are associated with particular GNU/Linux distribution release;
 
* {{Code|sweets.sugarlabs.org}} repository should present if Packages need to be distributed via Zero Install.
 
  
Every repository has supported architectures, e.g., {{Code|i586}} or {{Code|x86_64}}. There is also special architecture, {{Code|0install}}, only for {{Code|sweets.sugarlabs.org}}.
+
Instead of using spec files of packages to be built against for every GNU/Linux distribution, it is possible to use a special spec file that will be used as-is in all platforms that Sugar Labs OBS supports.
 
 
== Supported platforms ==
 
 
 
There is special project, named [https://packages.sugarlabs.org/project/repositories?project=base base], it contains all GNU/Linux distributions that are supported on OBS. All other projects need to inherit repositories from this project.
 
 
 
== Usage ==
 
  
There are several OBS usage workflows.
+
To create such distro-agnostic packages,
  
=== Sweets ===
+
* upload a {{Code|sweets.recipe}} file in [[Sweets_Distribution/Recipe_Specification|special notation]] to OBS package;
 +
* upload {{Code|.tar.gz}} sources with filename composed using {{Code|sweets.recipe}} fields:
  
[[Platform_Team/Sweets|Sweets]] is using OBS as a place to host sources and, if there is need, build binaries. There are two ways to interact with OBS:
+
<context>-<version>.tar.gz
  
* Console based client, {{Code|sweets}}, for uploading new releases;
+
After that, OBS will start building submitted package on all attached OBS repositories.
* Application to manage already released versions, it is possible to use packages.sugarlabs.org for that but it is too overfeatured and need to be replaced by more appropriate option.
 
  
The result will be reused via Zero Install.
+
=== Resolve packages ===
  
=== Sweet packages ===
+
There is new API command that might be used to resolve package names and package dependencies on a particular OBS platform.
  
After beeing released, sweets might be formed to native packages repositories. For that case:
+
GET '''/resolve'''?project=PROJECT&repository=REPOSITORY&arch=ARCH&package=PACKAGE[&withdeps][&exclude=PACKAGE]
  
* Create new project;
+
Where:
* Add new repositories packages need to be build for, they should be directly or indirectly inherited from the {{Code|base}} project;
 
* Go to OBS package that represent a sweet you need to build native packages for, e.g., [https://packages.sugarlabs.org/package/show?package=sugar&project=sdk sugar];
 
* Click ''Link sweet package'' link to add it to your project.
 
  
The result will be regular OBS repositories with native packages. The only difference is that after installing on target systems, the content of these packages will be placed to {{Code|/opt}} directory instead of regular {{Code|/usr}}. The reason is that sweets are not indented to be placed directly to the {{Code|/usr}} and there might be file name collisions with existed files.
+
* {{Code|PROJECT}}, {{Code|REPOSITORY}}, {{Code|ARCH}} and {{Code|PACKAGE}}<br>identification of particular OBS package;
 +
* {{Code|withdeps}}<br>include dependencies graph of the {{Code|PACKAGE}};
 +
* {{Code|exclude}}<br>restrict dependency graph from bottom side.
  
=== Recipe based packages ===
+
For example,
  
These are regular OBS packages except that instead of regular spec files, e.g., RPM {{Code|.spec}}, they might be build basing on [[Platform_Team/Recipe_Specification#.5BPackage.5D|sweets.recipe]] files. It is a kind of meta packaging but restricted by design. In comparing with sweet packages, these packages will be placed to {{Code|/usr}}.
+
https://obs.sugarlabs.org/resolve?project=OLPC&repository=11.3.1&arch=i586&package=pygame&withdeps&exclude=sugar
  
=== Regular packages ===
+
Will output:
  
It is exactly how OBS is originally designed to work.
+
<resolve>
 +
  <binary name="pygame" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/pygame-1.9.1-3.fc14.i686.rpm" />
 +
  <binary name="SDL" url="http://mock.laptop.org/cgit/koji.dist-f14-i686-updates-11.3.1/plain/RPMS/SDL-1.2.14-11.fc14.i686.rpm" />
 +
  <binary name="SDL_mixer" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_mixer-1.2.11-4.fc14.i686.rpm" />
 +
  <binary name="SDL_image" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_image-1.2.10-1.fc13.i686.rpm" />
 +
  <binary name="numpy" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/numpy-1.4.1-6.fc14.i686.rpm" />
 +
  <binary name="SDL_ttf" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_ttf-2.0.10-1.fc14.i686.rpm" />
 +
  <binary name="portmidi" url="http://mock.laptop.org/cgit/koji.dist-f14-i686-updates-11.3.1/plain/RPMS/portmidi-200-5.fc14.i686.rpm" />
 +
  <binary name="libmikmod" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/libmikmod-3.2.0-11.beta2.fc14.i686.rpm" />
 +
  <binary name="libgfortran" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/libgfortran-4.5.1-4.fc14.i686.rpm" />
 +
  <binary name="python-nose" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/python-nose-0.11.3-5.fc14.noarch.rpm" />
 +
  <binary name="python-setuptools" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/python-setuptools-0.6.14-3.fc14.noarch.rpm" />
 +
  <binary name="atlas" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/atlas-3.8.3-18.fc14.i686.rpm" />
 +
</resolve>
  
 
== Policy ==
 
== Policy ==
  
{{:Platform_Team/Open_Build_System/Policy}}
+
{{:School_Network/Open_Build_Service/Policy}}
  
 
== Resources ==
 
== Resources ==
  
* Open Build system [http://openbuildservice.org/ home page].
+
* Open Build Service [http://openbuildservice.org/ home page].
* API [https://obs.sugarlabs.org/apidocs/ specification].
+
* Open Build Service API [https://obs.sugarlabs.org/apidocs/ specification].
* Downstream patch [http://git.sugarlabs.org/0sugar/build-service sources].
+
* Downstream patch [https://git.sugarlabs.org/sl-tweaks/obs sources].

Latest revision as of 08:19, 23 March 2015

Summary

This patched Sugar Labs instance of the Open Build Service (OBS) has the following intentions:

  • Be a convenient instrument to create 3rd party repositories with native packages for all supported GNU/Linux distributions.

Sites

  • obs.sugarlabs.org
    This is an API site, all OBS clients use it to get access to OBS. There is no need to work with the site directly, although that is possible.
  • packages.sugarlabs.org
    This is an original OBS Web client. It is intended to be used only by people who need to create native packages, i.e., it is not needed for most Sugar developers assuming that Sugar Network will process building procedures in unattended mode.

Usage

See original manuals and materials to learn more about what functionality OBS provides.

On top of original OBS behavior, the Sugar Labs instance brings the following new features and common practices.

Special projects

There is a special project, named base; it contains all GNU/Linux distributions that are supported on OBS. All other projects, that are intended for building packages, need to inherit repositories from this project.

GNU/Linux distribution agnostic packages

Instead of using spec files of packages to be built against for every GNU/Linux distribution, it is possible to use a special spec file that will be used as-is in all platforms that Sugar Labs OBS supports.

To create such distro-agnostic packages,

  • upload a sweets.recipe file in special notation to OBS package;
  • upload .tar.gz sources with filename composed using sweets.recipe fields:
<context>-<version>.tar.gz

After that, OBS will start building submitted package on all attached OBS repositories.

Resolve packages

There is new API command that might be used to resolve package names and package dependencies on a particular OBS platform.

GET /resolve?project=PROJECT&repository=REPOSITORY&arch=ARCH&package=PACKAGE[&withdeps][&exclude=PACKAGE]

Where:

  • PROJECT, REPOSITORY, ARCH and PACKAGE
    identification of particular OBS package;
  • withdeps
    include dependencies graph of the PACKAGE;
  • exclude
    restrict dependency graph from bottom side.

For example,

https://obs.sugarlabs.org/resolve?project=OLPC&repository=11.3.1&arch=i586&package=pygame&withdeps&exclude=sugar

Will output:

<resolve>
  <binary name="pygame" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/pygame-1.9.1-3.fc14.i686.rpm" />
  <binary name="SDL" url="http://mock.laptop.org/cgit/koji.dist-f14-i686-updates-11.3.1/plain/RPMS/SDL-1.2.14-11.fc14.i686.rpm" />
  <binary name="SDL_mixer" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_mixer-1.2.11-4.fc14.i686.rpm" />
  <binary name="SDL_image" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_image-1.2.10-1.fc13.i686.rpm" />
  <binary name="numpy" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/numpy-1.4.1-6.fc14.i686.rpm" />
  <binary name="SDL_ttf" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/SDL_ttf-2.0.10-1.fc14.i686.rpm" />
  <binary name="portmidi" url="http://mock.laptop.org/cgit/koji.dist-f14-i686-updates-11.3.1/plain/RPMS/portmidi-200-5.fc14.i686.rpm" />
  <binary name="libmikmod" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/libmikmod-3.2.0-11.beta2.fc14.i686.rpm" />
  <binary name="libgfortran" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/libgfortran-4.5.1-4.fc14.i686.rpm" />
  <binary name="python-nose" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/python-nose-0.11.3-5.fc14.noarch.rpm" />
  <binary name="python-setuptools" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/python-setuptools-0.6.14-3.fc14.noarch.rpm" />
  <binary name="atlas" url="http://mock.laptop.org/cgit/koji.dist-f14-i686/plain/RPMS/atlas-3.8.3-18.fc14.i686.rpm" />
</resolve>

Policy

The Open Build Service works underneath the Sugar Network, processing software content uploaded to Sugar Network, thus, the Sugar Network Policy is inherited.

Resources