Blogia
:: :: :: PSYCOSIS :: :: ::

POR ESTO Y MUCHO MAS, USO APTITUDE

POR ESTO Y MUCHO MAS, USO APTITUDE

Hace tiempo, cuando era muy novato en esto del software libre, y usaba Mandriva (Mandrake), una de las envidias reconocidas que muchos usuarios de distribuciones basadas en RPM teníamos, era lo fácil que resultaba instalar y actualizar software en Debian, gracias a Advanced Package Tool, más conocido como apt, y a través del comando apt-get. Luego llegaron versiones de apt que fueron llevadas a esas distribuciones, o implementaciones propias. Así, además de apt, pero algo inspiradas en él, existen urpmi, yum, apt4rpm, etc.

Sin embargo, el encanto de Debian sigue manteniéndose, y es que por supuesto, este no se encuentra sólo en usar apt-get, sino en su gran cantidad de paquetes disponibles. Entre ellos, uno que va a facilitar enormemente la gestión del resto: aptitude.

Aptitude es un gestor de paquetes. Instala, elimina, actualiza y descarga automáticamente los paquetes que se le indiquen, así como sus dependencias, y opcionalmente, recomendaciones y sugerencias (recordemos que los paquetes, en Debian, tienen bastantes relaciones entre sí, más allá de la dependencia).

Aptitude tiene diferencias y similitudes con apt-get. Ambos hacen uso de apt, pero aptitude tiene mejor reputación que apt-get en actualizaciones complicadas, en que algunos paquetes entren en conflicto, o se desee actualizar tan sólo una parte del sistema, para que no queden paquetes con sus dependencias rotas. No es sólo que el algoritmo de actualización pueda ser mejor o no (que no lo sé, pero es lo que he entendido al ir leyendo listas de correo), sino que con aptitude se trabaja de otra manera, marcando primero las acciones a realizar (que pueden ser más de una al mismo tiempo), y luego haciendo la actualización, lo que permite un gran control.

Ventajas de aptitude frente a apt-get

Voy a describir por encima, usando ejemplos donde sea posible, algunas de las situaciones en las que tendríamos un comportamiento mejor usando aptitude, que usando apt-get.

Entiende de sugerencias y recomendaciones

Si instalamos mediante apt-get el paquete cdrecord, tendremos un programa funcionando perfectamente, puesto que instala todas sus dependencias. Sin embargo, la mayor parte de la gente, necesitará para crear las imágenes ISO, el paquete mkisofs. Es por ello, que cdrecord recomienda mkisofs. Al usar apt-get, probablemente veamos una advertencia, pero aptitude puede configurarse para que tenga en cuenta esos paquetes, y los instale como si fueran dependencias, lo que está bastante aconsejado.

Paquetes automáticos, y manuales

Si instalas un paquete de un programa que conozcas (por ejemplo, mozilla), es posible que con él se instalen otros paquetes que tú ni siquiera supieras que existían, como bibliotecas que sean imprescindibles para que funcione este programa, que son sus dependencias (por ejemplo, libnspr, que proporciona código que mozilla necesita para funcionar). Si luego te cansas de mozilla, y lo eliminas, ¿se borran sus dependencias?

Con apt-get no, y hay que recurrir a deborphan, o debfoster, para controlar que con el tiempo, no queden cosas sueltas que no nos interesan por el sistema. Sin embargo, aptitude lo hace de la forma correcta: cuando se instala un paquete, recuerda si el paquete fue instalado manualmente, o automáticamente. Los paquetes instalados manualmente, son los que el usuario ha pedido explícitamente. Los paquetes que se han instalado como dependencias (o sugerencias, o recomendaciones), se borran automáticamente si no tienen dependencias inversas (es decir, si el paquete libnss fue instalado sólo porque mozilla lo necesitaba, será desinstalado cuando mozilla sea desinstalado, y si ningún otro paquete más lo necesita).

Ahí va un ejemplo sencillo. Instalemos mozilla-browser con apt-get:

# apt-get install mozilla-browser
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
libnspr4
Suggested packages:
xprt-xprintorg
Recommended packages:
mozilla-psm myspell-en-us myspell-dictionary
The following NEW packages will be installed:
libnspr4 mozilla-browser
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.4MB of archives.
After unpacking 31.7MB of additional disk space will be used.
Do you want to continue? [Y/n] y

Como ves, apt-get ha avisado de que está recomendado o sugerido instalar algunos paquetes extra, pero a día de hoy, no hay ninguna forma automática de hacer que se instalen.

Ahora nos cansamos de mozilla-broser, y decidimos pasarnos a mozilla-firefox . Así que empezamos por eliminar el primero:

# apt-get remove mozilla-browser
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
mozilla-browser
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
Need to get 0B of archives.
After unpacking 31.4MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.

¿Qué? ¿Cómo? ¿Y que pasa con los otros paquetes que antes se han instalado automáticamente? (en realidad sólo libnspr4, pero podrían haber sido más) Pues que estarán muertos en nuestro sistema, ya que nadie los utilizará. No se desinstalan automáticamente con apt-get.

Si hubieramos hecho lo mismo con aptitude, la instalación hubiera sido prácticamente igual, pero hubiera marcado a mozilla-browser como un paquete que el usuario ha dicho que quiere (instalado manualmente), y el resto como paquetes que el sistema ha dicho que quiere (instalados automáticamente). Para arreglar eso, podemos usar aptitude. Vamos a marcar esos otros paquetes, como instalados automáticamente:

# aptitude markauto libnspr4
Reading Package Lists... Done
Building Dependency Tree
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 0B will be used.
Writing extended state information... Done
Reading Package Lists... Done
Building Dependency Tree
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done

Ahora probemos a desinstalar, pero usando aptitude:

# aptitude purge mozilla-browser
Reading Package Lists... Done
Building Dependency Tree
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following packages are unused and will be REMOVED:
libnspr4
The following packages will be REMOVED:
mozilla-browser
0 packages upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 31.7MB will be freed.
Do you want to continue? [Y/n/?] y

Como ves, ahora se desinstalan ambos. El segundo porque se lo hemos pedido, y el primero porque recuerda que nosotros no lo queríamos en su momento, y sabe que ahora no es necesario (no tiene dependencias inversas).

No sólo es útil para desinstalaciones, sino sobretodo para actualizaciones. Las bibliotecas cambian de soname cuando se hacen determinados cambios, y el paquete cambia de nombre para que puedan haber distintas versiones instaladas. Así mozilla ahora mismo, depende de libnspr4, pero actualizo a una versión de mozilla que depende de libnspr5, libnspr4 será eliminada, ya que ningún paquete más la necesita.

En esta captura de ejemplo se ve como PHP, en la versión instalada depende de ciertos paquetes de SSL, pero puesto que en la nueva no, y son paquetes que yo no pedí instalar, son eliminados al no ser ya necesarios.

actualización del sistema con aptitude
Paquetes desconocidos (nuevos u obsoletos)

Cuando aptitude nota que un paquete ahora existe, y antes no sabía nada de él, lo apunta en su lista de paquetes nuevos. Esto puede ser debido a que ha sido subido al archivo de Debian por primera vez, o a que hemos añadido algo al sources.list.

De manera similar ocurre con los paquetes obsoletos, o localmente creados. Si has compilado algún núcleo, y lo tienes instalado usando un paquete generado con kernel-package, lo verás en esta lista.

Retiene paquetes fácilmente

Si hay un paquete que no quieres que se actualice, puedes ponerlo on hold muy fácilmente: en menús con la tecla ’=’, o en línea de comandos con ’hold’. También puedes pedirle que no se actualice tan sólo en una versión en concreta.

Usa apt

Si ya tienes configurado a tus necesidades tu /etc/apt/sources.list, o tu apt.conf, etc., no tienes que preocuparte. apt-get tan sólo es un comando que hace de interfaz a libapt, igual que aptitude, por lo que no tienes que configurar nada.

También funciona perfectamente con apt-listbugs o apt-listchanges (paquetes que recomiendo a usuarios de Debian Sid.

apt-listbugs con aptitude
Aúna las ventajas de apt-get, dselect, tasksel...

Aptitude funciona en modo no interactivo, en línea de comandos (o CLI), al igual que apt-get, pero también funciona de una manera mucho más potente en modo interactivo, con una representación en menús de texto (ncurses), al estilo dselect. También lista los paquetes agrupados en tareas (como tasksel), así puedes usar aptitude para que recuerde que tareas quieres instalar.

Tiene un buscaminas :-P

Si estás detrás de una conexión lenta, y te aburres mientras se instalan paquetes, ¡puedes jugar al buscaminas mientras esperas! :-D

Usar aptitude

Mi intención inicial era escribir un artículo que sirviera de tutorial, puesto que cuando yo empecé a usarlo, la documentación era poca. Si has llegado hasta aquí, espero haberte convencido lo suficiente para usarlo ;-), así que te recomiendo que instales el paquete aptitude-doc, que es un manual bastante completo escrito por el propio autor.

Si la impaciencia te corroe, te daré un pequeño avance. Si estás acostumbrado a apt-get, la mayor parte de cosas pueden ser iguales:

aptitude install talInstala el paquete tal, y todas sus dependencias (por defecto, también las recomendaciones, que para algo están).aptitude remove talElimina el paquete tal. Si al eliminar ese paquete, hay otros que ya no son necesarios, también serán eliminados. No te preocupes por eso, aptitude sabe lo que se hace ;-).aptitude purge talLo mismo que la opción anterior, pero eliminando también los archivos de configuraciónaptitude updateActualiza la lista de paquetes disponibles, en base a lo que diga /etc/apt/sources.listaptitude upgradeActuliza el sistema de forma seguraaptitude dist-upgradeActualiza el sistema, eliminando y borrando paquetes que sean necesarios. A pesar de que es lo habitual, en ocasiones puede que queramos actualizar sólo algunos usando ’upgrade’.

Hay más opciones, pero son menos habituales; las podéis consultar con la ayuda (aptitude -h).

De todas formas, cuando os volváis fans completos de aptitude, es posible que queráis usar la interfaz en ncurses (llamando a aptitude sin más: aptitude). Esta interfaz puede ser confusa al principio, pero es mucho más flexible, ya que podremos trabajar de otra manera. Cuando se trabaja en modo GUI, podremos hacer varias operaciones al mismo tiempo. Esto puede ser crucial en actualizaciones.

Podemos ejecutar aptitude una noche (cuando se actualizan los mirrors), navegar por los menús con ’j’, ’k’ y ’enter’, al estilo mutt/vim (también podéis usar los cursores, claro), y descubrir que han sido añadidos paquetes nuevos al archivo (menú "New packages"), y que hay paquetes que pueden ser actualizados (menú "Upgradable packages"). Al navegar por los menús, queremos instalar uno, así que nos colocamos encima de él, y pulsamos ’+’ (para eliminar es ’-’, para purgar es ’_’, y para retener es ’=’; como ves son fáciles de recordar).

Una vez hemos marcado las acciones que queremos ejecutar, pulsamos ’g’, y veremos el resumen de lo que aptitude va a hacer, para que podamos ver si nos interesa, o si hay paquetes rotos:

acciones a realizar

Si estamos contentos con las operaciones a realizar, pulsamos de nuevo ’g’, y aptitude descargará e instalará / borrará los paquetes necesarios.

Y eso es prácticamente todo. Si no os atrevéis por ahora, o si tenéis dudas, poned algún comentario, y veré como puedo ayudaros a ver la luz. ;-)

Saludos

Psycosis

0 comentarios