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 ./