UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

312 lines (215 loc) 18 kB
Artículos relacionados * [Crear paquetes](/index.php/Creating_packages_(Espa%C3%B1ol) "Creating packages (Español)") * [PKGBUILD](/index.php/PKGBUILD_(Espa%C3%B1ol) "PKGBUILD (Español)") * [makepkg](/index.php/Makepkg_(Espa%C3%B1ol) "Makepkg (Español)") * [Arch Build System (Español)](/index.php/Arch_Build_System_(Espa%C3%B1ol) "Arch Build System (Español)") * [Arch User Repository (Español)](/index.php/Arch_User_Repository_(Espa%C3%B1ol) "Arch User Repository (Español)") **Los PKGBUILDs no deben instalar aplicaciones que ya se encuentren en los repositorios oficiales bajo ninguna circunstancia. La única excepción a esta regla son paquetes que contengan añadidos extra habilitados y/o parches en comparación con los oficiales. En tal caso, la variable pkgname deberá ser diferente.** Al crear paquetes para Arch Linux deberás **seguir las directivas** delineadas en este articulo, especialmente si deseas **contribuir** con tu paquete a la Distribución. También deberías leer los manuales de [PKGBUILD](https://www.archlinux.org/pacman/PKGBUILD.5.html) y [makepkg](https://www.archlinux.org/pacman/makepkg.8.html). ## Contents * [1 Prototipo de PKGBUILD](#Prototipo_de_PKGBUILD) * [2 Reglas de etiquetado](#Reglas_de_etiquetado) * [3 Nombramiento de paquetes](#Nombramiento_de_paquetes) * [4 Directorios](#Directorios) * [5 Tareas de Makepkg](#Tareas_de_Makepkg) * [6 Arquitecturas](#Arquitecturas) * [7 Licencias](#Licencias) * [8 Enviar paquetes a AUR](#Enviar_paquetes_a_AUR) * [9 Guías Adicionales](#Gu.C3.ADas_Adicionales) * [9.1 Paquetes VCS (SVN, GIT, HG, etc)](#Paquetes_VCS_.28SVN.2C_GIT.2C_HG.2C_etc.29) * [9.2 Paquetes de plugins de Eclipse](#Paquetes_de_plugins_de_Eclipse) * [9.3 Paquetes de GNOME](#Paquetes_de_GNOME) * [9.4 Paquetes Go](#Paquetes_Go) * [9.5 Paquetes Haskell](#Paquetes_Haskell) * [9.6 Paquetes Java](#Paquetes_Java) * [9.7 Paquetes KDE](#Paquetes_KDE) * [9.8 Paquetes de módulos del kernel](#Paquetes_de_m.C3.B3dulos_del_kernel) * [9.9 Paquetes Lisp](#Paquetes_Lisp) * [9.10 Paquetes OCaml](#Paquetes_OCaml) * [9.11 Paquetes Perl](#Paquetes_Perl) * [9.12 Paquetes Python](#Paquetes_Python) * [9.13 Paquetes Ruby Gem](#Paquetes_Ruby_Gem) * [9.14 Paquetes Wine](#Paquetes_Wine) * [9.15 Paquetes MinGW](#Paquetes_MinGW) ## Prototipo de PKGBUILD ``` # Maintainer: Tu Nombre <tuemail@mail.com> pkgname=NOMBREDELPAQUETE pkgver=VERSIONDELPAQUETE pkgrel=1 pkgdesc="" arch=() url="" license=('GPL') groups=() depends=() makedepends=() optdepends=() provides=() conflicts=() replaces=() backup=() options=() install= changelog= source=($pkgname-$pkgver.tar.gz) noextract=() md5sums=() #generar con 'makepkg -g' build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr make } package() { cd "$srcdir/$pkgname-$pkgver" make DESTDIR="$pkgdir/" install } ``` Puedes encontrar otros prototipos en `/usr/share/pacman` de los paquetes de pacman y abs. ## Reglas de etiquetado * Los paquetes **nunca** deben ser instalados en `/usr/local` * Siempre que sea posible utiliza `|| return 1` en funciones importantes para la construcción del paquete. Por ejemplo: ``` patch -Np1 -i ../patchfile.patch || return 1 make || return 1 make DESTDIR=$startdir/pkg install || return 1 ``` * **No introduzcas nuevas variables** en tu script PKGBUILD, excepto cuando el paquete no puede ser construido sin ellas, debido a que pueden haber posibles confictos con las variables usadas por el propio {{Ic|makepkg}. Si una nueva variable es absolutamente requerida, **añade el prefijo "_" a su nombre**, por ejemplo: `"_tuvariable"` El sistema AUR no puede detectar el uso de variables no estándar, por ende no puede usarlas en sustituciones. Esto puede ser visto frecuentemente en la variable `source`, por ejemplo: `source=(http://downloads.sourceforge.net/directxwine/$patchname.$patchver.diff.bz2)` Esto evita el buen funcionamiento de AUR. * **Evita** usar `/usr/libexec`. Usa el directorio `/usr/lib/${pkgname}/` en su lugar. * El campo `packager` del meta-archivo del paquete puede ser **personalizado** por el creador del paquete modificando la opción apropiada en `/etc/makepkg.conf`, creando `~/.makepkg.conf,` o alternativamente exportando la variable de entorno `PACKAGER` antes de compilar el paquete con `makepkg`, por ejemplo: ``` # export PACKAGER="Juan Perez@tu.email" ``` * Todos los mensajes importantes deben ser mostrados con el comando `echo` durante la instalación mediante el uso del archivo `.install`. Por ejemplo, si un paquete necesita trabajo adicional de configuración, las instrucciones deberían ser incluidas. * Cualquier **dependencia opcional** que no es necesaria para ejecutar el paquete o para su funcionamiento general no debe ser incluida, en su lugar, la información deberá añadirse en la variable **optdepends**: ``` optdepends=('cups: printing support' 'sane: scanners support' 'libgphoto2: digital cameras support' 'alsa-lib: sound support' 'giflib: GIF images support' 'libjpeg: JPEG images support' 'libpng: PNG images support') ``` Este ejemplo se toma del paquete **wine** en el repositorio `extra`. La información en optdepends se muestra automáticamente en la instalación/actualización, de manera que no se debe añadir este tipo de información en el archivo .install * Al escribir la **descripción del paquete**, no incluyas el nombre del paquete en un formato auto-referencial. Por ejemplo "Nedit es un editor de texto para X11" debería ser simplificado a "Editor de texto para X11". Intenta mantener las descripciones en aproximadamente 80 caracteres o menos. * Intenta mantener el **ancho de linea** de tu PKGBUILD debajo de los 100 caracteres. * Cuando sea posible **elimina las líneas vacias** de tu `PKGBUILD` (`provides`, `replaces`, etc.) * Es una practica común el **preservar el orden** de los campos en el `PKGBUILD` como se muestra más abajo. Aunque no es obligatorio debido a que el único requerimiento para esto es mantener la **corrección de la sintaxis bash**. ## Nombramiento de paquetes * Los nombres de paquetes deben consistir **solamente de caracteres alfanuméricos**; todas las letras deberán ser minúsculas. * Las versiones de los paquetes **deben ser las mismas que las usadas por el autor' *original del software. Las versiones pueden incluir letras si es necesario (ejemplo, la versión de nmap es 2.54BETA32). Los nombres de versión* ¡'no deben incluir guiones!** solo letras, numeros y puntos. * Los números de liberación del paquete (ejemplo, el `-1` en nmap-2.54BETA32**-1**) son **especificos a Arch Linux**. Estos permiten a los usuarios diferenciar entre un paquete viejo y uno nuevo. Cuando una nueva versión *del paquete* es liberada el contador **se inicia en 1**. Cuando correcciones y optimizaciones son realizadas, el paquete es redistribuido con un incremento de 1 en su numero de liberación. Cuando una nueva versión de *la aplicación* es distribuida el contador se reinicia a 1\. Los números de liberación siguen las mismas directivas que los números de versión. ## Directorios * Archivos de configuración deben almacenarse en el directorio `/etc`. Si existe mas de un archivo de configuración es costumbre **utilizar un subdirectorio** para mantener `/etc` lo mas limpio posible. Usa`/etc/{pkgname}/` cuando sea posible, o una alternativa relacionada, por ejemplo, apache utiliza `/etc/httpd`. * Los archivos de cada paquete deben seguir las siguientes directivas: | `/etc` | Archivos de configuración. | | `/usr/bin` | Binarios de la aplicación. | | `/usr/lib` | Librerias | | `/usr/include` | Cabeceras (archivos .h) | | `/usr/lib/{pkgname`} | Módulos, agregados (plugins), etc. | | `/usr/man` | Paginas del manual. | | `/usr/share/{pkgname`} | Datos de la aplicación (temas, iconos, etc.). | | `/etc/{pkgname`} | Archivos de configuración adicionales de {pkgname}. | | `/opt` | Paquetes grandes y autocontenidos como KDE, Mozilla, Qt, etc. | * Los paquetes **no** deben contener los siguientes directorios: * /dev * /home * /media * /mnt * /proc * /root * /selinux * /sys * /tmp * /var/tmp ## Tareas de Makepkg Cuando usas [makepkg](https://www.archlinux.org/pacman/makepkg.8.html) para crear un paquete, hace automaticamente lo siguiente: 1. Verifica que las **dependencias** esten instaladas 2. **Descarga las fuentes** del fichero desde el servidor 3. **Comprueba la integridad** de las fuentes 4. **Desempaqueta** las fuentes 5. **Parcha** todo lo necesario 6. **Crea** el software e instala en un directorio root falso 7. **Elimina** `/usr/doc`, `/usr/info`, `/usr/share/doc`, y `/usr/share/info` desde el paquete 8. **Obtiene** simbolos desde los binarios 9. **Obtiene** debugging symbols desde las librerias 10. Genera el **package meta file** que es incluido en cada paquete 11. **Comprime** el directorio root falso 12. **Almacena** el paquete en el directorio de destino configurado (cwd por defecto) ## Arquitecturas La variable `arch` debe contener `'i686'` o `'x86_64'` dependiendo de las arquitecturas en las que se pueda instalar. También puedes usar `any` para paquetes que no dependen de la arquitectura. ## Licencias La variable [licence](/index.php/Licenses "Licenses") está implementandose en los repositorios oficiales, y también **debes** usarla en tus paquetes. Úsala de la siguiente manera: * Un paquete de licencias se ha creado en [core] y almacena licencias comunes en `/usr/share/licenses/common`, por ejemplo: {{Ic|/usr/share/licenses/common/GPL}. Si un paquete está licenciado bajo una de esas licencias, la variable licenses se nombrará con el nombre del directorio. En el ejemplo anterior: {{Ic|license=('GPL')} * Si la licencia apropiada no se incluye en el paquete oficial de licencias, se pueden hacer vairas cosas 1. El archivo de la licencia debe ser incluido en /usr/share/licenses/$pkgname/, por ejemplo: /usr/share/licenses/dibfoo/LICENSE. Una buena forma de hacerlo es usando: `install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"` 2. Si las fuentes NO contienen los detalles de la licencia, y la licencia solo se muestra por ejemplo en un sitio web, copia la licencia en un archivo e incluyelo. Recuerda también llamarla de forma apropiada. 3. Pon 'custom' en la variable de las licencias. Opcionalmente, puedes sustituir 'custom' por 'custom:"Nombre de la licencia"'. * Una vez que las licencias se utilizan dos o más veces en un repositorio oficial, incluyendo [community], se convierte en común. * Las licencias MIT, BSD, zlib/libpng y Python son casos especiales y no se pueden incluir en el paquete de licencias 'comunes'. Por el bien de la variable {{Ic|license}, se sigue tratando como una licencia común: (license=('BSD'), license=('MIT'), license=('ZLIB') or license=('Python')) pero por el bien del sistema, es una licencia personal (custom), porque cada una tiene su propia línea de copyright. Cada paquete con licencia MIT, BSD, zlib/libpng o Python debe tener su licencia individualmente almacenada en `/usr/share/licenses/$pkgname/`. * La (L)GPL tiene varias versiones y permutaciones de esas versiones. Para el software (L)GPL, la convención es: * (L)GPL - (L)GPLv2 o cualquier versión posterior. * (L)GPL2 - (L)GPLv2 solo. * (L)GPL3 - (L)GPLv3 o cualquier versión posterior. ## Enviar paquetes a AUR Asegurate de esto antes de subir un paquete a AUR: 1. Los PKGBUILDs enviados **NO DEBEN** instalar aplicaciones que ya se encuentren en alguno de los repositorios oficiales bajo ninguna circunstancia. La única excepción a esta estricta regla pueden ser únicamente paquetes con características extra y/o parches en comparación con los oficiales. En tal caso la variable pkgname deberá ser diferente para expresar esa diferencia. Por ejemplo: Un PKGBUILD de GNU screen enviado que contiene el parche para la barra lateral, puede ser llamado screen-sidebar, etc. Adicionalmente la variable **provides=('screen')** deberá ser utilizada para evitar conflictos con el paquete oficial. 2. Para asegurar la seguridad de los paquetes enviados a AUR, por favor, **asegúrate** e que has rellenado correctamente el campo `md5sum`. Los `md5sum` pueden ser generados usando el comando `makepkg -g`. 3. Por favor **añade un comentario** al principio del PKGBUILD con el siguiente formato. Recuerda disfrazar tu email para protejerlo del spam: `# Maintainer: Your Name <address at domain dot com>` Si asumes el rol de mantener un PKGBUILD existente, añade tu nombre al principio como se ha descrito y cambia el título del/los Mantenedor/es previo/s a Contribuidor ``` # Maintainer: Your Name <address at domain dot com> # Contributor: Previous Name <address at domain dot com> ``` 4. Verifica **las dependencias** del paquete (p.ej. utiliza ldd en ejecutables dinámicos, comprueba las herramientas requeridas por los scripts, etc.) El equipo de TUs recomienda **fervientemente** el uso de la utilidad `namcap`, escrita por [Jason Chu](https://www.archlinux.org/fellows/#jason), para analizar el saneamiento de los paquetes. `namcap` te avisará sobre permisos erróneos, dependencias que falten, dependencias innecesarias, y otros errores comunes. Puedes instalar el paquete `namcap` con pacman. Recuerda que `namcap` puede ser usado para comprobar los archivos pkg.tar.gz y PKGBUILDs 5. **Las dependencias** son el error de empaquetamiento más común. Namcap puede ayudar a detectarlos pero no siempre acierta. Verifica las dependencias mirando la documentación de las fuentes y la página web del programa. 6. No uses `**replaces**` en un PKGBUILD a no ser que el paquete vaya a ser renombrado, por ejemplo, cuando *Ethereal* se convirtió en *Wireshark*. Si el paquete es una versión alternativa de un paquete ya existente, usa `conflicts` (y `provides` si el paquete es requerido por otros). La principal deferencia es: tras sincronizar (-Sy) pacman inmediatamente quere sustituir un 'ofensivo' paquete instalado cuando encuentra un paquete que lo incluya en `replaces` en cualquiera de sus repositorios; `conflicts` por otro lado solo es evaluado cuando realmente instalas el paquete, que normalmente es el comportamiento deseado porque es menos invasivo. 7. Todos los archivos subidos a AUR deben estar contenidos en un archivo **tar comprimido que contenga un directorio con el** `PKGBUILD` **y** archivos de instalación adicionales **(parches, install, etc.) en el**. ``` foo/PKGBUILD foo/foo.install foo/foo_bar.diff foo/foo.rc.conf ``` El nombre del archivo debe contener el nombre del paquete, por ej. foo.tar.gz. Cualquiera puede hacer un paquete tar que contenga los archivos requeridos utilizando `makepkg --source`. Esto creará un paquete tar llamado `$pkgname-$pkgver-$pkgrel.src.tar.gz`, que puede ser subido a AUR. El paquete tar **no debe** contener el paquete tar binario creado por makepkg, ni debe contener la lista de archivos ## Guías Adicionales Asegúrate de leer antes esta guía - hay puntos importantes listados en esta página que no se van a repetir en las siguientes páginas de guías. Las guías específicas se han creado como un añadido a los estándars listados en esta página. ### Paquetes VCS (SVN, GIT, HG, etc) Por favor mira la [Guía Arch de PKGBUILDs VCS](/index.php/Arch_CVS_%26_SVN_PKGBUILD_guidelines "Arch CVS & SVN PKGBUILD guidelines") ### Paquetes de plugins de Eclipse Por favor mira la [Guía de empaquetamiento de plugins de Eclipse](/index.php/Eclipse_plugin_package_guidelines "Eclipse plugin package guidelines") ### Paquetes de GNOME Por favor mira la [Guía de empaquetamiento GNOME](/index.php/GNOME_package_guidelines "GNOME package guidelines") ### Paquetes Go Por favor mira la [Guía para paquetes Go](/index.php/Go_package_guidelines "Go package guidelines") ### Paquetes Haskell Por favor mira la [Guía de empaquetamiento Haskell](/index.php/Haskell_package_guidelines "Haskell package guidelines") ### Paquetes Java Por favor mira la [Guía de empaquetamiento Java](/index.php/Java_package_guidelines "Java package guidelines") ### Paquetes KDE Por favor mira la [Guía de empaquetamiento KDE](/index.php/KDE_package_guidelines "KDE package guidelines") ### Paquetes de módulos del kernel Por favor mira la [Guía de empaquetamiento de Módulos del Kernel](/index.php/Kernel_module_package_guidelines "Kernel module package guidelines") ### Paquetes Lisp Por favor mira la [Guía de empaquetamiento Llisp](/index.php/Lisp_package_guidelines "Lisp package guidelines") ### Paquetes OCaml Por favor mira la [Guía de empaquetamiento OCaml](/index.php/OCaml_package_guidelines "OCaml package guidelines") ### Paquetes Perl Por favor mira la [Guía de empaquetamiento Perl](/index.php/Perl_package_guidelines "Perl package guidelines") ### Paquetes Python Por favor mira la [Guía de empaquetamiento Python](/index.php/Python_package_guidelines "Python package guidelines") ### Paquetes Ruby Gem Por favor mira la [Guía de empaquetamiento Ruby](/index.php/Ruby_Gem_package_guidelines "Ruby Gem package guidelines") ### Paquetes Wine Por favor mira la [Guía de empaquetamiento Wine](/index.php/Arch_wine_PKGBUILD_guidelines "Arch wine PKGBUILD guidelines") ### Paquetes MinGW Por favor mira la [Guía de empaquetamiento MinGW](/index.php/MinGW_PKGBUILD_guidelines "MinGW PKGBUILD guidelines") [Jorge Barroso](/index.php?title=User:Jogre_barroso&action=edit&redlink=1 "User:Jogre barroso (page does not exist)") [talk](/index.php?title=User_talk:Jogre_barroso&action=edit&redlink=1 "User talk:Jogre barroso (page does not exist)")