Utilisateur:Sbrunner/Création de paquets Debian
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.
Prérequis
modifierAvant de commencer il faut déjà être familier avec :
Miroir
modifierSi 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.
Création de fichier .deb
modifierLa 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.
Compilation depuis deb-src
modifierIl 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
Création officielle
modifierVoici 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
Mise à jour d'un paquet existant
modifierInstaller 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
Depuis les sources
modifierPréparation du système
modifierInstallation 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
Création du paquet
modifierInstallation 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
Conversion d'un .rpm
modifierInstaller alien
sudo apt-get install alien
Conversion du paquet
alien --to-deb paquet.rpm
Création d'un "Dummy Package"
modifierRepris 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/
Création d'un paquet depuis un binaire
modifierPré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.
Autre
modifierJava-sun
modifierPour créer un paquet des JDK et des JRE de Sun il existe une méthode simple.
Installation du system
modifiersudo apt-get update sudo apt-get install java-package java-common fakeroot
Création du paquet
modifierTé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
PBuilder
modifierCré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
Création de dépôt
modifierPour une création traditionnelle d'un dépôt je vous conseille l'article de Debian Addict : Créer un dépôt Debian
Pour une création toute simple
modifierCopier 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 ./