Comment reconstruire un package à l'aide du système de construction Arch Linux

Comment reconstruire un package à l'aide du système de construction Arch Linux

Le abdos ou Système de construction d'arc est un système de construction d'emballages originaire de la distribution Arch Linux: avec lui, nous pouvons facilement créer des packages qui peuvent être installés avec Pac-Man, le gestionnaire de package de distribution, à partir du code source. Tout ce que nous avons à faire est de spécifier des instructions dans un Pkgbuild fichier puis construire le package à l'aide du makepkg outil. Dans ce tutoriel, nous verrons comment personnaliser et reconstruire un package déjà existant.

Dans ce tutoriel, vous apprendrez:

  • Quel est le système de construction d'arc
  • Comment télécharger un fichier source de package existant
  • Comment modifier un pkgbuild
  • Comment créer un package en utilisant le makepkg utilitaire

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Arch Linux
Logiciel asp, makepkg, devet de base
Autre Autorisations racinaires pour installer des dépendances de construction et d'exécution
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Rebuiller un paquet

À titre d'exemple pour ce tutoriel, nous reconstruisons le hplip emballer. Ce package contient le logiciel open source nécessaire pour utiliser certaines imprimantes HP sur Linux. Sur des distributions comme Debian et Fedora, nous avons le choix d'installer le hplip package qui ne contient que des utilitaires et des pilotes de ligne de commande, et éventuellement HPLIP-GUI, qui comprend également des outils graphiques qui peuvent être utilisés pour configurer et contrôler l'imprimante. Puisque j'utilise le System-Config Imprimante Outil pour contrôler les imprimantes existantes et je ne veux pas avoir d'outils inutiles et qui se chevauchent sur mon système, je dois changer la façon dont le logiciel est construit et emballé sur Arch Linux: c'est ce que nous ferons dans ce tutoriel.

Installation du logiciel

En première étape, nous devons installer certains packages: devent de base et aspic. Le premier est un groupe de packages qui contient de nombreux utilitaires essentiels pour compiler des logiciels comme fakeroot, GCC et faire. Le second est un outil pour récupérer les fichiers source pour les packages Arch Linux existants. Pour les installer, nous utilisons Pac-Man:

$ sudo pacman -s ASP de niveau de base 

Comme déjà mentionné, nous aurons également besoin du makepkg qui est déjà installé car il est livré avec Pac-Man lui-même. Une fois que nous avons installé tous les packages nécessaires, nous pouvons passer à la makepkg configuration.

Configuration de Makepkg

La valeur par défaut à l'échelle du système makepkg Le fichier de configuration est / etc / makepkg.confli; Nous allons copier ceci sur ~ /.makepkg.confli, Pour créer une configuration spécifique à l'utilisateur, nous pouvons modifier sans avoir besoin d'utiliser les privilèges administratifs (~ /.config / pacman / makepkg.confli pourrait également être utilisé). Certaines variables notables que l'on peut vouloir modifier dans le fichier est la suivante:

Variable Utiliser Valeur par défaut
Cppflags Les drapeaux à utiliser pour les préprocesseurs C -D_fortiftify_source = 2
CFLAGS Les drapeaux à utiliser pour le compilateur C -mars = x86-64 -mtune = générique -o2 -pipe -fno-plt
Cxxflags Les drapeaux à utiliser pour le compilateur C ++ -mars = x86-64 -mtune = générique -02 -pipe -fno-plt
Builddir Le répertoire à utiliser pour la construction de packages / tmp / makepkg
VÉRIFICATION DE L'INTÉGRITÉ Le contrôle d'intégrité à utiliser md5
Pkgdest Le répertoire où tous les packages seront placés . (directeur de travail)
Srcdest Le répertoire où les données source seront stockées ./ src

Une fois que nous avons modifié notre configuration pour mieux répondre à nos besoins, nous pouvons procéder et télécharger les fichiers source du package Arch Linux que nous voulons modifier, dans ce cas, comme nous l'avons dit auparavant, hplip.

Téléchargement des fichiers source du package

Pour télécharger les fichiers source du package que nous souhaitons modifier, nous devons utiliser le aspic outil que nous avons installé avant. Dans ce cas, nous courons:

$ ASP Checkout HPLIP 


Après quelques secondes, le hplip Le répertoire doit être créé dans notre répertoire de travail. À l'intérieur, nous trouverons deux sous-répertoires: se soustraire qui contient des sous-répertoires à part, du nom du nom du référentiel et de l'architecture du système, et tronc, qui contient la principale ligne de développement du SVN dépôt.

HPLIP / ├fiques.h-in-gerous-lis-as-cups-2.2.Patch │ ├fique.py.Patch │ ├── 0025-Remove-all-Imageprocessor-fonctionnalité-Whic-Is-CLO.Patch │ ├fique.patch │ ├fique.patch │ ├fique.diff │ └fique.patch └fiques.h-in-gerous-lis-as-cups-2.2.Patch ├── 0023-fixe-mange.py.Patch ├── 0025-Remove-all-Imageprocessor-fonctionnalité-Whic-est-CLO.patch ├fique.patch ├fiques.patch ├fiques.Diff └fique.correctif 

Nous pouvons modifier le hplip / repos / extra-x86_64 / pkgbuild déposer.

Modification du fichier pkgbuild

Le Pkgbuild Le fichier est un script bash contenant l'instruction de construction pour le package Arch Linux. Dans ce cas, ce que nous devons modifier dans le fichier est le contenu du construire fonction qui contient les commandes utilisées pour configurer et compiler les fichiers source, dans ce cas hplip. Dans la fonction, nous pouvons voir que le ./ Configurer Le script est lancé avec les drapeaux suivants:

[…] ./ configurer --prefix = / usr \ --enable-qt5 \ --disable-qt4 \ --enable-hpcups-install \ --enable-cups-drv-install \ --enable-ppp-build […] 

Étant donné que je ne veux pas que des applications graphiques soient construites et que je souhaite installer le minimum nécessaire pour que mon imprimante fonctionne correctement, je n'ai pas besoin de prise en charge de QT5, donc je peux supprimer le --Activer-QT5 Option (je pourrais utiliser --désactiver-QT5 ou --activer-qt5 = non Au lieu de cela, mais ce serait redondant car le drapeau est désactivé par défaut, comme nous pouvons lire en lançant ./ Configurer - help dans le répertoire source HPLIP). J'ai alors besoin d'utiliser le --désactiver drapeau pour désactiver la construction de l'interface graphique et utiliser le --Activer-Lite-Build Indicateur pour obtenir une version Lite avec uniquement les composants nécessaires pour construire et numériser (l'imprimante comprend également un scanner). Le résultat final serait quelque chose comme:

[…] ./ configurer --prefix = / usr \ --disable-qt4 \ --enable-hpcups-install \ --enable-cups-drv-install \ --enable-ppp-build \ --disable-Gui-build \ - -Enable-Lite-Build […] 


Depuis que nous avons handicapé qt5 Support, nous pouvons également supprimer python-pyqt5 à partir de la liste des dépendances nécessaires pour créer le logiciel, répertorié dans le comptes Bash Array en ligne 15 du fichier:

MADEPENDS = ('Python-Pyqt5 "Sane" rpcbind "tasses" libusb') 

Maintenant que nous avons modifié le Pkgbuild, Nous pouvons passer à l'étape suivante et construire notre package en utilisant makepkg.

Construisez le package

Une fois notre Pkgbuild Le fichier est prêt, nous pouvons créer notre package modifié en utilisant le makepkg utilitaire. Avant de le faire, nous avons besoin d'une autre chose: puisque la signature des fichiers source téléchargée pour le logiciel que nous voulons construire est vérifié automatiquement contre une clé GPG, nous devons être clés de notre clés GPG, sinon le processus de construction échouera. Dans ce cas pour importer la clé que nous exécutrions:

$ gpg - Keyserver Keyserver.ubuntu.com --recv 73d770cda59047b9 

Nous devons être informés que la clé a été importée avec succès:

GPG: clé 73d770cda59047b9: clé publique "HPLIP (HP Linux Imaging and Printing)" GPG importé: Nombre total traité: 1 GPG: importé: 1 

La clé identifiée par 73d770cda59047b9 est la clé utilisée pour signer le hplip source Tarball. Si vous voulez en savoir plus sur la vérification d'une signature GPG, vous pouvez jeter un œil à notre comment vérifier l'intégrité d'un article ISO Iso Distribution que j'ai écrit sur le sujet.

Une fois prêt, nous nous déplaçons dans le répertoire où le Pkgbuild est stocké
et exécutez la commande suivante:

$ makepkg - Clean --Nycdeps --rmdeps 

Jetons un coup d'œil rapide aux options que nous utilisons utilisées lors de l'invoquer makepkg outil. Avec le --faire le ménage option (-c) Nous pouvons faire pour que les fichiers et les répertoires restants soient supprimés après une construction de package réussie. Nous avons également utilisé --synchronisation (-s): lorsque cette option est utilisée, la dépendance à l'exécution et la construction manquants du package sont installés en utilisant Pac-Man. Enfin, nous avons utilisé le --rmdeps option (-r): Cela entraînera une désinstallation des dépendances précédemment installées une fois la construction terminée.

Si nous avons déjà effectué une construction du package et que nous voulons réviser le processus, nous devons également utiliser --force (-F) Option, puisque makepkg refuse normalement de construire un package qui existe déjà dans le même répertoire).

Une fois que nous avons lancé la commande ci-dessus, la compilation des fichiers source et la création du package commencera. On nous demandera de confirmer que nous voulons installer les dépendances manquantes:

==> Package de fabrication: HPLIP 1: 3.20.6-2 (mar 18 août 2020 10:29:43 AM CEST) ==> Vérification des dépendances d'exécution… ==> Installation des dépendances manquantes… [Sudo] Mot de passe pour EGDOC: Résolution des dépendances… à la recherche de packages conflictuels… Packages (18) Jbig2Dec -0.18-1 libidn-1.36-1 Perl-Alien-build-2.29-1 perl-alien-libxml2-0.16-2 Perl-capture-Tiny-0.48-4 Perl-Clone-0.45-2 perl-dbi-1.643-2 perl-fffi-cecklib-0.27-2 perl-file-chdir-0.1011-4 perl-file-which-1.23-4 Perl-Path-Tiny-0.112-2 perl-xml-libxml-2.0205-2 perl-xml-namespacesupport-1.12-4 perl-xml-sax-1.02-1 perl-xml-sax-bas-1.09-4 Foomatic-DB-Engine-4: 20200206-1 GhostScript-9.52-1 net-snmp-5.8-6 taille totale installée: 61.76 MIB :: Procéder avec l'installation? [Y / n] y […] ==> Vérification des dépendances de buildtime… ==> Installation des dépendances manquantes… Résolution des dépendances… à la recherche de packages conflictuels… packages (6) GD-2.3.0-1 libgphoto2-2.5.25-1 Libieee1284-0.2.11-9 libxpm-3.5.13-2 RPCBIND-1.2.5-3 SANE-1.0.30-1 taille totale installée: 26.50 MIB :: Procéder avec l'installation? [O / N] y […] 

Une fois la construction terminée, nous serons invités à confirmer que nous souhaitons supprimer les packages précédemment installés. À ce stade, si tout s'est passé comme prévu, nous devons trouver le package créé dans le répertoire que nous avons spécifié dans le makepkg Fichier de configuration (le Pkgdest annuaire). Par défaut, le package est créé dans le répertoire de travail. Dans ce cas, le hplip-1: 3.20.6-2-x86_64.pkg.le goudron.zst un paquet a été généré; Nous pouvons l'installer en utilisant Pac-Man:

$ sudo pacman -u hplip-1: 3.20.6-2-x86_64.pkg.le goudron.zst 


Gérer les conflits sur les mises à niveau du système

Puisque nous avons généré un package personnalisé en fonction de la modification que nous avons apportée à l'intérieur du Pkgbuild Fichier, un problème se pose: lorsque le système sera mis à jour, une nouvelle version du package standard peut être installée, écrasant ainsi les modifications que nous avons apportées. Comment nous pouvons éviter cela? La solution plus simple consiste à faire les packages que nous modifions le membre d'un groupe spécifique (disons que nous voulons l'appeler «modifié»), puis instruire Pac-Man Pour éviter la mise à niveau de ses membres. Pour ce faire, nous devons modifier le Pkgbuild encore et ajouter cette ligne:

groupes = ('modifié') 

À ce stade, nous devons reconstruire le package. Une fois terminé, nous devons modifier le / etc / pacman.confli fichier et ajouter le groupe à la liste des ignorés. La ligne à modifier est 26:

Ignoregroup = modifié 

Le Pac-Man Le gestionnaire de packages sautera la mise à niveau du package, nous devons donc le faire manuellement en cas de besoin.

Conclusions

Dans cet article, nous avons vu comment nous pouvons utiliser abdos, Le système de construction d'arc pour modifier et reconstruire un package existant afin de l'adapter à nos besoins spécifiques. Nous avons vu comment télécharger des fichiers source de package, comment modifier un Pkgbuild, et comment reconstruire le package en utilisant le makepkg utilitaire. Pour mieux explorer le sujet, vous pouvez jeter un œil au makepkg MANPAGE ET CONSULTER LA PAGE WIKI SYSTÈME DE CONSTRUCTION ARCH.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Fichiers de configuration Linux: 30 premiers
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Système linux hung? Comment s'échapper vers la ligne de commande et…
  • Installez Arch Linux dans VMware Workstation
  • Téléchargement Linux
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?