Difference between revisions of "Makepkg (Español)"

From ArchWiki
Jump to: navigation, search
(use https for links to archlinux.org)
(simplification and beautification of wikilinks (interactive))
(Tag: wiki-scripts)
 
(20 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 +
{{Lowercase title}}
 
[[Category:Package development (Español)]]
 
[[Category:Package development (Español)]]
 
[[Category:About Arch (Español)]]
 
[[Category:About Arch (Español)]]
 +
[[ar:Makepkg]]
 
[[el:Makepkg]]
 
[[el:Makepkg]]
 
[[en:Makepkg]]
 
[[en:Makepkg]]
 +
[[fa:Makepkg]]
 
[[fr:makepkg]]
 
[[fr:makepkg]]
 
[[it:Makepkg]]
 
[[it:Makepkg]]
 +
[[ja:Makepkg]]
 
[[nl:Makepkg]]
 
[[nl:Makepkg]]
 
[[pt:Makepkg]]
 
[[pt:Makepkg]]
 
[[ru:Makepkg]]
 
[[ru:Makepkg]]
 
[[sr:Makepkg]]
 
[[sr:Makepkg]]
[[tr:Makepkg]]
+
[[zh-hans:Makepkg]]
[[zh-CN:Makepkg]]
+
{{Related articles start}}
{{Lowercase title}}
+
{{Related|Creating packages}}
{{Article summary start}}
+
{{Related|PKGBUILD}}
{{Article summary text|An overview of Arch Linux's package build utility.}}
+
{{Related|Arch User Repository}}
{{Article summary heading|Overview}}
+
{{Related|pacman}}
{{Article summary text|{{Package management overview (Español)}}}}
+
{{Related|Official repositories}}
{{Article summary heading|Related}}
+
{{Related|Arch Build System}}
{{Article summary wiki|Creating Packages}}
+
{{Related articles end}}
{{Article summary wiki|makepkg.conf}}
 
{{Article summary heading|Resources}}
 
{{Article summary link|makepkg(8) Manual Page|https://www.archlinux.org/pacman/makepkg.8.html}}
 
{{Article summary end}}
 
  
 
makepkg es usado para compilar y construir paquetes capaces de instalar mediante [[pacman]], el manejador de paquetes de Arch Linux. makepkg es un script que automatiza el proceso de construcción de paquetes; este puede descargar y validar archivos fuente, resolver dependencias, configurar los parámetros de tiempo de compilación, compilar las fuentes e instalarlo dentro de un root temporal.
 
makepkg es usado para compilar y construir paquetes capaces de instalar mediante [[pacman]], el manejador de paquetes de Arch Linux. makepkg es un script que automatiza el proceso de construcción de paquetes; este puede descargar y validar archivos fuente, resolver dependencias, configurar los parámetros de tiempo de compilación, compilar las fuentes e instalarlo dentro de un root temporal.
Line 27: Line 27:
 
El paquete makepkg lo provee el paquete  {{Pkg|pacman}}.
 
El paquete makepkg lo provee el paquete  {{Pkg|pacman}}.
  
== Configuracion ==
+
== Configuración ==
  
El archivo principal de configuración de makepkg es {{ic|/etc/makepkg.conf}} . la mayoría de los usuarios querrán configurar estas opciones de makepkg antes de construir cualquier paquete (por ejemplo modificar las variables {{Ic|MAKEFLAGS}} en sistemas con soporte SMP para reducir tiempos de compilación, o personalizr la variable  {{Ic|PACKAGER}} para personalizar paquetes. Lea la documentación de {{Ic|PACKAGER}} para más detalles
+
El archivo principal de configuración de makepkg es {{ic|/etc/makepkg.conf}} . la mayoría de los usuarios querrán configurar estas opciones de makepkg antes de construir cualquier paquete (por ejemplo modificar las variables {{Ic|MAKEFLAGS}} en sistemas con soporte SMP para [[#Recomendaciones|reducir tiempos de compilación]] , o personalizar la variable  {{Ic|PACKAGER}} para personalizar paquetes. Lea la documentación de {{Ic|PACKAGER}} para más detalles
  
 
Para poder instalar paquetes con makepkg sin ser usuario administrador (con {{Ic|makepkg -s}}, información más delante), instale [[sudo]] y agregue los usuarios con estos privilegios en el archivo to {{ic|/etc/sudoers}}:
 
Para poder instalar paquetes con makepkg sin ser usuario administrador (con {{Ic|makepkg -s}}, información más delante), instale [[sudo]] y agregue los usuarios con estos privilegios en el archivo to {{ic|/etc/sudoers}}:
Line 44: Line 44:
  
 
Luego modifique la variable {{Ic|PKGDEST}} en el archivo {{ic|/etc/makepkg.conf}} de acuerdo a esta directorio.
 
Luego modifique la variable {{Ic|PKGDEST}} en el archivo {{ic|/etc/makepkg.conf}} de acuerdo a esta directorio.
 +
 +
=== Información del empaquetador ===
 +
 +
Cada paquete es etiquetado con meta información que identifica entre otros el ''packager''. Por defecto, paquetes compilados por el usuario son marcados con {{ic|Unknown Packager}}. Si múltiples usuarios van a compilar paquetes en un sistema o si planea distribuir sus paquetes con otros usuarios, es conveniente proveer un contacto real. Esto se puede hacer modificando la variable {{ic|PACKAGER}} en el archivo {{ic|makepkg.conf}}.
 +
 +
Para revisar esta variable en un paquete instalado ejecute:
 +
 +
{{hc|$ pacman -Qi ''paquete''|<nowiki>
 +
...
 +
Packager      : John Doe <john@doe.com>
 +
...
 +
</nowiki>}}
 +
 +
Para firmar sus paquete automaticamente, tambien modifique la variable {{ic|GPGKEY}} en el archivo {{ic|makepkg.conf}}.
 +
 +
=== Resultado del paquete  ===
 +
 +
Por defecto, ''makepkg'' crea tarballs de los paquetes en el directorio de trabajo y descarga las fuentes en el directorio {{ic|src/}}. Rutas personalizadas pueden ser configuradas, por ejemplo para mantener todos los paquetes construidos en {{ic|~/build/packages/}} y todas las fuentes en {{ic|~/build/sources/}}.
 +
 +
Configure las siguientes variables en {{ic|makepkg.conf}}, si lo considera necesario:
 +
 +
* {{ic|PKGDEST}} &mdash; directorio para guardar los paquetes resultantes
 +
* {{ic|SRCDEST}} &mdash; directorio para guardar datos [[PKGBUILD_(Español)#Variables|fuente]], (links simbólicos seran puestos en {{ic|src/}} si la ruta es diferente)
 +
* {{ic|SRCPKGDEST}} &mdash; directorio para guardar las fuentes resultantes (construido con {{ic|makepkg -S}})
 +
 +
=== Verificación de firmas ===
 +
 +
{{Nota|La implementación de verificación de firmas en ''makepkg'' no usa el llavero de pacman, en su lugar depende en el llavero del usuario. [http://allanmcrae.com/2015/01/two-pgp-keyrings-for-package-management-in-arch-linux/]
 +
}}
 +
 +
Si una firma de la forma {{ic|.sig}} o {{ic|.asc}} es parte del [[PKGBUILD_(Español)|PKGBUILD]] en la sección ''source'', ''makepkg'' automáticamente intentara [[GnuPG#Verify a signature|verificarla]]. En caso de que el llavero del usuario no contenga la clave pública para la verificación ''makepkg'' abortara el procedimiento con un mensaje que la clave PGP no pudo ser verificada.
 +
 +
Si una clave pública es necesaria, el [[PKGBUILD_(Español)|PKGBUILD]] probablemente tendrá una sección [[PKGBUILD#validpgpkeys|validpgpkeys]] con las IDs requeridas. Se puede [[GnuPG_(Español)#Importar una clave|importar]] manualmente, o la puede ubicar en un [[GnuPG#Use_a_keyserver|keyserver]] e importarla desde allí.
  
 
=== {{Ic|fakeroot}} ===
 
=== {{Ic|fakeroot}} ===
  
{{Ic|fakeroot}} permite al usuario usar los permisos necesarios de root para crear paquetes en el ambiente de construcción sin necesidad de alterar todo el sistema. Si el proceso de construcción trata de alterar archivos fuera del ambiente de construcción entonces aparecerán mensajes de error y el empaquetado habrá fallado – esto es muy útil para verificar la calidad, seguridad e integridad de los PKGBUILD para su distribución. Por default  {{Ic|fakeroot}} esta habilitado en el archivo de configuración {{ic|/etc/makepkg.conf}}; los usuarios pueden utilizar el prefijo {{Ic|!}} en la variable  {{Ic|BUILDENV}} para deshabilitar esto
+
{{Ic|fakeroot}} permite al usuario usar los permisos necesarios de root para crear paquetes en el ambiente de construcción sin necesidad de alterar todo el sistema. Si el proceso de construcción trata de alterar archivos fuera del ambiente de construcción entonces aparecerán mensajes de error y el empaquetado habrá fallado – esto es muy útil para verificar la calidad, seguridad e integridad de los PKGBUILD para su distribución. Por default  {{Ic|fakeroot}} esta habilitado en el archivo de configuración {{ic|/etc/makepkg.conf}}; los usuarios pueden utilizar el prefijo {{Ic|!}} en la variable  {{Ic|BUILDENV}} para deshabilitar esto.
 +
 
 
== Uso ==
 
== Uso ==
Antes de continuar, asegúrese de que el grupo de paquetes “base-devel” estén instalados. Los paquetes pertenecientes a este grupo no necesariamente tienen que ser  listados como dependencias en los  [[PKGBUILD]]. Asegúrese de tener instalado este paquete ejecutando (como root):
+
Antes de continuar, asegúrese de que el grupo de paquetes {{Grp|base-devel}} estén instalados. Los paquetes pertenecientes a este grupo no necesariamente tienen que ser  listados como dependencias en los  [[PKGBUILD]]. Asegúrese de tener instalado este paquete ejecutando (como root):
  
 
  # pacman -S base-devel
 
  # pacman -S base-devel
  
{{Nota|Antes de quejarse por dependencias incumplidas en la rutina make, recuerde que  se da por entendido que el grupo “base” esta instalado por default en todos los sistemas Arch Linux. El paquete “base-devel” se da por entendió que también esta instalado cuando se crean paquetes con makepkg.}}
+
{{Nota|
 +
* Antes de quejarse por dependencias incumplidas en la rutina make, recuerde que  se da por entendido que el grupo “base” esta instalado por default en todos los sistemas Arch Linux. El paquete “base-devel” se da por entendió que también esta instalado cuando se crean paquetes con makepkg.
 +
* Ejecutar ''makepkg'' como root no esta [https://lists.archlinux.org/pipermail/pacman-dev/2014-March/018911.html permitido]. Debido a que un {{ic|PKGBUILD}} puede incluir comandos arbitrarios, construir como root se considera riesgoso.
 +
}}
  
Para crear un paquete primero debe tener un a [[PKGBUILD]], como se describe en la guía de in [[Creating Packages]], o obtenga uno del  [[Arch Build System|ABS tree]], [[Arch User Repository]], u obténgalo de alguna otra fuente.   
+
Para crear un paquete primero debe tener un [[PKGBUILD]], como se describe en la guía de in [[Creating packages]], o obtenga uno del  [[Arch Build System|ABS tree]], [[Arch User Repository]], u obténgalo de alguna otra fuente.   
  
{{Advertencia | solo o instale paquetes de fuentes confiables.}}
+
{{Advertencia | solo instale paquetes de fuentes confiables.}}
  
 
Una vez en posesión de un  {{ic|PKGBUILD}}, entre al directorio donde esta salvado este archivo y ejecute el siguiente comando para compilar y construir el paquete como lo fue descrito en el archivo un  {{ic|PKGBUILD}}:
 
Una vez en posesión de un  {{ic|PKGBUILD}}, entre al directorio donde esta salvado este archivo y ejecute el siguiente comando para compilar y construir el paquete como lo fue descrito en el archivo un  {{ic|PKGBUILD}}:
  
 
  $ makepkg
 
  $ makepkg
Si no se satisfacen algunas dependencias, makepkg mostrara una advertencia antes de fallar, para construir el paquete y cumplir sus dependencias automáticamente, simplemente utilizamos el comando:
+
Si no se satisfacen algunas dependencias, ''makepkg'' mostrara una advertencia antes de fallar, para construir el paquete e instalar sus dependencias automáticamente, simplemente se utiliza el comando:
$ makepkg -s
+
 
 +
$ makepkg -s
 +
 
 +
{{Nota| Estas dependencias deben estar disponibles dentro de los repositorios disponibles para pacman, vea [[pacman (Español)#Repositorios y servidores de réplicas]] para mayor información al respecto. También se pueden instalar las dependencias antes de construir el paquete ({{Ic|pacman -S --asdeps dep1 dep2}}).
 +
}}
 +
 
 +
Una vez que se hayan satisfecho todas las dependencias y el paquete se construyo satisfactoriamente, un archivo con el nombre ({{ic|pkgname-pkgver.pkg.tar.gz}}) será creado en el directorio de trabajo. Para instalarlo (al igual que {{ic|pacman -U pkgname-pkgver.pkg.tar.gz}}) simplemente se ejecuta:
 +
$ makepkg -i
 +
 
 +
Para despejar archivos que no son necesarios, como los existentes en {{ic|$srcdir}}, agregue la opción {{ic|-c}}. Este comando es útil al actualizar la version de los paquetes usando el mismo directorio. Se previene la transferencia de archivos obsoletos en la nueva construcción.
 +
$ makepkg -c
 +
 
 +
== Recomendaciones ==
 +
 
 +
=== Compilación paralela ===
 +
El sistema de construcción {{Pkg|make}} usa las {{ic|MAKEFLAGS}} como variables de entorno para especificar opciones adicionales. Las variables también pueden ser definidas en el archivo {{ic|/etc/makepkg.conf}}.
 +
 
 +
Usuarios con sistemas que poseen múltiples núcleos o CPU pueden especificar el número de trabajos a ejecutar simultáneamente. Esto se puede realizar usando ''nproc'' para determinar el numero de de procesadores disponibles, v.g. modificando la linea {{ic|1=MAKEFLAGS}} en {{ic|/etc/makepkg.conf}}.
 +
 
 +
MAKEFLAGS="'''-j$(nproc)'''"
 +
 
 +
Para decirle al compilador que use un número especifico de núcleos al momento de compilar, se usa el mismo parámetro {{ic|-j<numero_de_núcleos>}}. El numero recomendado es ''n''+1, donde ''n'' es la cantidad de núcleos de tu procesador.
 +
 
 +
Por ejemplo un procesador de 2 núcleos (2+1=3):
 +
{{hc|/etc/makepkg.conf|<nowiki>
 +
...
 +
#-- Make Flags: change this for DistCC/SMP systems
 +
MAKEFLAGS="-j3"
 +
...
 +
</nowiki>}}
 +
 
 +
Vea {{man|1|make}} para una lista completa de opciones.
 +
 
 +
=== Generar nueva suma de verificación ===
 +
Ejecute el siguiente comando en el mismo directorio que el PKBUILD para generar una nueva suma de verificación:
 +
$ updpkgsums
  
Note que estas dependencias deben estar disponibles dentro de los repositorios disponibles para pacman, vea [[pacman#Repositories]] para mayor información al respecto. También se pueden instalar las dependencias previas antes de construir el paquete ({{Ic|pacman -S dep1 dep2}}).
+
=== Uso de múltiples núcleos en la compresión ===
 +
{{pkg|xz}} es compatible con [[Wikipedia:Symmetric multiprocessing|Multiprocesamiento_simétrico (SMP)]] con el párametro {{ic|--threads}} para acelerar la compresión. Para permitir que ''makepkg'' use tantos núcleos como sea possible al comprimir paquetes, edite la linea {{ic|COMPRESSXZ}} en {{ic|/etc/makepkg.conf}}:
  
Una vez que se hayan satisfecho todas las dependencias el paquete se habrá construido satisfactoriamente, un archivo con el nombre ({{ic|pkgname-pkgver.pkg.tar.gz}}) será creado en el directorio de trabajo. Para instalarlo simplemente ejecutamos  (como root):
+
COMPRESSXZ=(xz -c -z - '''--threads=0''')
# pacman -U pkgname-pkgver.pkg.tar.gz
 

Latest revision as of 14:45, 13 January 2018

makepkg es usado para compilar y construir paquetes capaces de instalar mediante pacman, el manejador de paquetes de Arch Linux. makepkg es un script que automatiza el proceso de construcción de paquetes; este puede descargar y validar archivos fuente, resolver dependencias, configurar los parámetros de tiempo de compilación, compilar las fuentes e instalarlo dentro de un root temporal.

El paquete makepkg lo provee el paquete pacman.

Configuración

El archivo principal de configuración de makepkg es /etc/makepkg.conf . la mayoría de los usuarios querrán configurar estas opciones de makepkg antes de construir cualquier paquete (por ejemplo modificar las variables MAKEFLAGS en sistemas con soporte SMP para reducir tiempos de compilación , o personalizar la variable PACKAGER para personalizar paquetes. Lea la documentación de PACKAGER para más detalles

Para poder instalar paquetes con makepkg sin ser usuario administrador (con makepkg -s, información más delante), instale sudo y agregue los usuarios con estos privilegios en el archivo to /etc/sudoers:

USER_NAME    ALL=(ALL)    NOPASSWD: /usr/bin/pacman

La línea de arriba eliminara la necesidad de introducir un password cada vez que utilicemos pacman. Revise la wiki de sudo para mas información

Enseguida, puede configurar donde serán guardados los paquetes terminados. Este paso es meramente opcional; por definición los paquetes serán creados en el directorio donde makepkg se ejecute Cree el directorio:


$ mkdir /home/$USER/packages

Luego modifique la variable PKGDEST en el archivo /etc/makepkg.conf de acuerdo a esta directorio.

Información del empaquetador

Cada paquete es etiquetado con meta información que identifica entre otros el packager. Por defecto, paquetes compilados por el usuario son marcados con Unknown Packager. Si múltiples usuarios van a compilar paquetes en un sistema o si planea distribuir sus paquetes con otros usuarios, es conveniente proveer un contacto real. Esto se puede hacer modificando la variable PACKAGER en el archivo makepkg.conf.

Para revisar esta variable en un paquete instalado ejecute:

$ pacman -Qi paquete
...
Packager       : John Doe <john@doe.com>
...

Para firmar sus paquete automaticamente, tambien modifique la variable GPGKEY en el archivo makepkg.conf.

Resultado del paquete

Por defecto, makepkg crea tarballs de los paquetes en el directorio de trabajo y descarga las fuentes en el directorio src/. Rutas personalizadas pueden ser configuradas, por ejemplo para mantener todos los paquetes construidos en ~/build/packages/ y todas las fuentes en ~/build/sources/.

Configure las siguientes variables en makepkg.conf, si lo considera necesario:

  • PKGDEST — directorio para guardar los paquetes resultantes
  • SRCDEST — directorio para guardar datos fuente, (links simbólicos seran puestos en src/ si la ruta es diferente)
  • SRCPKGDEST — directorio para guardar las fuentes resultantes (construido con makepkg -S)

Verificación de firmas

Nota: La implementación de verificación de firmas en makepkg no usa el llavero de pacman, en su lugar depende en el llavero del usuario. [1]

Si una firma de la forma .sig o .asc es parte del PKGBUILD en la sección source, makepkg automáticamente intentara verificarla. En caso de que el llavero del usuario no contenga la clave pública para la verificación makepkg abortara el procedimiento con un mensaje que la clave PGP no pudo ser verificada.

Si una clave pública es necesaria, el PKGBUILD probablemente tendrá una sección validpgpkeys con las IDs requeridas. Se puede importar manualmente, o la puede ubicar en un keyserver e importarla desde allí.

fakeroot

fakeroot permite al usuario usar los permisos necesarios de root para crear paquetes en el ambiente de construcción sin necesidad de alterar todo el sistema. Si el proceso de construcción trata de alterar archivos fuera del ambiente de construcción entonces aparecerán mensajes de error y el empaquetado habrá fallado – esto es muy útil para verificar la calidad, seguridad e integridad de los PKGBUILD para su distribución. Por default fakeroot esta habilitado en el archivo de configuración /etc/makepkg.conf; los usuarios pueden utilizar el prefijo ! en la variable BUILDENV para deshabilitar esto.

Uso

Antes de continuar, asegúrese de que el grupo de paquetes base-devel estén instalados. Los paquetes pertenecientes a este grupo no necesariamente tienen que ser listados como dependencias en los PKGBUILD. Asegúrese de tener instalado este paquete ejecutando (como root):

# pacman -S base-devel
Nota:
  • Antes de quejarse por dependencias incumplidas en la rutina make, recuerde que se da por entendido que el grupo “base” esta instalado por default en todos los sistemas Arch Linux. El paquete “base-devel” se da por entendió que también esta instalado cuando se crean paquetes con makepkg.
  • Ejecutar makepkg como root no esta permitido. Debido a que un PKGBUILD puede incluir comandos arbitrarios, construir como root se considera riesgoso.

Para crear un paquete primero debe tener un PKGBUILD, como se describe en la guía de in Creating packages, o obtenga uno del ABS tree, Arch User Repository, u obténgalo de alguna otra fuente.

Advertencia: solo instale paquetes de fuentes confiables.

Una vez en posesión de un PKGBUILD, entre al directorio donde esta salvado este archivo y ejecute el siguiente comando para compilar y construir el paquete como lo fue descrito en el archivo un PKGBUILD:

$ makepkg

Si no se satisfacen algunas dependencias, makepkg mostrara una advertencia antes de fallar, para construir el paquete e instalar sus dependencias automáticamente, simplemente se utiliza el comando:

$ makepkg -s
Nota: Estas dependencias deben estar disponibles dentro de los repositorios disponibles para pacman, vea pacman (Español)#Repositorios y servidores de réplicas para mayor información al respecto. También se pueden instalar las dependencias antes de construir el paquete (pacman -S --asdeps dep1 dep2).

Una vez que se hayan satisfecho todas las dependencias y el paquete se construyo satisfactoriamente, un archivo con el nombre (pkgname-pkgver.pkg.tar.gz) será creado en el directorio de trabajo. Para instalarlo (al igual que pacman -U pkgname-pkgver.pkg.tar.gz) simplemente se ejecuta:

$ makepkg -i

Para despejar archivos que no son necesarios, como los existentes en $srcdir, agregue la opción -c. Este comando es útil al actualizar la version de los paquetes usando el mismo directorio. Se previene la transferencia de archivos obsoletos en la nueva construcción.

$ makepkg -c

Recomendaciones

Compilación paralela

El sistema de construcción make usa las MAKEFLAGS como variables de entorno para especificar opciones adicionales. Las variables también pueden ser definidas en el archivo /etc/makepkg.conf.

Usuarios con sistemas que poseen múltiples núcleos o CPU pueden especificar el número de trabajos a ejecutar simultáneamente. Esto se puede realizar usando nproc para determinar el numero de de procesadores disponibles, v.g. modificando la linea MAKEFLAGS en /etc/makepkg.conf.

MAKEFLAGS="-j$(nproc)"

Para decirle al compilador que use un número especifico de núcleos al momento de compilar, se usa el mismo parámetro -j<numero_de_núcleos>. El numero recomendado es n+1, donde n es la cantidad de núcleos de tu procesador.

Por ejemplo un procesador de 2 núcleos (2+1=3):

/etc/makepkg.conf
...
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j3"
...

Vea make(1) para una lista completa de opciones.

Generar nueva suma de verificación

Ejecute el siguiente comando en el mismo directorio que el PKBUILD para generar una nueva suma de verificación:

$ updpkgsums

Uso de múltiples núcleos en la compresión

xz es compatible con Multiprocesamiento_simétrico (SMP) con el párametro --threads para acelerar la compresión. Para permitir que makepkg use tantos núcleos como sea possible al comprimir paquetes, edite la linea COMPRESSXZ en /etc/makepkg.conf:

COMPRESSXZ=(xz -c -z - --threads=0)