martes, 12 de agosto de 2008

Crea tus propios paquetes: Slackware

Algo que nunca esta demás aprender cuando queremos saber mas de nuestra distro es cómo crear paquetes propios y así poder crearlos según nuestras necesidades, además de poder compartirlos con nuestros amigos.

El proceso de crearlos es mas bien simple. Se resume en seguir una serie de pasos que no encierra mayor dificultad, ni misterio.

En esta entrada vamos a ver como hacer nuestros propios paquetes tgz desde el tarball. Los tgz son los paquetes precompilados para Slackware y las distros que se basan en esta, si se preguntan porque empezar por esta distro siendo que no es de las mas populares, la respuesta es muy simple, porque es mi distro preferida :D

Para comenzar elegimos que programa queremos empaquetar, para este caso me parece interesante elegir Amarok. Descargemos el tarball desde a su pagina --> Amarok
Para el caso la ultima versión Stable es la 1.4.9.1.

Ya descargada descomprimimos el tarball y entramos en la carpeta

$ tar xvf amarok-1.4.9.1.tar.bz2
$ cd amarok-1.4.9.1

Ahora es donde empieza el proceso de crear nuestro paquete, para esto necesitamos compilarlo como lo haríamos normalmente.

# ./configure --help

Para evitar tener problemas con los permisos es recomendable que desde ahora hagamos todo como root. El configure --help es un paso esencial en el proceso porque nos va a dar una lista de parametros que le podemos entregar a nuestro paquete.

`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...
Las instrucciones son claras :) . En nuestro caso vamos a pasarle las opciones de compilación --enable-mysql --enable-postgresql y --with-libgpod (para los que tiene ipod), porque lo que necesitamos/queremos es que amarok maneje nuestra musica usando como motor de base de datos a mysql o postgresql. ¿Y esto para qué? la respuesta varia de acuerdo a las necesidades que tengamos, en mi caso, tengo una gran cantidad de música (muchos gigas) y sqlite tiende a portarse mal (es muy grande el volumende datos) lo que se traduce en ralentizacion del tarro y en una mala performance de amarok.

Si queremos o lo necesitamos podemos ademas indicarle rutas especificas, por ejemplo:

--prefix=/usr/local (muchas veces ya esta por defecto /usr)

Esto nos permite elegir el directorio donde queremos que se instale el programa. Supongamos que queremos instalarlo en /opt o en /home, entonces simplemente le ponemos --prefix=/opt ó --prefix=$HOME según sea el caso. Otras variables a destacar:

--bindir=/usr/bin
--sbindir=/usr/sbin
--sysconfdir=/etc
--localstatedir=/var
--libdir=/usr/lib
--includedir=/usr/include
--mandir=/usr/man
--docdir=/usr/doc
--infodir=/usr/info

Entonces un posible configure podria quedar de la siguiente forma:

# ./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib --includedir=/usr/include --mandir=/usr/man --docdir=/usr/doc --infodir=/usr/info --enable-mysql --enable-postgresql --with-libgpod

Esto solo es a modo de ejemplo, la verdad es que la mayoría de estos parametros ya vienen por defecto por lo que no es absolutamente necesario escribirlos todos, por ahora con un

# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-mysql --enable-postgresql --with-libgpod

Nos va a bastar y sobrar :p . Otro dato interesante de mencinar son las Variables de entorno, estas se especifican al final de este comando (./configure), según el configure --help algunas útiles pueden ser:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L if you have libraries in a
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if
you have headers in a nonstandard directory
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
XMKMF Path to xmkmf, Makefile generator for X Window System
PKGCONFIGFOUND
Path to pkg-config
Que no la vamos a usar en este caso y que por lo demás escapan del fin de este tutorial.

==========================
=== Amarok - WARNING ==========================================
=
= pg_config could not be found, this means that support for Postgresql
= will be disabled.
=
==========================
=== Amarok - PLUGINS ======================
=
= The following extra functionality will NOT be included:
= - NMM-engine
= - Helix-engine
= - yauap-engine
= - Postgresql Support
= - MusicBrainz Support
= - MP4/AAC Tag Write Support
= - iRiver iFP Support
=
= The following extra functionality will be included:
= + xine-engine
= + libvisual Support
= + MySql Support
= + Konqueror Sidebar
= + iPod Support
= + Creative Nomad Jukebox Support
= + MTP Device Support
= + Rio Karma Support
= + DAAP Music Sharing Support
=
=====================================

Good - your configure finished. Start make now

Si todo concluyó como queremos y sin problemas, vamos a tener algo así como el resumen de el configure, fíjense que le dimos soporte para mysql, para el ipod, etc. No esta soportado postgresql por el simple hecho de que no lo tengo instalado (no lo uso). Otra cosa a notar es que le podemos dar soporte a Helix y MP4/AAC, entre otros. Yo no los necesito :o cada quien ve lo que estime necesario...

Una vez pasada esta etapa y acabada sin errores, nos toca ejecutar el make

# make

Si no tenemos errores pasamos a la siguiente etapa. En esta parte es donde podríamos decir que se comienza a crear nuestro paquete propiamente tal, para esto ejecutamos en consola

# make install DESTDIR=/tmp/paquete

Es el mismo make install de como si estuviéramos compilando, solo que le agregamos el destino de adónde queremos que cree los archivos binarios o ejecutables, es recomendable siempre crearlo en los temporales para después ser limpiados, por ser amarok lo vamos a crear en /tmp/amarok :)

# make install DESTDIR=/tmp/amarok

Pasada esta etapa sin errores ya solo nos resta limpiar un poco y armar nuestro paquete. La limpieza la hacemos con el comando strip, este nos sirve para descartar los símbolos del ficheros, etc. esto lo hacemos sobre los directorios bin y lib.

# strip -s /tmp/amarok/usr/{lib,bin}/*

Ahora creamos el fichero de la documentación, este se crea dentro de amarok/usr y bajo el nombre del paquete que estamos creando:

# mkdir /tmp/amarok/usr/doc/
# mkdir /tmp/amarok/usr/doc/amarok-1.4.9.1

Y copiamos la documentación que dispone nuestra aplicación:

# cp -r AUTHORS ChangeLog COPYING doc README TODO /tmp/amarok/usr/doc/amarok-1.4.9.1/

En el caso de que contemos con archivos man los comprimimos con gzipped de la siguiente forma:

# gzip -9 man/*.?

En nuestro caso particular no lo necesitamos.

Y por último, creamos el slack-desc. Este no es más que un archivo de texto con la descripción del paquete que estamos creando. Es absolutamente necesario crearlo (obligatorio). ¿Alguna vez se detuvieron a leer la información que entrega un programa cuando lo instalaron? Si lo hicieron lo que estaban leyendo era el slack-desc :D . Este entrañable documento de texto lo debemos crear dentro de un directorio llamado install que lo tenemos que hacer antes en donde estará la "raiz" del paquete, osea en:

# mkdir /tmp/amarok/install
# cd /tmp/amarok/install
# vim slack-desc

Cada uno elige el editor de texto que quiera, yo como siempre uso ViM ;) . Ahora algo importante, las dimenciones del slack-desc deben ser de 79 carateres por 11 lineas, además debe cumplir algunos requisitos que nombro a continuación:

  • Dimensiones: 79 caracteres x 11 lineas
  • Titulo: handy-ruler
  • Las 11 lineas deben comenzar con el nombre del programa.
  • Las lineas deben tener una descripcion breve del paquete.
  • En la primera linea va el nombre de la aplicacion más una descripcion todavía mas breve de la aplicacion entre parentesis. Por ejemplo: Firefox (Navegador web)
  • No me acuerdo que más :$ ...un ejemplo grafico.


Ejemplo:

|-----handy-ruler--------------------------------------------------|
aplicacion: Nombre de la aplicacion. (Descripcion brevisima)
aplicacion:
aplicacion:
aplicacion: Descripcion breve de la aplicacion que estamos creando. Ojo, no
aplicacion: hay que pasar mas allá de los 79 caracteres ok?. Fijate con que
aplicacion: agilidad lo hago yo... esto me llevo mucho tiempo de aprender :o.
aplicacion: La idea de este texto es ayudar al que lo instala e informarlo.
aplicacion: Tampoco es para que escribamos nuestro manifiesto o peor aun
aplicacion: el testamento, eso sí, si lo hacen acuerdense de mí... que me
aplicacion: encantan las herencias xDD... no así los manifiestos :(
aplicacion:



Estas son referencias de como tiene que ser nuestro slack-desc, lo que no significa que tenemos que hacerlo tal cual, cada uno ve cuanto espacio necesita. Si se necesita menos lineas borramos las no necesarias :D . Para nuestro caso podria ser asi:


|-----handy-ruler--------------------------------------------------|
amarok: Amarok (Reproductor de Musica)
amarok:
amarok: Redescubra su musica Con Amarok. El mejor reproductor de
amarok: musica del mundo GNU según el buen Asclepio ;) .
amarok:
amarok: Mas informacion: http://amarok.kde.org/
amarok:


Ya creado el slack-desc, salimos a la carpeta donde estamos creando nuestro paquete y escribimos
las palabras magicas:

# cd /tmp/amarok
# makepkg -l y -c n $HOME/paquetes/amarok-1.4.9.1-i686-1cff.tgz

Con el comando makepkg creamos nuestro paquete, en este caso en particular lo estoi creando en mi home (/home/asclepio) en un directorio donde guardo los paquete que hago, de nuevo, cada quien los crea donde mejor le acomode.

Por convención los paquetes deben nombrarse siguiendo esta estructura:

aplicacion-version-arquitectura-N°-empaquetador.tgz


Como ven la aplicacion es amarok, version 1.4.9.1 hecho para arquitectura i686, es el N° 1 (primer paquete) y hecho por un servidor (mis iniciales, cff) el buen Asclepio ;) .

La acción de crear un paquete es algo trivial que con algo de experiencia se vuelve mecánico, algo que para el que aprendió a crearlos es de mucha utilidad. Por otro lado, tambien hay que notar el hecho de que el paquete creado lo podemos compartir con nuestros amigos o los demás compadres de distro. Algo muy util de aprender y fácil. En mi humilde opinión, elemental para todo Slacker y Linux user.


Mas Info: Slack Wiki: How To - Building a package
Paquetes para Slackware
Instalando desde las Fuentes

lunes, 4 de agosto de 2008

Firefox 3.0.1 en español en Slackware 12.1

Una entrada muy simple y solo para quien le pueda ser útil o interesar.

Hace varias versiones de Firefox que vengo haciendo mis propios paquetes de este navegador. El único motivo es que me gusta tenerlo en mi idioma --Castellano, ese el de los acentos y las eñes-- y como no se encuentra por slackpkg o en los repositorios (creo) acá se los dejo:

Actualización a 3.0.4 ----> Acá

Y como siempre la fotito :D