8- Manejo de Paquetes de Slackware

  • Visón general del formato de los paquetes
  • Utilidades de Paquetes
  • Creando Paquetes
  • Creando Tags y Tagsfiles (para la instalacion)
  • Resumen

    Visón general del formato de los paquetes

    Los paquetes de software son grupos de programas que tienen una relación  y que ya se encuentran debidamente compilados para que sean usados de inmediato. Esto es una gran ventaja, ya que así no tendremos que compilar un tarball y configurarlo. Estos paquetes de software son muy fáciles de instalar, atualizar, examinar y quitar gracias a las utilidades de paquetes que slackware trae consigo, esto es lo que se denomina comunmente como sistema de paquetes.

    Primero que nada debo aclarar que el tipo de formato de paquetes que usa SLackware Linux son aquellos con extensión .tgz, que simplemente es un archivo tar(1) comprimido con gzip(1). Gracias a este podemos mantener un orden en nuestro sistema de los paquetes de software que tenemos instalados o no, lo que nos será de gran ayuda a la hora de la mantención del sistema.

    Aquí mostraré como es un paquete.tgz a grandes rasgos:
       ./
    usr/
    usr/bin/
    usr/bin/testing
    usr/doc/
    usr/doc/testing-4.2/
    usr/doc/testing-4.2/COPYING
    usr/doc/testing-4.2/README
    usr/man/
    usr/man/man1
    usr/man/man1/testing.1.gz
    install/
    install/slack-desc
    install/doinst.sh

    Como se puede apresiar, lo que ocurre, es que varios archivos serán extraidos a directorios específicos dentro de nuestro arbol de diretorios, con el fin de instalar el software contenido en ese paquete por completo, osea sus manuales, binario, librería y ortros que es variable ( todo depende del paquete a instalar) y un directorio install que posee una descripción del programa contenido en ese paquete ( en el archivo slack-desc) y un archivo llamado doinst.sh ke es el script encargado de crear link y ejecutar otros programas necesarios para el correcto funcionamiento del paquete instalado.

    Los directorios o scripts contenidos en un paquete son variables, esto es explicado en sección llamada makepkg.

    He aquí el segundo grupo que se compone principalmente de utilidades que nos permiten crear, explorar y definir archivos para los paquetes que serán instalados en nuestro sistema.


    Utilidades de Paquetes

    Estas utilidades son las que nos sirven para instalar, desinstalar, actualizar, explorar y crear paquetes en nuestro sistema, las cuales escencialmente son 5 y que podemos dividir en dos grupos:

    El primer grupo es compuesto por aquellas utilidades que nos permiten instalar(installpkg(8)) , eliminar(removepkg(8)) y actualizar(upgradepkg(8)) paquetes en nuestra querida distribución, además de una utilidad llamada pkgtool que nos permite instalar y eliminar paquetes con una sencilla interfáz en ncurses la que describiremos a continuación.

    pkgtool

    pkgtool(8) es un programa que funciona bajo la consola y que posee una interfáz ncurses ( osea con menús interactivos) el cual nos permite instalar y eliminar paquetes. Aquí hay una muestra del menú principal de pkgtool:

    Figura16-1. menu principal del pkgtool.


    Este menú como pueden observar tiene varias opciones. La primera opcion es Current ( directorio actual) y consiste en la instalación de paquetes desde el directorio actual en el cual fué ejecutado el pkgtool. La otra opción es Other ( otro directorio) en donde instalamos paquetes desde un directorio distanto al que nos encontramos. Luego nos sigue la opción FLoppy ( diskett) es para realizar una instalación de packetes desde disketts. Después tenemos a Remove ( remover, quitar, desinstalar ) para des-instalar un paquete de software. Ahora tenemos a View ( ver ) que nos muestra los paquetes que tenemos instalados en el sistema. En estre punto nos queda la opción Setup en donde nosotros podemos escoger los scripts al momento de iniciar el sistema o en ese mismo instante para modificar alguna configuración del sistema como lo puede se rla configuración de las fuentes ( fonts), actualización de la base de documentos de Gnome, la instalación de un kernel desde una unidad de diskett, la creación de un disco de rescate de linux ( bootdisk), selección del dispositivo del modem, configuración del hotplug, configuración de lilo ( liloconfig), configuración del mouse ( mouseconfig), la red ( netconfig), sendmail, selección de un tipo distinto de fuente, selección de un tiempo de zona y finalmente la selcción de un window manager para nuestro entorno X.

    installpkg

    installpkg(8) nos permite instalar uno o varios packetes *.tgz binarios( con la ayuda de comodines ), los que son designados para ser usados en el sistema de la distribución Slackware Linux.

    Su sintáxis es la siguiente:

      # [ROOT=<path>] installpkg [opciones] <nombre_del_packete.tgz>

    A continuación podrán apreciar las diferentes opciones de installpkg(8) en la siguiente tabla:

    Tabla 16-1. Opciones del installpkg

    Opción
    Descripción de la opción
    -warm nombrel_del_paquete
    Esta opción nos genera un reporte de la salida estandar sobre que archivos y directorios hemos removido o sobre-escrito en el caso de que hayamos intalado un paquete, pero no del paquete actualmente instalado
    -root /otherroot
     Te permite instalar desde una localización diferente de / ( que es la por defecto ) que es donde se encuentra el archivo de sistema de root. En el ejemplo dado, es usado /otherroot en vez de otro. Seteando las variables del ambiente ROOT hace la mima cosa.
    -infobox
    Aquí usamos /bin/dialog para mostrar el diálogo de información de el paquete que estamos instalando. Primariamente es usando cuando installpkg(8) es llamado desde algún otro script.
    -menu
    En esta opción usamos /bin/dialog para mostrar un menú que nos preguntará si deceamos ono instalar un(os) paquete(s). Generalmente es usado cuando installpkg(8) es llamado desde otro script.
    -ask
    Usado en conjunto con el modo -menu. Cuando seleccionamos un paquete, siempre nos pregunta si el paquete a instalar regardless of what the package`s priority is.
    -priority ADD|REC|OPT|SKP
    Cuando usamos la opción -menu, los niveles de prioridad del paquete ( encontrados en el archivo "tagfiles" en el directorio del paquete) son usados automaticamente para instalar ( ADD) o saltar ( SKP) el paquete, o cuando es sugerido y recomendado (REC) o opcional (OPT) a el usuario si el menú así lo muestra. Si la prioridad es seteada desde la línea de comandos, los valores en el archivo tagfile seran sobre-escritos para la lista entera de paquetes.
    -tagfile /somedir/tagfile
    Especifica un archivo diferente para que sea usado en las prioridades de los paquetes ( en este ejemplo, /somedir/tagfile será usado). El archivo "tagfile" usado por defecto es el que se encuentra en el directorio de los paquetes.

    Es bueno mencionar que el archivo que tiene la base de datos de todos los paquetes instalados en nuestro sistema se guardará en el directorio /var/log/packages/ y es aquí donde nosotros podremos encontrar diferentes archivos de texto plano con el nombre del paquete que tenemos instalado. Dentro de cada archivo de texto plano con el nombre del paquete instalado encontraremos una breve descripción del paquete ( que es la misma que se muestra al momento de instalarlo con installpkg(8) ) además de los directorios en donde fueron dejados los archivos que componian ese paquete.

    Como has notado la utilización de installpkg(8) es sencilla, pero has de ser cuidadoso, ya que este no nos advierte si estamos borrando un paquete instalado o si sobre escribimos uno ya instalado, asique siempre es bueno darle una miradita al directorio /var/log/packages para serciorarnos de lo que hacemos. Pero cabe destacar que para casos de actualización de un paquete ya instalado no es necesario quitarlo con removepkg(8) y luego instalar el otro, sino que tenemos la opciñon de usar upgradepkg(8) el cual veremos más a delante.

    removepkg

    removepkg(8) quita, remueve o elimina un paquete que a sido previamente instalado en Slackware. Su sintáxis es la siguiente:

       # [ROOT=<path>] removepkg [opción] <nombre_del_paquete>

    removepkg(8) utiliza las opciones que verémos más abajo en la siguiente tabla:

    Tabla 16-2. Opciones de removepkg

    Opción
    Descripción de la opción
     -warn nombre_del_paquete
    Genera un reporte de la salida estandar informando sobre que archivos y directorios han sido eliminados, pero actualmente no remueve el paquete.
    -preserve nombre_del_paquete
    Si es especificado, el sub-arbol ( subtree ) completo del paquete es reconstruido en /tmp/preserved_packages/nombrel_del_paquete.
    -copy nombre_del_paquete

    Contruye una copia del paquete bajo /tmp/preserved_packages/nombre_del_paquete, pero no lo elimina. ( el mismo efecto que realizan las opciones -warn -preserve)
     -keep
    Guarda  the  intermediate archivos creados por removepkg(8) ( delete_list,  required_files, uniq_list, del_link_list, required_links, required_list). Mayormente usadado para el proposito de depurar software.

    SI ponemos la variable de entorno ROOT antes del comando removepkg(8), este directorio será usdo como directorio raíz. Esto tiene su utilidad cuando deceamos configurar nuevas unidades en nuestro directorio raíz, las que comunmente se montarn en el directorio /mnt/ o algún otro distinto de /.

    Lo que removepkg realiza al momento de ser ejecutado es mirar todos los paquetes que tenemos registrados ennuestro sistema elimando solamente aquellos que nosotros hemos especificados. Aparte de esto removepkg mira en el script post-instalación del paquete que hemos especificado para así saber que link blando fué creado al momento de la instalación del paquete para así poder eliminarlo de nuestro sistema.

    Mientras se realiza el proceso que describimos, removepkg nos muestra un informe del estado. Posterior a esto el contenido del paquete ( osea toda su base) es movida al directorio /var/log/removed_packages y el script post-instalación es movido hacia /var/log/removed_scripts.

    Igualmente que installpkg tenemos la opción de usar comodines para así especificar una variedad de paquetes.

    upgradepkg

    upgradepkg(8) nos permite actualizar Slackware a partir de paquetes binarios .tgz más recientes ( osea de últimas versiones con bugs parchados etc ).
    Su sintaxis es la siguiente:

       # [ROOT=<path>] upgradepkg <nombre_del_paquete>...

    o

       # [ROOT=<path>] upgradepkg \

    Las opciones son descritas en la siguiente tabla:

    Opción
    Descripción de la opción
    --install-new
     Normalmente upgradepkg solo actualiza paquetes que ya se encuentran instalados en el sistema, y se salta cualquier paquete que no se encuentra anteriormente instalado. Si --install-new es especificado,  the behavior es modificado para instalar el nuevo paquete en adición de actualizar pquetes existentes.
     --reinstall Upgradepkg usualmente se salta paquetes si el paquete es exactamente el mismo ( ya sea qu coincidan en nombre, version, arquitectura y numero de creación) que ya se encuentra instalado en el sistema. Usando la opción --reinstall nosotros podremos actualizar todos los paquetes incluso si la misma versión del paquete a instalar ya se encuentra instalada en nuestro sistema.
    --verbose
    Nos muestra todos los detalles de nuestra actualización.


    El proceso que realiza upgradepkg
    es primeramente instalar el paquete y posterior a esto eliminar el paquete de version más antigua  de nuestro Slackware. Si ocurre que el nombre del paquete que deceamos actualizar a cambiado, podemos usar el símbolo de porcentaje ( %) para así mostrarle a upgradepkg el paquete viejo / que se encuentraen nuestro sistema) y el nuevo paquete que estamos instalando.

    Si usamos la variable de entorno ROOT upgradepkg, susederá lo mismo que si la usaramos antes del comando installpkg(8) o removepkg(8) como se los había descrito más arriba. También cabe mencionar que así como en el comando installpkg y removepkg podemos usar comodines para especificar el nombre del archivo con upgradepkg(8) tambíen podemos hacerlo.

    rpm2tgz/rpm2targz

    El manejador de paquetes del Red Hat es un sistema de empaquetamiento popular hoy en dia. Muchos distribuidores de software estan ofreciendo sus prodcutos en formato RPM. Ya que este no es nuestro formato nativo, nostros recomendamos a las personas que no se confien de ellos. Sin embargo, algunas cosas solo estan disponibles en RPM(incluso la fuente).

    Nosotros proporcionamos un programa que convierte los RPM a nuestro formato .tgz nativo. Esto le permite extraer los paquetes (quizas con el explodepkg) a un directorio temporal y examinar su contenido.

    El programa rpm2tgz crea un paquete de Slackware con la extension .tgz, mientra que el rpm2targz crea un archvio con la extension tar.gz.

       <old package name>%<new package name>



    Creando Paquetes

    Para la creación de paquetes para nuestra querida distribución Slackware Linux tenemos varias alternativas. Sinceramente no hay un modo fijo de como crear un paquete, pero si creo que hay una especie de modelo generalizado para crear los archivos. Este modo generalizado como lo denomino yo, será el que trataré de describirles en las siguientes líneas. Para aquellos que crean que esta es una tarea dificil pues no teman, ya que para eso está esta guía aquí.

    Comenzaré diciendo que  el requisito es que el paquete a crear sea un archivo .tgz ( osea un tar comprimido con gzip) y que llegaramos a decear que haya un script de post-instalación, este debe encontrarce en install/doinst.sh. Algo bueno sería tomar un paquete que tengamos instalado en el sistema, ya que un paquete en el sistema es un claro, preciso y simple ejemplo que podemos tomar en cuenta en algún momento que nos encontremos desorientados.

    Ahora mencionaré las utilidades que nos ayudará con la creación de nuestros paquetes para Slackware Linux.

    explodepkg

    explodepkg(8) extrao el contenido de un paquete .tgz ( como un paquete de software de Slackware) en el directorio que nos encontramos. Sencillamente toma los paquetes y los extrae, pero no los instala ni guarda en ningún registro de la base de datos de los archivos instalados.

    Su sintaxis es:

    explodepkg paquete [ paquete2, paquete3, ...  ]

    La gracia de este comando esque nos permite explorar, analizar y mantener cada uno de los archvios y directorios contenidos en un paquete, ayudandonos así a la creación de parches y también a la aplicación de actualizaciones al software dandonos así la facultad de poder crear un archivo actualizado con ayuda de makepkg(8)

    makepkg

    makepkg(8) nos permite la creación de paquetes compatibles con Slackware. La construcción del paquete se realiza usando el contenido de directorio actual y todos sus subdirectorios. Si existe algún link simbólico, este es convertido en parte de un script para poder ser reconstruido cuando estemos instalando el paquete. Este código será agregado a la escritura primaria del script ( install/doinst.sh ), o en el caso que este script no existiera, este será creado con el contenido pertinente. Al paquete se le escribirá la salida a el archivo nombre_del_paquete el cual sera el nombre completo de este, incluyendo su extensión (que usualmente será -tgz).

    makepkg(8) es utilizado una vez que ya tenemos nuestro árbol de directorio listo, el cual será el árbol de directorios del paquete que vamos a crear.

    Su sintáxis es:

    makepkg [ -l, --linkadd y|n ] [ -c, --chown y|n ] nombre_del_paquete

    Sus opciones son explicadas en la siguiente tabla:

    Opción
    Descripción de la opción
    -l, --linkadd y|n
    Si y, agrega cualquier link simbólico encontrado al script de post-instalación (doinst.sh) y lo elimina. Esta es una acción recomendad. Si esta opción no es usada, makepkg nos avisará si un link simbólico es encontrado.
    -c, --chown y|n
    Si y, makepkg  resetea todos los directorios  con el permiso 755 y dueño a root:root. En general, usted debe tener los permisos y los propietarios ( o dueños) trabajando sin usted mismo, al confiar fijar esta opción a y es algo descuidado. Esto no es por defecto. Si alguna opción no es proveida, makepkg nis avisará.

    También les diré que los scripts de instalación se dividen en tres tipos soportados en el sistema de paquetes de Slackware.

    El primero es el primary ( o primario) script de instalación. Este lo podemos encontrar en el subdirectorio ./install y este tiene el nombre de doinst.sh en orden para ser reconocido. Este ( y otros scrips de instalación) están escritos usando la sintáxis básica Bourne shell reconocida por la shell ash, puesto que este es el shell utilizado para ejecutar el script de instalación desde un disco blando ( o diskett) de Slackware.

    El segundo topo de script es el configuration (configuración) script. Este lo podemos encontrar en el subdirectorio ./var/log/setup y debe tener un nombre que comience con setup. Con el fin de ser reconocido. UN ejemplo de esto es el srito de timezone ( zona de tiempo): /var/log/setup/setup.timecon-fig. Este script es ejecutado durante la fase de configuración del setup, y es vuelto a ejecutar al mismo tiempo que un usuario corre la opción configure desde el setup.

    Y el tercer tipo de script es el onlyonce (solo una vez) script. Tal como el nombre lo sugiere, este es ejecutado solo unavez después que el paquete es instalado, en contraste al estandar configuration script. Este script puede es encontrado en el directorio ./var/log/setup y su nombre dene comenzar con setup., pero agregado al nombre debe contener la cadena only-once. Un ejemplo puede ser el script con el nombre /var/log/setup/setup.onlyonce.testscript.

    Checkinstall

  • Esta utilidad a cobrado una gran importancia a la hora de crear nuestros propios binarios.tgz de los programas que vayamos instalando desde un tarball y no crean que solo sirve para la creación de paquetes de tipo binario.tgz, sino que también es posible crear archvios .rpm(de Redhat)  y .deb (de Debian). Su sintáxis es la siguiente:

    checkinstall [opciones] [comando [comando agumentos]]

    Checkinstall trae consigo una gran cantidad de opciones, por lo que me limitaré a explicar su uso en el caso de que deceemos crear un packete para nuestra querida distribución.

    Los pasos a seguir son basicamente los mismo solo que en lugar de teclear make install para que nuestros binarios compilados con make y configurados con configure sean instalados en nuestro sistema sin saber muchas veces donde queda exactamente este usamos la orden checkinstall. Por ejemplo, suponiendo que deceamos instalar xmms desde las fuentes lo pasos serían los siguientes asumiendo que el tarrball en cuestión se llama xmms-1.2.2.tar.gz :

    $ tar zxvf xmms-1.2.2.tar.gz
    $ cd xmms-1.2.2
    $ ./configure
    $ make

    Como se fijaron, hasta este punto todo es lo común en la configuración y compilación de un tarball por así decirlo, pero obviamente que si encesitas pasarle algún parámetro extra a ./configure se lo pasas y listo. La diferencia comienza aquí, en donde nosotros comunmente aplicabamos el uso de make install, la cual será reemplazada por checkinstall y por alguno que otro paso agregado en beneficio del binario que deceamos crear como se muestra a continuación:

    $ mkdir
    doc-pak
    $ cp AUTHORS COPYING Changelog TODO README INSTALL CREDITS doc-pak/
    $ su

    password:
    # checkinstall

    Los pasos anteriores nos sirven primeramente para incorporar un par de archvios en el paquete.tgz. Luego nos reconocemos ante el sistema como root par aasí poder instalar los binarios y ejecutamos checkinstall que nos creará el paquete.tgz ( que en este caso sería xmms-1.2.2.tgz ) y posteriormente lo instalará en el sistema. Esto nos permite tener un mayor contorl sobre los paquetes instalados en el sistema y a la vez nos da la posibilidad de crearnos nuestros propios paquetes para Slackware.

    Checkinstall es un programa como decía líneas más arriba con una gran variedad de opciones que si deceamos poder usarlas nos bastará con recurrir a las páginas de su manual o ejecutando la orden checkinstall --help lo que nos mostrará las opciones al lado izquierdo y a la derecha frente a frente de la opción una breve descripción de esta.

    Creando Tags y Tagsfiles (para la instalación)

    Los tags y tagfiles son archivos que le indican al programa de instalación de Slackware que paquetes deben instalarce, cuales son sus opciones y que archivos son seleccionados por defecto. Estos los podemos encontrar en el primer directorio de series de software el cual se llama tagfile, el cual contiene un listado de todos los paquetes de este tipo de serie con sus respectivos estados, los cuales pueden ser:

    Tabla16-3. Opciones de estado de los tagfiles

    Opción Descripción
    ADD El paquete es requerido por el sistema
    SKP El paquete puede ser omitido automaticamente
    REC El paquete no es requerido, pero es recomendado
    OPT El paquete es opcional

    Su formato es:

       <Nombre_del_paquete>: <Estado>

    Solo podemos especificar un paquete por línea. Para cada serie del software se tienen guardado tagfiles originales como tagfile.org lo que nos permite restaurar el original en aso de que hayamos hecho una modificación y no nos haya quedado como esperabamos.

    Es recomendable que escribamos nuestros propios tagfiles, ya que así la instalación se realizará de acuerdo a nuestras encesidades y gustos, suprimiendonos muchas veces las tediosas tareas de estar eliminando software innecesario después de termnada la instalación. Como es lógico si utilizamos las opciones REC u OPT, se nos mostrará un cuadro de diálogo durante la instalación de los paquetes para darnos así la posibilidad de incluir o no algún paquete especifico. Para esto solo nos debemos serciorar de que los tagfiles estén en el mismo directorio en donde se ubicaban los tagfiles originales. O sino, también tenemos la alternativa de especificar una ruta diferente ( personalizada ) de la ubicación d enuestro tagfile en el caso que tengamos tagfiles creados o modificados por nosotros.

    Resumen

    En estos momentos se puede decir que usted ya se encuentra familiarizado con todo lo que tenga relación a la instalación, eliminación, actualización y creación de paquetes así como en que consiste uno para nuestra distribución Slackware Linux. Usted también a de tener concimiento sobre la creación de tagfiles especificos para realizar una instalación de software más precisa y dinámica.


    Guardando Archivos Indice Glosario