6.2. Los programas aptitude
, apt-get
y apt
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. apt
es un segundo frontend de linea de comandos proporcionado por APT el cual soluciona algunos errores de diseño de la orden apt-get
.
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
es la que utilizaremos en los ejemplos de esta sección. Note, sin embargo, que la sintaxis de línea de órdenes de apt-get
y de aptitude
son muy similares. Detallaremos cuando existan grandes diferencias entre apt
, apt-get
y aptitude
.
Para cualquier trabajo con APT necesita actualizar la lista de paquetes; puede hacer esto simplemente con apt update
. Dependiendo de la velocidad de su conexión esta operación puede demorar ya que involucra descargar una cantidad de archivos Packages
/Sources
/Translation-codigo-idioma
que han crecido gradualmente a medida que se desarrolló Debian (más de 10 MB de datos para la sección main
). Por su puesto, instalar desde un CD-ROM no requiere descarga alguna — en ese caso esta operación es muy rápida.
6.2.2. Instalación y eliminación
Con APT puede agregar o eliminar paquetes del sistema, con apt install paquete
y apt 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 ap 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 indicar la versión del paquete a instalar. Se puede proporionar un número de versión específico con
apt install paquete=versión
, pero generealmente es preferible indicar la distribución de origen (
Stable,
Testing o
Unstable) utilizando
apt 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 archivo
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 install spamassassin/unstable
6.2.3. Actualización del sistema
Se recomienda realizar actualizaciones regularmente, ya que incluyen las últimas actualizaciones de seguridad. Para actualizar, utilice apt upgrade
, 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
o apt
ya que se negará a instalar paquetes que no estaban instalados previamente.
apt
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
, apt upgrade
cambiará la mayor parte de su sistema en Stable a Testing o Unstable, lo que podría no ser lo deseado.
Para indicarle a apt
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 -t stable upgrade
). Para evitar especificar esta opción cada vez que utilice apt
puede agregar APT::Default-Release "stable";
al archivo /etc/apt/apt.conf.d/local
.
Para actualizaciones más importantes, tales como el cambio de una versión mayor de Debian a la siguiente, necesita utilizar apt full-upgrade
. Con esta instrucción, apt
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.
A diferencia de apt
y aptitude
, apt-get
no sabe cómo hacer full-upgrade
command. En su lugar debería usar apt-get dist-upgrade
(”distribution upgrade”), la histórica y bien conocida orden que apt
y aptitude
también aceptan para satisfacer a los usuarios que están acostumbrados a usarla.
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
Uno de los aspectos más importantes en la configuración de APT es la gestión de las prioridades asociadas con cada origen de paquetes. Por ejemplo, podría desear extender una distribución con uno o dos paquetes más recientes de Testing, Unstable o Experimental. Es posible asignar una prioridad a cada paquete disponible (el mismo paquete puede tener varias prioridades según su versión o la distribución que lo provee). Estas prioridades influenciarán el comportamiento de APT: para cada paquete, siempre seleccionará la versión con la prioridad más alta (excepto si esta versión es anterior a la instalada y si su prioridad es menor a 1000).
APT define varias prioridades predeterminadas. Cada versión instalada de un paquete tiene una prioridad de 100. Una versión no instalada tiene una prioridad predeterminada de 500, pero puede saltar a 990 si es parte de la distribución destino (definida con la opción de línea de órdenes -t
o la directiva de configuración APT::Default-Release
).
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 nunca instalará una versión anterior de un paquete (esto es, un paquete cuyo número de versión sea menor al que está instalado actualmente) excepto si su prioridad es mayor a 1000. APT siempre instalará el paquete con la mayor prioridad que cumpla esta restricción. Si dos paquetes tienen la misma prioridad, APT instalará la más reciente (aquella cuya versión sea mayor). Si dos paquetes de la misma versión tienen la misma prioridad pero tienen diferente contenido, APT instalará la versión que no está instalada (se creó esta regla para cubrir los casos de la actualización de un paquete sin aumentar el número de revisión, que es generalmente necesario).
En términos más concretos, un paquete con prioridad menor a 0 nunca será instalado. Un paquete con una prioridad entre 0 y 100 sólo será instalado si no hay otra versión ya instalada del paquete. Con una prioridad entre 100 y 500, el paquete sólo será instalado si no hay otra versión más reciente instalada o disponible en otra distribución. Un paquete con prioridad entre 501 y 990 será instalado sólo si no hay una versión más nueva instalada o disponible en la distribución de destino. Con una prioridad entre 990 y 1000, el paquete será instalado a menos que la versión instalada sea mayor. Una prioridad mayor a 1000 siempre llevará a la instalación del paquete aún si ésto significa que APT instalará una versión anterior.
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, 8 para Debian Jessie). 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
es, es tentador elegir paquetes de otras distribuciones. Por ejemplo, tras 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
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 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
full-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
SUGERENCIA apt-cache policy
) para verificar las prioridades otorgadas.
Todo gira alrededor del hecho de que APT considera sólo paquetes con una versión mayor o igual que la instalada (suponiendo que /etc/apt/preferences
no ha sido usado para forzar prioridades superiores a 1000 para algunos paquetes).
Asumamos que instaló la versión 1 de un primer paquete de Stable y que las versiones 2 y 3 están disponibles en Testing y Unstable respectivamente. La versión instalada tiene una prioridad de 100, pero la versión disponible en Stable (la misma versión) tiene una prioridad de 990 (porque es parte de la versión de destino). Los paquetes en Testing y Unstable tienen una prioridad de 500 (la prioridad predeterminada para una versión no instalada). El ganador es, por lo tanto, la versión 1 con una prioridad de 990. El paquete «se mantiene en Stable».
Tomemos como ejemplo otro paquete cuya versión 2 fue instalada de Testing. La versión 1 está disponible en Stable y la versión 3 en Unstable. La versión 1 (de prioridad 990 — por lo tanto menor a 1000) es descartada porque es menor que la versión instalada. Esto deja sólo las versiones 2 y 3, ambas de prioridad 500. Frente a esta alternativa, APT selecciona la versión más nueva: la de Unstable. Si no desea que un paquete de Testing actualice su versión a la de Unstable, debe asignar una prioridad menor a 500 (490 por ejemplo) a los paquetes que provengan de Unstable. Puede modificar /etc/apt/preferences
de la siguiente forma:
Package: *
Pin: release a=unstable
Pin-Priority: 490
6.2.7. Seguimiento de paquetes instalados automáticamente
Una de las funcionalidades esenciales de apt
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 se eliminan paquetes, los gestores de paquetes pueden calcular una lista de paquetes automáticos que ya no son necesarios (porque no hay paquetes «instalados manualmente» que dependan de ellos). El comando apt-get autoremove
se encargará de dichos paquetes. aptitude
y apt
no poseen esta orden: el primero porque los elimina automáticamente tan pronto como los identifica y, el último probablemente porque el usuario no debería tener que ejecuar dicho comando. En todo caso, las herramientas muestran un claro 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 comandos puede utilizar aptitude why paquete
(apt
y apt-get
no poseen una funcionalidad similar):
$
aptitude why python-debian
i aptitude Recommends apt-xapian-index
i A apt-xapian-index Depends python-debian (>= 0.1.15)