mar 27 2007

Connaissez-vous debootstrap ?

ATTENTION : cet article est peut-être obsolète.

Récemment, j’ai voulu monter un serveur WebDAV chez un collègue, pour partager des calendriers. J’ai d’abord configuré et testé le service en local, sur mon ordinateur portable, puis j’ai transmis les fichiers de configuration au collègue. Pour ne pas mettre le bazar dans mon système, j’ai reconstitué dans un dossier un système Linux tout neuf, tout propre, avec l’aide de debootstrap.

Il y a plusieurs manières de tester une nouvelle configuration, une nouvelle application, un nouveau service sur un système Linux propre :

  • disposer d’une machine libre, installer un système dessus,
  • jouer avec les machines virtuelles, comme kvm ou qemu,
  • installer un système en chroot.

J’ai utilisé cette dernière possibilité. Les distributions basées sur Debian disposent du magnifique debootstrap, un utilitaire qui télécharge tous les paquets nécessaires depuis les depôts, puis les installe dans un dossier du système de fichiers.

On installe tout d’abord debootstrap :

$ sudo apt-get install debootstrap

Puis on lui demande l’installation d’une distribution dans un dossier local :

$ sudo debootstrap dapper /mnt http://fr.archive.ubuntu.com/ubuntu/

Dans cette commande, on a demandé l’installation de la distribution Dapper Drake dans le répertoire /mnt, en utilisant le miroir http://fr.archive.ubuntu.com/ubuntu/. Ce dernier champ est facultatif ; par défaut, c’est le miroir que vous utilisez pour la distribution hôte qui est utilisé.

Ce qui est intéressant, c’est que, sous Edgy, je vais pouvoir télécharger et installer une distribution différente, correspondant à la machine cible. La liste des distributions disponibles se trouve dans /usr/lib/debootstrap/scripts/. Sous Ubuntu Edgy, j’aurais très bien pu installer Debian Sarge[1].

Le système installé est le système de base, minimal. Pour l’utiliser, on procède en deux étapes :

Monter le pseudo système de fichiers /proc dans la cible :

$ sudo mount -t proc none /mnt/proc

La distribution cible aura ainsi accès aux paramètres du noyau de la distribution hôte.

Chrooter dans le répertoire cible :

$ sudo chroot /mnt

Vous obtenez alors un accès root dans la distribution cible. Vous pouvez installer des nouveaux logiciels avec apt-get, lancer ou arrêter des services, etc.

deboostrap permet donc de monter très facilement des pseudo-serveurs de test, sans toucher à la configuration de la machine hôte. Vous pouvez également utiliser les prisons chroot pour isoler les services critiques du reste du système.

La page de manuel de debootstrap vous donnera toutes les infos sur cet outil très pratique, dont seulement une partie des fonctionnalités est présentée ici.

Notes

[1] Il faut alors spécifier un miroir Debian à la place du miroir Ubuntu.


sept 3 2006

Réaliser un rétroportage de Edgy vers Dapper

ATTENTION : cet article est peut-être obsolète.

Il arrive parfois, lorsqu’on utilise la version stable d’une distribution Linux, de vouloir utiliser les dernières versions de ses logiciels favoris. Vous utilisez Ubuntu Dapper et vous bavez d’envie d’essayer Rhythmbox 0.9.5, mais vous ne voulez pas passer à Edgy, encore instable ? Le rétroportage, ou backport, est pour vous.

Vous aimez la stabilité et le grand choix de logiciels de la distribution Ubuntu Dapper, mais parfois vous aimeriez, pour une raison ou pour une autre, disposer d’une version plus récente de votre logiciel favori : une nouvelle fonctionnalité est apparue, un bug a été résolu, etc. Vous pourriez bien sûr télécharger les sources de ce logiciel, les compiler et les installer à la main ; mais vous perdriez alors le bénéfice du système APT. Une solution plus élégante consiste à réaliser ce qu’on appelle un backport, c’est-à-dire qu’on va utiliser les sources du paquet disponible dans Edgy (la prochaine version d’Ubuntu, encore en développement) pour reconstruire un paquet adapté à Dapper.

Nous nous intéresserons ici au logiciel UFRAW qui permet de développer les fichiers RAW produits par les appareils numériques.

Tout d’abord, nous allons ajouter une ligne dans le fichier /etc/apt/sources.list pour télécharger les sources de notre paquet Edgy :

 $ sudo -s
 # echo "deb-src http://fr.archive.ubuntu.com/ubuntu/ edgy main universe" >> /etc/apt/sources.list

ou bien ouvrez le fichier dans un éditeur,

 $ gksudo gedit /etc/apt/sources.list

et copiez-collez cette ligne à la fin du fichier :

 deb-src http://fr.archive.ubuntu.com/ubuntu/ edgy main universe

Ensuite, il faut mettre à jour notre base de données APT :

 $ sudo apt-get update

Désormais, il est possible de télécharger les paquets-sources de Edgy. Nous allons récupérer le paquet de UFRAW :

 $ apt-get source ufraw $ cd ufraw-0.9.1

Nous allons avoir besoin du paquet fakeroot, qui permet de se faire passer pour l’administrateur de la machine :

 $ sudo apt-get install fakeroot

Nous pouvons lancer la compilation :

 $ fakeroot dpkg-buildpackage

La compilation va très certainement échouer, car de nombreux logiciels et bibliothèques sont nécessaires : leur liste apparaît dans le terminal. Nous allons les installer.

 $ sudo apt-get install libgimp2.0-dev liblcms-dev libtiff4-dev libexiv2-dev $ fakeroot dpkg-buildpackage

De nouveau, la compilation échoue, car la version disponible de libexiv2-dev est trop vieille : il veut la 0.10, alors que nous ne disposons que de la 0.7 dans Dapper. C’est ici que nous allons “bidouiller” les dépendances du paquet, pour que dpkg-buildpackage accepte notre version. Attention ! Il est bien évident que si le logiciel lui-même requiert une certaine version de la bibliothèque pour fonctionner, la compilation échouera !

 $ gedit debian/control

Repérer dans le champ Build-Depends la bibliothèque qui pose problème. Dans notre cas, on voit :

 Build-Depends: debhelper (>= 4.0.0), libgimp2.0-dev (>= 2.2), (...) libexiv2-dev (>= 0.10)

Modifions le numéro de version pour obtenir :

 Build-Depends: debhelper (>= 4.0.0), libgimp2.0-dev (>= 2.2), (...) libexiv2-dev (>= 0.7)

Pour savoir de quelle version on dispose dans Dapper, il suffit de lire le résultat de la commande :

 $ apt-cache show libexiv2-dev
 Package: libexiv2-dev
 Priority: optional
 Section: universe/libdevel
 Installed-Size: 1352
 Maintainer: KELEMEN Peter <fuji@debian.org>
 Architecture: i386
 Source: exiv2 Version: 0.7-9.1ubuntu1
 Depends: libexiv2c2a (= 0.7-9.1ubuntu1)
 Conflicts: libexiv2c2a (<< 0.7-9.1)
 Filename: pool/universe/e/exiv2/libexiv2-dev_0.7-9.1ubuntu1_i386.deb
 Size: 316930
 MD5sum: e1ee0b6b7af95f221282d1a8cea6bdc1
 Description: EXIF/IPTC metadata manipulation library - development files Exiv2 C++ header files.
 Bugs: mailto:ubuntu-users@lists.ubuntu.com
 Origin: Ubuntu</fuji@debian.org>

On a donc la version 0.7.

Une fois que les histoires de dépendances sont résolues, nous passons à la création du paquet en lui-même :

 $ dpkg-buildpackage

La compilation va normalement se terminer sans encombre. Un paquet de votre application préférée a été créé dans le répertoire juste au dessus :

 $ ls ..
 drwxrwxrwx  5 bdelagoutte bdelagoutte    4096 2006-09-03 12:58 ufraw-0.9.1
 -rw-r--r--  1 bdelagoutte bdelagoutte    7544 2006-09-03 12:57 ufraw_0.9.1-0ubuntu1.diff.gz
 -rw-r--r--  1 bdelagoutte bdelagoutte    449 2006-09-03 12:57 ufraw_0.9.1-0ubuntu1.dsc
 -rw-r--r--  1 bdelagoutte bdelagoutte    0 2006-09-03 12:58 ufraw_0.9.1-0ubuntu1.dsc.asc
 -rw-r–r–  1 bdelagoutte bdelagoutte    323792 2006-09-03 12:58 ufraw_0.9.1-0ubuntu1_i386.deb
 -rw-r–r–  1 bdelagoutte bdelagoutte    331171 2006-08-14 22:03 ufraw_0.9.1.orig.tar.gz

Vous pouvez l’installer directement :

 $ sudo dpkg -i ../ufraw_0.9.1-0ubuntu1_i386.deb

Ou encore l’installer avec Gdebi, en cliquant dessus.

N’hésitez pas à appliquer cette méthode à n’importe lequel des logiciels présents dans Edgy. J’ai pour ma part backporté avec succès Rhythmbox 0.9.5.

Dernière information : pour connaître la version d’un paquet dans Edgy, vous pouvez utiliser le site qui répertorie les logiciels de chacune des versions d’Ubuntu.