Arch build system (Français)
Le système de construction d'Arch (Arch Build System) est un système de type "port" pour construire et empaqueter des logiciels à partir du code source. Alors que pacman est l'outil spécialisé d'Arch pour la gestion des paquets binaires, l'"Arch build system" est une collection d'outils pour compiler les sources en paquets installables .pkg.tar.zst.
Les ports sont un système utilisé par les *BSD pour automatiser le processus de construction de logiciels à partir du code source. Le système utilise un port pour télécharger, décompresser, patcher, compiler et installer le logiciel donné. Un port est simplement un petit répertoire sur l'ordinateur de l'utilisateur, nommé d'après le logiciel correspondant à installer, qui contient quelques fichiers avec les instructions pour construire et installer le logiciel à partir des sources. Cela rend l'installation du logiciel aussi simple que de taper make
ou make install clean
dans le répertoire du port.
L'"Arch build system" repose sur un concept similaire. Il comprends une collection de dépôts Git pour chaque paquet disponible pour Arch Linux. Chaque dépôt contient un PKGBUILD (et parfois d'autres fichiers), et ne contient ni les sources ni les binaires du logiciel. En exécutant makepkg à l'intérieur d'un répertoire, les sources du logiciel sont téléchargées, le logiciel est compilé, et ensuite empaqueté dans le répertoire de construction. Vous pouvez ensuite utiliser pacman pour installer le paquet.
Les outils
L'"Arch build system" inclut et repose sur plusieurs autres composants et outils qui sont utilisés dans le processus de construction des paquets depuis leurs sources :
- Dépôt
- La structure du dépôt contenant les fichiers nécessaires à la construction de tous les paquets officiels, mais pas les paquets eux-mêmes ni les fichiers sources du logiciel. Elle est disponible sous la form de dépôts Git hébergés par Gitlab. Consultez la section #Structure du dépôt pour plus d'informations.
- PKGBUILD
- Un script Bash qui contient l'URL du code source ainsi que les instructions de compilation et d'empaquetage.
- makepkg
- Un outil de commande shell qui lit les PKGBUILDs, télécharge et compile automatiquement les sources et crée un .pkg.tar* selon le tableau
PKGEXT
dansmakepkg.conf
. Vous pouvez également utiliser makepkg pour créer vos propres paquets personnalisés à partir de l'AUR ou de sources tierces. Consultez l'article anglais concernant la création de paquets pour plus d'informations.
- pacman
- pacman est complètement séparé, mais est nécessairement invoqué, soit par makepkg soit manuellement, pour installer et supprimer les paquets construits et pour récupérer les dépendances.
- AUR
- Le dépôt des utilisateurs d'Arch est séparé du dépôt officiel des PKGBUILDs, mais les paquets d'AUR peuvent être construits en utilisant les mêmes outils. Contrairement à l'arbre d'ABS qui est simplement un dépôt git nu, l'AUR existe sous la forme d'une interface de site web soignée avec diverses fonctionnalités interactives. Il contient plusieurs milliers de PKGBUILDs contribués par les utilisateurs pour des logiciels qui ne sont pas disponibles en tant que paquet officiel d'Arch. Si vous avez besoin de construire un paquet en dehors de l'arbre officiel d'Arch, il y a de fortes chances qu'il soit dans l'AUR.
Structure du dépôt
Les dépôts officiels core, extra, core-testing et extra-testing sont hébergés sur l'instance GitLab d'Arch Linux.
Chaque paquet a son propre dépôt dans l'espace archlinux/packaging/packages
. Chaque dépôt contient les PKGBUILDs et les fichiers trouvés dans les paquets officiels. Par ailleurs, certains fichiers qui sont utilisés par les développeurs pour les étapes de contruction s'y trouvent également.
Par exemple, l'arbre de acl ressemble à ceci :
acl ├── keys │ └── pgp │ ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc │ ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc │ └── B902B5271325F892AC251AD441633B9FE837F581.asc └── PKGBUILD
Le code source du paquet n'est pas présent dans le répertoire. À la place, le PKGBUILD
contient une URL qui téléchargera le code source lorsque le paquet sera construit.
Cas d'utilisation
Le système de construction d'Arch automatise certaines tâches liées à la compilation à partir des sources. Ses cas d'utilisation sont :
- Tout cas d'utilisation qui nécessite de compiler ou de recompiler un paquet.
- Créer et installer de nouveaux paquets à partir des sources de logiciels pour lesquels aucun paquet n'est encore disponible (consultez l'article anglais concernant la création de paquets).
- Personnaliser les paquets existants pour répondre à vos besoins (par exemple, activer ou désactiver des options, appliquer des correctifs).
- Reconstruire votre système entier en utilisant vos paramètres de compilation, "à la FreeBSD".
- Construire et installer proprement votre propre noyau personnalisé (consultez Compilation du noyau).
- Faire fonctionner les modules du noyau avec un noyau personnalisé.
- Compiler et installer facilement une version plus récente, plus ancienne, bêta ou de développement d'un paquet Arch en éditant le numéro de version dans le PKGBUILD.
Utilisation
Récupérer le PKGBUILD d'origine
Pour récupérer le fichier PKGBUILD nécessaire à la construction d'un certain paquet à partir des sources, vous pouvez soit utiliser l'outil pkgctl
, soit direcement avec Git.
Utiliser l'outil pkgctl
Comme condition préalable, installez le paquet devtools. pkgctl
est un outil qui permet de travailler avec les fichiers sources des paquets Arch Linux en utilisant Git.
Pour cloner le dépôt git avec les derniers fichiers de construction en utilisant pkgctl
, la commande suivante est utilisée :
$ pkgctl repo clone pkgname
Notez qu'ici, les fichiers sources se réfèrent au PKGBUILD, éventuellement avec quelques autres fichiers requis, tels que les clés. C'est à dire, les fichiers essentiels qui sont requis pour le système de construction d'Arch Linux. Cela ne fait pas référence aux sources du paquet qui ont été écrits par l'équipe qui a créé le logiciel, comme les fichiers C ou Python.
Cela vous donnera non seulement les fichiers de compilation actuels, mais aussi leurs versions précédentes. De plus, vous pouvez utiliser toutes les autres commandes git pour extraire une ancienne version du paquet ou pour suivre les modifications personnalisées.
Si vous souhaitez obtenir une version spécifique d'un paquet, vous pouvez utiliser quelque chose comme ce qui suit :
$ pkgctl repo clone --switch="2:1.19.5-1" go
Lisez pkgctl-repo-clone(1) pour plus d'informations, et pour les autres commandes disponibles.
Utiliser git directement
Utilisez la commande git suivante pour cloner uniquement une branche spécifique. Vous éviterez ainsi de copier l'ensemble du dépôt :
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/pkgname.git
Par exemple, pour copier les fichiers de construction d'Apache :
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git
Construire le paquet
Configurez makepkg pour construire des paquets à partir des PKGBUILDs que vous avez téléchargés, comme expliqué dans Makepkg (Français)#Configuration.
Ensuite, copiez le répertoire contenant le PKGBUILD que vous souhaitez modifier vers un nouvel emplacement. Apportez-y les modifications souhaitées et utilisez makepkg comme décrit dans Makepkg (Français)#Utilisation pour créer et installer le nouveau paquet.
Trucs et astuces
Préserver les paquets modifiés
La mise à jour du système avec pacman remplacera un paquet modifié par le paquet du même nom des dépôts officiels. Consultez les instructions suivantes pour éviter cela.
Insérez un tableau de groupes dans le PKGBUILD, et ajoutez le paquet à un groupe appelé modified
.
PKGBUILD
groups=('modified')
Ajoutez ce groupe à la section IgnoreGroup
dans /etc/pacman.conf
.
/etc/pacman.conf
IgnoreGroup = modified
Si de nouvelles versions sont disponibles dans les dépôts officiels lors d'une mise à jour du système, pacman affichera une note indiquant qu'il ignore cette mise à jour car elle se trouve dans la section IgnoreGroup. À ce stade, le paquet modifié devra être reconstruit pour éviter les mises à jour partielles.
Autres outils
- pbget - récupère les PKGBUILDs pour des paquets individuels directement depuis l'interface web. Prend en charge l'AUR.