PRESENTATION
Open Build Service (plus communément appelé OpenSuse Build Service) est un système de création de paquet multi distributions et multi architectures. Il permet notamment de créer des paquets pour les distributions suivantes : openSUSE, Red Hat, Mandriva, Ubuntu, Fedora et Debian pour les architecture 32 et 64 bits.
C'est à ma connaissance le seul système multi distributions (commentaires bienvenus si ce n'est pas le cas :)), les "concurants" tels que pbuilder et mock se limitent à leur distribution propre (debian et fedora respectivement).
Disponible en version en ligne à l'adresse http://build.opensuse.org/, il est aussi proposé en "appliance" afin de disposer de sa plateforme "privée" de construction de paquets.
Je vais tout d'abord tester la version en ligne. Après la création d'un compte, je créé mon 1er paquet... Rien de bien original : je vais créer un paquet "hello-world" ! Le but de ce test est de construire le paquet pour un certains nombre de distributions (Debian 5 et 6, Ubuntu 11.4 et 11.10, RHEL 5 et 6, Fedora 14 et 15 ainsi que openSuse). Le tout bien sur pour des architecture 32 et 64 bits.
Je crée donc mon projet sur OBS ainsi que mon package hello-world. Je choisi aussi les distributions cibles pour lesquelles je veux créer le paquets (ça se passe dans l'onglet 'Repositories').
Je ne reviens pas sur la création de hello-world.c ni du Makefile. Par contre je vais détailler les fichiers nécessaires à la création du paquets rpm et deb.
RPM
Pour la création du paquet RPM, un seul fichier est nécessaire : hello-world.spec. N'étant pas trop spécialiste de la création des RPM, je me suis grandement inspiré d'un fichier trouvé sur le net.
Name: hello-world Version: 0.0.1 Release: 1 License: GPL Summary: This is a hello world application Url: http://benoit.cattie.net Group: misc Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root %description Authors -------------------------- Benoit Cattié <x> %prep %setup -q -n %{name}-0.0.1 %build make %install mkdir -p $RPM_BUILD_ROOT/%{_bindir} make install DESTDIR=$RPM_BUILD_ROOT/%{_bindir} %clean make clean %files %defattr(-,root,root,-) %{_bindir}/hello-world %changelog * Mon Oct 31 2011 - Benoit Cattié <x> - 0.0.1 : First release
DEB
Pour la création du paquet DEB, il est nécessaire de créer plusieurs fichiers :
- debian.control
- debian.rules
- debian.changelog
- hello-world.dsc
On peux se reporter à la page consacrée à la création des paquets debian sur OSB. A noter la partie "An Alternative method of creating a Debian package" qu'on essayera de tester par la suite avec un paquet un peu plus complexe.
Je vais détailler ci dessous le contenu des 4 fichiers ci dessus. On peux de toute façon voir les sources de tout ces fichiers depuis OBS.
Fichier debian.control :
Source: hello-world Section: misc Priority: optional Maintainer: Benoit Cattié <x> Build-Depends: debhelper (>= 4.1.16) Package: hello-world Architecture: any Depends: ${shlibs:Depends} Description: This is a hello world application
Fichier debian.rules :
A noter dans ce fichier que la racine du chroot pour construire le paquet est : /usr/src/packages/BUILD/debian/
Pour notre paquet il faudra donc placer le binaire à l'endroit suivant :
/usr/src/packages/BUILD/debian/hello-world/usr/bin/
et donc donner comme DESTDIR :
make install DESTDIR=/usr/src/packages/BUILD/debian/hello-world/usr/bin/
#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This is the debhelper compatibility version to use. export DH_COMPAT=4 CFLAGS = -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif build: build-stamp build-stamp: dh_testdir make all touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp make clean || true dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # The DESTDIR Has To Be Exactly /usr/src/packages/BUILD/debian/<nameOfPackage> make install DESTDIR=/usr/src/packages/BUILD/debian/hello-world/usr/bin/ # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot # dh_installdebconf dh_installdocs dh_installexamples dh_installmenu # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit dh_installcron dh_installman dh_installinfo # dh_undocumented dh_installchangelogs dh_link dh_strip dh_compress dh_fixperms # dh_makeshlibs dh_installdeb # dh_perl dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install
Fichier debian.changelog :
hello-world (0.0.1) stable; urgency=low * Initial Release -- Benoit Cattié <x> Mon, 31 Oct 2011 17:50:38 +0100
Fichier hello-world.dsc :
Format: 1.0 Source: hello-world Version: 0.0.1 Binary: hello-world Maintainer: Benoit Cattié <x> Architecture: any Build-Depends: debhelper (>= 4.1.16) Files: f7874571b9039b720953e92c370b4df1 352 hello-world-0.0.1.tar.gz
Une fois ces fichiers mis dans les sources du paquet sur OBS avec le tar.gz des sources du programme hello-world, OBS lance la construction des paquets sur les architectures/distributions cible. On peux suivre le status de la construction des paquets ainsi que les éventuelles erreurs rencontrées lors de la création du paquet.
INSTALLATION
Une fois les paquets créés, on peux les installer directement via notre gestionnaire de paquets préféré :
echo 'deb http://download.opensuse.org/repositories/home:benoitc/Debian_6.0/ /' >> /etc/apt/sources.list apt-get update apt-get install hello-world
ou pour RHEL (pas pu tester car pas de RHEL sous la malin :)) :
cd /etc/yum/repos.d/ wget http://download.opensuse.org/repositories/home:benoitc/RedHat_RHEL-5/home:benoitc.repo yum install hello-world