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
.
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
:
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:
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)