Bridouz : Solbuild et la création de package
mercredi 14 décembre 2016 à 01:00Il y a quelques temps j’avais déjà pondu un billet sur le packaging pour la distribution Solus. Hors il y a quelques jours l’équipe a remplacé le vieillissant Evobuild par Solbuild un outils plus facile à utiliser. Faisont un rapide tour du nouveau joujoux et des petites astuces que j’ai engrengé depuis le premier billet.
Les prérequis
- Tout d’abord il vous faut créer un fichier
packager
dans le répertoire~/.solus
[Packager]
Name=Votre Nom
Email=votre.adresse@email
- Ensuite il faut installer les outils nécessaires à la création de paquets ainsi que le paquet
git
:eopkg it -c system.devel && eopkg it git
Solbuild
Installer Solbuild
- Pour les utilisateurs de Solus
sudo eopkg up
sudo eopkg it solbuild
# Si jamais vous souhaitez utiliser le dépôt unstable
sudo eopkg it solbuild-config-unstable
- Pour les autres distributions
git clone https://github.com/solus-project/solbuild.git
cd solbuild
make ensure_modules
make
sudo make install
Initialiser Solbuild
Solbuild permet donc d fonctionner avec deux images servant de bases :
- unstable-x86_64
ou main-x86_64
La commande sudo solbuild init -u
permet d’initialiser Solbuild, il faut cependant rajouter l’image que vous souhaitez utiliser.
Le drapeau -u
permet à l’image de se mettre à jour automatiquement.
Et voilà Solbuild est installé maintenant il ne reste plus qu’à créer des paquets.
Common
Rapatrier common
Maintenant installons common, une suite de scripts qui permet de plus facilement gérer, construire et vérifier les paquets crées. Dans le dossier qui vous servira de racine pour créer vos dossiers de paquets il faut lancer la commande suivante pour récuperer common : git clone https://git.solus-project.com/common
Paramétrer common
Il faut ensuite paramétrer common pour qu’il puisse être utilisé dans un répertoire de cosntruction et pour cela il faut créer des symlinks de fichiers du dossier common vers la racine du dossier build :
ln -sv common/Makefile.common .
ln -sv common/Makefile.toplevel Makefile
ln -sv common/Makefile.iso .
- Symlinks : Un lien symbolique (en anglais soft link, symbolic link ou symlink par troncation) est un alias d’un fichier ordinaire ou d’un répertoire.
- ln -sv : La commande Unix ln permet de réaliser un lien avec un autre fichier ou répertoire. Ce lien peut soit être matériel, soit être symbolique.
Ensuite pour permettre d’appeler la commande make depuis le dossier du paquet à construire il faut lancer la commande suivante (depuis le dossier du paquet) :
echo "include ../Makefile.common" > Makefile
Maintenant la structure du dossier Solbuild doit ressembler à cela :
| common/
| your-package/
| - Makefile
| Makefile.common
| Makefile.toplevel
| Makefile.iso
Créer des paquets
Structure du fichier package.yml
name : ## Nom du paquet
version : ## Numéro de version
release : ## Numéro de release actuelle (incrémentation +1 à chaque MAJ)
source : ## Source pour télécharger l'archive
license : ## Licence du logiciel
component : ## Groupe du paquet, liste dispo via la commande *eopkg lc*
summary : ## Résumé du logiciel
description : ## Plus ample description
builddeps : ## Dépendances pour construire, faire fonctionner le logiciel
setup : ## Lancer la configuration si nécessaire
build : ## lancer la construction du paquet
install : ## Emplacement d'installation du paquet
Construire un package.yml
Il est possible d’automatiser la création du fichier package.yml en utilisant un outil appelé yauto disponible avec common. Pour cela il faut utiliser la commande suivante :
common/Scripts/yauto.py
Cela permet de générer, de façon semi-automatique, le fichier package.yml. le script calcule la somme sha256 et, dans certains cas, ajoute également les commandes nécessaires pour les parties setup, build ou install.
Builddeps
certaines librairies et autres embarquent des noms pkgconfig, ce sont ces noms dont nous aurons besoin lors du build pour créer le paquet :
- par exemple gtk+-3.0 est contenu dans libgtk-3-devel, quand le build commence il recherche le nom standard de gtk+-3.0 et ça lui dit comment build against gtk3. (ou regarder pour trouver les librairies et les fichiers header, et quelles librairies utiliser)
en gros l’avantage ici c’est que le build system retrouve tout seul comme un grand ce qu’il faut.
- attention cependant tous les paquets ne contiennent pas des pkgconfigs, on peut le vérifier en tapant eopkg info libgtk-3-devel
par exemple et la réponse sera >Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) etc
- Pour les paquets ne disposant pas de pkgconfig, il suffit de lister le paquet, par exemple pour python-mpd : - python-mpd
Les version de paquet avec le suffixe -devel contiennent les fichiers nécessaires pour construire un paquet comme les headers, des fichiers .so, .pc etc…
une fois le fichier package.yml correctement documenté il suffit de lancer la commande make à la racine du dossier comprenant votre fichier package.yml et le build commence. Lors du build, le package .eopkg est crée ainsi qu’un package nommé pspec_x86_64.xml. Ce dernier est un fichier résumant le contenu du package.
Soumettre des paquets
Soumettre des paquets directement dans les dépots Solus est impossible pour un simple utilisateur, et d’un point de vue sécurité c’est tant mieux. Alors il est tout de même possible de soumettre un patch aux devs (via IRC ou sur le futur bugtracker) pour qu’ils puissent l’appliquer:
La démarche pour le patch :
git init ## Création du dépôt git
git status ## Vérifier l'état du dépôt, rien pour le moment
git add ## Ajouter Makefile, package.yml et pspec_x86_64.xml
git commit -m "comment" ## Créer un commit avec un messsage
git log ## Vérifier que le commit a bien été crée
git format-patch -1 ## Création du patch
Pour la soumission, il suffit par la suite de se rendre sur le devtracker de Solus pour soumettre un patch (il faut d’abord soumettre une demande de paquet qui, si acceptée conduira à une soumission de patch).
Les petits trucs
Le temps des macros
Avec son sytème ypkg
Solus a eu la bonne idée d’inclure un système de macros au sein du fichier package.yml ce qui uniformise la syntaxe globale pour l’empaquetage.
Par exemple une macro %libdir%
éxiste et remplace les longs arguments du type /usr/lib/*
ou /usr/lib64/*
, ainsi le paquet installera les fichiers au bon endroit pour que la distribution sache où aller les chercher.
Mes aliases
alias mkf='echo "include ../Makefile.common" > Makefile'
alias yauto='/home/justin/Solbuild/common/Scripts/yauto.py'
- Le premier alias permet de créer un fichier Makefile essentiel pour lancer Solbuild et les outils nécessaires à la création de paquet .eopkg.
- Yauto quant à lui est un outil qui couplé avec l’URL d’un paquet, de rappatrier les informations du paquet en questions ainsi que son hash sha256.
Comparé à l’ancien outil Solbuild est vraiment plus intuitif,plus simple à prendre en main. Pour ma part je continue d’apprendre à empaqueter proprement, ce n’est pas encore gagné mais l’expérience est plaisante et le support sur IRC est de qualité.
Original post of Bridouz.Votez pour ce billet sur Planet Libre.