<chapt id="pkgtools">Las herramientas de gestión de paquetes de Debian

<sect id="pkgprogs">¿Qué programas tiene Debian para la gestión de los paquetes?

<sect1 id="dpkg">dpkg

<p>Se trata del programa principal de gestión de paquetes. <tt>dpkg</tt>
puede ejecutarse con muchas opciones. Algunas de las más comunes son:
<list>
   <item>Averiguar cuáles son las opciones existentes: <tt>dpkg --help</tt>.
   <item>Imprimir el fichero de control (y demás información) de un
   paquete específico: <tt>dpkg --info fu_VVV-RRR.deb</tt>

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

   <item>Desempaquetar (pero no configurar) un paquete Debian en el
   sistema de ficheros del disco duro: <tt>dpkg --unpack
   fu_VVV-RRR.deb</tt>.  Esta operación <em>no</em> 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.

   <item>Configurar un paquete que ha sido previamente
   desempaquetado: <tt>dpkg --configure fu</tt>.  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 <tt>conffiles</tt>.
   Debe notar que el argumento de la operación 'configurar' es el
   nombre del paquete (p.ej. fu), <em>no</em> el del archivo del
   paquete Debian (p.ej. fu_VVV-RRR.deb).

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

   <item>Borrar un paquete (pero no sus ficheros de configuración):
   <tt>dpkg --remove fu</tt>.

   <item>Borrar un paquete (incluidos los ficheros de configuración):
   <tt>dpkg --purge fu</tt>.

   <item>Listar el estado de los paquetes que contienen la cadena
   "fu*":
   <tt>dpkg --list 'fu*'</tt>.
</list>

<sect id="dselect">dselect

<p>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.

<tt>dselect</tt> puede
  <list>
    <item>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.
    <item>avisar al usuario de inconsistencias e incompatibilidades en
    las elecciones
    <item>determinar el orden en el que los paquetes han de ser instalados.
    <item>realizar la instalación o borrado de forma automática y
    <item>guiar al usuario a través de cualquier proceso de
    configuración requerido para cada paquete.
  </list>
<p>
  <tt>dselect</tt> 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.
  <p>
  Lo que el usuario ve a continuación depende de la acción
  elegida. Si elige una opción diferente de <tt>Access</tt> o
  <tt>Select</tt>, <tt>dselect</tt> simplemente procederá a ejecutar
  la opción seleccionada: p.ej., si el usuario eligió <tt>Remove</tt>,
  dselect procederá a borrar todos los ficheros marcados para ser
  borrados la última vez que el usuario ejecutó la opción
  <tt>Select</tt> para elegirlos.

  <p>Las dos entradas <tt>Access</tt> y <tt>Select</tt> 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.

  <p>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.

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

  <p>El orden en el que las acciones se presentan en el menú inicial
  de <tt>dselect</tt> refleja el orden en el que el usuario ejecutaría
  normalmente <tt>dselect</tt> 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).
  <list>
    <item>Primeramente elija un "Método de Acceso" (<tt>Access
    Method</tt>). 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
    <tt>dselect</tt>, de forma que si no cambia, no será necesario
    volver a usar esta opción más.
    <item>Luego, "Actualice" (<tt>Update</tt>) la lista de
    paquetes disponibles. Para ello, <tt>dselect</tt> 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í,
    <tt>dselect</tt> le permite la opción de crearlo por usted.)

    <item>Elija (<tt>Select</tt>) para seleccionar los paquetes que desea
    instalar en el sistema.
    <p>
    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 <em>toda</em> 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
<!-- XXX keep numbers up-to-date -->
    &main-pkgs; 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.
    <p>
    Muchos usuarios noveles suelen mostrar confusión en relación a los
    siguientes aspectos de la pantalla de la opción <tt>Select</tt>:
    <list>
      <item>"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" (<tt>All</tt>) y presionando:
         <list>
         <item>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 <ref id="conffile">)
         y demás información de configuración.
         <item>la tecla '_'.  En este caso, se borra
	 <em>cualquier</em> fichero que pertenezca a este paquete.
         </list>
      Observe que si "marca para borrar"
      "Todos los Paquetes" (<tt>All Packages</tt>) su
      sistema quedará reducido a los paquetes base instalados
      inicialmente. Esto es problablemente lo que usted quería.

      <item>Si pone un paquete "en espera" (presionando
      `='):
      De forma efectiva, esto indica a <tt>dselect</tt> 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
      <tt>Access Method</tt>).  (La versión disponible en la
      distribución viene en el fichero <tt>Packages.gz</tt> que se
      lee al activar la opción de menú "Update")
      <p>
      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.

      <item>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.

      <item>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.

      <item>Qué hacer en la pantalla de conflicto/dependencia:
      Si un usuario elige (tanto para instalar como para borrar) un
      paquete, digamos <tt>fu.deb</tt> que depende de o recomienda
      otro, digamos, <tt>blurf.deb</tt>, entonces <tt>dselect</tt>
      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.
      </list>
    <item>Una vez de vuelta al menú principal, se puede proceder a la opción
    de "Instalación" (<tt>Install</tt>) para desempaquetar y
    configurar los
    paquetes elegidos. Alternativamente, si lo que quiere es eliminar
    ficheros, puede elegir la opción de "Borrado"
    (<tt>Remove</tt>). Puede salir del programa en cualquier momento
    mediante la opción <tt>Quit</tt>; cualquier elección que haya hecho
    será preservada por <tt>dselect</tt>.
  </list>

<p>
<sect1 id="dpkg-deb">dpkg-deb

<p>Este programa manipula un archivo de paquete Debian(<tt>.deb</tt>).
Algunos de sus usos comunes son:
  <list>
    <item>Averiguar cuáles son las opciones existentes: <tt>dpkg-deb
    --help</tt>.

    <item>Determinar qué ficheros están contenidos en un archivo de
    paquete Debian: <tt>dpkg-deb --contents fu_VVV-RRR.deb</tt>)
    <item>Extraer los ficheros contenidos en un archivo de paquete
    Debian dado en un directorio especificado:  <tt>dpkg-deb --extract
    fu_VVV-RRR.deb tmp</tt> extraerá los ficheros de
    <tt>fu_VVV-RRR.deb</tt> en el directorio <tt>tmp/</tt>. 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.
  </list>
Puede obtener más información en la página de manual de <tt>dpkg-deb</tt>(1).

<sect1 id="dpkgsplt">dpkg-split

<p>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 <tt>dpkg-deb</tt> para
desglosar el archivo de paquete Debian en sus componentes. Así, por
ejemplo, si quisiera dividir un fichero .deb grande en N partes,
  <list>
  <item>Ejecute la orden <tt>dpkg-split --split fu.deb</tt>.
  Esto producirá N ficheros de aproximandamente 460 KBytes cada uno en
  el directorio actual.
  <item>Copie los N ficheros en disquetes.
  <item>Copie el contenido de los disquetes en el disco duro que haya
  elegido en la otra máquina.
  <item>Una los ficheros parciales mediante <tt>dpkg-split --join
  "fu*"</tt>.
  </list>

<sect1>Debian asegura ser capaz de actualizar programas que están siendo ejecutados; ¿Cómo se puede hacer esto?
<p>
Debian GNU/Linux incluye un programa llamado
<tt>start-stop-daemon</tt> 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 <tt>start-stop-daemon</tt> 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.

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

<p>Para averiguar cuál es el estado de todos los paquetes instalados en
un sistema Debian, debe ejecutar la orden <tt>dpkg --list</tt>.  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á <em>instalada</em>, y una descripción muy breve
del mismo.
<p>
Para averiguar el estado de los paquetes que encajan con un patrón que
empiece por "fu" puede ejecutar la orden
<tt>dpkg --list 'fu*'</tt>
<p>
Para obtener información más detallada de un paquete en particular
puede usar la orden
<tt>dpkg --status fu</tt>.

<sect id="filesearch">¿Cómo se puede averiguar qué paquete produjo un
fichero en particular?

<p>Para indentificar el paquete que produjo un fichero llamado
<tt>fu</tt> puede usar cualquiera de las siguientes opciones:
<list>
<item><tt>dpkg --search nombredefichero</tt>.
<p>
En este caso se busca el fichero <tt>nombredefichero</tt> entre los
paquetes instalados. (Esto equivale (actualmente) a buscar todos los
ficheros de extensión <tt>.list</tt> contenidos en el directorio
<tt>/var/lib/dpkg/info/</tt>.)

<item><tt>grep fu Contents</tt>, o <tt>zgrep fu Contents.gz</tt>.

<p>Esto realiza una búsqueda de ficheros que contengan la subcadena <tt>fu</tt>
en cualquier parte de sus caminos completos. Los ficheros
<tt>Contents</tt> y <tt>Contents.gz</tt> residen en los directorios
principales (stable, non-free, contrib, development) de un sitio FTP de
Debian. Cada fichero <tt>Contents</tt> 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
<tt>Contents</tt> para encontrar cual es el paquete que tiene el
fichero <tt>fu</tt>.
<p>
Este método tiene como ventaja sobre <tt>dpkg --search</tt> que es capaz
de encontrar ficheros contenidos en paquetes que no han sido instalados
previamente en el sistema.
</list>
