Aprenda sobre Linux, 101: Gestión de paquetes Debian

Agregue software nuevo y conserve su sistema actualizado

Aprenda a instalar, actualizar y gestionar paquetes en su sistema Linux® Este artículo se concentra en la Advanced Packaging Tool (APT), que es el sistema de gestión de paquetes que usan tanto Debian como las distribuciones que derivan de Debian (como, por ejemplo, Ubuntu). Usted puede usar el material que forma parte de este artículo para estudiar para el examen 101 de LPI para obtener su certificación como administrador de sistemas Linux o, simplemente, para conocer cuáles son las mejores formas de agregar software nuevo y conservar su sistema actualizado.

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields trabaja en múltiples proyectos Linux para la zona Linux dev developerWorks. Es Senior Programmer de IBM en el Research Triangle Park (RTP), Carolina del Norte. Ingresó a IBM en Canberra, Australia, como Systems Engineer en 1973, y desde entonces se dedica a sistemas de comunicaciones y computación ubicua en Montreal, Canadá, y en el RTP de Carolina del Norte. Es propietario de numerosas patentes y publicó diversos trabajos. Tiene una diplomatura en Matemática Pura y Filosofía de la Universidad Nacional de Australia. Es Máster y Doctor en Ciencias de la Computación de la Universidad Estatal de Carolina del Norte.


Nivel de autor contribuyente en developerWorks

18-06-2010

Sobre esta serie

Esta serie de artículos lo ayuda a aprender las tareas de administración de los sistemas Linux. Usted también puede usar el material que forma parte de estos artículos para prepararse para los exámenes de certificación nivel 1 de Linux Professional Institute (LPIC-1).

Vea nuestro mapa de ruta de developerWorks relacionado con LPIC-1 para obtener una descripción de cada uno de los artículos que forman parte de esta serie y un vínculo para poder acceder a ellos. Este mapa de ruta todavía está en progreso y refleja los últimos objetivos (abril de 2009) de los exámenes LPIC-1. A medida que vayamos completando estos artículos, los iremos agregando al mapa de ruta. Mientras tanto, usted podrá tener acceso a versiones preliminares del material, que respaldan los objetivos de LPIC-1 anteriores al mes de abril de 2009, a través de nuestros tutoriales de preparación para el examen de certificación de LPI.

Generalidades

En este artículo, usted aprenderá a usar las herramientas de gestión de paquetes Debian para administrar dichos paquetes en su sistema Linux. Usted aprenderá a:

  • Instalar, reinstalar, actualizar y eliminar paquetes binarios Debian.
  • Buscar paquetes que contengan archivos o bibliotecas específicas, incluso si el paquete en cuestión no está instalado.
  • Obtener información sobre los paquetes (como, por ejemplo, su versión, sus contenidos, sus dependencias, la integridad del paquete y el estado de instalación), incluso si el paquete en cuestión no está instalado.

Este artículo lo ayudará a prepararse para el Objetivo 102.4 del Tema 102 del examen 101 de Administración Nivel Junior (LPIC-1) de Linux Professional Institute. Dicho objetivo tiene un valor de ponderación de 3.

Requisitos previos

Para sacar el mayor provecho posible de los artículos que forman parte de esta serie, usted debería tener conocimientos básicos de Linux y contar con un sistema Linux en funcionamiento para practicar con los comandos que se describen en el presente. A veces, las diversas versiones de un programa formatean los archivos de salida de manera diferente. Por lo tanto, los resultados que usted obtenga no siempre serán idénticos a los que se pueden observar en los listados y en las figuras que forman parte de este artículo. En particular, la mayoría de los archivos de salida que incluimos aquí dependen en gran medida de los paquetes ya instalados en sus sistemas. Sus archivos de salida pueden ser bastante diferentes. Sin embargo, usted debería de poder reconocer los aspectos comunes más importantes.


Introducción a la gestión de paquetes

Póngase en contacto con Ian

Ian es uno de los autores más prolíficos y populares. Navegue por todos los artículos de Ianen developerWorks. Ingrese al perfil de Ian y póngase en contacto con él, con otros autores y con otros lectores en My developerWorks.

Anteriormente, muchos programas Linux se distribuían como código fuente que los usuarios luego transformaban en el programa o en el conjunto de programas requerido, junto con las páginas man, los archivos de configuración y todo lo demás que resultaba necesario. Hoy en día, la mayoría de las distribuciones Linux usan programas o conjuntos de programas prefabricados denominados paquetes, que se envían listos para ser instalados en dicha distribución. En este artículo, usted aprenderá sobre las herramientas de gestión de paquetes que lo ayudan a instalar, actualizar y eliminar paquetes. Este artículo se concentra en la Advanced Packaging Tool, o APT, el sistema de gestión de paquetes que usa tanto Debian como las distribuciones que derivan de Debian (como, por ejemplo, Ubuntu). Otro de los artículos de esta serie, "Aprenda sobre Linux 101: Gestión de paquetes RPM y YUM" se ocupa de las herramientas de gestión de paquetes Red Hat.

Desde la perspectiva de los usuarios, la función básica de gestión de paquetes se ofrece por medio de comandos. Como los desarrolladores de Linux han hecho todo lo posible para que Linux sea cada vez más fácil de usar, las herramientas básicas fueron complementadas con otras herramientas (entre las que podemos incluir las herramientas GUI), que ocultan algunas de las complejidades de las herramientas básicas para no complicar a los consumidores finales. En este artículo y en el artículo sobre gestión de paquetes RPM y YUM, nos concentramos en las herramientas básicas, aunque también mencionamos algunas de las demás herramientas para que usted pueda informarse al respecto más adelante.

APT, RPM y YUM (las últimas dos son herramientas de gestión de paquetes para sistemas Red Hat) tiene muchas similitudes. Todas ellas pueden instalar y eliminar paquetes. La información correspondiente a los paquetes instalados se conserva en una base de datos. Todas tienen una funcionalidad de línea de comandos básica, mientras que las herramientas adicionales pueden ofrecerles interfaces más amigables a los usuarios. Todas pueden recuperar paquetes desde Internet.

Cuando usted instala un sistema Linux, generalmente instala una amplia selección de paquetes. Es posible que este conjunto se personalice según el uso que se le piensa dar al sistema (como, por ejemplo, un servidor, una computadora de escritorio o la estación de trabajo de un desarrollador). Y en algunas ocasiones, es posible que usted deba instalar paquetes nuevos para tener acceso a funciones adicionales, actualizar los paquetes con los que ya cuenta o incluso eliminar los paquetes que ya no necesita o que pasan a ser obsoletos debido a la aparición de los paquetes nuevos. Observemos cómo se hacen estas tareas y cuáles son algunos de los desafíos que se presentan (como, por ejemplo, la búsqueda del paquete que puede llegar a incluir un comando en particular).


Instalación de paquetes Debian

Supongamos que desea aprender Lisp y un colega le indica que use el comando gcl. Usted puede probar congcl --help, o con which gcl o type gcl. Pero si su sistema no puede encontrar gcl, es posible que el resultado sea similar a lo que se puede observar en el Listado 1.

Listado 1. Falta el comando gcl
 ian@pinguino:~$gcl --help-bash: gcl: command not
found ian@pinguino:~$gcl --helpThe program 'gcl' is currently not
installed. You can install it by typing: sudo apt-get install gcl gcl: command not
found ian@pinguino:~$ which gclian@pinguino:~$type
    gcl-bash: type: gcl: not found

En caso de no recibir el consejo útil que figura en el segundo formulario que resulta del Listado 1, usted podrá volver a consultar a su colega para saber qué paquete debe instalar. De lo contario, usted puede suponer que el comando gcl se encuentra en el paquete gcl. Generalmente, aunque no siempre, esto es así. Más adelante, veremos cómo encontrar el paquete indicado. En este caso, usted necesita el paquete gcl y lo instala usando el comando apt-get con la opción install, como se puede observar en el Listado 2. Tenga en cuenta que apt-get determinará qué paquetes adicionales usted necesita para satisfacer las dependencias y, luego de esto, le mostrará una lista de todos los paquetes que se instalarán. En este momento, se nos consulta si deseamos proseguir. En nuestro ejemplo, respondemos y para instalar gcl y el paquete adicional requerido (libreadline5).

Listado 2. Instalación de gcl usando apt-get
 ian@pinguino:~$ sudo apt-get install
gcl [sudo] password for ian: Reading package lists... Done Building
dependency tree Reading state information... Done The following packages were
automatically installed and are no longer required: linux-headers-2.6.31-14
linux-headers-2.6.31-14-generic Use 'apt-get autoremove' to remove them. The
following extra packages will be installed: libreadline5 Suggested packages: gcl-doc
The following NEW packages will be installed: gcl libreadline5 0 upgraded, 2 newly
installed, 0 to remove and 30 not upgraded. Need to get 47.1MB of archives. After
this operation, 157MB of additional disk space will be used. Do you want to continue
[Y/n]? y Get:1 http://us.archive.ubuntu.com karmic/main
libreadline5 5.2-6 [140kB] Get:2 http://us.archive.ubuntu.com karmic/universe gcl
2.6.7-45ubuntu1 [47.0MB] Fetched 47.1MB in 1min 33s (502kB/s) Preconfiguring
packages ... Selecting previously deselected package libreadline5. (Reading database
... 142156 files and directories currently installed.) Unpacking libreadline5 (from
.../libreadline5_5.2-6_i386.deb) ... Selecting previously deselected package gcl.
Unpacking gcl (from .../gcl_2.6.7-45ubuntu1_i386.deb) ... Processing triggers for
man-db ... Setting up libreadline5 (5.2-6) ... Setting up gcl (2.6.7-45ubuntu1) ...
install/gcl: Handling install for emacsen flavor emacs22 Loading 00debian-vars... No
/etc/mailname. Reverting to default... Loading
/etc/emacs/site-start.d/50dictionaries-common.el (source)... Loading
debian-ispell... Loading /var/cache/dictionaries-common/emacsen-ispell-default.el
(source)... Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el
(source)... Loading /etc/emacs/site-start.d/50gcl.el (source)... Wrote
/usr/share/emacs22/site-lisp/gcl/add-default.elc Wrote
/usr/share/emacs22/site-lisp/gcl/ansi-doc.elc Wrote
/usr/share/emacs22/site-lisp/gcl/dbl.elc Wrote
/usr/share/emacs22/site-lisp/gcl/doc-to-texi.elc Wrote
/usr/share/emacs22/site-lisp/gcl/gcl.elc Wrote
/usr/share/emacs22/site-lisp/gcl/man1-to-texi.elc Wrote
/usr/share/emacs22/site-lisp/gcl/smart-complete.elc Wrote
/usr/share/emacs22/site-lisp/gcl/sshell.elc install/gcl: Handling install for
emacsen flavor emacs23 Loading 00debian-vars... No /etc/mailname. Reverting to
default... Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell... Loading
/var/cache/dictionaries-common/emacsen-ispell-default.el (source)... Loading
/var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)... Loading
/etc/emacs/site-start.d/50gcl.el (source)... Wrote
/usr/share/emacs23/site-lisp/gcl/add-default.elc Wrote
/usr/share/emacs23/site-lisp/gcl/ansi-doc.elc Wrote
/usr/share/emacs23/site-lisp/gcl/dbl.elc Wrote
/usr/share/emacs23/site-lisp/gcl/doc-to-texi.elc Wrote
/usr/share/emacs23/site-lisp/gcl/gcl.elc Wrote
/usr/share/emacs23/site-lisp/gcl/man1-to-texi.elc Wrote
/usr/share/emacs23/site-lisp/gcl/smart-complete.elc Wrote
/usr/share/emacs23/site-lisp/gcl/sshell.elc Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

En base al resultado del Listado 2, usted puede observar que apt-get leyó una lista de paquetes de algún lado (a la brevedad, le ofreceremos más información al respecto), creó un árbol de dependencias y determinó que libreadline5 es uno de los requisitos previos obligatorios que todavía no están instalados. También podrá observar que se le sugiere instalar el paquete específico para la documentación (gcl-doc). Luego de presentarle información adicional resumida, se le consulta si desea proseguir y se instala gcl junto con el paquete que forma parte de los requisitos previos. Generalmente, los paquetes Debian tiene la extensión .deb. Además, usted puede observar que dichos paquetes se descargan y descomprimen como se puede ver a continuación:

Unpacking gcl (from .../gcl_2.6.7-45ubuntu1_i386.deb)...

Supongamos que, en vez de instalar el paquete, usted simplemente desea ver si dicho paquete depende de otros paquetes. En tal caso, podrá usar la opción -s (para simular) en apt-get. Existen muchas otras opciones con una función equivalente (como, por ejemplo, --just-print y --dry-run). Vea las páginas man para más detalles. El Listado 3 le muestra lo que ocurre en el caso de una simulación de instalación del paquete gcl-doc.

Listado 3. Instalación simulada o de práctica de gcl-doc
ian@pinguino:~$ sudo apt-get install -s
    gcl-doc Reading package lists... Done Building dependency tree Reading
state information... Done The following packages were automatically installed and
are no longer required: linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic Use
'apt-get autoremove' to remove them. The following NEW packages will be installed:
gcl-doc 0 upgraded, 1 newly installed, 0 to remove and 30 not upgraded. Inst gcl-doc
(2.6.7-45ubuntu1 Ubuntu:9.10/karmic) Conf gcl-doc (2.6.7-45ubuntu1
Ubuntu:9.10/karmic)

No sorprende ver que la documentación no considera a ningún paquete como un requisito previo.


Ubicaciones de los paquetes

En la sección anterior, usted aprendió a instalar un paquete Debian. ¿Pero de dónde provienen dichos paquetes? ¿Cómo sabe apt-get de dónde descargar los paquetes? Mencionamos que apt-get leyó una lista de paquetes de algún lado. Este lugar suele ser /etc/apt/sources.list. La lista le indica a apt-get dónde buscar los paquetes (incluso en un CD-ROM, en su sistema de archivos local o en una red usando http o ftp). Usted tiene la posibilidad de agregar fuentes adicionales en el directorio /etc/apt/sources.list.d.

El Listado 4 le muestra las primeras líneas de /etc/apt/sources.list en su sistema. Tenga en cuenta que el CD de distribución que figura en la primera línea está comentado (# en la posición 1). Si necesita instalar muchos paquetes nuevos que no se actualizaron lo suficiente, probablemente valga la pena eliminar el comentario y realizar la instalación desde su CD o DVD de distribución. Si está conectado a Internet por banda ancha o necesita muchas actualizaciones, probablemente sea más eficiente descargar los paquetes adicionales más actualizados desde las fuentes en Internet que figuran en /etc/apt/sources.list.

Listado 4. /etc/apt/sources.list
ian@pinguino:~$cat
/etc/apt/sources.list#deb cdrom:[Ubuntu 9.10 _Karmic Koala_ - Release
i386 (20091028.5)]/ karmic main restrict ed # See
http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions
of the distribution. deb http://us.archive.ubuntu.com/ubuntu/ karmic main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic main restricted ## Major bug fix
updates produced after the final release of the ## distribution. deb
http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted deb-src
http://us.archive.ubuntu.com/ubuntu/ karmic-updates main restricted ## N.B. software
from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team. Also, please
note that software in universe WILL NOT receive any ## review or updates from the
Ubuntu security team. deb http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic universe deb
http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe deb-src
http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe

Apt-get y herramientas similares usan una base de datos local para determinar qué paquetes se instalan. También pueden comparar los niveles instalados con los niveles disponibles. Para hacer esto, se recupera información sobre los niveles disponibles desde las fuentes que figuran en /etc/apt/sources.list y se la almacena en su sistema local. Luego de esto, usted usa el comando apt-get update para sincronizar la información que figura en su base de datos local con las fuentes especificadas en /etc/apt/sources.list. Usted debería hacer esto antes de instalar o actualizar un paquete y luego de modificar /etc/apt/sources.list o de agregar archivos a /etc/apt/sources.list.d.


Eliminación de paquetes Debian

Si desea eliminar un paquete, puede usar la opciónremovede apt-get. El Listado 5 le muestra una ejecución simulada.

Listado 5. Eliminación simulada de gcl
ian@pinguino:~$sudo apt-get remove -s gcl[[sudo]
password for ian: Reading package lists... Done Building dependency tree Reading
state information... Done The following packages were automatically installed and
are no longer required: linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
libreadline5 Use 'apt-get autoremove' to remove them. The following packages will be
REMOVED: gcl 0 upgraded, 0 newly installed, 1 to remove and 30 not upgraded. Remv
gcl [2.6.7-45ubuntu1]

Tenga en cuenta que el paquete libreadline5 que instalamos como un requisito previo para gcl no se borra de manera automática, aunque una de las líneas que resultan de esta ejecución nos indica que este paquete, junto con dos paquetes de encabezado Linux, ya no son necesarios. La funciónautoremovedeapt-get(o la función remove equivalente y la opción --auto-remove) eliminará los paquetes indicados, junto con todos los paquetes que se hayan instalado como dependencias pero que ya no sean necesarios para los paquetes instalados. Esto incluye a las dependencias instaladas por paquetes que no sean el / los que usted está tratando de eliminar (como, por ejemplo, los paquetes linux-headers-2.6.31-14 y linux-headers-2.6.31-14-generic en nuestro ejemplo). El Listado 6 le muestra cómo eliminar gcl, su libreadline5 dependiente y los dos paquetes de encabezado Linux no relacionados que ya no son necesarios.

Listado 6. Eliminación de gcl y sus dependencias
ian@pinguino:~$sudo apt-get autoremove
gclReading package lists... Done Building dependency tree Reading state
information... Done The following packages will be REMOVED: gcl libreadline5
linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic 0 upgraded, 0 newly
installed, 4 to remove and 30 not upgraded. After this operation, 239MB disk space
will be freed. Do you want to continue [Y/n]?y(Reading database ...
142327 files and directories currently installed.) Removing gcl ... remove/gcl:
purging byte-compiled files for emacs22 remove/gcl: purging byte-compiled files for
emacs23 Removing libreadline5 ... Removing linux-headers-2.6.31-14-generic ...
Removing linux-headers-2.6.31-14 ... Processing triggers for man-db ... Processing
triggers for libc-bin ... ldconfig deferred processing now taking place

Si usa la función autoremove de apt-get pero no especifica ningún nombre de paquete, todos los paquetes que no se estén usando y que se instalaron como dependencias se eliminarán de su sistema. Usted también puede usar la opción apt-get purge para eliminar la información de configuración. Vea la página man para mayor información al respecto.


Actualización de paquetes Debian

Si necesita actualizar un paquete individual, use apt-get con la opción install una vez más. El Listado 7 le muestra cómo actualizar el paquete tzdata ya instalado en su sistema. Recuerde ejecutar apt-get update antes de actualizar los paquetes para asegurarse de que su base de datos local le muestre las últimas actualizaciones disponibles.

Listado 7. Actualización de un solo paquete
 ian@pinguino:~$sudo apt-get install
tzdata[sudo] password for ian: Reading package lists... Done Building
dependency tree Reading state information... Done The following packages will be
upgraded: tzdata 1 upgraded, 0 newly installed, 0 to remove and 29 not upgraded.
Need to get 679kB of archives. After this operation, 0B of additional disk space
will be used. Get:1 http://us.archive.ubuntu.com karmic-updates/main tzdata
2010i-0ubuntu0.9.10 [679kB] Fetched 679kB in 1s (569kB/s) Preconfiguring packages
... (Reading database ... 124394 files and directories currently installed.)
Preparing to replace tzdata 2010h-0ubuntu0.9.10 (using
.../tzdata_2010i-0ubuntu0.9.10_all .deb) ... Unpacking replacement tzdata ...
Setting up tzdata (2010i-0ubuntu0.9.10) ... Current default time zone:
'America/New_York' Local time is now: Mon May 3 16:11:57 EDT 2010. Universal Time is
now: Mon May 3 20:11:57 UTC 2010. Run 'dpkg-reconFigura tzdata' if you wish to
change it.

Actualización de todos los paquetes o actualización a una nueva distribución

En vez de actualizar paquetes individuales, usted puede actualizar todos los paquetes en su sistema usando el comando apt-get upgrade. De manera similar, apt-get dist-upgradelo ayudará a migrar hacia un nuevo nivel de su distribución.

Para mayor información sobre otras capacidades y opciones para apt-get, vea la página man.

Configuración de la APT:—El archivo apt.conf

Si busca apt-get en la página man, verá que existen muchas opciones. Si usa el comando apt-get en repetidas ocasiones y las opciones predeterminadas que encuentra no son de su agrado, usted puede configurar nuevas opciones predeterminadas en /etc/apt/apt.conf. Un programa, apt-config, está disponible para que los scripts consulten el archivo apt.conf. Vea las páginas man en relación con apt.conf y apt-config para mayor información al respecto.


Reconfiguración de paquetes Debian

La APT incluye una capacidad denominada debconf, que se usa para configurar paquetes luego de su instalación. Es posible reconfigurar los paquetes que usan esta capacidad (y no todos lo hacen) luego de su instalación. La forma más fácil de hacer esto es usando el comando dpkg-reconFigura. Por ejemplo, es posible que el comando adduser cree directorios principales que todos los usuarios del sistema puedan leer. Es posible que usted no desee que esto sea así por razones de privacidad. De manera similar, el paquete tzdata que actualizamos en el Listado 7 sugería la ejecución de dpkg-reconFigura tzdata para modificar la zona horaria. Usted debe ejecutar dpkg-reconFigura con autoridad de usuario raíz.

La Figura 1 le muestra la primera pregunta que tendrá que responder si ejecutadpkg-reconFigura tzdata. Es posible que la opción predeterminada no sea Norteamérica y refleje la zona horaria de su propio sistema. Navegue por esta pantalla en modo de texto usando la tecla Tab y las teclas de movimiento de cursor.

Figura 1. Uso de dpkg-reconFigura para reconfigurar la zona horaria
Uso de dpkg-reconFigura para reconfigurar la zona horaria

Información sobre el paquete Debian

Ahora, analicemos algunas herramientas que sirven para obtener información sobre los paquetes. Algunas de estas herramientas también hacen otras cosas, pero ahora nos concentraremos sólo en cómo obtener información.

Estado del paquete con dpkg

Otra herramienta que forma parte del sistema APT es dpkg. Se trata de una herramienta de gestión de paquetes de nivel medio que puede instalar y eliminar paquetes y visualizar la información de estado correspondiente. /etc/dpkg/dpkg.cfg puede controlar la configuración de dpkg. Además, es posible que usted también tenga un archivo .dpkg.cfg en su directorio principal para realizar una configuración más avanzada.

La herramienta dpkg usa muchos archivos en el árbol /var/lib/dpkg en su sistema de archivos. En particular, el archivo /var/lib/dpkg/status incluye información sobre el estado de los paquetes que se encuentran en su sistema. El Listado 8 le muestra el uso de dpkg -s para visualizar el estado del paquete tzdata luego de que lo actualizamos y el estado del paquete gcl luego de que lo eliminamos. Tenga en cuenta que el paquete gcl todavía incluye algunos archivos de configuración. Usted también puede usar la opción purge para purgar los archivos de paquetes descargados del caché y eliminar la información de configuración.

Listado 8. Estado del paquete tzdata
ian@pinguino:~$dpkg -s gcl tzdataPackage: gcl
Status: deinstall ok config-files Priority: optional Section: interpreters
Installed-Size: 152848 Maintainer: Ubuntu MOTU Developers
<ubuntu-motu@lists.ubuntu.com> Architecture: i386 Version:
2.6.7-45ubuntu1 Config-Version: 2.6.7-45ubuntu1 Depends: libc6 (>= 2.7),
libgmp3c2, libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3 ),
libreadline5 (>= 5.2), libsm6, libx11-6, libxaw7, libxext6, libxmu6, libxt6,
tcl8.4 ( >= 8.4.16), tk8.4 (>= 8.4.16), debconf (>= 1.2.0),
gcc, emacs22 | emacsen Suggests: gcl-doc Conffiles: /etc/default/gcl
9301be50652f86b8d3f8b835f6dce03e /etc/emacs/site-start.d/50gcl.el
12116c8c8988326764799973a0a7d5ab Description: GNU Common Lisp compiler GNU Common
Lisp (GCL) is a Common Lisp compiler and interpreter implemented in C, and complying
mostly with the standard set forth in the book "Common Lisp, the Language I". It
attempts to strike a useful middle ground in performance and portability from its
design around C. . This package contains the Lisp system itself. Documentation is
provided in the gcl-doc package. Original-Maintainer: Camm Maguire
<camm@enhanced.com> Package: tzdata Status: install ok installed
Priority: required Section: libs Installed-Size: 6276 Maintainer: Ubuntu Developers
<ubuntu-devel-discuss@lists.ubuntu.com> Architecture: all Version:
2010i-0ubuntu0.9.10 Replaces: libc0.1, libc0.3, libc6, libc6.1 Provides:
tzdata-squeeze Depends: debconf (>= 0.5) | debconf-2.0 Description: time zone
and daylight-saving time data This package contains data required for the
implementation of standard local time for many representative locations around the
globe. It is updated periodically to reflect changes made by political bodies to
time zone boundaries, UTC offsets, and daylight-saving rules. Original-Maintainer:
GNU Libc Maintainers <debian-glibc@lists.debian.org>

Los paquetes y los archivos en ellos

Generalmente, usted querrá saber qué hay dentro de un paquete en particular o de qué paquete provino un archivo específico. dpkg se encarga de estas dos tareas. El Listado 9 ilustra el uso de dpkg -L para visualizar una lista de los archivos instalados (incluyendo los directorios) por el paquete libparted. En el caso de la mayoría de los paquetes, usted simplemente puede ponerle nombre al paquete sin preocuparse por especificar la versión. Sin embargo, es posible que algunos paquetes estén disponibles en varias versiones. Por ende, usted deberá especificar el nombre del paquete en mayor detalle cuando use dpkgpara consultar información de paquetes.

Listado 9. ¿Qué incluye el paquete libparted?
ian@pinguino:~$dpkg -L libpartedPackage
`libparted' is not installed. Use dpkg --info (= dpkg-deb --info) to examine archive
files, and dpkg --contents (= dpkg-deb --contents) to list their contents.
ian@pinguino:~$dpkg -L libparted1.8-12/. /lib
/lib/libparted-1.8.so.12.0.0 /usr /usr/share /usr/share/doc
/usr/share/doc/libparted1.8-12 /usr/share/doc/libparted1.8-12/copyright
/usr/share/doc/libparted1.8-12/changelog.Debian.gz /lib/libparted-1.8.so.12

Para encontrar qué paquete incluye un archivo específico, use la opción -S de dpkg (como se puede observar en el Listado 10). El nombre del paquete figura a la izquierda.

Listado 10. ¿Qué paquete incluye un archivo?
ian@pinguino:~$dpkg -S
                    /lib/libparted-1.8.so.12libparted1.8-12:
                /lib/libparted-1.8.so.12

A veces, es posible que dé la impresión de que un archivo no pertenece a ningún paquete. Cuando esto ocurra, usted tendrá que trabajar más para descubrir de dónde proviene el paquete. Por ejemplo, la configuración de la instalación puede llegar a crear vínculos simbólicos que no figuran como parte de los contenidos del paquete. Una de las últimas adiciones a los sistemas Linux es el sistema de alternativas, que se gestiona usando el comando update-alternatives. Generalmente, se crean alternativas para los comandosjava, que pueden ser la versión openJDK, Sun o IBM, entre otras tantas posibilidades.

El Listado 11 le muestra cómo usar el comando which para encontrar qué se invoca si tratamos de ejecutar java. Luego de esto, usamos el comando ls para ver a qué está simbólicamente vinculado el comando java. El vínculo hacia el directorio /etc/alternatives es una alerta que nos indica que estamos usando el sistema de alternativas. Por lo tanto, usamos el comando update-alternatives para encontrar más información y, finalmente, usamos el comando dpkg -S para confirmar que el comando java proviene de openjdk-6-jre-headless. La configuración del sistema de alternativas la habría realizado un script posteriormente a la instalación que forma parte del paquete openjdk-6-jre-headless.

Listado 11. Un uso más complejo de dpkg -S
ian@pinguino:~$which java/usr/bin/java
ian@pinguino:~$ls -l $(which java)lrwxrwxrwx 1 root root 22
2010-05-03 17:51 /usr/bin/java -> /etc/alternatives/java
ian@pinguino:~$update-alternatives --display javajava - auto
mode link currently points to /usr/lib/jvm/java-6-openjdk/jre/bin/java
/usr/lib/jvm/java-6-openjdk/jre/bin/java - priority 1061 slave java.1.gz:
/usr/lib/jvm/java-6-openjdk/jre/man/man1/java.1.gz Current `best' version is
/usr/lib/jvm/java-6-openjdk/jre/bin/java. ian@pinguino:~$dpkg -S
/usr/lib/jvm/java-6-openjdk/jre/bin/javaopenjdk-6-jre-headless:
/usr/lib/jvm/java-6-openjdk/jre/bin/java

Uso de "aptitude"

Con anterioridad, mencionamos que el estado de los paquetes figura en /var/lib/dpkg/status. También indicamos que dpkg podría hacer mucho más que simplemente visualizar la información del paquete. Ahora, analicemos el comando aptitude, que le ofrece una interfaz de pantalla completa y basada en texto (usando ncurses) para las funciones de gestión del paquete APT. Usted puede usar aptitude para instalar o eliminar paquetes y para controlar los indicadores de estado que le muestran, por ejemplo, si los paquetes se deberían actualizar o conservar en su estado actual. Si usted ejecuta el comando aptitude(como usuario raíz), podrá observar una pantalla similar a la que puede ver en la Figura 2.

Figura 2. Ejecución de aptitude
Ejecución de aptitude

Presione Enter para expandir o comprimir todas sus selecciones. Luego de esto, use ctrl-t para acceder a la barra de menú. La Figura 3 le muestra que una nueva versión del kernel (2.6.31.20) está disponible para su sistema, junto con otras actualizaciones también disponibles. La "i" en la columna izquierda indica que el estado actual hace que sea necesario instalar el paquete. El menú Help (Ayuda) le explica todas las opciones disponibles, incluso el hecho de conservar un paquete en su estado actual en vez de actualizarlo, el hecho de eliminarlo o el hecho de marcarlo como instalado automáticamente para que se pueda realizar su eliminación automática. ¿Se acuerda de la opción autoremove de apt-get? Ahora, usted ya sabe cómo examinar o controlar qué paquetes se pueden eliminar de manera automática. Use los atajos de teclado que se describen en Help o use el menú Package (Paquetes) para modificar los indicadores.

Figura 3. Ejecución de aptitude y análisis de los indicadores de paquete
Ejecución de aptitude y análisis de los indicadores de paquete

Usted puede usar la tecla "/" para buscar paquetes. Por ejemplo, si desease reinstalar el paquete gcl que eliminamos con anterioridad, simplemente ingrese "/gcl" para buscarlo. Si la búsqueda en cuestión lo lleva a otro paquete (como, por ejemplo, gcl-doc), presione la tecla "n" para pasar al próximo resultado de la búsqueda. Luego de esto, use el menú Package para marcar el paquete para su instalación.

Cuando termine, seleccione Actions (Acciones) -> Install/remove (Instalar / Eliminar) paquetes (o presione la tecla "g") para aplicar sus selecciones al sistema. Usted también puede seleccionar la opción quit (salir) si no desea aplicar los cambios en cuestión.

Si necesita ayuda en cualquier momento, use la barra de menú o ingrese "?" (signo de pregunta) para obtener ayuda y, luego de esto, presione la tecla "q" para salir de la aplicación de ayuda.


Actualización de Debian con otras herramientas

Usted acaba de ver que aptitude lo puede ayudar a instalar o eliminar paquetes individuales y a actualizar todos los paquetes en su sistema hasta el último nivel.

Además de aptitude, existen varias más interfaces interactivas de gestión de paquetes para los sistemas Debian (entre las que podemos incluir dselect, synaptic, update-manager, gnome-apt y wajig). Synaptic es una aplicación gráfica para usar con X Window System. La Figura 4 le muestra la interfaz de usuario synaptic con nuestro viejo amigo, el paquete gcl, marcado para su instalación.

Figura 4. Instalación de gcl usando synaptic
Instalación de gcl usando synaptic

El botón Apply (Aplicar) instalará gcl y actualizará todos los demás paquetes que sea necesario actualizar. El botón Reload (Recargar) actualizará la lista de paquetes. Si está acostumbrado a usar interfaces GUI, es posible que synaptic le resulte más fácil de usar que apt-get, dpkg o dselect.

De manera similar, es probable que vea que su sistema incluye update-manager, una aplicación de X Window System específicamente diseñada para ayudarlo a mantener actualizado su sistema. Si está instalada, es probable que se ejecute de manera automática con regularidad para que usted no se olvide de realizar las actualizaciones correspondientes. La Figura 5 le muestra cómo el administrador de actualizaciones visualiza el conjunto de actualizaciones que usted pudo ver en la Figura 2. Como en el caso de aptitude, las actualizaciones están clasificadas para que usted sepa cuáles son actualizaciones de seguridad importantes.

Figura 5. Ejemplo del administrador de actualizaciones
Ejemplo del administrador de actualizaciones

¿Cómo encontrar paquetes Debian?

En el último tema relativo a la gestión de paquetes Debian, analizamos las diferentes formas de buscar paquetes. Generalmente, apt-get y las demás herramientas que discutimos en el presente documento ya saben cuáles son los paquetes Debian que usted puede llegar a necesitar de la lista completa de paquetes disponibles. Un comando que todavía no hemos usado es apt-cache, que resulta muy útil al momento de buscar información sobre paquetes en su sistema.apt-cache puede realizar búsquedas usando expresiones regulares (vea Aprenda sobre Linux, 101: Búsqueda de archivos de texto usando expresiones regulares para más información sobre las expresiones regulares). Supongamos que usted desea encontrar el nombre del paquete que incluye el cargador de Linux. El Listado 12 le muestra cómo lograr esto.

Listado 12. Búsqueda del cargador de Linux con apt-cache
ian@pinguino:~$ apt-cache search "linux loader"
    lilo - LInux LOader - The Classic OS loader can load Linux and others lilo-doc -
    Documentation for LILO (LInux LOader)

Como pudo ver con anterioridad, tanto aptitude como synaptic también le ofrecen herramientas de búsqueda. Si usa synaptic, tenga en cuenta que, en el menú de búsqueda, también tiene opciones para buscar sólo nombres de paquetes o descripciones de paquetes.

Si todavía no puede encontrar el paquete que busca, es posible que lo encuentre en la lista de paquetes en el sitio de Debian (vea la sección Recursos para obtener un vínculo) o en otro lugar en Internet.

La mayoría de las herramientas de paquetes le pueden decir mucho más sobre un paquete instalado que sobre un paquete que todavía no se instaló (como, por ejemplo, la lista de archivos dentro de un paquete). Hay varias formas de encontrar qué paquete incluye un programa que no instaló:

  • Puede adivinar qué paquete incluye el programa y descargar dicho paquete sin instalarlo. Luego de descargarlo, puede consultarlo.
  • Puede realizar una búsqueda en Internet.
  • Puede probar con la capacidad command-not-found, que se describe en "Comando no encontrado" más adelante en este artículo.

El comandoapt-gettiene la opción-dpara descargar un paquete y no instalarlo. También existe la opción --print-uris para mostrar desde dónde se descargaría un paquete y cuál sería su checksum. Es probable que los checksums actuales sean checksums SHA256, para que usted pueda controlar la integridad del paquete descargado usando el comando sha256sum. Tenga en cuenta que la información de URI y checksum no se visualiza si ya descargó el paquete. Por lo tanto, usted debería obtener dicha información antes de descargar el paquete en cuestión.

Supongamos que desea saber si el comando gcl está realmente incluido en el paquete gcl. El Listado 13 le muestra cómo usar apt-get para descargar el paquete gcl sin instalarlo.

Listado 13. Uso de apt-get para descargar un paquete sin instalarlo
ian@pinguino:~$ sudo apt-get
install -d gclReading package lists... Done Building dependency tree Reading state
information... Done The following extra packages will be installed: libreadline5
Suggested packages: gcl-doc The following NEW packages will be installed: gcl
libreadline5 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to
get 47.1MB of archives. After this operation, 157MB of additional disk space will be
used. Do you want to continue [Y/n]? Get:1 http://us.archive.ubuntu.com karmic/main
libreadline5 5.2-6 [140kB] Get:2 http://us.archive.ubuntu.com karmic/universe gcl
2.6.7-45ubuntu1 [47.0MB] Fetched 47.1MB in 7s (6,475kB/s) Download complete and in
download only mode

Luego de descargar el paquete, podrá usar la opción --info de dpkg para visualizar la información del paquete, o la opción --contents para visualizar qué archivos instala el paquete. Generalmente, el archivo descargado estará en /var/cache/apt/archives/. El Listado 14 le muestra cómo localizar el archivo que usted descargó y conocer qué ficheros binarios instalará (asumiendo que está instalado en un directorio .../bin/...).

Listado 14. Uso de dpkg para visualizar una lista de los contenidos de un archivo .deb
ian@pinguino:~$ sudo find /var/cache -name "*.deb"
/var/cache/apt/archives/gcl_2.6.7-45ubuntu1_i386.deb
/var/cache/apt/archives/libreadline5_5.2-6_i386.deb ian@pinguino:~$ sudo dpkg
--contents /var/cache/apt/archives/gcl*.deb| grep "/bin/" drwxr-xr-x root/root 0
2008-12-06 07:42 ./usr/bin/ -rwxr-xr-x root/root 617 2008-12-06 07:42
./usr/bin/gcl

Si efectivamente encuentra y descarga un archivo.debusando algo que no sea el comando apt-get, usted podrá instalarlo usando dpkg -i.

Si decide que no desea instalar el paquete que descargó en los archivos APT, puede ejecutar apt-get clean para eliminar todos los archivos del paquete descargados.

Si todo lo demás fracasa, existe otra posible fuente de paquetes. Supongamos que usted encuentra un programa que se encuentra en un RPM en vez de en un archivo .deb. Usted tendrá la posibilidad de usar el programa alien, que puede realizar la conversión entre diferentes formatos de paquete. Siempre lea atentamente la documentación de alien, ya que dicho programa no puede convertir todas las funciones de los sistemas de gestión de paquetes en otro formato.


Comando no encontrado

En el Listado 1, usted pudo observar un mensaje muy útil que le indicaba qué paquete debía instalar para conseguir el comando gcl. ¿Cómo se hace esto? Cuando el shell Bash busca un comando y no lo encuentra, busca una función shell denominada command_not_found_handle. El Listado 15 le muestra cómo esto está definido en el sistema Ubuntu 9.10.

Listado 15. command_not_found_handle
ian@pinguino:~$ type command_not_found_handle
command_not_found_handle is a function command_not_found_handle () { if [ -x
/usr/lib/command-not-found ]; then /usr/bin/python /usr/lib/command-not-found -- $1;
return $?; else return 127; fi }

Si la función command_not_found_handle existe, se la invoca con el comando original y los argumentos originales y sus argumentos y el estado de salida de la función pasa a ser el estado de salida del shell. Si la función no está definida, el shell imprime un mensaje de error y devuelve un estado de salida de 127. Generalmente, la función se suele configurar en el archivo system/etc/bash.bashrc. En el Listado 15, usted puede observar que la función controla la existencia de /usr/lib/command-not-found y lo ejecuta como un script Python si ya existe. Si no existe, quizá porque el paquete command-not-found que lo suministra se eliminó luego de que se inició la sesión del shell, la función imita el comportamiento estándar del sistema y devuelve 127.


PackageKit

Para completar la discusión sobre la instalación de paquetes, no nos podemos olvidar de PackageKit, que es un sistema diseñado para facilitar la instalación y la actualización de software. La idea es unificar todas las herramientas gráficas de software que se usan en las diferentes distribuciones. PackageKit usa un daemon activado por el sistema, lo que significa que el daemon sólo está activo cuando se lo necesita. Packagekit tiene una versión para Gnome (gnome-packagekit) y para KDE (KPackageKit).

El sistema de gestión de paquetes Debian no se limita sólo a lo que describimos en el presente. Además, Debian tampoco se limita sólo al sistema de gestión de paquetes. Vea la sección Recursos para mayor información y vínculos para acceder a los demás artículos que forman parte de esta serie.

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=497081
ArticleTitle=Aprenda sobre Linux, 101: Gestión de paquetes Debian
publish-date=06182010