sábado, 19 de abril de 2014

Como instalo un paquete RPM en Arch y como armo mi propio paquete para Arch Linux?

El otro día me paso que quería hacer una video conferencia por Google Hangout y me encuentro con que para hacerlo necesitaba actualizar el plugin Google Talk  :P
Bueno pensé que no iba a tener problema ya que lo había instalado por yaourt (para el que no lo conoce, es otro repositorio de aplicaciones para Arch que es mantenido por la comunidad y donde tenes muchas otras aplicaciones ;)) Así que intente ver si tenía alguna actualización para instalarlo y me di cuenta que ya tenía la última versión del plugin que estaba en el repositorio.
Por este motivo me dirigí a descargar la última versión del plugin desde la web oficial, pero me encontré con que solo tenían las versiones de paquetes deb y rpm para 32 o 64 bits :P

Entonces me decidí a buscar como instalar alguno de estos paquetes, la verdad que no resulto complicado por lo menos en este caso, pero si un poco molesto :D

Estos son los pasos:

1- Con nuestro gestor de paquetes pacman instalamos el programa rpmextract, que lo podemos hacer con el siguiente comando:
sudo pacman -S rpmextract
2- Descargamos el paquete rpm para la arquitectura que le corresponda a tu SO, en mi caso la versión de 64 bits.
3- Creamos una carpeta y movemos el paquete que descargamos dentro de ella.
4- Corremos el programa rpmextract, de la siguiente forma dentro de la carpeta: rpmextract.sh google-talkplugin_current_x86_64.rpm
5- Como podrán ver nos deja los archivos en la misma estructura de directorios, una forma podría ser directamente copiar los archivos en el lugar que corresponda.

Con eso ya podría tener el plugin corriendo sin problemas, ahora tiene algunas desventajas instalarlo de esa forma. Al instalar las cosas así, no va a tener una desinstalación sencilla, ni va a verificar que no se remueva alguna dependencia. Es por eso que lo mejor sería crear nuestro paquete para Arch.
Para esto básicamente lo único que necesitaríamos hacer es crear un archivo PKGBUILD que contenga toda la información acerca del mismo.
Instrucciones para crear un paquete en Arch
Instrucciones sobre los PKGBUILD

Ejemplo con mi archivo PKGBUILD:

# Maintainer: Gabriel Pozo <jackgris2@gmail.com>
pkgname=google-talkplugin
pkgver=5.2.4.0
pkgrel=4
pkgdesc="Video chat browser plug-in for Google Talk"
arch=('i686' 'x86_64')
url="http://www.google.com/chat/video"
license=('custom:google')
depends=('gtk2>=2.12.0' 'alsa-lib' 'mesa' 'lsb-release')
optdepends=('libnotify' 'pulseaudio')
source=(license.html::http://www.google.com/intl/en/policies/terms/index.html)
sha1sums=('SKIP')

if [ "$CARCH" == x86_64 ]; then
    source+=(https://dl.google.com/linux/talkplugin/rpm/stable/x86_64/${pkgname}-${pkgver}-1.x86_64.rpm)
    sha1sums+=('0570cfc38717e2bdf7779b632813ee5081dd5945')
elif [ "$CARCH" == i686 ]; then
    source+=(https://dl.google.com/linux/talkplugin/rpm/stable/i386/${pkgname}-${pkgver}-1.i386.rpm)
    sha1sums+=('990d199365e8b87234bce54747c00c8311cdcf67')
fi

package() {
    cp -R ${srcdir}/opt ${pkgdir}
    install -d "${pkgdir}/usr/lib"
    cp -R ${srcdir}/usr/lib*/* ${pkgdir}/usr/lib
    # change /usr/lib/chromium-browser to /usr/lib/chromium
    cp -R ${pkgdir}/usr/lib/chromium-browser ${pkgdir}/usr/lib/chromium
    cp -R ${pkgdir}/usr/lib/chromium-browser ${pkgdir}/usr/lib/chromium-dev
    # cleaning up cron update script
    rm -rf ${pkgdir}/opt/google/talkplugin/cron
    # install license file
    install -Dm644 "${srcdir}/license.html" "${pkgdir}/usr/share/licenses/${pkgname}/license.html"
}

Como se puede ver no es muy complicado:
  1. Nombre del programa, en minúsculas y sin espacios.
  2. Versión, como se ve en la descarga, Google le coloca current.
  3. Una versión interna que debería ser un numero que se incremente en uno con el cambio de versión.
  4. Una descripción breve, menos de 80 caracteres.
  5. La arquitectura, por ejemplo en este caso 64 bits.
  6. La URL del sitio oficial del paquete, esto es opcional.
  7. La licencia, GPS, BSD, unknown.
  8. Cualquier dependencia separada por espacios, no por comas.
  9. Las dependencias necesarias para construir el paquete 
  10. Cualquier opción, por ejemplo si se necesita un directorio que luego quedará vacío, para eso la opción 'emptydirs'
  11. Una lista de los archivos fuente, si colocamos URL's  los va a descargar (como en este caso), pero también le podemos colocar archivos de forma local en la misma carpeta que el archivo PKGBUILD
  12. Una suma de chequeo sha1 de los archivos (o MD5), esto lo podemos hacer con el comando 'makepkg -g' si lo ejecutamos en la misma carpeta donde se encuentran los archivos. (nos va a devolver el archivo que configuremos en el pkgbuild)
  13. Y si se fijan al final lo único que hace es copiar y pegar los archivos que se extrajo del paquete a donde corresponde.

Una vez que creamos el archivo PKGBUILD, corremos el comando makepkg en esa misma carpeta, y veremos que nos crea un archivo con extensión .pkg.tar.xz para poder usar con nuestro amado Pacman ;)
Ahora simplemente lo podemos instalar con el comando:
sudo pacman -U nombrepaquete.pkg.tar.xz

Lo bueno de esto, es que te va a advertir sobre las dependencias del mismo, y lo vas a poder desinstalar con pacman -R ;)

Enlaces:
Install rpm packages on Arch Linux
Paquete oficial en AUR

Espero que les allá servidor, por lo menos a mi me ayudo bastante :D 
En los enlaces esta el verdadero archivo PKGBUILD de donde saque el que termine usando, en este caso fue mucho mas sencillo todavía ya que no necesitaba crear un PKGBUILD de cero, solo con cambiar el número pkgrel a uno superior, podemos hacer que descargue el nuevo paquete de Google eh instale el nuevo plugin :D (si hice un poco de trampa, pero no es complicado para nada armar nuestro propio paquetes para Arch)

Saludos a todos, Gabriel