Difference between revisions of "Arch Build System (Español)"

From ArchWiki
Jump to: navigation, search
(Artículo actualizado)
 
(22 intermediate revisions by 6 users not shown)
Line 12: Line 12:
 
[[ko:Arch Build System]]
 
[[ko:Arch Build System]]
 
[[pl:Arch Build System]]
 
[[pl:Arch Build System]]
[[ro:ABS]]
+
[[pt:Arch Build System]]
 
[[ru:Arch Build System]]
 
[[ru:Arch Build System]]
[[tr:Arch_derleme_sistemi]]
+
[[zh-hans:Arch Build System]]
[[zh-CN:Arch Build System]]
+
[[zh-hant:Arch Build System]]
[[zh-TW:Arch Build System]]
+
{{Related articles start (Español)}}
{{Article summary start|Sumario}}
+
{{Related|Arch packaging standards}}
{{Article summary text|Arch Build System es un sistema de tipo ''puertos'' para la compilación y empaquetado de software a partir de su código fuente. Este artículo incluye una descripción general de ABS seguido de instrucciones detalladas de uso.}}
+
{{Related|Arch User Repository (Español)}}
{{Article summary heading|Descripción}}
+
{{Related|Creating packages (Español)}}
{{Article summary text|Los paquetes en Arch Linux son construidos con la orden [[makepkg]] en conjunción con un script de compilación hecho a medida para cada paquete (que se conoce como [[PKGBUILD]]). Ya empaquetado, el software se puede instalar y manejar con pacman. Los PKGBUILD estan disponibles desde el árbol '''ABS''' para el software de los [[official repositories |repositorios oficiales]]; hay miles disponibles (sin soporte) desde [[Arch User Repository]].}}
+
{{Related|Kernel Compilation with ABS}}
{{Article summary heading|Relacionado}}
+
{{Related|makepkg (Español)}}
{{Article summary wiki|ABS FAQ}}
+
{{Related|Official repositories (Español)}}
{{Article summary wiki|Arch Packaging Standards}}
+
{{Related|pacman (Español)}}
{{Article summary wiki|Creating Packages}}
+
{{Related|PKGBUILD (Español)}}
{{Article summary wiki|Kernel Compilation with ABS}}
+
{{Related|Patching in ABS}}
{{Article summary end}}
+
{{Related articles end}}
 +
{{TranslationStatus (Español)|Arch Build System|2018-09-21|540727}}
  
Este artículo proporciona una visión general de Arch Build System, junto con una guía para principiantes. No es una guía de referencia completa. Para una introducción rápida y sencilla de ABS, véase [[ABS FAQ]]. Si necesita más información, consulte las páginas ''man''.  
+
Arch Build System (''«sistema de compilación de Arch»''), ABS para abreviar, es un sistema tipo ''ports'' para la construcción y empaquetado de software desde el código fuente. Mientras [[pacman (Español)|pacman]] es la herramienta especializada de Arch para la gestión de los paquetes binarios (incluyendo los paquetes creados con ABS), el sistema ABS es una colección de herramientas para compilar el código fuente y crear paquetes {{ic|.pkg.tar.xz}} instalables.
{{Nota|ABS se sincroniza una vez al día, por lo que puede quedarse desfasado respecto a los paquetes que ya están disponibles en los repositorios.}}
 
== ¿Qué es Arch Build System? ==
 
  
Arch Build System (''«Sistema de Compilación de Arch»''), '''ABS''' para abreviar, es un sistema tipo ''ports'' para la construcción y empaquetado de software desde el código fuente. Mientras [[pacman (Español)|pacman]] es la herramienta especializada de Arch para la gestión de los paquetes binarios (incluyendo los paquetes creados con ABS), el sistema ABS es una colección de herramientas para compilar el código fuente y crear paquetes {{ic|.pkg.tar.xz}} instalables.
+
''Ports'' es un sistema utilizado por los sistemas basados en *BSD para automatizar el proceso de compilación del software desde el código fuente. El sistema utiliza un ''puerto'' para descargar, descomprimir, parchear, compilar e instalar el software especificado. Un ''puerto'' no es más que una carpeta pequeña creada en el ordenador del usuario, con el nombre del software correspondiente para ser instalado, que contiene algunos archivos con las instrucciones para construir e instalar el software desde el código fuente. Esto hace que la instalación del software sea tan simple como escribir {{ic|make}} o {{ic|make install clean}} desde la carpeta que sirve de puerto.
  
=== ¿Qué es un sistema tipo ''ports''? ===
+
ABS es un concepto similar. ABS es un componente de un árbol de directorios (el árbol ABS) que se puede verificar utilizando SVN. Este árbol representa (pero no contiene) todo el ''sotfware oficial de Arch''. Se hace referencia a cada subdirectorio, nominado por el nombre del paquete, como un «ABS», de igual manera a como si se refiriese a un «puerto». Estos ABS (o subdirectorios) no contienen el paquete de software ni el código fuente, sino más bien un archivo [[PKGBUILD]] y, a veces, otros archivos. Mediante la ejecución de la orden [[makepkg]] dentro de un directorio que contiene un PKGBUILD, el sistema primero compila y luego ''empaqueta'' el software, dentro del directorio de compilación, antes de ser instalado. A continuación, se puede utilizar [[pacman]], el gestor de paquetes de Arch Linux, para instalar o actualizar el nuevo paquete.
  
''Ports'' es un sistema utilizado por los sistemas basados en *BSD para automatizar el proceso de compilación del software desde el código fuente. El sistema utiliza un ''puerto'' para descargar, descomprimir, parchear, compilar e instalar el software especificado. Un ''puerto'' no es más que una carpeta pequeña creada en el ordenador del usuario, con el nombre del software correspondiente para ser instalado, que contiene algunos archivos con las instrucciones para construir e instalar el software desde el código fuente. Esto hace que la instalación del software sea tan simple como escribir {{ic|make}} o {{ic|make install clean}} desde la carpeta que sirve de puerto.
+
== Descripción general de ABS ==
 +
 
 +
«ABS» puede ser usado como un término genérico, ya que incluye y se basa en otros componentes adicionales, por lo que, aunque no es técnicamente exacto, «ABS» puede referirse a la siguiente estructura como un conjunto completo de herramientas:
 +
 
 +
; El árbol SVN: La estructura del directorio que contiene los archivos necesarios para compilar todos los paquetes oficiales, pero no los paquetes en sí ni los archivos fuente del software. Estos están disponibles en los repositorios [https://www.archlinux.org/svn/ svn] y [https://projects.archlinux.org/svntogit/packages.git/ git].
 +
 
 +
; [[PKGBUILD]]: Un script de [[Bash]] que contiene la dirección URL del código fuente junto con las instrucciones de compilación y de empaquetado.
 +
 
 +
; [[makepkg]]: Herramienta del intérprete de órdenes de ABS  que lee los PKGBUILD, los descarga automáticamente, compila el código fuente y crea un {{ic|.pkg.tar*}} de acuerdo con lo dispuesto en la matriz {{ic|PKGEXT}} presente en {{ic|makepkg.conf}}. También puede utilizar makepkg para hacer sus propios paquetes desde el repositorio [[AUR]] o desde fuentes de terceros. Consulte el artículo de la wiki [[Creating packages]] para obtener más información.
  
=== '''ABS''' es un concepto similar ===
+
; [[pacman (Español)|pacman]]: pacman es completamente independiente, pero necesita ser invocado o por makepkg o manualmente, para instalar y eliminar los paquetes construidos y para resolver las dependencias.
  
ABS es un componente de un árbol de directorios (el árbol ABS) que reside en {{ic|/var/abs}}. Este árbol tiene muchos subdirectorios, cada uno dentro de una categoría y nombrado por el nombre de su respectivo paquete. Este árbol representa (pero no contiene) todo el ''sotfware oficial de Arch'', recuperable a través del sistema SVN. Se hace referencia a cada subdirectorio, nominado por el nombre del paquete, como un «ABS», de igual manera a como si se refiriese a un «puerto». Estos ABS (o subdirectorios) no contienen el paquete de software ni el código fuente, sino más bien un archivo [[PKGBUILD]] (y a veces otros archivos). Un PKGBUILD es un sencillo script de compilación de Bash -un archivo de texto que contiene las instrucciones de compilación y de empaquetado, así como la dirección URL del archivo '''tarball fuente''' adecuado para ser descargado-. (El componente más importante de ABS son los propios PKGBUILD). Mediante la ejecución de la orden [[makepkg]] de ABS, el sistema primero compila y luego ''empaqueta'' el software, dentro del directorio de compilación, antes de ser instalado. A continuación, se puede utilizar [[pacman]], el gestor de paquetes de Arch Linux, para instalar, actualizar y eliminar el nuevo paquete.
+
; [[Arch User Repository|AUR]]: El repositorio de usuarios de Arch está separado de ABS, pero los PKGBUILD de AUR (sin soporte) pueden ser usados con la herramienta makepkg para compilar y empaquetar el software. En contraste con el árbol de ABS que reside en el propio equipo, AUR existe como una interfaz web. Contiene miles de PKGBUILD aportados por los usuarios para empaquetar software que no está disponible como un paquete oficial de Arch. Si necesita construir un paquete que esté fuera de la estructura oficial de Arch, es probable que pueda encontralo en AUR.
  
=== Descripción general de ABS ===
+
{{Advertencia|Se asume que los PKGBUILD oficiales son paquetes [[DeveloperWiki:Building_in_a_Clean_Chroot|compilados en un entorno chroot limpio]]. Crear software en un sistema de compilación «sucio» puede fallar o causar un comportamiento inesperado en el tiempo de ejecución, ya que si el sistema de compilación detecta las dependencias de forma dinámica, el resultado dependerá de qué paquetes estén disponibles en el sistema de compilación.}}
  
«ABS» puede ser usado como un término genérico, ya que incluye y se basa en otros componentes adicionales, por lo que, aunque no es técnicamente exacto, «ABS» puede referirse a la siguiente estructura como un conjunto completo de herramientas:
+
=== Árbol SVN ===
  
; El árbol ABS: La estructura de directorios ABS; una jerarquía de SVN en {{ic|/var/abs/}} ubicado en el propio equipo (local). Contiene muchos subdirectorios, nominados por el software oficial de Arch Linux, disponibles todos desde los repositorios especificados en {{ic|/etc/abs.conf}}, pero no los propios paquetes. El árbol se crea después de instalar el paquete {{pkg|abs}} con [[pacman (Español)|pacman]] y posteriormente ejecutando el script {{ic|abs}}.
+
Los [[repositories|repositorios]] ''core'', ''extra'' y ''testing'' están en el repositorio SVN ''packages'' para [[#Descarga no recursiva|descargar]]. Los repositorios ''community'' y ''multilib'' están en el repositorio SVN ''community''.
  
; [[PKGBUILD]]: Un script de [[Bash]] que contiene la dirección URL del código fuente junto con las instrucciones de compilación y de empaquetado.
+
Cada paquete tiene su propio subdirectorio. Dentro de él, están los directorios {{ic|repos}} y {{ic|trunk}}. El directorio {{ic|repos}} se ramifica por el nombre del repositorio (por ejemplo, ''core'') y por la arquitectura. Los PKGBUILD y los archivos encontrados en {{ic|repos}} se utilizan en las compilaciones oficiales. Los archivos que se encuentran en {{ic|trunk}} son utilizados por los desarrolladores para prepararlos antes de ser copiados a {{ic|repos}}.
  
; [[makepkg]]: La orden de shell de ABS  que lee los PKGBUILD, los descarga automáticamente, compila el código fuente y crea un {{ic|.pkg.tar*}} de acuerdo con lo dispuesto en la matriz {{ic|PKGEXT}} en {{ic|makepkg.conf}}. También puede utilizar makepkg para hacer sus propios paquetes desde el repositorio [[AUR]] o desde fuentes de terceros. (Consulte el artículo de la wiki [[Creating Packages]].)
+
Por ejemplo, el árbol para {{pkg|acl}} se ve así:
  
; [[pacman (Español)|pacman]]: Pacman es completamente independiente, pero necesita ser invocado o por makepkg o manualmente, para instalar y eliminar los paquetes construidos y para resolver las dependencias.
+
acl
 +
acl/repos
 +
acl/repos/core-i686
 +
acl/repos/core-i686/PKGBUILD
 +
acl/repos/core-x86_64
 +
acl/repos/core-x86_64/PKGBUILD
 +
acl/trunk
 +
acl/trunk/PKGBUILD
  
; [[Arch User Repository|AUR]]: El repositorio de usuarios de Arch está separado de ABS, pero los PKGBUILD de AUR (sin soporte) pueden ser usados con la herramienta makepkg para compilar y empaquetar el software. En contraste con el árbol de ABS que reside en el propio equipo, el AUR existe como una interfaz web. Contiene miles de PKGBUILD aportados por el usuario para empaquetar software no disponible como un paquete oficial de Arch. Si necesita construir un paquete que esté fuera de la estructura oficial de Arch, es probable que pueda encontralo en AUR.
+
El código fuente para el paquete no está presente en el directorio ABS. En cambio, el {{ic|PKGBUILD}} contiene una URL desde la que se descargará el código fuente cuando se vaya a compilar el paquete.
  
 
== ¿Por qué utilizar ABS? ==
 
== ¿Por qué utilizar ABS? ==
  
El Sistema de Compilación de Arch se utiliza para:
+
El sistema de sompilación de Arch (siglas en inglés ABS) se utiliza para:
 
* Compilar o recopilar un paquete, por cualquier motivo.
 
* Compilar o recopilar un paquete, por cualquier motivo.
* Hacer e instalar nuevos paquetes desde el código fuente del software para los que no se dispone todavía de paquetes (véase [[Creating Packages]]).
+
* Hacer e instalar nuevos paquetes desde el código fuente del software para los que no se dispone todavía de paquetes —binarios— (véase [[Creating packages]]).
 
* Personalizar paquetes existentes para satisfacer las necesidades propias (activar o desactivar opciones, aplicar parches...).
 
* Personalizar paquetes existentes para satisfacer las necesidades propias (activar o desactivar opciones, aplicar parches...).
* Reconstruir todo el sistema usando los flags del compilador, «al modo FreeBSD» (por ejemplo, con [[pacbuilder]]).
+
* Reconstruir todo el sistema usando los flags del compilador, «al modo FreeBSD» (por ejemplo, con {{AUR|pacman-src-git}}).
* Construir e instalar limpiamente su propio kernel personalizado (véase [[Kernel Compilation]]).
+
* Construir e instalar limpiamente su propio kernel personalizado (véase [[Kernel Compilation]]).
 
* Obtener los módulos del kernel para que funcionen con el propio kernel personalizado.
 
* Obtener los módulos del kernel para que funcionen con el propio kernel personalizado.
* Compilar e instalar fácilmente una versión nueva, vieja, beta, o en desarrollo de un paquete de Arch modificando el número de la versión en el PKGBUILD.
+
* Compilar e instalar fácilmente una versión reciente, antigua, beta, o en desarrollo de un paquete de Arch modificando el número de la versión en el PKGBUILD.
  
 
ABS no es necesario para usar Arch Linux, pero es útil para la automatización de ciertas tareas de compilación del código fuente.
 
ABS no es necesario para usar Arch Linux, pero es útil para la automatización de ciertas tareas de compilación del código fuente.
Line 71: Line 85:
 
== ¿Cómo utilizar ABS? ==
 
== ¿Cómo utilizar ABS? ==
  
La compilación de paquetes utilizando ABS consta de los siguientes pasos:
+
Para obtener el [[PKGBUILD (Español)|PKGBUILD]] necesario para construir un paquete desde fuente, se pueden usar dos métodos: [[Svn]] o [[Git]] usando el paquete {{pkg|asp}}, el cual esta diseñado para trabajar con repositorios svntogit. A continuación se va a describir el método basado en svn y el método  [[#Obtener PKGBUILD usando Git|basado en git]].
# Instale el paquete {{pkg|abs}} con [[pacman (Español)|pacman]].
 
# Ejecute {{ic|abs}}, como root, de modo que cree el árbol ABS sincronizado con los servidores de Arch Linux.
 
# Copie los archivos de compilación (por lo general ubicados en {{ic|/var/abs/<repo>/<pkgname>}}) a un directorio de compilación.
 
# Vaya a ese directorio, edite PKGBUILD (si se desea o es necesario) y ejecute '''makepkg'''.
 
# makepkg, basándose en las instrucciones de PKGBUILD, descargará el paquete fuente correspondiente, lo descomprimirá, lo parcheará si fuera el caso, lo construirá de acuerdo a {{ic|CFLAGS}} especificado en {{ic|makepkg.conf}}, y, finalmente, comprimirá los archivos compilados en un paquete con la extensión {{ic|.pkg.tar.gz}} o {{ic|.pkg.tar.xz}}.
 
# La instalación del paquete creado es tan fácil como ejecutar {{ic|pacman -U <archivo.pkg.tar.xz>}}. La eliminación del paquete también se gestiona con pacman.
 
  
=== Herramientas de instalación ===
+
=== Obtener PKGBUILD usando Svn ===
  
Para utilizar ABS, primero tiene que [[pacman (Español)|instalar]] el paquete {{pkg|abs}} de los [[Official Repositories (Español)|repositorios oficiales]].
+
==== Requisitos previos ====
  
Esto instalará los scripts de sincronización de ABS, varios scripts de compilación y [[rsync]] (como una dependencia, si no lo tiene).
+
[[Help:Reading_(Español)#Instalación de paquetes|Instale]] el paquete {{Pkg|subversion}}.
  
Sin embargo, antes de que se pueda realmente construir cualquier cosa, también es necesario tener instaladas las herramientas básicas de compilación. Estas son hábilmente recogidas en el [[Pacman (Español)#Installing_package_groups|grupo de paquetes]] {{grp|base-devel}}. Este grupo puede ser instalado con pacman.
+
==== Descarga no recursiva ====
  
=== /etc/abs.conf ===
+
{{Advertencia|No descargue todo el repositorio, tan solo siga las instrucciones siguientes. El repositorio completo de SVN es gigantesco. No solo necesitaría bastante espacio en su disco, sino que también le costaría mucho al servidor de archlinux.org su descarga. Si abusa de este servicio, su dirección puede ser bloqueada. Nunca ejecute scripts en el SVN público.
 +
}}
  
Como root, edite {{ic|/etc/abs.conf}} para incluir los repositorios deseados.
+
Para descargar las ramas ''core'', ''extra'', y ''testing'' de los [[Official_repositories_(Español)|repositorios]]:
  
Retire el signo {{ic|!}} de delante de los repositorios correspondientes. Por ejemplo:
+
  $ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/packages</nowiki>
  REPOS=(core extra community !testing)
 
  
=== El árbol ABS ===
+
Para descargar las ramas ''community'' y ''multilib'' de los repositorios:
  
El árbol ABS es una jerarquía de directorios SVN localizados en {{ic|/var/abs}} con una estructura similar a la siguiente:
+
  $ svn checkout --depth=empty <nowiki>svn://svn.archlinux.org/community</nowiki>
  
{{bc|<nowiki>
+
En ambos casos se crea un directorio vacío, el cual tiene conocimiento de que será el destino de las ramas.
| -- core/
 
|    || -- acl/
 
|    ||    || -- PKGBUILD
 
|    || -- attr/
 
|    ||    || -- PKGBUILD
 
|    || -- abs/
 
|    ||    || -- PKGBUILD
 
|    || -- autoconf/
 
|    ||    || -- PKGBUILD
 
|    || -- ...
 
| -- extra/
 
|    || -- acpid/
 
|    ||    || -- PKGBUILD
 
|    || -- apache/
 
|    ||    || -- PKGBUILD
 
|    || -- ...
 
| -- community/
 
|    || -- ...
 
</nowiki>}}
 
  
El árbol ABS tiene exactamente la misma estructura que la base de datos del paquete:
+
==== Rama de un paquete ====
  
* Primer nivel: Nombre del repositorio.
+
En el directorio conteniendo el repositorio svn que esta revisando (esto es, ''packages'' o ''community''), ejecute:
* Segundo nivel: Directorios con los nombres de los paquetes.
 
* Tercer nivel: PKGBUILD (contiene la información necesaria para construir un paquete) y otros archivos relacionados (parches, así como otros archivos necesarios para construir el paquete).
 
  
El código fuente para el paquete no está presente en el directorio ABS. En su lugar, el archivo '''PKGBUILD''' contiene una URL de donde descargar el código fuente para cuando el paquete se vaya a construir. Así, el tamaño de árbol ABS es bastante pequeño.
+
$ svn update ''nombre-paquete''
  
==== Descargar el árbol ABS ====
+
Esto va a descargar el paquete dentro de su repositorio local. A partir de ahora cada vez que se ejecute ''svn update'' en el directorio del repositorio, el directorio local del paquete también se actualizara.
Como root, ejecute:
 
# abs
 
  
El árbol ABS se creará en {{ic|/var/abs}}. Tenga en cuenta que cada rama del árbol ABS se corresponden a los repositorios habilitados en {{ic|/etc/abs.conf}}.
+
Si se especifica un paquete que no existe, svn no le mostrara una advertencia, solo mostrara algo similar a "At revision 115847", y no creara ningún archivo. Si esto sucede:
 +
* Confirme que escribió el nombre del paquete correctamente
 +
* Confirme que el paquete no se ha movido a otro repositorio (por ejemplo de ''community'' a ''extra'')
 +
* Revise https://www.archlinux.org/packages para verificar si el paquete es construido con fuentes de otro paquete (por ejemplo, {{Pkg|python-tensorflow}} es construido con el PKGBUILD de {{Pkg|tensorflow}})
  
La orden abs se debe ejecutar periódicamente para mantenerse sincronizado con los repositorios oficiales. También se pueden descargar archivos individuales de paquetes ABS con:
+
{{Sugerencia|Para descargar versiones antiguas de un paquete, consulte [[#Descargar una versión anterior de un paquete]].}}
  
# abs <repository>/<package>
+
Es aconsejable actualizar todas las ramas que ha descargado si desea recompilar paquetes con versiones mas recientes de los repositorios. Para actualizar ejecute:
De esta manera no se tiene que revisar todo el árbol ABS para construir un solo paquete.
 
  
=== /etc/makepkg.conf ===
+
$ svn update
  
El archivo {{Ic|/etc/makepkg.conf}} especifica las variables globales del entorno y los flags del compilador que desee editar si está utilizando un sistema SMP, o especificar otras optimizaciones deseadas. Los ajustes por defecto son optimizaciones para i686 y x86_64 que no tendrán ningún problema para esas arquitecturas en sistemas con una sola CPU. (Los valores predeterminados funcionarán para la máquina SMP, pero solo utilizará un core/CPU al compilar - véase [[makepkg.conf]].)
+
=== Obtener PKGBUILD usando Git ===
  
==== Establecer la variable PACKAGER en /etc/makepkg.conf ====
+
Es necesario [[Help:Reading_(Español)#Instalación de paquetes|instalar]] el paquete {{Pkg|asp}}.
  
Establecer la variable PACKAGER en {{ic|/etc/makepkg.conf}} es una operación opcional, pero ''muy recomendable''. Esta opción permite establecer un "flag" para identificar rápidamente los paquetes que se han construido y/o instalado por el usuario, en lugar del mantenedor oficial. Esto se logra fácilmente utilizando '''expac''' disponible desde el repositorio community:
+
Para clonar el repositorio del paquete, ejecute:
  
===== Mostrar todos los paquetes (incluidos los de AUR) =====
+
  $ asp checkout ''nombre-paquete''
  $ grep myname /etc/makepkg.conf
 
PACKAGER="myname <myemail@myserver.com>"
 
  
$ expac "%n %p" | grep "myname" | column -t
+
Esta orden clona el repositorio git del paquete en un directorio con el mismo nombre del paquete.
archey3 myname
 
binutils myname
 
gcc myname
 
gcc-libs myname
 
glibc myname
 
tar myname
 
  
===== Motrar solo los paquetes contenidos en los Repositorios =====
+
Para actualizar el repositorio git, ejecute {{ic|asp update}} seguido de {{ic|git pull}} dentro del repositorio git.
  
Este ejemplo solo muestra los paquetes contenidos en los repositorios definidos en {{ic|/etc/pacman.conf}}:
+
Es más, se pueden usar el resto de órdenes de git para revisar versiones antiguas o para ver el histórico del paquete. Para más información sobre el uso de git, consulte la pagina de [[git]].
  
$ . /etc/makepkg.conf; grep -xvFf <(pacman -Qqm) <(expac "%n\t%p" | grep "$PACKAGER$" | cut -f1)
+
Si desea copiar una instantánea del [[PKGBUILD (Español)|PKGBUILD]] para el paquete actual, ejecute:
binutils
 
gcc
 
gcc-libs
 
glibc
 
tar
 
  
=== Crear un directorio de compilación ===
+
$ asp export ''nobre-paquete''
  
Se recomienda crear una carpeta de compilación donde llevar a cabo la compilación, nunca se debe modificar el árbol ABS compilando los paquetes dentro de ella, ya que los datos se perderán (sobreescribiéndose) en cada actualización de ABS. Es una buena práctica utilizar el directorio «home», aunque algunos usuarios de Arch prefieren crear una carpeta «local» en {{ic|/var/abs/}}, estableciendo la propiedad del usuario normal.
+
=== Compilar el paquete ===
  
Cree un directorio de compilación, por ejemplo:
+
Consulte [[makepkg_(Español)#Configuración|makepkg]] para configurar ''makepkg'' para la compilación de los [[PKGBUILD (Español)]] que esta revisando.
  
$ mkdir -p $HOME/abs
+
Después, copie el directorio que contiene el [[PKGBUILD (Español)]] a un lugar nuevo. Allí, modifique lo que considere necesario y utilice ''makepkg'' como se describe en [[makepkg (Español)#Uso]] para crear un nuevo paquete.
  
Copie el ABS desde el árbol ({{ic|/var/abs/<repository>/<pkgname>}}) al directorio de compilación.
+
== Consejos y trucos ==
  
=== Compilar el paquete ===
+
=== Conservar paquetes modificados ===
 +
 
 +
La actualización del sistema con pacman reemplazará un paquete modificado de ABS con el paquete del mismo nombre presente en los repositorios oficiales. Consulte las siguientes instrucciones sobre cómo evitar esto.
 +
 
 +
Inserte una matriz de grupo en PKGBUILD y agregue el paquete a un grupo llamado {{ic|modified}}.
 +
 
 +
{{hc|PKGBUILD|2=
 +
groups=('modified')
 +
}}
 +
 
 +
Agregue este grupo a la sección {{ic|IgnoreGroup}} en {{ic|/etc/pacman.conf}}.
 +
 
 +
{{hc|/etc/pacman.conf|2=
 +
IgnoreGroup = modified
 +
}}
 +
 
 +
Si hay nuevas versiones disponibles en los repositorios oficiales durante una actualización del sistema, pacman imprime una nota que omite esta actualización porque está en la sección IgnoreGroup. En este punto, el paquete modificado debe reconstruirse a partir de ABS para evitar actualizaciones parciales.
  
En nuestro ejemplo, vamos a construir el paquete del gestor de pantalla ''slim''.
+
=== Descargar una versión anterior de un paquete ===
  
Copie el ABS slim desde el árbol ABS a un directorio de compilación:
+
Dentro del repositorio svn que esté revisando, como se ha descrito en [[#Descarga no recursiva]] (por ejemplo, «packages» o «community»), examine el registro:
$ cp -r /var/abs/extra/slim/ ~/abs
 
  
 +
$ svn log ''nombre-paquete''
  
Acceda al directorio de compilación:
+
Encuentre la versión que le interesa, después especifique la versión que desea descargar. Por ejemplo, para descargar la versión {{ic|r1729}} ejecute:
$ cd ~/abs/slim
 
  
Modifique el PKGBUILD para añadir o eliminar el apoyo a determinados componentes, para aplicar parches, para cambiar versiones de paquetes, etc. (opcional):
+
  $ svn update -r1729 ''nombre-paquete''
  $ nano PKGBUILD
 
  
Ejecute makepkg como usuario normal (con el parámetro {{ic|-s}} para instalar con la resolución automática de dependencias):
+
Esto actualizará la copia en el directorio local del paquete ''nombre-paquete'' a la versión deseada.
$ makepkg -s
 
  
{{Nota|Antes de que muestre error por la ausencia (make) de dependencias, recuerde que se supone que el grupo {{Grp|base}} está instalado en todos los sistemas de Arch Linux. El grupo «base-devel» se supone que se instala cuando se construye con '''makepkg'''. Véase [[#Herramientas de instalación]].}}
+
También es posible especificar una fecha. Si no hay una versión en ese día, svn tomara la versión mas reciente antes de ese momento. El ejemplo siguiente localiza en el repositorio una versión ocurrida el 2009-03-03:
  
Instale como root:
+
  $ svn update -r{20090303} ''nombre-paquete''
  # pacman -U slim-1.3.0-2-i686.pkg.tar.xz
 
  
Eso es todo. Acaba de construir slim desde el código fuente y lo ha instalado limpiamente en su sistema con pacman. La eliminación del  paquete también es manejado por pacman con {{ic|pacman -R slim}}.
+
Es posible verificar los paquetes en las versiones antes de que se hayan movido a otro repositorio también; revise los registros a fondo para la fecha en que se movieron o el último número de revisión.
  
El método ABS agrega un nivel de comodidad y automatización, mientras que todavía mantiene una total transparencia y control de las funciones de compilación e instalación por su inclusión en PKGBUILD.
+
== Otras herramientas ==
  
==== fakeroot ====
+
* [http://xyne.archlinux.ca/projects/pbget/ pbget] — obtiene PKGBUILD para paquetes individuales directamente desde la interfaz web. Incluye soporte de AUR.
En esencia, se siguen los mismos pasos que se realizan en el método tradicional (que generalmente incluyen {{ic|./configure, make, make install}}) pero el software se instala en un entorno ''fake root''. (Un entorno ''fake root'' es simplemente un subdirectorio dentro del directorio de compilación que funciona y se comporta como el directorio root del sistema. Conjuntamente con el programa '''fakeroot''', makepkg crea un directorio root falso, e instala los binarios compilados y los archivos asociados a él, con '''root'''  como propietario). El ''fake root'', o árbol de subdirectorios que contiene el software compilado, se comprime en un archivo con la extensión {{ic|.pkg.tar.xz}}, o un ''paquete''. Cuando se invoca, pacman extrae el paquete (lo instala) en el directorio root real del sistema ({{ic |/}}).
+
* [https://github.com/falconindy/asp asp] — una herramienta para administrar los archivos fuente de la compilación utilizados para crear paquetes de Arch Linux. Utiliza la interfaz git que ofrece fuentes más actualizadas.

Latest revision as of 14:56, 21 September 2018

Estado de la traducción: este artículo es una versión traducida de Arch Build System. Fecha de la última traducción/revisión: 2018-09-21. Puedes ayudar a actualizar la traducción, si adviertes que la versión inglesa ha cambiado: ver cambios.

Arch Build System («sistema de compilación de Arch»), ABS para abreviar, es un sistema tipo ports para la construcción y empaquetado de software desde el código fuente. Mientras pacman es la herramienta especializada de Arch para la gestión de los paquetes binarios (incluyendo los paquetes creados con ABS), el sistema ABS es una colección de herramientas para compilar el código fuente y crear paquetes .pkg.tar.xz instalables.

Ports es un sistema utilizado por los sistemas basados en *BSD para automatizar el proceso de compilación del software desde el código fuente. El sistema utiliza un puerto para descargar, descomprimir, parchear, compilar e instalar el software especificado. Un puerto no es más que una carpeta pequeña creada en el ordenador del usuario, con el nombre del software correspondiente para ser instalado, que contiene algunos archivos con las instrucciones para construir e instalar el software desde el código fuente. Esto hace que la instalación del software sea tan simple como escribir make o make install clean desde la carpeta que sirve de puerto.

ABS es un concepto similar. ABS es un componente de un árbol de directorios (el árbol ABS) que se puede verificar utilizando SVN. Este árbol representa (pero no contiene) todo el sotfware oficial de Arch. Se hace referencia a cada subdirectorio, nominado por el nombre del paquete, como un «ABS», de igual manera a como si se refiriese a un «puerto». Estos ABS (o subdirectorios) no contienen el paquete de software ni el código fuente, sino más bien un archivo PKGBUILD y, a veces, otros archivos. Mediante la ejecución de la orden makepkg dentro de un directorio que contiene un PKGBUILD, el sistema primero compila y luego empaqueta el software, dentro del directorio de compilación, antes de ser instalado. A continuación, se puede utilizar pacman, el gestor de paquetes de Arch Linux, para instalar o actualizar el nuevo paquete.

Descripción general de ABS

«ABS» puede ser usado como un término genérico, ya que incluye y se basa en otros componentes adicionales, por lo que, aunque no es técnicamente exacto, «ABS» puede referirse a la siguiente estructura como un conjunto completo de herramientas:

El árbol SVN
La estructura del directorio que contiene los archivos necesarios para compilar todos los paquetes oficiales, pero no los paquetes en sí ni los archivos fuente del software. Estos están disponibles en los repositorios svn y git.
PKGBUILD
Un script de Bash que contiene la dirección URL del código fuente junto con las instrucciones de compilación y de empaquetado.
makepkg
Herramienta del intérprete de órdenes de ABS que lee los PKGBUILD, los descarga automáticamente, compila el código fuente y crea un .pkg.tar* de acuerdo con lo dispuesto en la matriz PKGEXT presente en makepkg.conf. También puede utilizar makepkg para hacer sus propios paquetes desde el repositorio AUR o desde fuentes de terceros. Consulte el artículo de la wiki Creating packages para obtener más información.
pacman
pacman es completamente independiente, pero necesita ser invocado o por makepkg o manualmente, para instalar y eliminar los paquetes construidos y para resolver las dependencias.
AUR
El repositorio de usuarios de Arch está separado de ABS, pero los PKGBUILD de AUR (sin soporte) pueden ser usados con la herramienta makepkg para compilar y empaquetar el software. En contraste con el árbol de ABS que reside en el propio equipo, AUR existe como una interfaz web. Contiene miles de PKGBUILD aportados por los usuarios para empaquetar software que no está disponible como un paquete oficial de Arch. Si necesita construir un paquete que esté fuera de la estructura oficial de Arch, es probable que pueda encontralo en AUR.
Advertencia: Se asume que los PKGBUILD oficiales son paquetes compilados en un entorno chroot limpio. Crear software en un sistema de compilación «sucio» puede fallar o causar un comportamiento inesperado en el tiempo de ejecución, ya que si el sistema de compilación detecta las dependencias de forma dinámica, el resultado dependerá de qué paquetes estén disponibles en el sistema de compilación.

Árbol SVN

Los repositorios core, extra y testing están en el repositorio SVN packages para descargar. Los repositorios community y multilib están en el repositorio SVN community.

Cada paquete tiene su propio subdirectorio. Dentro de él, están los directorios repos y trunk. El directorio repos se ramifica por el nombre del repositorio (por ejemplo, core) y por la arquitectura. Los PKGBUILD y los archivos encontrados en repos se utilizan en las compilaciones oficiales. Los archivos que se encuentran en trunk son utilizados por los desarrolladores para prepararlos antes de ser copiados a repos.

Por ejemplo, el árbol para acl se ve así:

acl
acl/repos
acl/repos/core-i686
acl/repos/core-i686/PKGBUILD
acl/repos/core-x86_64
acl/repos/core-x86_64/PKGBUILD
acl/trunk
acl/trunk/PKGBUILD

El código fuente para el paquete no está presente en el directorio ABS. En cambio, el PKGBUILD contiene una URL desde la que se descargará el código fuente cuando se vaya a compilar el paquete.

¿Por qué utilizar ABS?

El sistema de sompilación de Arch (siglas en inglés ABS) se utiliza para:

  • Compilar o recopilar un paquete, por cualquier motivo.
  • Hacer e instalar nuevos paquetes desde el código fuente del software para los que no se dispone todavía de paquetes —binarios— (véase Creating packages).
  • Personalizar paquetes existentes para satisfacer las necesidades propias (activar o desactivar opciones, aplicar parches...).
  • Reconstruir todo el sistema usando los flags del compilador, «al modo FreeBSD» (por ejemplo, con pacman-src-gitAUR).
  • Construir e instalar limpiamente su propio kernel personalizado (véase Kernel Compilation).
  • Obtener los módulos del kernel para que funcionen con el propio kernel personalizado.
  • Compilar e instalar fácilmente una versión reciente, antigua, beta, o en desarrollo de un paquete de Arch modificando el número de la versión en el PKGBUILD.

ABS no es necesario para usar Arch Linux, pero es útil para la automatización de ciertas tareas de compilación del código fuente.

¿Cómo utilizar ABS?

Para obtener el PKGBUILD necesario para construir un paquete desde fuente, se pueden usar dos métodos: Svn o Git usando el paquete asp, el cual esta diseñado para trabajar con repositorios svntogit. A continuación se va a describir el método basado en svn y el método basado en git.

Obtener PKGBUILD usando Svn

Requisitos previos

Instale el paquete subversion.

Descarga no recursiva

Advertencia: No descargue todo el repositorio, tan solo siga las instrucciones siguientes. El repositorio completo de SVN es gigantesco. No solo necesitaría bastante espacio en su disco, sino que también le costaría mucho al servidor de archlinux.org su descarga. Si abusa de este servicio, su dirección puede ser bloqueada. Nunca ejecute scripts en el SVN público.

Para descargar las ramas core, extra, y testing de los repositorios:

$ svn checkout --depth=empty svn://svn.archlinux.org/packages

Para descargar las ramas community y multilib de los repositorios:

$ svn checkout --depth=empty svn://svn.archlinux.org/community

En ambos casos se crea un directorio vacío, el cual tiene conocimiento de que será el destino de las ramas.

Rama de un paquete

En el directorio conteniendo el repositorio svn que esta revisando (esto es, packages o community), ejecute:

$ svn update nombre-paquete

Esto va a descargar el paquete dentro de su repositorio local. A partir de ahora cada vez que se ejecute svn update en el directorio del repositorio, el directorio local del paquete también se actualizara.

Si se especifica un paquete que no existe, svn no le mostrara una advertencia, solo mostrara algo similar a "At revision 115847", y no creara ningún archivo. Si esto sucede:

  • Confirme que escribió el nombre del paquete correctamente
  • Confirme que el paquete no se ha movido a otro repositorio (por ejemplo de community a extra)
  • Revise https://www.archlinux.org/packages para verificar si el paquete es construido con fuentes de otro paquete (por ejemplo, python-tensorflow es construido con el PKGBUILD de tensorflow)
Sugerencia: Para descargar versiones antiguas de un paquete, consulte #Descargar una versión anterior de un paquete.

Es aconsejable actualizar todas las ramas que ha descargado si desea recompilar paquetes con versiones mas recientes de los repositorios. Para actualizar ejecute:

$ svn update

Obtener PKGBUILD usando Git

Es necesario instalar el paquete asp.

Para clonar el repositorio del paquete, ejecute:

$ asp checkout nombre-paquete

Esta orden clona el repositorio git del paquete en un directorio con el mismo nombre del paquete.

Para actualizar el repositorio git, ejecute asp update seguido de git pull dentro del repositorio git.

Es más, se pueden usar el resto de órdenes de git para revisar versiones antiguas o para ver el histórico del paquete. Para más información sobre el uso de git, consulte la pagina de git.

Si desea copiar una instantánea del PKGBUILD para el paquete actual, ejecute:

$ asp export nobre-paquete

Compilar el paquete

Consulte makepkg para configurar makepkg para la compilación de los PKGBUILD (Español) que esta revisando.

Después, copie el directorio que contiene el PKGBUILD (Español) a un lugar nuevo. Allí, modifique lo que considere necesario y utilice makepkg como se describe en makepkg (Español)#Uso para crear un nuevo paquete.

Consejos y trucos

Conservar paquetes modificados

La actualización del sistema con pacman reemplazará un paquete modificado de ABS con el paquete del mismo nombre presente en los repositorios oficiales. Consulte las siguientes instrucciones sobre cómo evitar esto.

Inserte una matriz de grupo en PKGBUILD y agregue el paquete a un grupo llamado modified.

PKGBUILD
groups=('modified')

Agregue este grupo a la sección IgnoreGroup en /etc/pacman.conf.

/etc/pacman.conf
IgnoreGroup = modified

Si hay nuevas versiones disponibles en los repositorios oficiales durante una actualización del sistema, pacman imprime una nota que omite esta actualización porque está en la sección IgnoreGroup. En este punto, el paquete modificado debe reconstruirse a partir de ABS para evitar actualizaciones parciales.

Descargar una versión anterior de un paquete

Dentro del repositorio svn que esté revisando, como se ha descrito en #Descarga no recursiva (por ejemplo, «packages» o «community»), examine el registro:

$ svn log nombre-paquete

Encuentre la versión que le interesa, después especifique la versión que desea descargar. Por ejemplo, para descargar la versión r1729 ejecute:

$ svn update -r1729 nombre-paquete

Esto actualizará la copia en el directorio local del paquete nombre-paquete a la versión deseada.

También es posible especificar una fecha. Si no hay una versión en ese día, svn tomara la versión mas reciente antes de ese momento. El ejemplo siguiente localiza en el repositorio una versión ocurrida el 2009-03-03:

$ svn update -r{20090303} nombre-paquete

Es posible verificar los paquetes en las versiones antes de que se hayan movido a otro repositorio también; revise los registros a fondo para la fecha en que se movieron o el último número de revisión.

Otras herramientas

  • pbget — obtiene PKGBUILD para paquetes individuales directamente desde la interfaz web. Incluye soporte de AUR.
  • asp — una herramienta para administrar los archivos fuente de la compilación utilizados para crear paquetes de Arch Linux. Utiliza la interfaz git que ofrece fuentes más actualizadas.