6/26/2008


Crear paquete para Archlinux

Exelente articulo leido en el blog de FlaPer87, que nos explica como crear paquetes para Archlinux.

Este es un pequeño y simple howto acerca de como crear un paquete para Archlinux…

Los paquetes de archlinux son simples .tar.gz, la mayoria con 3 archivos dentro (2 de ellos opcional) que gestionan la descarga e instalación de la aplicación, digo la mayoria porque también existen paquetes que ademas de traer estos 2 archivos traen las fuentes de la aplicación (vease el caso de eclipse, netbean, Firefox3, entre otros) y que por ende son más pesados.

Estos dos archivos que mencionon son el PKGBUILD (Obligatorio), un .install con algunas reglas extras como pre_instalacion, post_instalacion, pre_desisntalacion o post_desisntalacion y un archivo .filelist que contine la lista de archivos el cual es usado para la desisntalación del paquete o para buscar conflictos con archivos. El archivo .install se dice que es opcional ya que el paquete no depende directamente de el, pero si no se especifican estas reglas el paquete a la hora de ser desisntalado (por ejemplo) sera eliminado solamente de la base de datos dejando todos los archivos en las carpetas de instalación ya que no existe ninguna regla para desinstalarlo y lo mismo se aplica para el archivo .filelist

Para este ejemplo utilizare el paquete de Ulipad que en estos momentos mantengo. Comencemos con el PKGBUILD:

El PKGBUILD es un archivo que contiene tanto la información completa del paquete como la
funcion de construcción (build) del paquete, por ejemplo:

# Maintainer: Flavio Percoco 
# Contributor: Flavio Percoco
pkgname=ulipad
pkgver=3.8.1
pkgrel=1
pkgdesc="UliPad is en editor written in python and wxPython."
arch=('i686' 'x86_64')
license=('GPL')
install=ulipad.install
url="http://code.google.com/p/ulipad/"
depends=(python wxpython unzip)
source=("http://ulipad.googlecode.com/files/ulipad.$pkgver.zip")
md5sums=('9bfb7c6000c3b1a61e65840385c2be03')

build() {
cp -Rf $startdir/src/ulipad /usr/share/
echo "#!/bin/bash" > /usr/bin/ulipad
echo "python /usr/share/ulipad/UliPad.py" >> /usr/bin/ulipad
chmod 777 /usr/share/ulipad/ -Rf
chmod a+x /usr/bin/ulipad
}

Expliquemos el PKGBUILD:

Los parametros para proporcionar la informacón del paquete son faciles de entender, sin embargo acá les coloco la explicación de los que utilice, para verlos todos vean este link

  • pkgname: El nombre del paquete.
  • pkgver: La versión del paquete.
  • pkgrel: El numero de release del paquete, el cual debe ser modificado cada vez que se le hagan cambios al
  • PKGBUILD.
  • pkgdesc: La descripción del paquete.
  • arch: la architectura para la cual esta permitida el paquete.
  • license: La licencia del paquete.
  • install: El archivo .install a incluir el cual debe encontrarse en la misma carpeta del PKGBUILD.
  • url: La pagina principal del paquete.
  • depends: Las dependencias del paquete.
  • source: De donde se obtendran las fuentes, puede ser local como http o ftp.
  • md5sum: El md5sum de las fuentes del paquete.

La función build también es bastante simple por el tipo de paquete que estamos creando, Ulipad es un IDE para python hecho en python y utilizando wxwidgets, y su instalación se hace simplemente copiando la carpeta a donde queramos, sin necesidad de compilar o algo por el estilo.

cp -Rf $startdir/src/ulipad /usr/share/

Con este comando copiamos la carpeta de ulipad a /usr/share/ que sera nuestro path de instalación.

echo "#!/bin/bash" > /usr/bin/ulipad
echo "python /usr/share/ulipad/UliPad.py" >> /usr/bin/ulipad
chmod 777 /usr/share/ulipad/ -R
chmod a+x /usr/bin/ulipad

Esto era realmente opcional y lo hice para ofrecer un lanzador para ulipad ya que este no lo trae, simplemente creo un archivo llamado ulipad bajo /usr/bin el cual ejecutara el comando python /usr/share/UliPad.py al ser ejecutado y le otorgo permisos de ejecución.

Ahora pasemos a explicar el arhcivo ulipad.install del paquete el cual por la simplicidad del paquete es aun mas facil que el mismo PKGBUILD :-D

post_remove() {
rm -Rf /usr/share/ulipad/
rm /usr/bin/ulipad
}

La unica función que le agregue fue la de post_remove (post_desinstalacion) la cual eliminara todos los archivos que fueron agregados durante la instalación obviando los de configuracion del usuario por supuesto. En este caso esos archivos son /usr/share/ulipad y /usr/bin/ulipad.

Ok ahora empaquetemos todo lo que acabamos de hacer, creemos una carpeta con el nombre de la aplicación en la cual deberan ser guardados los archivos:

$ mkdir ulipad && cd ulipad
$ vim PKGBUILD // Para crear el PKGBUILD, pueden usar su editor favorito.
$ vim ulipad.install // Para crear el ulipad.install, pueden usar su editor favorito.

Ahora quedan dos cosas por hacer una es crear el paquete para subirlo a los repositorios de AUR ( Archlinux User-Community Repository ) y crear el paquete instalable. El primero nos servira simplemente para subirlo a AUR y que otros lo puedan instalar mediante yaourt (hasta que tenga suficientes votos para entrar en community y poder ser instalado mediante el uso de pacman ), este es un paquete que contiene los dos archivos que creamos y el cual sera construido cuando el usuario intente instalarlo; el segundo es un paquete ya construido y listo para instalar.

$ tar -cvvf ulipad-3.8.1.tar.gz ../ //Este es el que podra ser subido en los repositorios de AUR

# makepkg –asroot // Este debe ser ejecutado como root y con el comando –asroot

Ok… Hemos construido nuestros paquetes, el segundo es opcional pero siempre es bueno probarlo antes de subirlo al repositorio, asi que probemoslo. Como lo tenemos en nuestro computador lo podemos instalar con pacman.

# pacman -A ulipad-3.8.1-1-i686.pkg.tar.gz

Si todo va bien entonces es hora de entrar a la pagina de AUR, iniciar nuestra sesión y subir nuestro paquete ulipad-3.8.1.tar.gz

Espero que les sirva este pequeño howto de como crear un paquete para Archlinux…

Nota de braianet:

En un comentario del mismo articulo milmazz nos acota lo siguiente:


Tal vez esto sea un consejo para futuras ocasiones cuando tengas que hacer ficheros de configuración algo extensos, así que en vez colocar cosas como:

echo "#!/bin/bash" > /usr/bin/ulipad
echo "python /usr/share/ulipad/UliPad.py" >> /usr/bin/ulipad

Puedes hacer esto:

cat > /usr/bin/ulipad <

python /usr/share/ulipad/UliPad.py
EOF


Saludos!


0 comentarios: