PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Bridouz : Solbuild et la création de package

mercredi 14 décembre 2016 à 01:00

Il 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

[Packager]
Name=Votre Nom
Email=votre.adresse@email

Solbuild

Installer Solbuild

sudo eopkg up
sudo eopkg it solbuild

# Si jamais vous souhaitez utiliser le dépôt unstable
sudo eopkg it solbuild-config-unstable
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 .

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'

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

Gravatar de Bridouz
Original post of Bridouz.Votez pour ce billet sur Planet Libre.