Préparation

Il faut télécharger le paquet source à partir d'apt-get ou du site web: http://packages.debian.org/testing/source/<nompaquet>

Si on utilise apt-get, il faut s'assurer d'avoir une ligne de paquet source dans le fichier de configuration d'apt-get (/etc/apt/sources.list). Il devrait y avoir une ligne avec le mot clé deb-src. Exemple:

deb-src http://ftp.ca.debian.org/debian/ lenny main contrib

Il est conseillé de toujours mettre à jour la liste des paquets avant d'utiliser apt-get avec la commande suivante (en usager root): apt-get update. Ensuite on peut télécharger le paquet source avec la commande:

apt-get source <nompaquet>

Si on n'a jamais bâti le paquet, il peut être intelligent d'installer les dépendances de compilation avec la commande (en usager root): apt-get build-dep <nompaquet>.

Détail du paquet source

Le paquet source, une fois installer contient:

  • <nompaquet_version>.orig.tar.gz : Le code source d'origine provenant du développeur.
  • <nompaquet_version_versiondeb>.dsc : Le fichier de Contrôle de Source Debian (Debian Source Control)
  • <nompaquet_version-versiondeb>.diff.gz : Les modifications effectuées par Debian (répertoire debian/ et autres rustines).

Un fichier .dsc ?

Le fichier de Contrôle de Source Debian est un fichier texte qui contient des informations sur le paquet. Il est généralement signé à l'aide de GnuPG (signature PGP). Il contient les renseignements:

  • Le format du paquet .deb (Format: 1.0)
  • Le nom du paquet source: (Source: <nompaquet>)
  • Le nom du paquet compilé: (Binary: <nompaquet>). On pourrait générer deux paquets à partir d'un seul paquet source, d'où l'utilité de ce champ.
  • L'architecture du processeur pour le paquet source (pas le résultat final): (Architecture: any)
  • La version du paquet Debian: (Version: <version_versiondeb>
  • Le nom et l'adresse du mainteneur Debian: (Maintainer: Nom <email@domain.com>)
  • La version du standard Debian: (Standards-Version: 3.6.2)
  • Les dépendances de compilation: (Build-Depends: paquet1, paquet2, paquet3 (>> 1.2.3), paquet4 [!hurd-i386 !kfreebsd-i386], paquet5 (>= 3.2.1)
  • La liste des fichiers dans le paquet source, généralement le .orig.tar.gz et le fichier de différence diff.gz.
    Files: 
     md5dufichier1 taille1 nomdufichier1
     md5dufichier2 taille2 nomdufichier2
    

    La taille des fichiers est exprimé en octet. On peut obtenir le md5 à l'aide de la commande: md5sum nomdufichier. Malheureusement, la taille n'est pas affichée.

Le fichier est généré à l'aide de la commande debuild.

Lorsqu'on télécharge un paquet source de debian, sans avoir utiliser apt-get source, il faut utiliser la commande dpkg-source -x fichier.dsc pour extraire le paquet originel et appliqué les modifications (diff). On verra alors les commentaires suivants:

dpkg-source : extraction de <nompaquet> dans <nompaquet-version>
dpkg-source: info: extraction de <nompaquet_version>.orig.tar.gz
dpkg-source: info: mise en place de <nompaquet_version-versiondeb>.diff.gz

Le code est donc placé dans le répertoire <nompaquet-version> .

Qu'est-ce qu'un fichier rules

Un fichier rules est un fichier Makefile lors de la construction du paquet.

// brouillon
La première ligne du debian/rules est le nom du programme appelé pour exécuter le reste du fichier
#!/usr/bin/make -f

Les variables sont:
DEB_TAR_SRCDIR := <nompaquet-version>

Les cibles sont:
build:
clean:
pre-build::


Le Makefile peut utilisé les bibliothèques suivantes:

// brouillon
include /usr/share/cdbs/1/rules/tarball.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

Bâtir le paquet

Si vous n'êtes pas le mainteneur du paquet, il se peut que la commande debuild échoue car le paquet ne pourra pas être correctement signé avec la clé PGP. Il faut alors utiliser la commande debuild -us -uc

debuild

dpkg-buildpackage -rfakeroot -D -us -uc
  fakeroot debian/rules clean
  /usr/bin/make -f debian/rules reverse-config
  dh_clean 
  /usr/bin/make -C build-tree/<paquet-version> -k distclean
  rm -f debian/stamp-makefile-build
  rm -f debian/stamp-autotools-files
  dpkg-source -b <paquet-version>
  debian/rules build
    /usr/bin/make -f debian/rules reverse-config
  fakeroot debian/rules binary
  dh_clean -k 
  dh_installdirs -A
  /usr/bin/make -C build-tree/<paquet-version> install DESTDIR=/tmp/<paquet-version>/debian/<paquet>/
  db_...
  lintian...


Les options -D, -us et -uc sont utilisé par dpkg-buildpackage
  -D     Exécute dpkg-checkbuilddeps pour vérifier les dépendances de construction
  -us    Ne pas signer le paquet source. (us = unsigned source)
  -uc    Ne pas signer le fichier « .changes ». (uc = unsigned changes)
  -S     Bâtir seulement le fichier source, pas le binaire.

Fichier debian/watch

Le fichier debian/watch permet au script uscan (perl script) de vérifier la mise à jour d'un paquet sur le serveur du développeur.

La commande uscan lit le fichier debian/watch et la dernière version dans le fichier debian/changelog. Les deux fichiers sont nécessaires.

Voici un exemple des fichiers et de l'exécution du script uscan pour le paquet iceweasel (2009-10-10). Il faut au moins un changement complet dans le changelog pour que le script fonctionne correctement.

debian/changelog:
iceweasel (3.0.14-1) unstable; urgency=low

  * Fixes mfsa-2009-51, also known as CVE-2009-3079.

 -- Mike Hommey <glandium@debian.org>  Thu, 10 Sep 2009 08:56:30 +0200

debian/watch:
version=3
opts=dversionmangle=s/^(\d\.[\d\.]+)\+dfsg$/$1/ \
ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/(\d\.[\d\.]+)/source/firefox-([\d\.]+)[\.-]source\.tar\.bz2

debian/watch: (sourceforge for w3m (hard way))
version=3
opts="downloadurlmangle=s|sourceforge.net/projects/w3m/files(.*)/download|jaist.dl.sourceforge.net/project/w3m\\1|" \
 http://sourceforge.net/projects/w3m/files/ \
 /projects/w3m/files/w3m/w3m-[0-9]+\..+/w3m-([0-9]+\..+)\.tar\.gz/download debian uupdate

debian/watch: (sourceforge for w3m (easy way with sf redirector)
version=3
http://sf.net/w3m/w3m-(.+)\.tar\.gz

$ uscan --report
Processing watchfile line for package iceweasel...
Newest version on remote site is 3.5.3, local version is 3.0.14
iceweasel: Newer version (3.5.3) available on remote site:
  ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/3.5.3/source/firefox-3.5.3.source.tar.bz2
  (local version is 3.0.14)

Hyperliens...