Archlinux: Crear paquetes multiplataforma y desde paquetes .deb

Hace cosa de un año explique como crear paquetes para Archlinux. Pues bien, hoy voy a explicar como crearlos desde paquetes .deb, los usados en Debian/Mint/Ubuntu/etc.
Este articulo surgió tras leer en el foro una pregunta del usuario jorgegc por que no podía instalar un paquete desde AUR, principalmente por que esta desactualizado y encima usaba una versión descontinuada del PKGBUILD (por suerte ya hice con anterioridad paquetes de este modo), ademas explicare como hacer paquetes de programas que necesiten librerías de 32 bits, de código cerrado o ya compilado y que cuente con distintos paquetes para su descarga.

La base para el PKGBUILD es la misma, solo que con algunos cambios.
El primer cambio sera el uso de una sentencia if elif de Bash


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")

En este ejemplo se ha definido una variable que luego sera usada para cambiar la URL donde esta el paquete (en este caso la arquitectura del paquete a bajar).
Ademas dependiendo de la arquitectura también cambiaran las sumas MD5 por lo que cambiaremos estas por las correspondientes.

Al usar makepkg -g para generar las MD5sums este solo generara el correspondiente a la arquitectura que este usando. Para saber la suma MD5 del otro paquete descargalo y usa el comando md5sum archivo.deb para conocer la suya

Por ultimo vemos que en el ejemplo cambiamos las dependencias. En algunos programas de 64 bits es necesario instalar las versiones de 32 bits de algunas librerías por lo que tenemos que indicarlas. Si no son necesarias simplemente define la variable de la forma habitual.

Ahora para los paquetes .deb solo vamos a necesitar necesitar las siguiente lineas dentro de la función package():

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

Como veis solo necesitamos en este caso 3 lineas para generar el paquete. Si es necesario algo mas (por ejemplo copiar un archivo que no viene con el paquete, o modificar el contenido de uno) solo tenéis que ponerlo como con cualquier otro paquete.

Esto mismo podría valer (con algunos cambios) si en vez de un .deb vamos a usar paquetes rpm u otros tipos de paquetes. La función build() no es necesaria, por lo que no necesitamos añadirla.

Y listo, ya tenemos un paquete multilib o creado desde un paquete deb listo para usar.
Espero que os guste y que me haya explicado bien 😀

Comparte para difundir

Si te ha gustado nuestro contenido ahora puedes ayudar a difundirlo en las redes sociales de manera sencilla usando los siguientes botones:

Envía
Pinea
Print


Usuario de GNU/Linux desde el 2006, actual usuario de Arch Linux, defensor del Software y la Cultura Libre, programador en Python, Gamer y friki en general ^^ Twitter: @sonlink

32 comentarios

  1.   ulysess dijo

    ¿No es más sencillo usar checkinstall?

  2.   Luciano Lagassa dijo

    Hola. Yo tengo unos scripts bash. Uno para generar las carpetas y archivos basicos para un paquete deb. Y el ultimo para generar el paquete a partir de todos los archivos y carpetas. Si les interesa lo puedo compartir.

    1.    jorgecg dijo

      Claro que interesa… por lo menos a mí.

      Ahora que estoy con Manjaro agradezco toda información posible.

  3.   jorgecg dijo

    Que grande eres compañero.

    Te iba haber dicho en el foro que si me podias explicar como se hacia lo de compilar paquetes .deb y no te he dicho nada para no abusar de tu generosidad…. y me meto en la página y veo que has subido un artículo explicando todo el proceso.

    Esto demuestra que eres una persona generosa.

    Lo dicho, eres un crack.

    Un saludo

  4.   Anibal dijo

    es genial amigo, una vez probe un soft q no recuerdo el nombre q convertia de .deb a .rpm , pero no me funcionó bien.

    alguien con arch podria probar si este soft se pasa bien a rpm y se abre bien la instalacion ?

    http://www.justcloud.com/download/linux-64

    es para hacer backup en la nube, ya pago hace un tiempo y tengo mas de 40gb en la nube =)

  5.   Inspiron dijo

    Buenísimo! Siempre me dije que algún día quería hacer un paquete, aunque sea para saber como se hace :).

    En estos tipos de post agradecería que en el blog se implemente la opción de añadir entradas como esta en “favoritos” de mi cuenta

    1.    chinoloco dijo

      Totalmente de acuerdo, yo lo plantie, pero nada 🙂
      Tambien estaria bueno, poder seguir, a determinados usuarios

  6.   RabBa dijo

    buenisimo viejo, estoy usando manjaro desde hace unos dias y por estudios necesito instalar packet tracer de cisco pero solo tiene paquete .deb de la ultima version y el ke esta en AUR siempre me da error al momento de compilar, espero con estos pasos poder instalarlo ya que por fuerza he estado usando linux mint, mil gracias

  7.   mitcoes dijo

    a ver si alguien se atreve a poner en AUR Multisystem

    depende de librerias deb que no están en arch

    Pero si funciona su función es la de crear pendrives multi ISO con grub2 mejor que unetbootin que sólo hace una.

    De momento tengo una ISO ubuntu suya dentro que me permite añadir imágenes si quiero arrancando desde ella en el propio USB

    pero si no se atreve nadie me guardo la entrada

  8.   mitcoes dijo

    Perdón,ya existe multisystem , y yo pensando que no

    1.    mitcoes dijo

      En multisystem …

      pero fatresize desde yaourt da problemas, y lo han puesto como opcional

  9.   marcos dijo

    Genial 😀 aprobar con “Purrr” un programa para renombrar archivos masivamente.

  10.   abr4xas dijo

    Saludos,

    Actualemente en AUR estan eliminando los paquetes que no tengan la funcion package() como puedo saber que lineas colocar ahi? Es decir, yo tengo varios paquetes y lo hice de esta forma pero no se si esta bien https://github.com/abr4xas/Arch-pkgbuild/blob/master/%20django-admin-honeypot/PKGBUILD lo que hice realmente es pasar lo que estaba en build() a package() pero como dije, no se si esta bien… Me das tus comentarios y sugerencias?

    Gracias 😀

  11.   Azazel dijo

    Gracias por la información lo guardare en marcadores para referencias futuras.

  12.   clerafel dijo

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

    busco y me dicen que instale el paquete deb2targz pero sale error al instalarlo desde la terminal, y pues no se si se pueda

    1.    Ghermain dijo

      Me pasa igual; necesito instalar en Kademar que esta basada en Arch; un par de paquetes que solo consigo en .deb
      ¿Alguien me puede colaborar?

      1.    valdo dijo

        Si a lo que te refieres es a una falla en la instalación de deb2targz recién termino de instalarlo con la orden yaourt -S deb2targz . Eso sí, en ArchLinux.

  13. Post muy informativo. Gracias por compartir.

  14.   Angry Birds dijo

    Buen post. Gracias por compartir esta información útil.

  15.   Apps for PC dijo

    Gracias por este útil puesto. Se va a ayudar mucho.

  16.   jacob dijo

    hola, puedes dejar el script para la conversion y como emplearlo? es que asi por partes confunde un poco, ya tengo el deb que quiero convertir y se que es posible porque el google chrome de AUR es un deb pero no se como hacer “MAKEPKG SI” con otro deb 🙁

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.