Création de paquets avec ArchLinux
Formation
En Ligne
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Description
-
Typologie
Formation
-
Méthodologie
En ligne
Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.
Les Avis
Le programme
Vous avez envie de créer le paquet ArchLinux pour votre super jeu en 3D ou encore pour votre éditeur de texte révolutionnaire mais vous ne savez pas par où commencer ?
Pour suivre ce tutoriel, il vous faut évidemment une distribution ArchLinux fonctionnelle. Si vous voulez installer ce système, vous pouvez vous référer à la page « Installation de base » du wiki français. Il faut aussi une base en bash (variables, tableaux, conditions et fonctions sont utilisés dans ce tutoriel) ainsi qu'une connaissance des commandes courantes.
Si c'est bon, suivez le guide...
PKGBUILD ou la base du paquetTout d'abord, sachez que PKGBUILD est un simple fichier texte qui va expliquer comment se déroule la création du paquet.
Nous allons donc voir sa syntaxe et faire une approche de paquet.
Pour comprendre la syntaxe de ce fichier, je vous propose un petit PKGBUILD classique pour un programme fictif nommé Palne :
# Maintainer: Adrien Perkele <perkele@domain.tld> # Contributor: Adrien Perkele <perkele@domain.tld> pkgname=palne pkgver=0.99_10 pkgrel=1 pkgdesc="Palne, le jeu super cool de Perkele" arch=(any) url="http://www.palne.net" license=('BSD') groups= provides= depends=('scengine>=1.2') optdepends=('unelib: Pour rajouter une fonctionnalité au programme !') makedepends= conflicts=('kipalne') replaces=('palneuh') backup=('etc/palne/palne.conf') install= source=(http://www.palne.net/download/$pkgname-$pkgver.tar.gz) md5sums=('40972633cea6c8d38ff26dade3eec51e') build() { cd $srcdir/$pkgname-$pkgver ./configure --prefix=/usr make || return 1 make prefix=$pkgdir/usr install }Évidemment, toutes ces variables ne vous disent peut-être pas grand-chose, je vous propose donc ce petit tableau :
Nom
Description
# Maintainer
La personne qui se charge officiellement de la maintenance du paquet (format Nom <mail@domain.tld>)
# Contributor
La personne qui est à l'origine du paquet (même format)
pkgname
Nom du paquet
pkgver
Version du programme ( chiffres et lettres uniquement, pour séparer on utilise des underscores (_) ).
pkgrel
Valeur spécifique à ArchLinux, elle correspond à la version du paquet (pour chaque version d'un PKGBUILD d'un même programme de la même version, on met une valeur différente, en commençant par 1). Elle gère entre autres les paquets périmés.
pkgdesc
Courte description du contenu du paquet qui sera affichée dans les détails.
arch
L'architecture où la compilation du programme est compatible (i686 ou x86_64 ou any pour les deux)
url
Site du programme
license
Licence du programme (lire la partie « Le problème des licences » pour les valeurs)
groups
Si le paquet appartient à un groupe de paquets, on le précise (exemple kdebase appartient au groupe kde)
provides
Si notre paquet fournit un autre logiciel, on le précise
depends
Les dépendances du programme (lire la partie « Les dépendances » pour savoir comment ça marche)
optdepends
Paquet optionnel qui rajoute en général des fonctionnalités au programme (exemple, pacman-color rajoute de la couleur dans pacman).
makedepends
Ce sont aussi des dépendances, mais celles que la compilation nécessite (pareil, voir la partie « Les dépendances »)
conflicts
Les paquets qui empêchent le fonctionnement de notre programme
replaces
Précise les paquets que notre programme remplace (exemple, ancienne version du programme qui porte un autre nom)
backup
Les fichiers qui seront sauvegardés à la désinstallation
install
Précise un fichier d'installation (voir la partie « Les fichiers d'installation »)
source
Le lien de l'archive contenant les sources
md5sums
Permet de vérifier l'intégralité de l'archive en fournissant son empreinte MD5
build()
Fonction qui nous permettra de préparer le paquet (compilation ainsi que placement dans le paquet final)
Les dépendancesPour la variable depends, on prend un tableau avec la liste des dépendances sous la forme « '[nom du paquet archlinux]' ». On peut aussi préciser une version avec un comparatif (qui je rappelle sont =, >, <,<= ou encore >=) suivi d'un numéro de version (par exemple « 'python>=2.6' »).
Le problème des licencesLa variable licence est assez particulière, en effet il faut respecter une syntaxe et ne pas balancer le nom d'une licence comme ça.
Il y a plusieurs cas selon les licences, je vais essayer de vous les détailler un maximum.
Tout d'abord, vérifiez si un dossier du nom de la licence existe dans /usr/share/licenses/common/ :
Si votre licence (elle est « common ») s'y trouve, il suffit d'écrire le nom du répertoire dans la variable license (exemple: license=('GPL')) ;
Si votre licence est MIT, BSD, zlib/libpng ou encore Python, vous devrez créer un fichier nommé généralement COPYING (le nom n'est pas important) contenant le texte de la licence dans /usr/share/licenses/$pkgname. Vous verrez comment faire cela dans la partie sur la fonction build(). Pour l'utiliser, il suffira de faire comme pour les licences common, un exemple se trouve dans mon fichier PKGBUILD ;
Dans le cas d'une licence personnelle, vous allez aussi créer votre fichier COPYING. Quant à l'utilisation dans le PKGBUILD, vous allez utiliser la syntaxe « license=('custom:Nom de la licence') ;
Enfin, dernier cas, si votre paquet est couvert par plusieurs licences, vous aurez remarqué que license est un tableau : chaque valeur est une licence (exemple : license=('GPL' 'custom:crave' 'BSD')).
Un petit mot sur le md5sums : pour le calculer, il suffit d'utiliser la commande md5sum ainsi :
md5sum monprogramme-1.1_1.tar.gz | cut -d ' ' -f 1C'est le résultat de cette commande que vous allez mettre dans la variable md5sums.
La fonction build()Maintenant, nous rentrons dans le vif du sujet. Jusqu'ici, nous avons fait de la théorie sur la création et nous savons récupérer les sources, vérifier qu'elles sont complètes, mais nous ne savons toujours pas créer le paquet !
C'est la fonction build() qui va se charger de cette tâche.
En général, l'ordre des commandes dans cette fonction est celui-ci :
Fonction build On se place dans le répertoire contenant les sources téléchargées On compile les sources On place dans le répertoire qui va être le paquet tout ce qu'il nous faudra Fin de la fonctionIl faut savoir qu'un paquet est une simple archive qui contient l'architecture du système. Le gestionnaire s'occupera donc ainsi (en partie) de décompresser l'archive à la racine.
Pendant la création de notre fonction, nous allons traiter un dossier nommé pkg, qui sera compressé à l'exécution du PKGBUILD.
Comme exemple, nous allons maintenant imaginer que notre archive tar.gz téléchargée contient ceci :
Archive tar.gz ---- bin/ ---- doc/ -------- palne.6.gz -------- index.html ---- src/ -------- main.c -------- fonctions.c -------- fonctions.h ---- data/ -------- COPYING -------- images/ ------------ icone.png ------------ splash.png ------------ gagne.png ------------ perdu.png -------- conf/ ------------ palne.cfg ---- MakefileNous allons maintenant créer la fonction build() qui va :
compiler les sources ;
mettre le man dans le répertoire qui correspond ;
mettre la doc dans le répertoire qui correspond ;
mettre l'exécutable dans /usr/bin ;
mettre la configuration dans /etc ;
placer la licence dans /usr/share/licenses/ ;
et enfin mettre les images dans /usr/share/.
Tout d'abord, on se place dans le répertoire des sources :
build() { cd $srcdir/$pkgnameLa variable srcdir contient le répertoire où l'archive a été décompressée.
Attention néanmoins, les fichiers décompressés sont dans un répertoire du même nom que le paquet.
Nous allons donc maintenant compiler les sources de notre programme en exécutant simplement le Makefile :
make || return 1Comme vous le constatez, ma commande de compilation est suivie d'un || return 1 : cela permet de dire que si la commande a échoué, on arrête la création du paquet.
Il faudra placer ceci après chaque commande importante pour le paquet.
Passons maintenant à la création de l'architecture du paquet :
mkdir -p $pkgdir/usr/bin/ mkdir -p $pkgdir/usr/share/palne/ mkdir -p $pkgdir/usr/share/doc/palne/ mkdir -p $pkgdir/usr/man/man6/ mkdir -p $pkgdir/etc/palne/ mkdir -p $pkgdir/usr/share/licenses/palne/À noter que la variable pkgdir correspond au dossier pkg dont je vous avais parlé plus tôt.
On va maintenant pouvoir passer à la copie des fichiers :
À noter que le chmod est obligatoire si l'on veut pouvoir exécuter le programme.
Et bonne nouvelle, nous avons fini notre fonction build() !
Néanmoins, il ne faut pas oublier de la refermer :
Voici donc un petit récapitulatif de la fonction qui correspond aux besoins de mon programme Palne :
build() { cd $srcdir/$pkgname make || return 1 mkdir -p $pkgdir/usr/bin/ mkdir -p $pkgdir/usr/share/palne/ mkdir -p $pkgdir/usr/share/doc/palne/ mkdir -p $pkgdir/usr/man/man6/ mkdir -p $pkgdir/etc/palne/ mkdir -p $pkgdir/usr/share/licenses/palne/ cp bin/palne $pkgdir/usr/bin/ chmod +x $pkgdir/usr/bin cp doc/palne.6.gz $pkgdir/usr/man/man6/ cp doc/index.html $pkgdir/usr/share/doc/palne/ cp -r data/images/ $pkgdir/usr/share/palne/images/ cp data/conf/palne.cfg $pkgdir/etc/palne/ cp data/COPYING $pkgdir/usr/share/licenses/palne/ } Créer le paquet et le redistribuerCréationBon, nous savons créer un PKGBUILD basique, mais nous ne savons toujours pas comment obtenir le paquet !
En fait, vous allez rire mais le PKGBUILD, c'était une blague de mon invention et il ne sert à rien la création d'un paquet se limite à une commande.
Tout d'abord je vous recommande de mettre le PKGBUILD dans un répertoire créé à cet effet.
Maintenant, l'heure de vérité, lancez cette commande :
makepkgSi tout se passe bien, il vous posera quelques questions, et vous retournerez dans votre prompt.
Mais mais, que vois-je ? Notre répertoire a été rempli !
Eh bien oui, ce fameux tar.gz est votre paquet. Vous ne me croyez pas ? Alors lancez l'installation avec yaourt -U nom-version.tar.gz puis testez votre programme avec palne.
RedistributionVous pouvez vous contenter de donner votre tar.gz au public via votre site internet ou alors la mettre dans les dépôts AUR d'ArchLinux.
C'est cette méthode que je vais vous présenter.
Tout d'abord, il faut vous inscrire sur le site officiel de AUR : http://aur.archlinux.org/account.php
Une fois inscrit, connectez-vous et choisissez « submit » (ou « soumettre » en français) dans le menu en haut.
Vous aurez deux champs : Package Category et Upload package file.
Pour la liste déroulante, vous mettrez la catégorie de votre paquet (dans le cas de mon exemple, ce serait un jeu).
Pour le fichier à sélectionner, nous allons le créer tout de suite...
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Création de paquets avec ArchLinux