Product SiteDocumentation Site

6.2. Los programas aptitude y apt-get

APT es un proyecto gigante y su plan original incluia una interfaz gráfica. Está basado en una biblioteca que contiene la aplicación central y apt-get fue la primera interfaz — basada en la línea de órdenes — desarrollada dentro del proyecto.
Varias otras interfaces gráficas aparecieron luego como proyectos externos: synaptic, aptitude (que incluye tanto una interfaz en modo texto como una gráfica — aún cuando no esté completa), wajig, etc. La interfaz más recomendada, apt-get es la utilizada durante la instalación de Debian y la que utilizaremos en los ejemplos de esta sección. Note, sin embargo, que la sintaxis de línea de órdenes de aptitude es muy similar. Detallaremos cuando existan grandes diferencias entre apt-get y aptitude.

6.2.1. Inicialización

For any work with APT, the list of available packages needs to be updated; this can be done simply through apt-get update. Depending on the speed of your connection, the operation can take a while since it involves downloading a certain number of Packages/Sources/Translation-language-code files, which have gradually become bigger and bigger as Debian has developed (at least 10 MB of data for the main section). Of course, installing from a CD-ROM set does not require any downloading — in this case, the operation is very fast.

6.2.2. Instalación y eliminación

Con APT puede agregar o eliminar paquetes del sistema, con apt-get install paquete y apt-get remove paquete respectivamente. En ambos casos APT automáticamente instalará las dependencias necesarias o eliminará los paquetes que dependen del paquete que está siendo eliminado. La orden apt-get purge paquete realiza una desinstalación completa — se eliminan también los archivos de configuración.
Si el archivo sources.list menciona varias distribuciones es posible proveer la versión del paquete a instalar. Se puede pedir un número de versión específico con apt-get install paquete=versión, pero generealmente es preferible indicar la distribución de origen (Stable, Testing o Unstable) utilizando apt-get install paquete/distribución. Con esta orden es posible volver a una versión antigua de un paquete (si sabe que funciona bien por ejemplo), siempre que aún esté disponible en alguno de los orígenes a los que se refiere el archivo sources.list. De lo contrario, el compendio snapshot.debian.org puede llegar al rescate (revise el recuadro YENDO MÁS ALLÁ Versiones antiguas de paquetes: snapshot.debian.org).

Ejemplo 6.3. Instalación de la versión en Unstable de spamassassin

# apt-get install spamassassin/unstable

6.2.3. Actualización del sistema

Se recomienda actualizar regularmente ya que éstas actualizaciones incluyen las últimas actualizaciones de seguridad. Para actualizar, utilice apt-get upgrade o aptitude safe-upgrade (por supuesto, después de apt-get update). Esta orden busca paquetes instalados que pueden ser actualizados sin eliminar ningún paquete. En otras palabras, el objetivo es asegurar la actualización menos intrusiva posible. apt-get es ligeramente más exigente que aptitude ya que se negará a instalar paquetes que no estaban instalados previamente.
apt-get generalmente seleccionará el número de versión más reciente (excepto para paquetes en Experimental y stable-backports que son ignorados de forma predeterminada sin importar su número de versión). Si especificó Testing o Unstable en su archivo sources.list, aptitude upgrade cambiará la mayor parte de su sistema en Stable a Testing o Unstable que podría no ser lo que deseaba.
Para indicarle a apt-get que utilice una distribución específica al buscar paquetes a actualizar debe utilizar la opción -t o --target-release seguido del nombre de la distribución que desea (por ejemplo: apt-get -t stable upgrade). Para evitar especificar esta opción cada vez que utilice apt-get puede agregar APT::Default-Release "stable"; al archivo /etc/apt/apt.conf.d/local.
Para actualizaciones más importantes, como el cambio de una versión mayor de Debian a la siguiente, necesita utilizar apt-get dist-upgrade (por «distribution upgrade»: «actualizar distribución»). Con esta instrucción, apt-get completará la actualización aún si tiene que eliminar algunos paquetes obsoletos o instalar nuevas dependencias. Esta también es la orden utilizada por los usuarios que trabajan diariamente con la versión Unstable de Debian y siguen su evolución día a día. Es tan simple que casi no necesita explicación: la reputación de APT está basada en esta excelente característica.
aptitude full-upgrade es la orden correspondiente para aptitude, aunque también reconoce dist-upgrade (pero es obsoleto).

6.2.4. Opciones de configuración

Además de los elementos de configuración ya mencionados es posible configurar ciertos aspectos de APT agregando directivas en un archivo del directorio /etc/apt/apt.conf.d/. Recuerde, por ejemplo, que APT puede indicarle a dpkg que ignore errores de conflictos de archivos especificando DPkg::Options { "--force-overwrite"; }.
Si sólo puede acceder a la web a través de un proxy, agregue una línea como Acquire::http::proxy "http://su-proxy:3128". Para un proxy FTP, utilice Acquire::ftp::proxy "ftp://su-proxy". Para descubrir más opciones de configuración, lea la página de manual apt.conf(5) con la orden man apt.conf (para detalles sobre las páginas de manual, revise la Sección 7.1.1, “Páginas de manual”).

6.2.5. Gestión de prioridades de los paquetes

One of the most important aspects in the configuration of APT is the management of the priorities associated with each package source. For instance, you might want to extend one distribution with one or two newer packages from Testing, Unstable or Experimental. It is possible to assign a priority to each available package (the same package can have several priorities depending on its version or the distribution providing it). These priorities will influence APT's behavior: for each package, it will always select the version with the highest priority (except if this version is older than the installed one and if its priority is less than 1000).
APT defines several default priorities. Each installed package version has a priority of 100. A non-installed version has a priority of 500 by default, but it can jump to 990 if it is part of the target release (defined with the -t command-line option or the APT::Default-Release configuration directive).
Puede modificar las prioridades agregando elementos en el archivo /etc/apt/preferences con los nombres de los paquetes afectados, sus versiones, sus orígenes y sus nuevas prioridades.
APT will never install an older version of a package (that is, a package whose version number is lower than the one of the currently installed package) except if its priority is higher than 1000. APT will always install the highest priority package which follows this constraint. If two packages have the same priority, APT installs the newest one (whose version number is the highest). If two packages of same version have the same priority but differ in their content, APT installs the version that is not installed (this rule has been created to cover the case of a package update without the increment of the revision number, which is usually required).
In more concrete terms, a package whose priority is less than 0 will never be installed. A package with a priority ranging between 0 and 100 will only be installed if no other version of the package is already installed. With a priority between 100 and 500, the package will only be installed if there is no other newer version installed or available in another distribution. A package of priority between 501 and 990 will only be installed if there is no newer version installed or available in the target distribution. With a priority between 990 and 1000, the package will be installed except if the installed version is newer. A priority greater than 1000 will always lead to the installation of the package even if it forces APT to downgrade to an older version.
Cuando APT revisa /etc/apt/preferences primero tiene en cuenta las entradas más específicas (generalmente aquellas que especifiquen el paquete en cuestión), luego las más genéricas (incluyendo, por ejemplo, todos los paquetes de una distribución). Si existen varias entradas genéricas, utiliza la primera coincidencia. El criterio de selección disponible incluye el nombre del paquete y el origen que lo provee. Se identifica cada origen de paquetes por la información contenida en un archivo Release y que APT descarga junto con los archivos Packages. Especifica el origen (generalmente «Debian» para paquetes de las réplicas oficiales, pero también puede ser el nombre de una persona u organización para repositorios de terceros). También provee el nombre de la distribución (generalmente Stable, Testing, Unstable o Experimental para las distribuciones estándar que provee Debian) junto con su versión (por ejemplo, 5.0 para Debian Lenny). Revisemos su sintaxis a través de casos de estudio de este mecanismo más realistas.
Supongamos que sólo desea utilizar paquetes de la versión estable de Debian. Aquellos provistos en otras versiones no serían instalados a menos que sean pedidos explícitamente. Puede escribir las siguientes entradas en el archivo /etc/apt/preferences:
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable define el nombre de la distribución elegida. o=Debian limita el alcance a los paquetes cuyo origen es «Debian».
Asumamos ahora que tiene un servidor con varios programas locales que dependen de la versión 5.14 de Perl y que desea asegurarse que las actualizaciones no instalarán otra versión del mismo. Puede utilizar la siguiente entrada:
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
La documentación de referencia para este archivo de configuración está disponible en la página de manual apt_preferences(5) que puede ver con man apt_preferences.

6.2.6. Trabajo con varias distribuciones

Siendo la herramienta maravillosa que apt-get es, es tentador elegir paquetes de otras distribuciones. Por ejemplo, luego de instalar un sistema Stable podría desear probar paquetes de software disponibles en Testing o Unstable sin desviarse demasiado del estado inicial del sistema.
Aún cuando ocasionamente encontrará problemas al mezclar paquetes de diferentes distribuciones apt-get gestionará muy bien su coexistencia y limitará los riesgos de manera muy efectiva. La mejor manera de proceder es listar todas las distribuciones utilizadas en /etc/apt/sources.list (algunas personas siempre agregan las tres distribuciones, pero recuerde que Unstable está reservado para usuarios experimentados) y definir su distribución de referencia con el parámetro APT::Default-Release (revise la Sección 6.2.3, “Actualización del sistema”).
Supongamos que su distribución de referencia es Stable pero que Testing y Unstable también aparecen listados en su archivo sources.list. En este caso, puede utilizar apt-get install paquete/testing para instalar un paquete de Testing. Si la instalación falla debido a alguna dependencia insatisfecha, permítale resolver esas dependencias dentro de Testing agregando el parámetro -t testing. Obviamente, lo mismo aplica a Unstable.
En esta situación, las actualizaciones (upgrade y dist-upgrade) se realizan dentro de Stable a excepción de los paquetes que ya fueron actualizados a otra distribución: éstos seguirán las actualizaciones disponibles en las otras distribuciones. Explicaremos este comportamiento con la ayuda de las prioridades predeterminadas de APT a continuación. No dude en utilizar apt-cache policy (revise el recuadro) para verificar las prioridades otorgadas.
Everything centers around the fact that APT only considers packages of higher or equal version than the installed one (assuming that /etc/apt/preferences has not been used to force priorities higher than 1000 for some packages).
Let's assume that you have installed version 1 of a first package from Stable and that version 2 and 3 are available respectively in Testing and Unstable. The installed version has a priority of 100 but the version available in Stable (the very same) has a priority of 990 (because it is part of the target release). Packages in Testing and Unstable have a priority of 500 (the default priority of a non-installed version). The winner is thus version 1 with a priority of 990. The package “stays in Stable”.
Let's take the example of another package whose version 2 has been installed from Testing. Version 1 is available in Stable and version 3 in Unstable. Version 1 (of priority 990 — thus lower than 1000) is discarded because it is lower than the installed version. This only leaves version 2 and 3, both of priority 500. Faced with this alternative, APT selects the newest version, the one from Unstable.If you don't want a package installed from Testing to migrate to Unstable, you have to assign a priority lower than 500 (490 for example) to packages coming from Unstable. You can modify /etc/apt/preferences to this effect:
Package: *
Pin: release a=unstable
Pin-Priority: 490

6.2.7. Seguimiento de paquetes instalados automáticamente

Una de las funcionalidades esenciales de apt-get (originalmente era específica de aptitude) es el rastreo de aquellos paquetes instalados únicamente debido a dependencias. Estos paquetes son llamados «automáticos» y generalmente incluyen bibliotecas.
Con esta información, cuado elimina paquetes, el gestor de paquetes puede calcular una lista de paquetes automáticos que ya no son necesarios (porque no hay paquetes «instalados manualmente» que dependan de ellos). apt-get autoremove se deshará de dichos paquetes. aptitude no posee esta orden porque los elimina automáticamente tan pronto como los identifica. Ambos programas incluyen un mensaje que enumera los paquetes afectados.
Es buen hábito marcar como automático cualquier paquete que no necesite directamente para que sea eliminado automáticamente cuando ya no sea necesario. apt-mark auto paquete marcará el paquete dado como automático mientras que apt-mark manual paquete realiza lo opuesto. aptitude markauto y aptitude unmarkauto funcionan de la misma forma, pero ofrecen más funcionalidad para marcar varios paquetes simultáneamente (revise la Sección 6.4.1, “aptitude). La interfaz interactiva para la consola de aptitude también facilita el revisar la «marca automática» en muchos paquetes.
Algunas personas podrían desear saber porqué un paquete instalado automáticamente está presente en el sistema. Para obtener esta información desde la línea de órdenes puede utilizar aptitude why paquete (apt-get no posee una funcionalidad similar):
$ aptitude why python-debian
i   aptitude         Recommends apt-xapian-index         
i A apt-xapian-index Depends    python-debian (>= 0.1.15)