Utilisateur:Sbrunner/Création de paquets Debian

Un article de Wikipédia, l'encyclopédie libre.

Le but de cet article est d'aller plus loin dans les possibilités fournies par Debian pour une bonne gestion des paquets. La distribution utilisée est Ubuntu d'où l'utilisation de sudo.

Sommaire

[modifier] Prérequis

Avant de commencer il faut déjà être familier avec :

[modifier] Miroir

Si on a plusieurs ordinateurs sur le même réseau il est conseillé, pour économiser du temps et de la bande passante, de mettre en place un miroir ou un cache.

Un miroir est une copie intégrale d'un dépôt.

Un cache (apt-cacher) garde une copie de chaque paquet téléchargé pour ne pas le télécharger plusieurs fois.

Je vous conseille de voir l'article d'Andesi : Mise en place d'un miroir de paquets.

[modifier] Création de fichier .deb

La gestion des paquets de Debian est géniale (un des avantages : pouvoir désinstaller le paquet avec un simple sudo apt-get remove paquet), mais il se peut que l'on ait besoin d'un programme qui n'existe pas encore en .deb (ou pas adapté a Ubuntu).

Remarque : bien que je ne ne l'aie pas fait des dizaines de fois, ce sont des méthodes que j'ai au moins testées une fois.

[modifier] Compilation depuis deb-src

Il se peut que le paquet existe uniquement en format source comme c’est le cas pour Debian Mentor par exemple (http://mentors.debian.net/).

Pour cela il faut simplement ajouter le dépôt deb-src.

Installer les paquets nécessaires pour la compilation (il est possible que ce paquet dépende d'un paquet disponible uniquement en source, il faut donc le télécharger, le compiler et l'installer avant).

sudo apt-get build-dep paquet

Il se peut que le paquet dépende d'un autre qui est disponible uniquement en source, il faut donc le compiler en premier !

Télécharger les sources et les compiler (attention, des sources sont téléchargées et le fichier .deb est créé dans le répertoire courant). Remarque : le fakeroot n'est pas toujours nécessaire.

fakeroot apt-get -b source package

ou

apt-get source package
cd package-version
dpkg-buildpackage -rfakeroot -us -uc

Il ne reste plus qu'à l'installer

sudo dpkg -i paquet.deb

[modifier] Création officielle

Voici la documentation de Debian : Guide du nouveau responsable Debian.

Lightbulb Howto make debian standards debs from scratch - How to make a Debian package without using a helper

[modifier] Mise à jour d'un paquet existant

Installer le paquet nécessaire pour la compilation

sudo apt-get build-dep paquet

Télécharger les sources sans les compiler (attention des sources sont téléchargées dans le répertoire courant)

apt-get source package

Renommer le répertoire paquet-ancienneversion en paquet-nouvelleversion

Décompresser les nouvelles sources dans le répertoire renommé lors de l'opération précédente (sans le répertoire principal généralement présent).

Modifier le fichier debian/changelog en ajoutant un bloc, attention la syntaxe est importante (création de la date : 822-date). Vous pouvez aussi utiliser la commande dch (dch -v numéro de version).

Compiler en exécutant depuis ce même répertoire (paquet-version) :

dpkg-buildpackage -rfakeroot

Installer le nouveau paquet

dpkg -i ../paquet_version_architecture.deb

[modifier] Depuis les sources

[modifier] Préparation du système

Installation des paquets nécessaires

sudo apt-get install auto-apt checkinstall build-essential

Mise à jour des données

sudo auto-apt update
sudo auto-apt updatedb
sudo auto-apt update-local

[modifier] Création du paquet

Installation des paquets nécessaires à la compilation

auto-apt -xy run ./configure

Compilation

./configure
make

Installation et création du fichier .deb

sudo checkinstall -y

Changement des droits ;-)

sudo chown user:groupe paquet.deb

[modifier] Conversion d'un .rpm

Installer alien

sudo apt-get alien

Conversion du paquet

alien --to-deb paquet.rpm

[modifier] Création d'un "Dummy Package"

Repris de l'article Install a dummy package to satisfy dependencies on debian

Dans mon cas je voulais installer un paquet dépendant de kernel-image-... et sous Ubuntu le kernel s'appelle linux image j'ai donc créé un paquet "dummy" pour résoudre ce problème.

Commençons par installer equivs

$ sudo apt-get install equivs

Puis créons une description du paquet : kernel.ctl

Section: base
Package: kernel-image-2.6.12-10-686-dummy
Depends: linux-image-2.6.12-10-686
Provides: kernel-image-2.6.12-10-686
Description: kernel-image-2.6.12-10-686 dummy package

Création du paquet :

$ equivs-build kernel.ctl
dh_testdir
touch build-stamp
dh_testdir
dh_testroot
dh_clean -k
dh_clean: Compatibility levels before 3 are deprecated.
# Add here commands to install the package into debian/tmp.
touch install-stamp
dh_testdir
dh_testroot
dh_installdocs
dh_installdocs: Compatibility levels before 3 are deprecated.
dh_installchangelogs
dh_installchangelogs: Compatibility levels before 3 are deprecated.
dh_compress
dh_compress: Compatibility levels before 3 are deprecated.
dh_fixperms
dh_fixperms: Compatibility levels before 3 are deprecated.
dh_installdeb
dh_installdeb: Compatibility levels before 3 are deprecated.
dh_gencontrol
dh_gencontrol: Compatibility levels before 3 are deprecated.
dh_md5sums
dh_md5sums: Compatibility levels before 3 are deprecated.
dh_builddeb
dh_builddeb: Compatibility levels before 3 are deprecated.
dpkg-deb : construction du paquet « kernel-image-2.6.12-10-686-dummy » dans  « ../kernel-image-2.6.12-10-686-dummy_1.0_all.deb ».

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

Maintenant installons le paquet :

$ sudo dpkg -i kernel-image-2.6.12-10-686-dummy_1.0_all.deb

Plus d'information sur http://www.us.debian.org/doc/manuals/apt-howto/ch-helpers.en.html#s-equivs/

[modifier] Création d'un paquet depuis un binaire

Préparation du système

sudo apt-get install checkinstall

Installation du programme avec création du paquet

sudo checkinstall -y --pkgname=paquet --pkgversion=version /path/installer

Exemple

sudo checkinstall -y --pkgname=et --pkgversion=2.6 /home/sbrunner/Games/et-linux-2.60.x86.run

Remarque : Normalement on n'est pas obligé de spécifier le nom du paquet et le N° de version, mais pour cela il faut que l'installer se trouve dans un répertoire nommé

/.../paquet-version/

si se n'est pas le cas checkinstall, ne pouvant trouver le nom de paquet ou le N° de version, ne crée pas de fichier .deb.

[modifier] Autre

[modifier] Java-sun

Pour créer un paquet des JDK et des JRE de Sun il existe une méthode simple.

[modifier] Installation du system
sudo apt-get update
sudo apt-get install java-package java-common fakeroot

[modifier] Création du paquet

Télécharger le fichier d'installation depuis java.sun.com

Création du paquet

fakeroot make-jpkg installer.bin

Installation

sudo dpkg -i paquet.deb

Configuration de la machine virtuelle par défaut

sudo update-alternatives --config java

[modifier] PBuilder

Créer les environnements pour Ubuntu et Debian :

pbuilder-dist sid create
pbuilder-dist hardy create

Mise à jours

pbuilder-dist sid update
pbuilder-dist hardy update

Build

pbuilder-dist sid build fichier.sdc
pbuilder-dist hardy build fichier.sdc

[modifier] Création de dépôt

Pour une création traditionnelle d'un dépôt je vous conseille l'article de Debian Addict : Créer un dépôt Debian

[modifier] Pour une création toute simple

Copier les fichier .deb dans un répertoire, pour l'exemple ./binary.

Créer le dépôt avec la commande :

cd binary
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Ajouter le dépôt dans votre source.list :

deb http://server/sous-repertoire/binary ./