Ahora, para crear un archivo lc hay que hacer un archivo de texto (que yo le dí la extensión .pqt). Paso a explicar mas adelante...
Paquetes precompilados
Vamos a ver un ejemplo, en este caso las cabeceras del núcleo (lo que esta precedido por # (numeral) son comentarios, no se cuentan:
## Informacion del paquete ##
nombre=i386-Libc-Headers # Un nombre prolijo (con las mayúsculas).
archivo=i386-libc-headers-2.6.12.lc # El archivo que se va a generar.
descripcion='Contiene las cabeceras de la API del kernel. Son necesarias para compilar la libreria Glibc o cualquier otra libc.' # Descripción breve del paquete, hay que encerrarlo entre comillas porque
#hay espacios es preferente usar comilla simple.
majver=2 # Mayor version, el número de versión más significativo, el de mas a la izquierda.
midver=6 # Middle version, el número de version del medio.
minver=12 # Minor version, el menos significativo el de mas a la derecha
directorio=i386-libc-headers-2.6.12 # El directorio que contiene los archivos a empaquetar
precomp=si # Como es precompilado ponemos si
## Final del archivo ##
Al momento de ejecutar el paquete resulante el contenido de i386-libc-headers-2.6.12 va a ser descomprimido en '/' sin incluir el directorio i386-libc-headers-2.6.12, sólo lo que esté adentro.
Paquetes compilables
Ahora toca el ejemplo de los compilables, la parte inicial es igual al precompilado:
## Informacion del paquete ##
# Esta parte es igual que el anterior
nombre=Gcc
archivo=gcc-4.0.2.lc
descripcion='La version 4.0.2 del GNU Compiler Collection (Conjunto de compiladores creados por el proyecto GNU). Es el compilador estandar para la mayoria de los sistemas operativos similares a Unix. Gcc soporta una gran cantidad de arquitecturas y puede compilar programas en C, C++, Fortran, Ada, Java, Objetive C, Pascal.'
majver=4
midver=0
minver=2
directorio='gcc-4.0.2'
precomp=no # Como no es precompilado ponemos no
## Opciones de Compilacion ##
before_configure='mkdir -p $DESTDIR/$SRC_DIR-build && cd $DESTDIR/$SRC_DIR-build'
# Comando/s a ejecutar antes de correr ./configure, en este caso se crea un directorio aparte
# para guardar los archivos compilados (es una recomendación del gcc, pero no es obligatoria)
# También tenemos que usarlo para ubicarnos dónde está el paquete, $SRC_DIR contiene el nombre
# del directorio donde estan los fuentes y $DESTDIR la ruta a el mismo
configure_cmd='../$SRC_DIR/configure' # El comando configure, sinó usa configure dejarlo en blanco
configure_params='--prefix=/usr --disable-multilib --enable-languajes=c,c++ --enable-c99 --enable-long-long --enable-threads=posix --disable-libstdcxx-pch --enable-_cxa_atexit'
# Parámetro para configure, generalmente va --prefix=/usr solamente
make_cmd='make bootstrap' # El comando para compilar, generalmente make
destdir_var='DESTDIR' # Variable para hacer fakeroot (la explicación está mas abajo)
make_install_cmd= # Comando para instalar lo compilado, si deja en blanco se elegir 'make install' que es la
#opcion que se usa generalmente
clean_cmd='rm -f $DESTDIR/$SRC_DIR && rm -f $DESTDIR/$SRC_DIR-build' # comando para borrar los archivos
# temporales generados para compilar (no los instalados) deja en 'rm -f $DESTDIR/$SRC_DIR' si queda en
# blanco, si no creo ningun archivo con los comando anteriores.
## Fin del Archivo ##
LinuxCrudo, como la mayoría de las distribuciones, utiliza el método fakeroot (disimulación de raíz en castellano) para obtener la información de los paquetes. Este método consiste en instalar el contenido del paquetes en un árbol temporal aparte (algo así como otro '/') para luego realizarle la post configuración y finalmente moverlos a donde deben estar (el verdadero '/').
Cuando se ejecuta 'make install' para instalar el paquete este copia los archivos a nuestro árbol raíz, pero si se instala directamente no vamos a poder hacer fakeroot ni guardar la información del paquete. Para solucionar este problema los archivos 'Makefile' tienen (o deberían tener) una variable para hacer fakeroot (osea instalar en otra ubicación). Generalmente el nombre de esta variable es DESTDIR, tendremos que buscar entre los archivos INSTALL o README a ver si dice o en última instancia examinar el archivo 'Makefile' o 'Makefile.in'. En otras ocasiones, la variable directamente no existe y hay que crearla a mano editando el Makefile o Makefile.in, pero no voy a explicar como porque sería un tema bastante extenso, si quieren me avisan y hago un post aparte.
Creación del paquete
Para crear el paquete ejecutamos:
Código:
# empaquetador.sh archivo.pqt
Remplazando archivo.pqt con el archivo que hayamos hecho nosotros y ya está tenemos un archivo autoinstalable!