BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Les nouvelles du monde Slackware ainsi que les grosses annonces concernant le site seront postées ici
Seb
Messages : 188
Inscription : 22 février 2017, 19:07

BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Seb »

Chose promise, chose due, je poste ma petite bibliothèque à construire des paquets Slackware (enfin, don't panic!, ça reste le bon vieux makepkg en fin de course).

Je l'ai conçue en constatant que ce qui changeait d'un SlackBuild à un autre se réduisait bien souvent à ce qui permet de compiler le logiciel avant de l'installer dans une racine temporaire. Autant donc ne pas s'encombrer avec le reste et gagner ainsi en clarté et en facilité.

Pour le moment, je la mets à disposition ici où il sera plus pratique d'avoir d'éventuels retours. Je ne pense pas que ça affolera la bande passante, mais si ça te gêne, Thomas, vraiment pas de soucis j'irai faire ça ailleurs. ;)


Comment ça s'installe ?

On ne peut pas faire plus bête. Vous téléchargez le fichier attaché à ce post, puis vous le décompressez dans le répertoire de votre choix (ici /usr/local/lib/build) :

Code : Tout sélectionner

bzip2 -dc BUILDPKG-AAMMJJ.bz2 >/usr/local/lib/build/BUILDPKG
Le tout est de ne surtout pas changer le nom de la bibliothèque (du moins pas sans changer l'auto-référence qu'elle contient).


Comment ça s'utilise ?

D'abord, il faut créer l'utilisateur système "builder" (remplacez "12345" par le GID/UID libre de votre choix) :

Code : Tout sélectionner

echo builder:x:12345:12345:User for building:/:/bin/false >>/etc/passwd
echo builder:x:12345: >>/etc/group
Ensuite, le mieux est de commencer avec cette trame de script (ajustez /usr/lib64 si vous n'êtes pas en 64bits), qui indique toutes les options disponibles pour altérer le processus automatique (PKGDIR correspond à un dossier sécurisé généré à la volée) :

Code : Tout sélectionner

#!/bin/sh
##
# url: http://vers/le/site/du/projet
##
# NAME=        # le nom du paquet.
# VERSION=     # la version du paquet.
# ARCH=        # l'architecture du paquet.
# BUILD=       # le numéro de construction du paquet.
# SIGN=        # la signature du paquet.
# NOFIX=X      # ne pas uniformiser les permissions dans les sources.
# NOSTRIP=X    # ne pas stripper les binaires.
# NOPAGE=X     # ne pas compresser les manuels.
# GZIP=X       # générer un paquet ".tgz".
# PREPEND=X    # ajouter les liens symboliques au début du doinst.sh.
#
##
. "/usr/local/lib/build/BUILDPKG"
##

./configure --prefix=/usr \
            --disable-static \
            --libdir=/usr/lib64
make
make install DESTDIR="$PKGDIR"

mkdesc <<EODESC
XXX (...)

Du texte comme un pour slack-desc, sur 72 colonnes max.

EODESC

# FdF
Tout ce qui est situé après la ligne .../BUILDPKG sera exécuté dans les sources avec l'utilisateur "builder" (c'est pour cela qu'il est déconseillé de changer le nom de la bibliothèque).

Une fois que vous avez votre script, que je vous conseille de mettre en 744 root/root afin de limiter les bêtises, vous téléchargez les sources de votre logiciel, puis vous faites :

Code : Tout sélectionner

/usr/local/lib/build/mon-logiciel.sh /tmp/mon-logiciel-1.00
Si celui-ci n'a pas été défini en dur dans le script, le nom du paquet sera celui du script sans son extension. De même, si le champ de version est indéfini, celui-ci sera le dernier champ du nom des sources qui soit séparé par un "-" et, si rien d'autre n'est indiqué, le numéro de construction sera déduit de ce qui est installé dans le système. Il reste cependant toujours possible de redéfinir toutes les définitions utilisées sur la ligne à la suite du dossier source :

Code : Tout sélectionner

/usr/local/lib/build/mon-logiciel.sh /tmp/mon-logiciel-1.00 VERSION=1.00custom NOFIX=X
Quatre fonctions sont également automatiquement disponibles dans le script : die, qui provoque la sortie immédiate en affichant précédé d'un marqueur rouge le message donné en argument sur stderr et retourne 1 ; warn, qui affiche un simple avertissement sur stderr précédé d'un carré jaune, say, qui affiche un message sur stdout précédé d'un carré vert ; et mkdesc, qui comme indiqué ci-dessus attend sur stdin le texte d'un slack-desc qu'il formatera automatiquement (en ajoutant notamment les « nom_du_paquet: » qui vont bien). Le but des trois première fonction est de pouvoir distinguer facilement les message envoyés depuis le script de ceux émis par la compilation des logiciel.

Et si tout ce qu'il faut pour mon logiciel ne tient pas dans un script ?

Pour les patches et autre ajouts, un chemin est automatiquement défini dans la variable AUXDIR. C'est le chemin absolu du script avec une extention ".d" au lieu de ".sh". Il suffit donc de le créer et d'y mettre tout ce dont on a besoin :

Code : Tout sélectionner

mkdir /usr/local/lib/build/mon-logiciel.d
mv un.patch /usr/local/lib/build/mon-logiciel.d
Ce qui donne dans le script associé :

Code : Tout sélectionner

...
patch <"$AUXDIR/un.patch"
...

Comment changer les propriétaires à l'intérieur du paquet ?

C'est effectivement une des choses qu'on doit faire en root. Pour cela, il suffit de générer ou copier à la racine du paquet un script "pre-makepkg" qui contiendra toutes les commandes devant être effectuées en root, ex (notez que les chemins sont relatifs) :

Code : Tout sélectionner

chown service.service var/lib/service \
                      var/log/service.log
C'est en fait le même principe que le doinst.sh, mais appliqué à la racine d'un paquet. Une fois le script exécuté, celui-ci est supprimé automatiquement.

Voili, voilou. Ce n'est rien de bien miraculeux, mais c'est une interface que j'aime bien. ;)
Pièces jointes
BUILDPKG-180701.bz2
(2.41 Kio) Téléchargé 338 fois
Dernière modification par Seb le 01 juillet 2018, 18:17, modifié 1 fois.
Vigen

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Vigen »

Merci pour ton travail !! :)

Et hop !! En favori !! ;)

Merci.
Avatar de l’utilisateur
Incognito
Messages : 32
Inscription : 16 juillet 2017, 14:14

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Incognito »

Wooooo ! Ca va m'être bien utile je pense, je vais tester ça sur ma tour qui est aussi sur Slackware, vu comment j'ai galéré pour compiler LGI avec Lua 5.3 et Awesome 4.1.... :mrgreen:
Image
Seb
Messages : 188
Inscription : 22 février 2017, 19:07

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Seb »

Attention, il n'y a aucune magie dans le biniou. Ça laisse juste dans ton script ce qui est particulier au paquet en t'économisant tout ce qui est correction des permissions, compression de manuels, stripping des binaires, … on va dire 50-80% d'un SlackBuild classique. Les Makefiles qui n'en font qu'à leur tête, hélas, ils continuent. ;)
Avatar de l’utilisateur
Incognito
Messages : 32
Inscription : 16 juillet 2017, 14:14

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Incognito »

J'avais passé une semaine sur GitHub à aider un mec sous Gentoo à résoudre le même problème tout ça à cause d'un Makefile qui faisait la gueule, je suppose qu'on finit par prendre l'habitude... :P
Image
Seb
Messages : 188
Inscription : 22 février 2017, 19:07

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Seb »

Mise à jour :
  • correctif: déduire la version du paquet correctement quand une option est définie depuis la ligne de commande ;
  • ajout: supprimer automatiquement les libtool archives, comme il est désormais l'usage sur Slackware (cf. ChangeLog du 19 avril 2018). Pensez à commenter les deux nouvelles lignes concernées (l. 140-141), si vous pensez avoir des paquets qui les utilisent et ne voulez pas les reconstruire dès maintenant (tôt ou tard, il faudra le faire cependant).
À la réflexion, je me demande si ce fil n'aurait pas plus sa place dans les annonces, Thomas. :)
Dernière modification par Seb le 01 juillet 2018, 18:39, modifié 1 fois.
Avatar de l’utilisateur
Thomas
Administrateur
Messages : 430
Inscription : 08 janvier 2017, 07:14
Localisation : Anizy-le-Grand
Contact :

Re: BUILDPKG ou « Chérie, j'ai rétréci les SlackBuilds »

Message par Thomas »

Seb a écrit : 01 juillet 2018, 18:32 À la réflexion, je me demande si ce fil n'aurait pas plus sa place dans les annonces, Thomas. :)
Ça me va :)
Répondre