# Las herramientas de gestión de paquetes de Debian

## ¿Qué programas tiene Debian para la gestión de los paquetes?

### dpkg

Se trata del programa principal de gestión de paquetes. `dpkg` puede ejecutarse con muchas opciones. Algunas de las más comunes son:

- Averiguar cuáles son las opciones existentes: `dpkg --help`.

- Imprimir el fichero de control (y demás información) de un paquete específico: `dpkg --info fu_VVV-RRR.deb`

- Instalar un paquete (incluyendo el desempaquetado y la configuración) en el sistema de ficheros del disco duro: `dpkg --install fu_VVV-RRR.deb`.

- Desempaquetar (pero no configurar) un paquete Debian en el sistema de ficheros del disco duro: `dpkg --unpack fu_VVV-RRR.deb`. Esta operación no deja al paquete necesariamente operativo; algunos ficheros, pueden necesitar algo más de configuración para funcionar correctamente. Esta orden borra cualquier versión del programa instalada previamente, y ejecuta el script preinst asociado al paquete.

- Configurar un paquete que ha sido previamente desempaquetado: `dpkg --configure fu`. Entre otras cosas, esta acción ejecuta el script postinst asociado al paquete. También actualiza los ficheros de configuración del paquete especificados en `conffiles`. Debe notar que el argumento de la operación 'configurar' es el nombre del paquete (p.ej. fu), no el del archivo del paquete Debian (p.ej. fu_VVV-RRR.deb).

- Extraer un único fichero llamado digamos "blurf" (o un grupo de ficheros llamados "blurf*" de un archivo de paquete Debian: `dpkg --fsys-tarfile fu_VVV-RRR.deb | tar -xf - blurf*`

- Borrar un paquete (pero no sus ficheros de configuración): `dpkg --remove fu`.

- Borrar un paquete (incluidos los ficheros de configuración): `dpkg --purge fu`.

- Listar el estado de los paquetes que contienen la cadena "fu*": `dpkg --list 'fu*'`.

## dselect

Este programa es una interfaz basada en menús al sistema de gestión de paquetes de Debian. En particular es útil para primeras instalaciones y para actualizaciones a gran escala. `dselect` puede

- guiar al usuario al elegir qué paquetes instalar o borrar, asegurándose de que ningún paquete esté en conflicto con otro, y que todos los paquetes necesarios para que cada uno de los elegidos funcione estén adecuadamente instalados.

- avisar al usuario de inconsistencias e incompatibilidades en las elecciones

- determinar el orden en el que los paquetes han de ser instalados.

- realizar la instalación o borrado de forma automática y

- guiar al usuario a través de cualquier proceso de configuración requerido para cada paquete.

`dselect` comienza presentando al usuario un menú de 7 entradas, cada una de las cuales corresponde a una acción concreta. El usuario puede seleccionar una acción utilizando las flechas del teclado que mueven la barra iluminada y presionando INTRO para seleccionar la acción iluminada.

Lo que el usuario ve a continuación depende de la acción elegida. Si elige una opción diferente de `Access` o `Select`, `dselect` simplemente procederá a ejecutar la opción seleccionada: p.ej., si el usuario eligió `Remove`, dselect procederá a borrar todos los ficheros marcados para ser borrados la última vez que el usuario ejecutó la opción `Select` para elegirlos.

Las dos entradas `Access` y `Select` llevan a menús adicionales. En ambos casos, los menús se presentan en una pantalla dividida en dos; la parte superior presenta una lista de opciones navegable, mientras que la parte inferior presenta una explicación ("información") sobre cada una de las opciones.

Una extensa ayuda en línea está disponible: Utilice la tecla '?' para acceder a la pantalla de ayuda y luego '.' para sucesivamente ver cada una de las páginas disponibles, una a una.

Algunos usuarios encuentran más fácil navegar por `dselect` cuando usa colores en la salida por pantalla. Para ver los colores, asegúrese de que ha ejecutado: `export TERM=linux` antes de ejecutar `dselect`.

El orden en el que las acciones se presentan en el menú inicial de `dselect` refleja el orden en el que el usuario ejecutaría normalmente `dselect` para instalar paquetes. Sin embargo, un usuario puede elegir cualquiera de las opciones tantas veces como sea necesario (incluyendo no usar ninguna opción en absoluto, dependiendo de lo que quiera hacer).

- Primeramente elija un "Método de Acceso" (`Access Method`). Este será el método mediante el cual el usuario planea acceder a los paquetes de Debian; p.ej., algunos usuarios pueden acceder a los paquetes de Debian mediante un CD-ROM mientras que otros planean acceder a ellos mediante ftp anónimo. El "Médodo de Acceso" es almacenado al salir de `dselect`, de forma que si no cambia, no será necesario volver a usar esta opción más.

- Luego, "Actualice" (`Update`) la lista de paquetes disponibles. Para ello, `dselect` lee el fichero "Packages.gz" que debería estar incluido en el directorio superior de la estructura que contiene los paquetes Debian que se van a instalar. (Aunque si no lo encuentra allí, `dselect` le permite la opción de crearlo por usted.)

- Elija (`Select`) para seleccionar los paquetes que desea instalar en el sistema.

  Tras seleccionar esta opción del menú, el sistema presenta al usuario una pantalla de ayuda; se puede salir de la ayuda (de esta y de cualquiera) presionando la barra espaciadora. Lo mejor (si es la primera vez que utiliza dselect) es que lea toda la ayuda, pero presionando '.' repetidamente irá presentando todas las páginas una tras otra. Una vez que el usuario sale de la pantalla de ayuda, aparece el menú en dos secciones para la elección de los paquetes a instalar (o borrar). La parte superior es una ventana relativamente estrecha que presenta una parte de la lista de los 42304 paquetes; la parte inferior de la pantalla es una ventana con "información" sobre los paquetes o grupos de paquetes seleccionados en la parte superior.

  Muchos usuarios noveles suelen mostrar confusión en relación a los siguientes aspectos de la pantalla de la opción `Select`:

  - "Marcar para borrado" de paquetes: Se puede especificar qué paquetes deben ser borrados marcando el nombre del paquete o la etiqueta de un grupo de paquetes, p.ej. "Todos" (`All`) y presionando:

    - la tecla '-'. Esto borra la mayoría de los ficheros asociados con el paquete, pero preserva los ficheros listados como ficheros de configuración (véase conffile) y demás información de configuración.

    - la tecla '_'. En este caso, se borra cualquier fichero que pertenezca a este paquete.

    Observe que si "marca para borrar" "Todos los Paquetes" (`All Packages`) su sistema quedará reducido a los paquetes base instalados inicialmente. Esto es problablemente lo que usted quería.

  - Si pone un paquete "en espera" (presionando `='): De forma efectiva, esto indica a `dselect` que no actualice un paquete incluso en el caso de que la versión presente en el sistema sea menos reciente que la disponible en la fuente de la distribución que esté usando (la que fue especificada cuando estableció el Método de Acceso con la opción `Access Method`). (La versión disponible en la distribución viene en el fichero `Packages.gz` que se lee al activar la opción de menú "Update")

    Sacar un paquete del estado de espera (presionando ':'): Se trata de la opción por defecto y significa que el paquete será actualizado siempre y cuando esté disponible una versión más reciente.

  - Orden de presentación de los paquetes: El orden de presentación predeterminado es por Prioridad; para cada valor de prioridad, los paquetes aparecen ordenados según el directorio (alias sección) del archivo en el que están almacenados. De esa forma, algunos paquetes de (digamos) la sección A pueden aparecer primero, seguidos de paquetes de la sección B, seguidos de otros paquetes (de prioridad más baja) de la sección A. Se puede cambiar el orden de presentación utilizando la tecla 'o' que va ciclicamente, cambiando de orden de presentación.

  - Significado de las etiquetas en la parte superior de la pantalla: Las etiquetas de la parte superior pueden expandirse utilizando la tecla 'v' (del inglés verbose, detallado). Al hacer esto, gran parte del texto que originalmente cabía en la pantalla se desplaza a la derecha. Para poder verlo es necesario usar la flecha derecha; para volver a la izquierda, utilice la flecha izquierda.

  - Qué hacer en la pantalla de conflicto/dependencia: Si un usuario elige (tanto para instalar como para borrar) un paquete, digamos `fu.deb` que depende de o recomienda otro, digamos, `blurf.deb`, entonces `dselect` presentará un extracto de la pantalla principal de selección. El proceso comienza presentando la ayuda a pantalla completa, de la que se puede salir usando la barra espaciadora. Después, puede elegir los paquetes relacionados, aceptando las acciones sugeridas (de instalar o no), o rechazándolas. Para conseguir esto último, basta presionar Mayúsculas-D; para volver a las sugerencias puede usar Mayúsculas-U. En cualquier caso, puede salvar su elección y volver al menú principal de instalación mediante Mayúsculas-Q.

- Una vez de vuelta al menú principal, se puede proceder a la opción de "Instalación" (`Install`) para desempaquetar y configurar los paquetes elegidos. Alternativamente, si lo que quiere es eliminar ficheros, puede elegir la opción de "Borrado" (`Remove`). Puede salir del programa en cualquier momento mediante la opción `Quit`; cualquier elección que haya hecho será preservada por `dselect`.

### dpkg-deb

Este programa manipula un archivo de paquete Debian(`.deb`). Algunos de sus usos comunes son:

- Averiguar cuáles son las opciones existentes: `dpkg-deb --help`.

- Determinar qué ficheros están contenidos en un archivo de paquete Debian: `dpkg-deb --contents fu_VVV-RRR.deb`)

- Extraer los ficheros contenidos en un archivo de paquete Debian dado en un directorio especificado: `dpkg-deb --extract fu_VVV-RRR.deb tmp` extraerá los ficheros de `fu_VVV-RRR.deb` en el directorio `tmp/`. Esta operación es conveniente para examinar el contenido de un paquete en un directorio concreto, sin necesidad de instalar el paquete en el sistema de ficheros raíz.

Puede obtener más información en la página de manual de `dpkg-deb`(1).

### dpkg-split

Este programa divide un paquete grande en ficheros más pequeños (p.ej. cara a copiarlo mediante un grupo de disquetes) y puede usarse para unir de nuevo los ficheros en uno solo. Sólo se puede usar este programa en un sistema Debian pues se vale de `dpkg-deb` para desglosar el archivo de paquete Debian en sus componentes. Así, por ejemplo, si quisiera dividir un fichero .deb grande en N partes,

- Ejecute la orden `dpkg-split --split fu.deb`. Esto producirá N ficheros de aproximandamente 460 KBytes cada uno en el directorio actual.

- Copie los N ficheros en disquetes.

- Copie el contenido de los disquetes en el disco duro que haya elegido en la otra máquina.

- Una los ficheros parciales mediante `dpkg-split --join "fu*"`.

### Debian asegura ser capaz de actualizar programas que están siendo ejecutados; ¿Cómo se puede hacer esto?

Debian GNU/Linux incluye un programa llamado `start-stop-daemon` que es usado por los scripts de instalación para arrancar demonios durante el proceso de arranque de la máquina o para pararlos cuando cambia el nivel de ejecución del núcleo (p.ej. si se cambia de multi-usuario a usuario-único o a parada). El programa `start-stop-daemon` también se utiliza cuando se instala un paquete nuevo que contiene un demonio, para parar demonios en ejecución y rearrancarlos según sea necesario, p.ej. cuando se instala un paquete que contiene un script de configuración actualizado.

### ¿Cómo se puede comprobar qué paquetes han sido instalados en un sistema Debian?

Para averiguar cuál es el estado de todos los paquetes instalados en un sistema Debian, debe ejecutar la orden `dpkg --list`. Esto muestra un resumen de una línea por cada paquete, que contiene un símbolo de estado de 2 letras, el nombre del paquete correspondiente, la versión que está instalada, y una descripción muy breve del mismo.

Para averiguar el estado de los paquetes que encajan con un patrón que empiece por "fu" puede ejecutar la orden `dpkg --list 'fu*'`

Para obtener información más detallada de un paquete en particular puede usar la orden `dpkg --status fu`.

## ¿Cómo se puede averiguar qué paquete produjo un fichero en particular?

Para indentificar el paquete que produjo un fichero llamado `fu` puede usar cualquiera de las siguientes opciones:

- `dpkg --search nombredefichero`.

  En este caso se busca el fichero `nombredefichero` entre los paquetes instalados. (Esto equivale (actualmente) a buscar todos los ficheros de extensión `.list` contenidos en el directorio `/var/lib/dpkg/info/`.)

- `grep fu Contents`, o `zgrep fu Contents.gz`.

  Esto realiza una búsqueda de ficheros que contengan la subcadena `fu` en cualquier parte de sus caminos completos. Los ficheros `Contents` y `Contents.gz` residen en los directorios principales (stable, non-free, contrib, development) de un sitio FTP de Debian. Cada fichero `Contents` se refiere únicamente a los paquetes que se encuentran bajo el árbol de directorios en el que se encuentra. Por ello, es posible que tenga que buscar más de un fichero `Contents` para encontrar cual es el paquete que tiene el fichero `fu`.

  Este método tiene como ventaja sobre `dpkg --search` que es capaz de encontrar ficheros contenidos en paquetes que no han sido instalados previamente en el sistema.