Capitulo 2.2 Sistema de administración de paquetes Debian

2.2.1 Repaso sobre los paquetes Debian

Los paquetes contienen generalmente todos los archivos necesarios para implementar un conjunto de comandos relacionados o características. Existen dos tipos de paquetes Debian:

  • Paquetes binarios, que contienen ejecutables, archivos de configuración, páginas man/info, información sobre derechos de autor y otra documentación. Estos paquetes se distribuyen en un formato de archivo específico de Debian (véase Formato de los paquetes Debian, Sección 2.2.2); que se distinguen por tener a .deb como extensión de archivo. Los paquetes binarios se pueden desempaquetar usando la utilidad de Debian dpkg; se brindan más detalles en la página del manual.
  • Paquetes fuentes, que consisten en un archivo .dsc que describe el paquete (incluyendo el nombre de los archivos que siguen), un archivo .orig.tar.gz que contiene el código fuente original sin modificar en formato tar comprimido con gzip y, generalmente, un archivo .diff.gz que contiene los cambios del código fuente original específicos de Debian. La utilidad dpkg-source empaqueta y desempaqueta los archivos fuentes de Debian; se brindan más detalles en la página del manual.

La instalación de software mediante el sistema de paquetes utiliza “dependencias” que fueron señaladas por las personas a cargo de los paquetes. Estas dependencias están documentadas en el archivo control asociado a cada paquete. Por ejemplo, el paquete que contiene el compiladodr C GNU (gcc) depende del paquete binutils que incluye el enlazador y ensamblador. Si un usario intenta instalar gcc sin haber previamente instalado binutils, el sistema de administración de paquetes (dpkg) mostrará un mensaje de error diciendo que necesita también a binutils y abortará la instalación de gcc (no obstante, el usuario insistente puede hacer caso omiso, véase dpkg(8)) Para más detalles, véase Dependencias entre paquetes, Sección 2.2.8 más abajo.

Las herramientas de los paquetes de Debian se pueden usar para:

  • manipular y administrar paquetes o partes de paquetes,
  • ayudar al usuario a dividir paquetes que deben distribuirse a través de medios de tamaño limitado como, por ejemplo, disketes
  • asistir a los desarrolladores en la construcción de paquetes y
  • ayudar a los usuarios a instalar paquetes que se encuentran en sitios Debian remotos.


2.2.2 Formato de los paquetes Debian

Un “paquete” Debian o un archivo Debian contiene los archivos ejecutables, bibliotecas y la documentación asociada con un programa particular o con un conjunto de programas relacionados. Normalmente, un archivo Debian tiene ua extensión de archivo que termina en .deb.

La estructura interna del formato de paquetes binarios de Debian se describen en la página del manual deb(5). Puesto que el formato interno está sujeto a cambios (entre los lanzamientos principales de Debian), siempre utilice dpkg-deb(1) para manipular archivos .deb. [1]

Los detalles internos de este formato de paquete binario de Debian se describen en la página del manual deb(5). Puesto que este formato está sujeto a cambios (entre los lanzamientos principales de Debian), siempre utilice dpkg-deb(1) para manipular archivos .deb.

Por lo menos en la distribución Sarge, todos los archivos del repositorio de Debian son manipulables por los comandos estándar Unix ar y tar, incluso cuando los comandos de dpkg no se encuentran disponibles.


2.2.3 Convención usada para designar a los paquetes Debian

Los nombres de los paquetes Debian siguen la siguiente convención:

     loquesea_ver-rev_arq.deb

donde generalmente loquesea es el nombre del paquete, ver es el nombre de versión, rev es el número de revisión y arq es la arquitectura. Por supuesto, los archivos se pueden fácilmente cambiar de nombre. Uno puede averiguar qué paquete esta realmente contenido en un nombre de archivo loquesea ejecutando el siguiente comando:

     dpkg --info loquesea

El número de revisión es asignado por el desarrollador Debian o por quien creó el paquete. Un cambio en el número de revisión generalmente indica que a cambiado algún aspecto del empaquetado.


2.2.4 Preservando la configuración local

Los archivos que pueden ser modificados por el administrador local se encuentran en /etc/. La política de Debian establece que durante la actualización de paquetes se deben conservar todos los cambios de archivos de configuración local.

Si con el propio paquete viene una versión predeterminada de un archivo configurable localmente éste se denomina “conffile”. El sistema de administración de paquetes no actualiza los archivos de configuración que han sido modificados por el administrador. Por otra parte, si el archivo de configuración no ha sido modificado por el administrador, entonces será actualizado junto con el resto del paquete.

Para dstar los archivos de configuración de un paquete ejecute el siguiente comando:

     dpkg --status paquete

y consulte la línea “Conffiles:”.

Para más información sobre los archivos de configuración puede consultar la sección “Archivos de configuración” del Manual de Normativa de Debian (véase Referencias, Sección 15.1).


2.2.5 Scripts de mantenimiento de Debian

Los scripts de mantenimiento de Debian son scripts ejecutables que se ejecutan automáticamente antes o después de la instalación de un paquete. Todos estos archivos, junto con otro llamado control, son parte de la sección “control” de un archivo Debian.

Los archivos individuales son:

preinst
Este script se ejecuta antes que su paquete sea desempaquetado de su archivo Debian (.deb). Muchos scripts “preinst” detienen los servicios de los paquetes que están siendo actualizados hasta que la actualización o instalación de los mismos haya finalizado (luego de la ejecución exitosa del script “postinst”).
postinst
Generalmente este script completa la configuración requerida por un paquete una vez desempaquetado de su archivo Debian (.deb). A menudo, los scripts ‘postinst’ le piden al usuario ciertos datos y/o le advierte que si acepta los valores predeterminados deberá volver a reconfigurar el paquete cuando la situación lo requiera. Muchos scripts “postinst” a continuación ejecutan los comandos necesarios para reiniciar el servicio una vez que el paquete nuevo correspondiente haya sido instalado o actualizado.
prerm
Generalmente, este script detiene los demonios asociados a un paquete. Es ejecutado antes de la eliminación de los archivos relacionados con el mismo.
postrm
Generalmente, este script modifica los enlaces u otros archivos asociados a un paquete y/o elimina los archivos creados por él (véase, también Paquetes virtuales, Sección 2.2.7.)

Actualmente, todos los archivos de control se pueden encontrar en el directorio /var/lib/dpkg/info. Los archivos asociados al paquete loquesea comienzan con la palabra “loquesea” y llevan las extensiones “preinst”, “postinst”, etc., según corresponda. El archivo loquesea.list de este directorio lista todos los archivos que fueron instalados con el paquete loquesea (obsérvese, que la ubicación de estos archivos es interno a dpkg y puede estar sujeto a cambios)


2.2.6 Prioridad de los paquetes

Los encargados de la distribución, asignan a cada paquete Debian una prioridad para ayudar al sistema de administración de paquetes. Las prioridades son:

  • Los paquetes requeridos son necesarios para el correcto funcionamiento del sistema.Esto incluye todas las herramientas necesarias para reparar inconvenientes en el sistema. Nunca debería eliminar estos paquetes ya que podría inutilizar su sistema e incluso podría ser incapaz de poder usar dpkg para recuperarlo. Los sistemas con únicamente con paquetes requeridos probablemente no sean utilizables, pero tienen la funcionalidad suficiente como para permitir al administrador del sistema arrancar e instalar más programas.
  • Los paquetes Importantes son los que habitualmente se encuentran en cualquier sistema tipo Unix.Son otros paquetes sin los que el sistema no funcionará correctamente o no será totalmente utilizable. No incluye a Emacs, a X11, a Tex o cualquier otra aplicación grande. Estos paquetes sólo constituyen la infraestructura básica.
  • Los paquetes Estándar son aquellos que están en todo sistema Linux e incluyen un sistema en modo texto razonablemente pequeño pero no por eso demasiado limitado.Esto es lo que se intalará por defecto si el usuario no selecciona otra cosa más. No incluye aplicaciones demasiado grandes, pero incluye Emacs (que es más una parte de la infraestructura que una aplicación) y un subconjunto razonable de TeX y LaTeX (si resulta ser posible sin X).
  • Los paquetes Opcionales incluye a todos los paquetes que probablemente desearía instalar incluso si no está familiarizados con ellos y no tiene requerimientos específicos.Esto incluye a X11, a la distribución completa de TeX y a un montón de aplicaciones.
  • Los paquetes Extra son aquellos que entran en conflicto con otros de mayor importancia, y que carecen de utilidad para los usuarios que no están familiarizados con ellos, o que necesitan de requerimientos específicos como para incluirlos como “Opcionales”.

En la descripción del paquete nótese las diferencias entre “Prioridad: requerida”, “Sección: base” y “Esencial: sí”. “Sección: base” significa que el paquete se instalará antes que cualquier otro en un sistema nuevo. La mayoría de los paquetes de la “Sección: base” posee una “Prioridad requerida” o por lo menos una “Prioridad: importante” y muchos de ellos están marcados con la etiqueta “Esencial: sí”. “Esencial: sí” significa que para que el sistema de administración de paquetes tal como dpkg pueda eliminarlo del mismo necesita de una opción extra para forzar su desinstalación. Por ejemplo, libc6, mawk y makedev tienen una “Prioridad: requerida” y una “Sección: base” pero no llevan la etiqueta “Esencial: sí”.


2.2.7 Paquetes virtuales

Un paquete virtual es un nombre genérico que se le asigna a cualquier paquete de un grupo de paquetes que básicamente proporcionan la misma funcionalidad. Por ejemplo, tanto tin como trn son lectores de noticias y, por lo tanto, deberán satisfacer cualquier dependencia exigida por un programa que requiera de un lector de noticias a fin de que éste resulte útil. Se dice que ambos proporcionan el “paquete virtual” llamado news-reader.

De manera similar, muchos paquetes tales como exim, exim4, sendmail y postfix proporcionan la funcionalidad de un agente de transporte de correo. Por lo tanto, se dice que proporcionan el mismo paquete virtual mail transport agent. Si se instala alguno de los dos, cualquier programa que dependa de la instalación de un agente de transporte de correo se ejecutará sin problemas debido a la existencia de este paquete virtual.

Debian posee un mecanismo de modo que, si se instala en un sistema más de un paquete que proporciona el mismo paquete virtual, el administrador puede configurar uno de los dos como paquete preferido. El comando utilizado se llama update-alternatives y se describe mas adelante en Comandos alternativos, Sección 6.5.3.


2.2.8 Dependencias entre paquetes

El sistema de paquetes Debian maneja declaraciones de dependencia que se utilizan para expresar que un paquete necesita de la instalación de otro para funcionar.

  • El Paquete A Depende del Paquete B si B debe instalarse sí o sí para poder ejecutar A. En algunos casos A Depende no sólo de B, sino de una versión específica de B. En este caso, la dependencia de versión constituye un límite inferior, es decir, A dependerá de cualquier versión de B más reciente que la versión especificada.
  • El Paquete A Recomienda al Paquete B si el encargado del mismo considera que la mayoría de los usuarios no querrán a A sin tener también la funcionalidad proporcionada por B.
  • El Paquete A Sugiere al Paquete B si B contiene archivos que están relacionados y mejoran la funcionalidad de A. La misma relación se expresa diciendo que el paquete B Mejora el paquete A.
  • El Paquete A Está en conflicto con el Paquete B cuando A no funciona si se instala B en el sistema. A menudo los “Conflictos” están relacionados con “Reemplazos”.
  • El Paquete A Reemplaza el Paquete B cuando los archivos instalados por B se eliminan o se sobreescriben por los archivos de A.
  • El Paquete A Proporciona el Paquete B cuando todos los archivos y funcionalidad de B están incorporados en A.

Información más detallada sobre el uso de cada uno de estos términos se puede encontrar en el Manual para la creación de paquetes y el Manual de Normativa.

Obsérvese que dselect tiene un mayor control sobre los paquetes considerados como Recomendados y Sugeridos que apt-get, el cual simplemente obtiene todos los paquetes considerados como Dependientes y deja todos los paquetes considerados como Recomendados y Sugeridos. En sus versiones modernas ambos programas usan APT como interfaz.


2.2.9 Significado de “Pre-depende”

dpkg configura siempre primero el paquete del cual otro Depende. Sin embargo, dpkg generalmente desempaquete los archivos de los paquetes de modo arbitrario indpendientemente de las dependencias (desempaquetar consiste en extraer los archivos de un paquete y ubicarlos en el lugar correcto) No obstante, si un paquete Pre-Depende de otro éste último se desempaquetará y configurará primero. [2] El uso de esta dependencia se mantiene al mínimo.


2.2.10 Estado de un paquete

El estado de un paquete puede ser “unknown” (desconocido), “install” (para instalar), “remove” (para eliminar), “purge” (para purgar), o “hold” (en espera). Estas banderas indican lo que el usuario quiere hacer con un paquete (como viene indicado por las acciones del usuario en la sección “Select” de dselect o por la invocación directa de dpkg por parte del mismo).

Significados:

  • unknown (desconocido) – el usuario nunca indicó si deseaba el paquete.
  • install (para instalar) – el usuario desea instalar o actualizar el paquete.
  • remove (para eliminar) – el usuario desea eliminar el paquete pero no sus archivos de configuración ya existentes.
  • purge (para purgar) – el usuario desea eliminar completamente el paquete incluyendo sus archivos de configuración.
  • hold (para conservar) – el usuario no desea que el paquete sea procesado, es decir, quiere conservar la versión actual con su estado independientemente de cual sea.


2.2.11 Evitando la actualización de un paquete

Existen dos mecanismos para evitar la actualización de un paquete, mediante dpkg o, comenzando con Woody, mediante APT.

Con dpkg, exporte primero la lista de las selecciones de paquetes:

       dpkg --get-selections > selections.txt

A continuación, edite el archivo resultante selecciones.txt, cambiando la línea que contiene el paquete que se desea conservar, por ejemplo libc6, de:

     libc6                       install

a:

     libc6                       hold

Guárdelo y actualice la base de datos de dpkg haciendo:

     dpkg --set-selections selectiones.txt

O, si conoce el nombre del paquete que desea conservar, simplemente escriba:

     echo libc6 hold | dpkg --set-selections

Este proceso conserva los paquetes durante el proceso de instalación de cada paquete.

El mismo efecto se puede obtener mediante dselect. Simplemente entre a la pantalla [S]elect, busque el paquete cuyo estado desea conservar y presione la tecla `=’ (o la tecla `H’). Los cambios se producirán inmediatamente al salir de la pantalla.

En la distribución Woody el sistema a APT pose un mecanismo nuevo alternativo para conservar paquetes durante el proceso de obtención de archivos .deb usando Pin-Priority. Véase la página del manual apt_preferences(5) junto con http://www.debian.org/doc/manuals/apt-howto/ o el paquete apt-howto.


2.2.12 Paquetes fuente

Los paquetes fuente se distribuyen en un directorio denominado source y se pueden descargar manualmente o usar

     apt-get source loquesea

para conseguirlos (consulte la página del manual apt-get(8) para saber cómo configurar APT para que haga esto).


2.2.13 Construir un paquete binario a partir de un paquete fuente

Para un paquete loquesea, necesitará los archivos loquesea_*.dsc, loquesea_*.tar.gz y loquesea_*.diff.gz para compilar los fuentes (observación: para un paquete Debian nativo el paquete .diff.gz no existe).

Una vez que los tiene a todos, y si tiene instalado el paquete dpkg-dev , el comando

     dpkg-source -x loquesea_version-revision.dsc

extraerá el paquete en un directorio llamado loquesea-version.

Ejecutar el siguiente comando para construir el paquete binario:

     $ cd loquesea-version
     $ su -c "apt-get update ; apt-get install fakeroot"
     $ dpkg-buildpackage -rfakeroot -us -uc

Finalmente haga,

     # su -c "dpkg -i ../loquesea_version-revision_arch.deb"

para instalar el paquete recientemente construido. Véase Portar un paquete a la rama stable, Sección 6.4.10.


2.2.14 Creando paquetes Debian nuevos

Para una información más detallada, consulte la Guía para Nuevos Encargados de Paquetes de Debian disponible en el paquete maint-guide o en http://www.debian.org/doc/manuals/maint-guide/.


Popularity: 1% [?]

Por favor, escriba un comentario

Por favor tome en cuenta lo siguiente:
Los comentarios son moderados, por lo cual puede tardar en ser publicados. No hay necesidad de repetir su comentario.
Su correo electronico nunca sera revelado.