Arch Build System (Français) - ArchWiki

Jump to content
From ArchWiki
État de la traduction: Cet article est la version francophone de Arch Build System. Date de la dernière traduction: 2021-12-18. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Related articles

- Arch package guidelines (Français)
- Arch User Repository (Français)
- Creating packages
- Kernel Compilation with ABS
- makepkg (Français)
- Official repositories (Français)
- pacman (Français)
- PKGBUILD (Français)
- Patching in ABS

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` dans `makepkg.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.

Attention: Les PKGBUILDs officiels supposent que les paquets sont construit dans un «chroot» vierge. La construction d'un logiciel sur un système de construction sale peut échouer ou provoquer un comportement inattendu au moment de l'exécution, car si le système de construction détecte les dépendances de manière dynamique, le résultat dépend des paquets disponibles sur le système de construction.

### 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

Attention: Ne téléchargez pas l'intégralité du dépôt ; suivez uniquement les instructions ci-dessous. L'ensemble du dépôt SVN est énorme. Non seulement il prendra une quantité obscène d'espace disque, mais vous taxerez également le serveur archlinux.org pour que vous puissiez le télécharger. Si vous abusez de ce service, votre adresse peut être bloquée. N'utilisez jamais le SVN public pour un quelconque script.

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)

Astuce: Pour télécharger une version plus ancienne d'un paquet, consultez #Télécharger une ancienne version d'un paquet.

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.

Categories:

- About Arch (Français)
- Package development (Français)
- Package management (Français)