Cómo reconstruir un paquete utilizando el sistema de compilación Arch Linux

Cómo reconstruir un paquete utilizando el sistema de compilación Arch Linux

El abdominales o Sistema de construcción de arco es un sistema de construcción de paquetes nativo de la distribución de Arch Linux: con él, podemos construir fácilmente paquetes que se pueden instalar con Pacman, el Administrador de paquetes de distribución, comenzando desde el código fuente. Todo lo que tenemos que hacer es especificar la instrucción dentro de un Pkgbuild archivo y luego construir el paquete usando el makepkg herramienta. En este tutorial veremos cómo personalizar y reconstruir un paquete ya existente.

En este tutorial aprenderás:

  • ¿Cuál es el sistema de construcción de arco?
  • Cómo descargar los archivos de origen de un paquete existentes
  • Cómo modificar un PKGBuild
  • Cómo construir un paquete usando el makepkg utilidad

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Arch Linux
Software ASP, makepkg, base-devel
Otro Permisos de raíz para instalar dependencias de compilación y tiempo de ejecución
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Reconstruir un paquete

Como ejemplo para este tutorial, reconstruiremos el HPLIP paquete. Este paquete contiene el software de código abierto necesario para usar algunas impresoras HP en Linux. En distribuciones como Debian y Fedora, tenemos la opción de instalar el HPLIP paquete que contiene solo utilidades y controladores de línea de comando, y opcionalmente hplip-gui, que incluye también herramientas gráficas que se pueden usar para configurar y controlar la impresora. Ya que uso el system-config-imprinter Herramienta Para controlar las impresoras existentes y no quiero tener herramientas innecesarias y superpuestas en mi sistema, necesito cambiar la forma en que el software está construido y empaquetado en Arch Linux: esto es lo que haremos en este tutorial.

Instalación de software

Como primer paso necesitamos instalar algunos paquetes: de-devel y áspid. El primero es un grupo de paquetes que contiene muchas utilidades esenciales para compilar software como faldón, GCC y hacer. El segundo es una herramienta para recuperar los archivos de origen para los paquetes de Arch Linux existentes. Para instalarlos usamos Pacman:

$ sudo Pacman -S -de -devel ASP 

Como ya se mencionó, también necesitaremos el makepkg que ya está instalado ya que viene con Pacman sí mismo. Una vez que instalamos todos los paquetes necesarios, podemos proceder al makepkg configuración.

Configuración de MakEPKG

El predeterminado, en todo el sistema makepkg El archivo de configuración es /etc/makepkg.confusión; Copiaremos esto a ~/.makepkg.confusión, Para crear una configuración específica del usuario, podemos ajustar sin la necesidad de usar privilegios administrativos (~/.config/pacman/makepkg.confusión También podría usarse). Algunas variables notables que uno puede querer en el archivo son las siguientes:

Variable Usar Valor por defecto
Cppflags Las banderas para usar para los preprocesadores C -D_fortify_source = 2
Clags Las banderas para usar para el compilador C -marzo = x86-64 -mtune = genérico -o2 -pipe -fno -plt
Cxxflags Las banderas para usar para el compilador C ++ -marzo = x86-64 -mtune = genérico -02 -pipe -fno -pplt
Builddir El directorio para usar para la construcción de paquetes /tmp/makepkg
VERIFICACIÓN DE INTEGRIDAD La verificación de integridad para usar MD5
Más El directorio donde se colocarán todos los paquetes . (directorio de trabajo)
Srcdest El directorio donde se almacenarán los datos de origen ./SRC

Una vez que modificamos nuestra configuración para satisfacer mejor nuestras necesidades, podemos continuar y descargar los archivos de origen para el paquete Arch Linux que queremos modificar, en este caso, como dijimos antes, HPLIP.

Descargar los archivos de origen del paquete

Para descargar los archivos de origen para el paquete que queremos modificar, debemos usar el áspid herramienta que instalamos antes. En este caso ejecutamos:

$ ASP TACKOUT HPLIP 


Después de unos segundos el HPLIP El directorio debe crearse en nuestro directorio de trabajo. Dentro de él, encontraremos dos subdirectorios: repositar que contiene subdirectorios propios, llamados así por el nombre del repositorio y la arquitectura del sistema, y trompa, que contiene la línea principal de desarrollo del SVN repositorio.

HPLIP/ ├── Repos │ └── Extra-x86_64 │ ├── 0022-add-include-cups-ppd.h-in-varios-places-as-cups-2.2.Patch │ ├── 0023-FIX-HANDLING-OF-UNICODE-Filenames-in-Sixext.py.Patch │ ├── 0025-Remove-All-ImageProcessor-Functionality-Which-is-Clo.Patch │ ├── Disable_upgrade.parche │ ├── hplip-revert-plugins.Patch │ ├── PKGBuild │ ├── Python3.diff │ └── reproducible-gzip.Patch └── Trunk ├── 0022-add-include-cups-ppd.h-in-varios-places-as-cups-2.2.Patch ├── 0023-FIX-FIX-OF-UNICODE-Filenames-in-Sixext.py.Patch ├── 0025-Remove-All-ImageProcessor-Functionality-Which-is-CLO.Patch ├── Disable_upgrade.parche ├── plugins hplip-revert.Patch ├── PKGBuild ├── Python3.diff └── reproducible-gzip.parche 

Podemos modificar el HPLIP/REPOS/Extra-X86_64/PKGBuild archivo.

Modificar el archivo PKGBuild

El Pkgbuild El archivo es un script bash que contiene la instrucción de construcción para el paquete Arch Linux. En este caso, lo que necesitamos modificar en el archivo es el contenido del construir función que contiene los comandos utilizados para configurar y compilar los archivos de origen, en este caso HPLIP. En la función podemos ver que el ./Configurar El script se lanza con las siguientes banderas:

[…] ./Configurar--Prefix =/usr \ --enable-QT5 \--desable-qt4 \ --enable-hpcupsinstall \ --enable-cups-drv-install \ --enable-pp-build […] 

Como no quiero que se construyan aplicaciones gráficas, y quiero instalar el mínimo necesario para que mi impresora funcione correctamente, no necesito soporte para QT5, por lo que puedo eliminar el --habilitar-qt5 opción (podría usar --deshabilitar-qt5 o --habilitar-qt5 = no en su lugar, pero esto sería redundante ya que la bandera está deshabilitada de forma predeterminada, ya que podemos leer al iniciar ./Configurar -Help En el directorio de origen HPLIP). Entonces necesito usar el --desactivar bandera para deshabilitar la construcción de la GUI y usar el --Habilitar-Lite-Build bandera para obtener una construcción de lite con solo los componentes necesarios para construir y escanear (la impresora incluye también un escáner). El resultado final sería algo así:

[…] ./Configurar--Prefix =/usr \ --disable-qt4 \ --enable-hpcups-install \ --enable-cups-drv-install -Enable-Lite-Build […] 


Desde que nos deshabilitamos QT5 Soporte, también podemos eliminar Python-Pyqt5 de la lista de dependencias necesarias para construir el software, enumerada en el Makedpends Matriz de bash en línea 15 del archivo:

makedepends = ('python-pyqt5 "sane" rpcbind "tazs" libusb') 

Ahora que modificamos el Pkgbuild, Podemos proceder al siguiente paso y construir nuestro paquete usando makepkg.

Construir el paquete

Una vez que nuestro Pkgbuild El archivo está listo, podemos construir nuestro paquete modificado utilizando el makepkg utilidad. Antes de hacerlo, necesitamos otra cosa: dado que la firma de los archivos de origen descargados para el software que queremos construir se verifica automáticamente con una clave GPG, debemos decir dicha clave a nuestro GPG Keyring, de lo contrario, el proceso de compilación fallará. En este caso para importar la clave que ejecutaríamos:

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

Deberían notificarse que la clave se importó con éxito:

GPG: Clave 73D770CDA59047B9: Clave pública "HPLIP (HP Linux Imágenes e impresión)" GPG importado: Número total procesado: 1 GPG: Importado: 1 

La clave identificada por 73D770CDA59047B9 se utiliza la clave para firmar el HPLIP Tarball de origen. Si desea saber más sobre la verificación de una firma GPG, puede echar un vistazo a nuestro artículo de imagen ISO de distribución de Linux.

Una vez listo, nos movemos dentro del directorio donde el Pkgbuild está almacenado
y ejecute el siguiente comando:

$ makepkg --clean --syncdeps - -rmdeps 

Echemos un vistazo rápido a las opciones que usamos utilizando al invocar el makepkg herramienta. Con el --limpio opción (-C) Podemos hacer para que se eliminen archivos y directorios sobrantes después de una compilación de paquete exitoso. También usamos --syncdeps (-s): Cuando se usa esta opción, el tiempo de ejecución faltante y la dependencia de la compilación del paquete se instalan utilizando Pacman. Finalmente, usamos el --rmdeps opción (-riñonal): Esto hará que las dependencias previamente instaladas se desinstalen después de que se complete la compilación.

Si ya hemos realizado una compilación del paquete, y queremos volver a ejecutar el proceso, también necesitamos usar el --fuerza (-F) opción, ya que makepkg Normalmente se niega a construir un paquete que ya exista en el mismo directorio).

Una vez que lanzamos el comando anterior, la compilación de los archivos de origen y la creación del paquete comenzarán. Se nos pedirá que confirmemos que queremos instalar las dependencias faltantes:

==> Paquete de fabricación: HPLIP 1: 3.20.6-2 (martes 18 de agosto 2020 10:29:43 AM CEST) ==> Verificación de dependencias de tiempo de ejecución ... ==> Instalación de dependencias faltantes ... [sudo] Contraseña para EGDOC: Resolución de dependencias ... Buscando paquetes conflictivos ... paquetes (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-ffi-checklib-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-base-1.09-4 Foomatic-DB-Engine-4: 20200206-1 Ghostscript-9.52-1 Net-SNMP-5.8-6 Tamaño total instalado: 61.76 MIB :: proceder con la instalación? [Y/n] y […] ==> Comprobación de dependencias de plato de creación ... ==> Instalación de dependencias faltantes ... Resolviendo dependencias ... Buscando paquetes conflictivos ... paquetes (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 sano-1.0.30-1 Tamaño total instalado: 26.50 MIB :: proceder con la instalación? [Y/n] y […] 

Una vez que se complete la compilación, se nos pedirá que confirmemos que queremos eliminar los paquetes instalados previamente. En este punto, si todo salió como se esperaba, deberíamos encontrar el paquete creado en el directorio con el que especificamos en el makepkg archivo de configuración (el Más directorio). Por defecto, el paquete se crea en el directorio de trabajo. En este caso, el HPLIP-1: 3.20.6-2-x86_64.PKG.alquitrán.zest Se generó el paquete; Podemos instalarlo usando Pacman:

$ sudo Pacman -U HPLIP -1: 3.20.6-2-x86_64.PKG.alquitrán.zest 


Manejar conflictos en las actualizaciones del sistema

Dado que generamos un paquete personalizado basado en la modificación que hicimos dentro del Pkgbuild Archivo, surge un problema: cuando se actualizará el sistema, se puede instalar una nueva versión del paquete estándar, sobrescribiendo las modificaciones que hicimos. Cómo podemos evitar esto? La solución más simple es hacer los paquetes que modificamos al miembro de un grupo específico (digamos que queremos llamarlo "modificado") y luego instruir Pacman Para evitar actualizar a sus miembros. Para hacer esto debemos modificar el Pkgbuild de nuevo y agregue esta línea:

grupos = ('modificado') 

En este punto debemos reconstruir el paquete. Una vez hecho, debemos modificar el /etc/pacman.confusión archivo y agregue el grupo a la lista de los ignorados. La línea para modificar es 26:

IgnoreGroup = modificado 

El Pacman Manager de paquetes omitirá la actualización del paquete, por lo que debemos hacerlo manualmente cuando sea necesario.

Conclusiones

En este artículo vimos cómo podemos usar abdominales, el sistema de compilación de arco para modificar y reconstruir un paquete existente para adaptarlo a nuestras necesidades específicas. Vimos cómo descargar los archivos de origen de un paquete, cómo modificar un Pkgbuild, y cómo reconstruir el paquete usando el makepkg utilidad. Para explorar mejor el tema, puede echar un vistazo al makepkg ManPage y consulta la página Wiki del sistema de construcción de arco.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Instale Arch Linux en VMware Workstation
  • Descarga de Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?