Una de las cosas que mas me gusta de Arch Linux y sus derivadas es la tremenda facilidad para crear paquetes para luego ser instalados en el sistema, al contrario que pasa con los conocidos .deb de Debian/Ubuntu/Linux Mint/etc que es un caos (y si son librerías ni os cuento).

Una plantilla base sería esta:

# Maintainer:
pkgname=
pkgver=
pkgrel=
pkgdesc=
arch=()
url=
license=()
groups=()
depends=()
makedepends=()
source=()
md5sums=()

build() {
...
}
package() {
...
}

Ahora explicare cada parámetro:

  • # Maintainer: En ella se pone el nombre del mantenedor del paquete
  • pkgname: El nombre del paquete. Solo puede contener letras, números, -, _ y +
  • pkver: versión del paquete. p.e 1.0.0
  • pkgrel: la revisión del programa o paquete. p.e 1
  • pkgdesc: descripción del paquete.
  • arch: la arquitectura del programa: puede ser any (para todos), i686 y x86_64, siendo any para paquetes que no requieren compilación, como programas en bash o python. Si es un programa que si lo necesita (por ejemplo programas en C o C++) se deberá de indicar i686 si es para 32 bits o x86_64 para 64 bits. Por normal general si es compatible con ambos se pone (i686, x86_64)
  • url: la url a la pagina oficial del programa. Es recomendable ponerlo.
  • license: la licencia del programa. p.e GPL3
  • groups: los grupos al que pertenece el paquete. groups=(‘system’)
  • depends: en ella indicamos los paquetes que se necesitan para la ejecución del programa. p.e depens=(‘python2’ ‘pygtk’)
  • makedepends: las dependencias que solo son necesarias para compilar el paquete. Si se va a bajar el código desde un gestor de versiones es recomendable ponerlo. p.e: makedepends=(‘git’)
  • source: en el indicamos los archivos necesarios para la creación del paquete. Por norma general es la url al paquete que contiene el código, un parche, un archivo .desktopt, iconos, etc. p.e: source=(pacsyu.desktop)
  • md5sums: aquí van las sumas md5 de los archivos indicados en source. Para saber cuales son ejecutamos desde una terminal en la carpeta donde esta el PKGBUILD (habiendo escrito las rutas de los archivos en source) makepkg -g y nos saldrá en pantalla las sumas.
    También es posible usar otras sumas como sh1.
  • build: en esta función pondremos los comandos necesarios para proceder a compilar el software. Si no es necesario compilar solo es necesario la siguiente función)
  • package: en esta otra función irán los comandos de instalación del programa. Por ejemplo si estamos compilando código C aquí iría el make install.

Y ya para finalizar solo tenemos que ejecutar makepkg para comprobar que el paquete se genera.
Como veis nos es difícil. A continuación os dejo con algunos parámetros extra de makepkg:

  • -i: Indica a makepkg que instale el paquete una vez creado.
  • -s: Instala las dependencias del paquete si estas están en los repositorios.
  • -f: Si ya hay un paquete con ese nombre, versión y revisión con este parámetro le indicamos que lo sobrescriba.
  • -c: Limpia las carpetas de trabajo (pkg y source) una vez terminado.
  • -R: Vuelve a empaquetar el paquete sin tener que volver a compilar.

Recomiendo ver mas archivos PKGBUILD para ver mas ejemplos, ejecutar el comando makepkg -h para ver el resto de parámetros del programa, ademas de ver la documentación oficial de makepkg en la Wiki de Arch Linux que podéis encontrar aquí

¡¡Si te gustó este artículo, ayúdanos compartiendo!!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

16 Comentarios

  1. Demasiado bien …

    Se puede hacer que un paquete .exe se gestione (compile) a un paquete de Arch?

    Como por ejemplo el famoso gestor de descargas Mipony ??

      • Como bien dices no se puede recompilar un exe ya que es código binario.
        A los se puede crear un paquete que lo instale y lo ejecute con Wine como hace el paquete que hay en AUR del conocido programa P2P Ares.

  2. interesante, habría que probar paquetes creo que me inclinaré por hacer el de qbittorrent jajaja ya existe en yaourt pero tener una versión propia no estará nada mal para probar, gracias por la información saludos.

  3. Buen aporte, +1
    Quiero agregar que también son más fáciles de crear y mantener que los ebuilds de Gentoo!

    Con respecto a Debian, creo que esa distro levantaría su handicap enormemente con sólo modernizar o migrar a un sistema de paquetería y gestión de paquetes más moderno, no sé de cuándo será la última actualización del conjunto dpkg/apt pero el concepto ya debe tener facilmente 15 años y la verdad es que hoy es anacrónico.

  4. muchas gracias haced poco lo anduve buscando en la wiki y no habia entendido la estructura (queria actualizar el de la PlayonLinux) pero igual desisti… hay cosas en las que me gustaria que hubiera una asistente o algo asi (no me fusilen) pero igual… a falta de herramientas con el tiempo vere si creo alguna

  5. al contrario que pasa con los conocidos .deb de Debian/Ubuntu/Linux Mint/etc que es un caos

    Totalmente de acuerdo, hace un tiempo intente crear un paquete para Ubuntu y me fue imposible encontrar información entendible sobre como hacer uno, al final desistí e instalé el programa a lo bruto.
    El mismo programa para Arch me tomó menos de 5 minutos armar el paquete.
    Y no estoy seguro pero creo que los RPM son ligeramente más fáciles de hacer que los DEB, pero más difíciles que los de Arch.

  6. alguiem me puede explicar esto que es, soy nuevo, y pues no se si esto me sirva para isnstalar un paquete .deb pero localmente en manjaro, un juego para ser exactos. si sirve?

      • si, ya lo habia visto, sino que soy muy novell y no entiendo si no solo esxta linea

        cd “${srcdir}/”
        tar xvzf data.tar.gz -C .
        cp -r usr ${pkgdir}

        lo que tienes atras

        if [ “${CARCH}” = ‘x86_64′ ]; then
        ARCH=’amd64’
        md5sums=(‘192a0a222893d59d95f00c34f3c8a674’)
        depends=(‘openal’ ‘lib32-openal’)
        elif [ “${CARCH}” = ‘i686′ ]; then
        ARCH=’i386’
        md5sums=(‘047c670443124193c5cc3dd54da99925’)
        depends=(‘openal’)
        fi
        source=(“http://www.unaurl.com/files/${name}.$ARCH.deb”)

        No lo entiendo, se ve muy complejo, son pasos conjuntos o la primera parte

        cd “${srcdir}/”
        tar xvzf data.tar.gz -C .
        cp -r usr ${pkgdir}

        se puede hacer sola para convertir .deb. .tar.gz?

Dejar respuesta