Portal:Build Service/Compilations Debian
Compilations Debian
Cette page fourni les informations relatives à la compilation debian supportée par l'openSuSE Build Service, à savoir :
- Debian
- Debian 4.0 (Etch)
- Debian 5.0 (Lenny)
- xUbuntu
- xUbuntu 6.06
- xUbuntu 7.04
- xUbuntu 7.10
- xUbuntu 8.04
- xUbuntu 8.10
Les paquets Debian sont organisés en deux grandes catégories : binaire et source. Les paquets binaires portent l'extension .deb et contiennent la version compilée de l'application que vous distribuez. Les paquets sources sont pour leur part, et à l'instar des sources .rpm, composés de trois fichiers:
- le pristine tarball
- un fichier diff
- un fichier dsc
Remarque importante, Build Service ne crée pas de dépôt source pour une distribution Debian donnée; seul un paquet .deb est créé.
Ainsi, il est important de garder à l'esprit qu'un dépôt debian 'standard' n'est composé que de deux répertoires :
(votre dépôt root) | +-binaire +-source
alors que Build Service crée directement le dossier binaire avec le nom de la distribution (p.ex.http://download.opensuse.org/repositories/home:/EmmeG/Debian_Etch/ correspond au dossier binaire et pas au dépôt root... ce dernier est http://download.opensuse.org/repositories/home:/EmmeG/ ).
Retenez que les trois étapes pour créer un paquet source ne sont pas nécessaires pour créer un paquet .deb, mais qu'elles sont nécessaires lorsque vous créez un dépôt source et que vous autorisez la compilation automatique et l'empaquetage sur la machine de l'utilisateur via apt-get.
Build Service ne crée pas de dépôt source, et donc ignore comment ils sont construits et utilisés.
Build Service utilise aussi des informations magiques supplémentaires qui sont données dans le fichier .dsc sous la forme de tags "debtransform". Ces derniers sont documentés dans ce mail : http://lists.opensuse.org/opensuse-buildservice/2007-03/msg00067.html et le code source se trouve ici : https://forgesvn1.novell.com/svn/opensuse/trunk/buildservice/src/build/debtransform En y regardant de plus près, vous pouvez constater qu'il accepte trois tags :
- DEBTRANSFORM-TAR
- DEBTRANSFORM-FILES-TAR
- DEBTRANSFORM-SERIES
Ils peuvent être utilsés pour définir un fichier .tar.gz comme source, qui peut être partagée entre compilations RPM et Debian, ainsi que pour être utilisée pour reprendre les patchs RPM dans les compilations Debian. Vous pouvez utiliser de multiples fichiers .tar.gz pour le tag DEBTRANSFORM-FILES-TAR comme ceci :
Debtransform-Files-Tar: debian.tar.gz debian-control-xUbuntu_6.06.tar.gz
Set minimum de fichiers requis pour créer un .deb
Afin de réussir un paquet .deb, vous avez au moins besoin des fichiers suivant :
- nomDuPaquet.dsc
- debian.changelog
- debian.control
- debian.rules
Et bien sur d'un tarball (.tar.gz) contenant le paquet du code source à compiler.
nomDuPaquet.dsc
Un modèle de base minimum pour ce fichier est le suivant :
Format: 1.0 Source: nomDuPaquet Version: 5.6-3 Binary: nomDuPaquet Maintainer: Prénom Nom <email@serveur.org> Architecture: any Build-Depends: debhelper (>= 4.1.16), nomDePaquetsNécessairesAlaCompilation Files: d57283ebb8157ae919762c58419353c8 133282 nomDuPaquet_5.6.orig.tar.gz 2fecf324a32123b08cefc0f047bca5ee 63176 nomDuPaquet_5.6-1.diff.tar.gz
Dans le modèle ci-dessus ne sont listés que les champs mandataires, mais il existe beaucoup de champs optionnels. Vous trouvez toute l'information relative à ces champs sur http://www.debian.org/doc/debian-policy/ch-controlfields.html
Voici un résumé expliquant la signification des champs mentionnés :
- Format : la version du format utilisé pour le paquet .deb. Tapez 1.0.
- Source : le nom du paquet source sans .tar.gz
- Version : elle se compose de la version de la source et de la révision du paquet; dans le modèle, 5.6 est la version du code source, tandis que 3 (après '-') est la révision du paquet Debian. Chaque fois que vous changez un des fichiers nécessaires à la création du .deb, vous devriez l'incrémenter.
- Binary : le nom du paquet binaire comme il sera vu par le gestionnaire apt (p.ex. pour l'installer, ce sera apt-get install valeurDuChampBinary )
- Maintainer : le nom de la personne maintenant la source (ce n'est PAS forcément vous, ni le nom de celui qui compile le paquet)
- Architecture : la liste des architectures pour lesquelles vous compilez le paquet
- Build-Depends : les librairies nécessaires à la complation. Vous devez au moins définir 'debhelper (>= 4.1.16)' , car elle contient tous les scripts d'aide à la compilation pour le système cible
- Files: en théorie, vous devez définir le MD5SUM et la dimension en octets des fichiers .orig.tar.gz et .diff.tar.gz, or en pratique ajoutez simplement des valeurs quelconques, car ce n'est pas important si elles ne correspondent guère à la réalité... l'important est qu'il y ait deux lignes avec trois champs comme dans le modèle (i.e. copiez-collez ces deux lignes en remplaçant nomDuPaquet avec le nom de votre .deb. Build Service s'occupera du reste)
debian.changelog
Le mécanisme Debian de création d'un .deb est d'insérer dans l'arbre des répertoires source un répertoire nommé 'debian' accompagné d'une quantité de fichiers nécessaires à l'automatisation de la compilation et de l'empaquetage.
Vous n'avez pas besoin de le faire vous-meme, Build Service se charge de créer le répertoire pour vous et d'y insérer tous les fichiers nommés debian.* .
Ceci vaut pour toute les distributions à base de .deb !! C'est pourquoi vous devez créer pour le dépot Ubuntu un fichier nommé debian.changelog (et PAS ubuntu.changelog).
Voici un modèle basique :
nomDuPaquet (5.6-3) stable; urgency=low * Initial Release -- VotreNom <votreemail@serveur.fr> lun, 25 Dec 2007 10:50:38 +0100
Vous pourriez penser que ce n'est qu'un changelog... mais la syntaxe est si contraignante qu'une petite erreur (un espace manquant) empeche la création du paquet !! :-( Donc, faites bien attention à la syntaxe définie sur la page http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog !
debian.control
Ce fichier décrit le paquet et ses dépendances. En voici un modèle basique :
Source: nomDuPaquet Section: nomDeLaSection Priority: optional Maintainer: VotreNom <votreEmail@serveur.fr> Build-Depends: debhelper (>= 4.1.16), nomDePaquetsNécessaireAlaCompilation Package: nomDuPaquet Architecture: any Depends: ${shlibs:Depends} Description: Cette ligne représente une courte ddescription Ensuite vient la description détaillée... Ici aussi, la syntaxe est très embetante (regardez la documentation de la Police Debian afin d'éviter les erreurs http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description)
Ici il y a des informations redondantes que vous pouvez copier du fichier .dsc : 'Build-Depends', 'Package' is the same of 'Binary', 'Architecture', 'Maintainer' sont typiquement les memes dans debian.changelog .
debian.rules
Ceci est un fichier de style Makefile contenant toute les règles d'extraction, compilation, installation et empaquetage de la source. Vous pouvez modifier ce que vous voulez dans ce fichier... toutefois, il est bien plus simple de ne modifier que quelques lignes pour compiler... le reste du fichier peut etre laissé intact.
#!/usr/bin/make -f # Partie de debian/rules utilisant debhelper. # GNU copyright 1997-1999 par Joey Hess. # Décommentez ceci pour enclencher le mode verbeux. #export DH_VERBOSE=1 # Ceci est la version de compatibilité à utiliser avec debhelper. 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 # ajoutez ici les commandes de compilation du paquet ./configure make all # --- fin de la partie personnalisée de compilation touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp # ajoutez ici les commandes de nettoyage après le processus de empaquetage make clean # --- fin de la partie personnalisée de nettoyage dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # ajoutez ici les commandes pour installer le paquet # DESTDIR Doit Etre Exctement /usr/src/packages/BUILD/debian/<nomDuPaquet> make install DESTDIR=/usr/src/packages/BUILD/debian/ace # --- fin de la partie personnalisée d'installation # compilez des fichiers indépendants de l'architecture ici binary-indep: build install # Il n'y a rien à faire par défaut # compilez des fichiers dépendants de l'architecture ici 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
Configuration de sources.list
Après la création des paquets .deb, vous avez la possibilité d'ajouter le dépot dans sources.list afin de l'utiliser avec apt-get et installer votre paquet.
En général, il suffit d'ajouter les dépots dans le fichier /etc/apt/sources.list , par exemple :
deb http://download.opensuse.org/repositories/home:/robermann79:/codesounding/Ubuntu_8.10 ./
Le problème est que apt-get ne gère pas les redirections (302) HTTP pour les mirroirs, apt-get considérant cela comme une erreur.
Ce n'est pas un bug de apt-get... telle est la décision des développeurs apt; ils considèrent comme un choix dangereux l'utilisation de la redirection 302 pour les dépots de paquets (pourquoi ?!?! ils ne le disent pas, c'est simplement dangereux)
Cependant, vous pouvez résoudre ce problème de deux manières :
- si vous avez un serveur, faites un mirroir du dépot sur votre espace et indiquez-en l'adresse à vos utilisateurs
- allez sur http://en.opensuse.org/Mirrors_Development_Build et cherchz un serveur qui mirroite votre dépot et indiquez-en l'adresse à vos utilisateurs (en espérant que le mirroir est permanent)
La façon rapide est d'obtenir une liste de mirroirs depuis le dépot lui-meme :
- Allez avec votre navigateur à la liste des mirroirs :
http://download.opensuse.org/repositories/<projet>://<paquet>/<depot>/Packages?mirrorlist
Ainsi, par exemple :
http://download.opensuse.org/repositories/home://robermann79://codesounding/Ubuntu_8.10/Packages?mirrorlist
- prenez un des mirroirs présents, par exemple :
http://widehat.opensuse.org/repositories/home:/robermann79:/codesounding/Ubuntu_8.10/Packages
et supprimez "/Packages" du chemin avant d'ajouter l'URL à votre /etc/apt/sources.list, comme suit :
deb http://widehat.opensuse.org/repositories/home:/robermann79:/codesounding/Ubuntu_8.10 ./
Maintenant les commandes apt-get fonctionnent comme il faut.
Exemples
Vous trouvez des exemples dans le répertoire de mon projet : https://build.opensuse.org/project/show?project=home%3AEmmeG
Pièges fréquents
Note sur le nomDuPaquet
Les noms de paquets RPM n'ont pas de syntaxe stricte comme ceux de Debian. Faites donc bien attention avant de télécharger vos archives !
- Les noms de paquets (source et binaire également, voir Package, Section 5.6.7) doivent consister en lettres minuscules (a-z), chiffres (0-9), signes plus (+) et moins (-), et points (.) uniquement. Ils doivent etre constitués de deux caractères au moins et débuter par un caractère alpha-numérique.
Plus d'information sur http://www.debian.org/doc/debian-policy/ch-controlfields.html
Note sur .tar.bz2
Debian 4.0 et xUbuntu 8.04 et plus ancien autorisaient l'utilisation de fichiers nomDuPaquet.tar.bz2 . Ceux-ci pouvaient etre partagés entre compilations .deb et .rpm . Debian 5.0 et xUbuntu 8.10 n'autorisent que les fichiers nomDuPaquet.tar.gz selon la Police Debian. Pour partager des sources entre compilations .rpm et .deb pour toutes les plateformes dans OBS, il est recommandé d'utiliser des fichiers nomDuPaquet.tar.gz .
Note sur les scripts "postinst" (post-installation)
Si vous avez besoin d'exécuter un script en post-installation, vous pouvez :
- télécharger un fichier nommé debian.postinst (notez le préfixe 'debian'), comme pour debian.rules
- insérer votre fichier nomDuPaquet.postinst dans le debian.tar.gz
Voir l'exemple du paquet https://build.opensuse.org/package/show?package=openvas-server&project=security%3Aopenvas%3ASTABLE
Format du Patch
Debian 4.0 et xUbuntu < 8.x requierent de nommer pareillement le fichier-à-patcher et le nouveau fichier pour les patchs -p0 (bnc#492297).
De plus, xUbuntu 6.06 n'autorise pas de contenu après la ligne @@..@@ . Par ex.@@ -37,7 +37,7 @@ openvas-libraries.tmpl: openvas-librarieéchouera tandis que
@@ -37,7 +37,7 @@ira très bien. En supprimant simplement le contenu après le second @@ résoudra cela.
Lier des paquets -deb à leur principal
Ubuntu 6.06 ne comprend pas "(= ${binary:Version})" dans le fichier .control. Là, "(= ${Source-Version})" doit etre utilisé.