pkgsrc (4/6)
Bienvenue à nouveau sur ce blog et sur mes prises de notes sur les vidéos d’Imil. Prêts pour ce nouveau chapitre ? Après notre petit jeu de rôles des épisodes précédents, nous allons maintenant nous lancer dans le packaging d’une véritable application Python sous son haut patronat. Comme toujours, vous pouvez consulter la vidéo [ici]
Enfin … ici … ici … Dès qu’elle sera disponible sur YouTube ! ^^’
Notre objectif ? Archey 4
Il existe tout un tas de petits programmes permettant d’afficher fièrement son système devant ses copains. Après tout, nous passons de longues heures à ajuster tout ça aux petit oignons, alors autant le montrer avec classe non ? Parmi ces outils, on peut citer les deux plus courants : neofetch et screenfetch .
En voici un petit exemple :
(Tiens ? Il est pourri l’affichage de mon shell … faudra que je regarde pourquoi !)
L’appli que nous allons commencer à packager aujourd’hui est un autre de ces outils, assez complet :
Il s’agit de archey4, qui est disponible sur Github
(Source: Github du projet)
Comme vous pouvez le voir, l’appli indique quelques infos particulières : Température, IP, etc.
Mais, et ce sera l’occasion d’apprendre comment pkgsrc le gère, elle est écrite en Python.
Préparons notre package :
Puisque nous ne sommes pas (encore) habilités à créer directement des packages officiels du système FreeBSD, nous allons utiliser pkgsrc-wip comme expliqué dans les épisodes précédents.
Comment ? Vous ne savez pas ce qu’est wip ??? Filez donc lire l’épisode 1 !
Bon, je vous ré-explique en quelques mots, mais que je nous y reprenne plus ! Wip, c’est un repository permettant aux gens de faire des packages et de les rendre disponibles à tout le monde. L’accès y est plus “simple” dans le sens où il suffit d’y montrer patte blanche auprès de Thomas Klausner pour pouvoir y avoir accès et publier votre package.
Avant de se lancer dans un package, il est de bon ton de vérifier que celui-ci n’existe pas déjà ! Cela évite du travail inutile et de la frustration. On commence donc par effectuer une recherche avec pkgfind :
Pas de résultat ? Parfait. Lançons-nous !
Comme la dernière fois, nous allons commencer par installer wip via git, et créer le dossier pour notre package :
Une petite précision ici : On considère que le nom du package est archey4 … Et donc que le chiffre “4” fait partie du nom du package ! Ce n’est pas un numéro de version, sinon nous ne l’aurions pas mis dans le nom du répertoire.
Et, tout comme les fois précédentes, on utilise url2pkg pour créer le template de notre projet :
Une petite chose importante à ce stade. Lorsqu’on package un logiciel, on ne se base en général jamais sur la branche “main” ou “master”. Et pour cause : celle-ci change beaucoup trop souvent ! On se base sur des versions que l’on peut identifier : ici les tags dans le cas de Github.
Voyons voir à quoi ressemble le Makefile généré par url2pkg :
Ce Makefile est légèrement différent de celui que nous avions obtenu lorsque nous packagions le désormais célèbre truefalse.
Tout d’abord, on peut noter que pkgsrc a détecté tout seul que nous packagions une appli python, et s’est adapté. C’est remarquablement bien fait : il a lu le setup.py du soft et a rempli tout seul certains champs, comme la licence (LICENSE) ou les dépendances.
Ensuite, pkgsrc a également pris en compte le fait que cette url pointait vers le site de Github. Etant donné que c’est un site “bien connu”, pkgsrc utilise des variables pour ce cas particulier telles que le MASTER_SITE_GITHUB. C’est plutôt bien pensé !
On remplit dès maintenant les champs simples : CATEGORIES, MAINTAINER, HOMEPAGE, LICENSE … pas de grande révolution pour le moment. C’est, pour être franc, une des choses que j’apprécie beaucoup sur cet outil que je découvre avec vous : tout à l’air bien pensé, bien intégré, et ça limite beaucoup nos difficultés !
Petit rappel : pour les licences, on peut en trouver la liste dans “/usr/pkgsrc/mk/licences.mk”. Il ne faut pas mettre n’importe quoi ! C’est normalisé !
Voici à quoi ressemble désormais notre Makefile :
La récupération des paquets, lorsque l’on fait un make fetch, se fait par défaut à partir de la chaîne :
Par défaut, le suffixe est “.tar.gz” : encore une fois, pkgsrc a fait du bon boulot !
Penchons nous maintenant plus spécifiquement sur les aspects “python” de la chose …
La gestion des paquets Python sous pkgsrc
Gestion des versions de python
Pkgsrc permet de faire cohabiter différentes versions de python dans notre OS, et donc différentes versions d’un même soft pour chacune de ces versions.
Ceci est réalisé grâce au nom du paquet (le PKGNAME) composé de la façon suivante :
Si, par exemple, nous disposons des versions 2.7, 3.2 et 3.9 de Python, ce paquet pourra être installé en tant que :
- py27-archey4
- py32-archey4
- py39-archey4
Et cela s’appliquera, bien entendu, à toutes les dépendances nécessaires !
Pour que les choses se fassent de la façon correcte, nous allons donc renommer notre répertoire et suivre la convention :
Voilà ! C’est mieux non ?
Les dépendances du package
Concentrons nous plus spécifiquement sur les dépendances de notre package. Elles sont présentes dans les deux lignes suivantes du Makefile et ont été extraites du setup.py :
Avant toute chose, nous vérifions que ces packages python existent déjà dans pkgsrc, sans quoi il nous faudra les packager elles-aussi ! ( Tu la sens venir la grosse galère ??? )
La main un peu tremblante, nous utilisons pkgfind :
Bon, pour cette fois-ci, tout ira bien ! Ceci dit, si cela n’avait pas été le cas, cela n’aurait pas été un drame … Juste un peu plus de travail !
Nous pouvons donc modifier notre Makefile une dernière fois pour ajouter les dépendances :
C’est quand même terriblement chouette de se dire que nous n’avons pas besoin de gérer les versions de python non ?
Les finitions
Deux dernière choses avant de nous lancer. La première concerne cette ligne :
Cette variable sert habituellement à préciser quel compilateur doit être utilisé pour un package. Les choix sont les suivants :
Ici, pas besoin ! On enlève la ligne !
La seconde chose concerne les includes utilisés en fin de Makefile. Lorsqu’un projet utilise setup.py (les setup-tools et les “eggs”), on inclue egg.mk comme indiqué dans la documentation de pkgsrc. Comme vous pouvez le voir, url2pkg l’a déjà fait pour nous.
Mais nous pouvons également inclure ../../lang/python/application.mk !
Comme il est assez court, en voici le contenu :
Ce petit fichier permet de remplacer dans tous les fichiers python le chemin vers l’interpréteur (probablement codé en dur ^^’).
Là, j’avoue que ça m’a scotché. C’est très très bien pensé !!!
Et c’est parti !!!
Il est maintenant temps de nous lancer. La version actuelle de notre Makefile est la suivante :
On commence par vérifier que tout est bien propre : on ne sait jamais.
La version de python est correctement indiquée, tout cela s’annonce plutôt bien ! La version par défaut de python utilisée sur ce système est la version 3.9. Nous pourrions, si nous le voulions, la modifier en ajoutant au fichier mk.conf la ligne :
Comme la semaine dernière, nous allons simuler une installation :
Il s’agit là d’un petit problème de chemin : Nous allons corriger cela en renseignant la variable WRKSRC :
Et on y retourne … Sans oublier de remettre à jour PLIST !
Tout compile et l’installation a fonctionné !
Test et conclusion :
Il est maintenant temps de lancer archey et de recevoir la juste récompense pour notre travail :
Mmmh … L’application fonctionne, mais elle n’est visiblement pas faite pour NetBSD !
dev.cpu.0.temperature … Pas de cela ici mon bon monsieur ! C’est un NetBSD ici, pas un FreeBSD !
Oui, c’est frustrant, je suis bien d’accord. Alors rendez-vous la semaine prochaine pour la suite de nos aventures et le dénouement de ce cliffhanger diabolique …
A bientôt,
Rancune.