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 (y compris les paquets construits avec l'ABS), l'ABS 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.
ABS est un concept similaire. Une partie d'ABS est un dépôt SVN et un dépôt Git équivalent. Le dépôt contient un répertoire correspondant à chaque paquet disponible dans Arch Linux. Les répertoires du dépôt contiennent un fichier PKGBUILD (et parfois d'autres fichiers), et ne contiennent pas les sources ni les binaires du logiciel. En lançant 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.
Vue d'ensemble
Le terme "ABS" peut être utilisé comme un terme générique car il inclut et repose sur plusieurs autres composants ; par conséquent, bien que cela ne soit pas techniquement exact, "ABS" peut faire référence aux outils suivants comme ensemble d'utilitaires :
- L'arborescence du dépôt
- La structure du répertoire 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 dans les dépôts svn et git. Consultez la section #Arborescence 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é d'ABS mais les PKGBUILDs AUR (non officiels) sont construits en utilisant makepkg pour compiler et empaqueter les logiciels. 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.
Arborescence du dépôt
Les dépôts officiels core, extra et testing se trouvent dans le dépôt packages en téléchargement. Les dépôts community et multilib sont dans le dépôt community.
Chaque paquet a son propre sous-répertoire. Il contient les répertoires repos
et trunk
. Le répertoire repos
est subdivisé par nom de dépôt (par exemple, core) et par architecture. Les PKGBUILDs et les fichiers trouvés dans repos
sont utilisés dans les constructions officielles. Les fichiers trouvés dans trunk
sont utilisés par les développeurs en préparation avant d'être copiés dans repos
.
Par exemple, l'arbre de acl ressemble à ceci :
acl acl/repos acl/repos/core-x86_64 acl/repos/core-x86_64/PKGBUILD acl/trunk acl/trunk/PKGBUILD
Le code source du paquet n'est pas présent dans le répertoire ABS. À la place, le PKGBUILD
contient une URL qui téléchargera le code source lorsque le paquet sera construit.
Cas d'utilisation
ABS 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 PKGBUILD nécessaire à la construction d'un certain paquet à partir des sources, vous pouvez soit utiliser SVN, soit une approche basée sur Git en utilisant le paquet asp qui est une enveloppe mince autour des dépôts svntogit. Dans ce qui suit, la méthode basée sur svn ainsi que celle basée sur Git sont décrites.
Récupérer le PKGBUILD d'origine avec Git
Comme condition préalable, installer le paquet asp. Asp est un outil permettant de récupérer les fichiers sources de construction pour les paquets Arch Linux en utilisant l'interface Git. Consultez également le fil de discussion du forum international [1].
Pour cloner le dépôt svntogit pour un paquet spécifique, utilisez :
$ asp checkout nom-du-paquet
Ceci clonera le dépôt git pour le paquet donné dans un répertoire nommé comme le paquet.
Pour mettre à jour le dépôt git cloné, exécutez asp update
suivi de git pull
dans le dépôt git.
De plus, vous pouvez utiliser toutes les autres commandes git pour télécharger une ancienne version du paquet ou pour suivre les changements personnalisés. Pour plus d'informations sur l'utilisation de git, consultez la page anglaise git.
Si vous voulez simplement copier un instantané du PKGBUILD actuel pour un paquet spécifique, utilisez :
$ asp export nom-du-paquet
Récupérer le PKGBUILD d'origine avec SVN
Conditions préalables
Installez le paquet subversion.
Télécharger un dépôt
Pour télécharger les dépôts officiels core, extra et testing :
$ svn checkout --depth=empty svn://svn.archlinux.org/packages.
Pour télécharger les dépôts community et multilib :
$ svn checkout --depth=empty svn://svn.archlinux.org/community
Dans les deux cas, il crée simplement un répertoire vide, mais il sait que c'est un checkout svn.
Téléchargement d'un paquet
Dans le répertoire contenant le dépôt svn que vous avez téléchargé (c'est-à-dire packages ou community), faites :
$ svn update nom-du-paquet
Le paquet que vous avez demandé sera ajouté à votre checkout. À partir de maintenant, chaque fois que vous ferez un svn update au niveau supérieur, celui-ci sera également mis à jour.
Si vous spécifiez un paquet qui n'existe pas, svn ne vous avertira pas. Il imprimera simplement quelque chose comme "At revision 115847", sans créer aucun fichier. Si cela se produit :
- Vérifiez l'orthographe du nom du paquet.
- vérifiez que le paquet n'a pas été déplacé vers un autre dépôt (par exemple, de community vers le dépôt principal)
- Consultez https://archlinux.org/packages pour consulter si le paquet est construit à partir d'un autre paquet de base (par exemple, python-tensorflow est construit à partir de tensorflow. PKGBUILD)
Vous devez périodiquement mettre à jour tous vos paquets téléchargés si vous souhaitez effectuer des reconstructions sur des révisions plus récentes des dépôts. Pour ce faire, faites :
$ svn update
Télécharger une ancienne version d'un paquet
Dans le dépôt svn que vous avez téléchargé comme décrit dans #Télécharger un dépôt. (c'est-à-dire "packages" ou "community"), examinez d'abord le journal :
$ svn log nom-du-paquet
Trouvez la révision que vous voulez en examinant l'historique, puis spécifiez la révision que vous souhaitez télécharger. Par exemple, pour télécharger la révision r1729
, vous devez faire :
$ svn update -r1729 nom-du-paquet
Ceci mettra à jour une copie de travail existante de nom-du-paquet à la révision choisie.
Vous pouvez également spécifier une date. Si aucune révision de cette date n'existe, svn prendra le paquet le plus récent avant cette date. L'exemple suivant télécharge la révision du 2009-03-03 :
$ svn update -r '{20090303}' nom-du-paquet
Il est également possible de télécharger des paquets à des versions antérieures à leur déplacement vers un autre dépôt ; vérifiez minutieusement les journaux pour connaître la date de déplacement ou le dernier numéro de révision.
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é d'ABS 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 à partir d'ABS 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.