Benoit Cattié

Billets pour Tag ubuntu

Fil des billets - Fil des commentaires

OpenSuse Build Service (OBS) : système de packaging multi distributions

mardi, novembre 1 2011, par Benoit Cattié

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


Catégorie: GNU/Linux | aucun commentaire | aucun rétrolien

Puppet : Installation de la version SUN de java (sun-java6-jre) via puppet sous Ubuntu

lundi, octobre 10 2011, par Benoit Cattié

Un petit billet pour détailler l'installation de la version SUN de java.

2 problématiques quant à l'installation de la version officielle (SUN) de java :

  • tout d'abord il faut ajouter le dépôt dans apt
  • ensuite il faut accepter la licence

Pour ce dernier point, on va utiliser "set-selections" de debconf avec un fichier preseed, ce qui permettra d'accepter automatiquement la licence et donc l'install java via puppet.

Voici un petit exemple de classe qui permet d'installer le tout :

class java::install {

        file{"/etc/apt/sources.list.d/java.list":
                ensure => present,
                mode => 644,
                content => "deb http://archive.canonical.com/ lucid partner",
                notify => Exec ["apt-get update"],
        }

        file { "/var/cache/debconf/jre6.seeds":
                source => "puppet:///java/jre6.seeds",
                ensure => present;
        }

        exec{"apt-get update":
                refreshonly => true,
        }

        package {"sun-java6-jre" :
                ensure => latest,
                responsefile => "/var/cache/debconf/jre6.seeds",
                require => [Exec["apt-get update"],File["/var/cache/debconf/jre6.seeds"]]
        }

}

Le fichier jre6.seeds contient les lignes suivantes :

sun-java6-bin   shared/accepted-sun-dlj-v1-1    boolean true
sun-java6-jdk   shared/accepted-sun-dlj-v1-1    boolean true
sun-java6-jre   shared/accepted-sun-dlj-v1-1    boolean true


Catégorie: puppet | aucun commentaire | aucun rétrolien