Portal:Build Service/Compilations Debian

Aller à : navigation, rechercher

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:

  1. le pristine tarball
  2. un fichier diff
  3. 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 :

  1. nomDuPaquet.dsc
  2. debian.changelog
  3. debian.control
  4. 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 :

  1. Format : la version du format utilisé pour le paquet .deb. Tapez 1.0.
  2. Source : le nom du paquet source sans .tar.gz
  3. 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.
  4. 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 )
  5. 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)
  6. Architecture : la liste des architectures pour lesquelles vous compilez le paquet
  7. 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
  8. 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 :

  1. si vous avez un serveur, faites un mirroir du dépot sur votre espace et indiquez-en l'adresse à vos utilisateurs
  2. 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é.