Herramientas de manejo de paquetes

Dado que los paquetes de software están estandarizados, Debian provee una variedad de formas alternativas de manejarlos en tu computadora dependiendo de los requerimientos de tu sistema y preferencias personales.

Las herramientas de Debian para el manejo de paquetes están de algún modo organizadas en capas, yendo desde herramientas de bajo nivel como Dpkg quien directamente maneja paquetes, pasando por herramientas de nivel medio como Apt que automáticamente obtiene los paquetes y sus dependencias, hasta otras de alto nivel como Synaptic que te permite buscar en listas de paquetes gráficamente y hacer una instalación de simple apuntar y clickear.

Usuarios experimentados de Debian tienden a utilizar distintas herramientas en diferentes momentos, dependiendo de lo que traten de hacer. Por ejemplo, si tienes un paquete guardado en tu disco que descargaste de un sitio web, lo más simple sería solamente utilizar Dpkg para instalarlo directamente. O si estás manejando un sistema desde la línea de comandos y quieres instalar paquetes desde un servidor Debian o un CD, Apt es probablemente la mejor herramienta a utilizar. O si quieres una interface que te permita buscar dentro de categorías de software y seleccionar los elementos que requieras, una variedad de opciones como Synaptic, Dselect o Aptitude pueden ser lo mejor.

Personalmente me doy cuenta que casi siempre termino utilizando Apt, más Dpkg cuando quiero manejar paquetes directamente. Esta es mi preferencia: Synaptic puede ser lo mejor para ti si no estás cómodo con la línea de comandos y preferirías una interfaz gráfica.

necesitarás ser el usuario root para instalar software en un equipo Debian

Los equipos Linux son sistemas multiusuario reales y cuando el software es instalado es normalmente accesible para todos los usuarios. No hay una forma estandarizada para permitir a usuarios individuales instalar paquetes solo para su uso personal. Todo el software instalado está centralizado. Los usuarios normales, por lo tanto, no pueden instalar o remover paquetes, porque eso podría provocar un riesgo de seguridad así como una molestia a los demás usuarios si una pieza de software con la que cuentan de pronto cambia o desaparece por completo. Es posible establecer un sistema llamado 'sudo' para permitir que usuarios normales ejecuten operaciones como el usuario root, pero por el momento lo mejor es solo abrir una terminal, dar el comando 'su' y luego la contraseña antes de ejecutar cualquier herramienta de manejo de paquetes.

Dpkg

Dpkg es la base del sistema de manejo de paquetes de Debian, y permite la manipulación directa de los paquetes. Si tienes un paquete local en tu disco llamado 'prgorama-1.0-1.deb' que quieres instalar, Dpkg es la herramienta que debes usar. Existen dos formas en las que Dpkg se puede referir a un paquete, dependiendo de las circunstancias: si tienes el archivo de un paquete directamente en el disco que quieras instalar, te puedes referir a él utilizando el nombre de archivo del paquete como 'programa-1.0-1.deb'. Si el paquete ha sido instalado y quieres eliminarlo, utilizas en su lugar el nombre del programa, como 'programa'.

dpkg -r programa

Eliminar (desinstalar) el paquete de programa enlistado. ESto solamente elimina los binarios (el programa en sí) y algunos scripts de arranque, pero no elimina los archivos de configuración. Reinstalarlo en una posterior ocasión utilizará los archivos existentes de configuración, así que si cambias de opinión y decides reinstalar el programa no tendrás que reconfigurarlo desde cero. Eliminar un paquete requiere que no haya otro paquete dependiente de él: si se queja por dependencias, necesitas eliminar aquellos paquetes dependientes primero.

dpkg -P programa

Purgar (desinstalar completamente) el paquete listado. Esto elimina todo lo relacionado con ese paquete: binarios, scripts de arranque, archivos de configuración, todo. Purgar un paquete requiere que no haya más paquetes dependiendo de él: si se queja por dependencias, necesitas eliminar aquellos paquetes dependientes primero. Si purgas un paquete y luego decides que lo quieres otra vez, tendrás que reconfigurarlo porque al purgarlo eliminas toda la configuración también.

dpkg -i programa-1.0-1.deb

Instalar un paquete desde el archivo Deb local en el disco: si descargas un paquete .deb directamente de Internet, puede ser instalado directamente de este modo.

dpkg -l programa

Enlista la información de la versión y el estado del paquete actualmente instalado.

dpkg -L programa

Enlista todos los archivos relacionados con el paquete actualmente instalado: si acabas de instalar algo, y no sabes a dónde fue, usa esto para localizarlo.

dpkg -S foo

Encuentra el paquete que contiene el archivo llamado 'foo'. ¡Muy útil si tienes un archivo en el disco pero no sabes de dónde vino!

Apt

El HOWTO del Apt en www.debian.org/doc/manuals/apt-howto/

Si utilizamos proxy en el apt.conf añadir http_proxy=”http://ipproxy:puerto

Comandos

apt-get update

Esto recupera la lista actual de paquetes de todos los servidores en tu sources.list. Si no haces esto de vez en cuando tu lista local de paquetes disponibles puede quedar obsoleta. Haz esto ocasionalmente antes de hacer un dist-upgrade o buscar un paquete nuevo. La lista de paquetes es larga: hacer un update puede resultar en varios MB de datos recuperados de Internet.

apt-cache search programa

Esto realizará una búsqueda por palabra clave dentro de la lista de paquetes disponibles, incluyendo sus nombres y descripciones. Puedes poner varias palabras clave, por ejemplo 'apt-cache search text editor' para hallar una lista de editores de texto.

apt-cache show programa

Una vez que haz encontrado un paquete que parece interesante utilizando 'apt-cache search', puedes desplegar información más detallada acerca de él utilizando 'apt-cache show programa'. Esto te dirá cosas como el tamaño del paquete (importante si estás instalando desde la Internet) y una descripción extendida, así como qué otros paquetes de los cuales depende para poder trabajar y el nombre del desarrollador que mantiene el paquete.

apt-get install programa

Esto obtendrá la última versión de un paquete específico y lo instalará, junto con los otros paquetes de los que depende para poder trabajar. Si el paquete solicitado ya se encuentra instalado, esto lo actualizará a la última versión disponible.

apt-get remove programa

Si previamente instalaste un programa y decides que no lo requieres más, puedes eliminarlo utilizando este comando. Debido a que algunos paquetes de software pueden depender de otros, eliminar un porgrama puede afectar a otros. Ejecutar apt-get remove por lo tanto verifica primero para ver si algún otro software necesita el programa para funcionar, y lo desinstala también. Este es solo un ejemplo de la manera en que las herramientas de manejo de paquetes de Debian han sido diseñadas para tratar de matnener tu computadora en un estado adecuado, sin software inservible o medio instalado. Es posible hacer que un sistema Debian falle, pero generalmente tienes que intentar hacerlo. Es difícil que lo hagas por equivocación.

apt-get upgrade

A lo largo del tiempo, muchos de los paquetes de software en tu computadora se volverán desactualizados conforme nuevas versiones sean liberadas para añadir funcionalidades o corregir defectos. Podrías manualmente ejecutar 'apt-get install foo' para cada uno, pero no es muy conveniente, así que Apt provee una manera simple para actualizar tu sistema entero en un solo paso. Solo teclea 'apt-get upgrade' para que Apt verifique cada paquete en tu sistema para encontrar una nueva versión, luego la descargue e instale. Este comando nunca instalará nuevos paquetes, solamente actualizará paquetes que ya estén instalados previamente.

Apt-get dist-upgrade

Algunas veces tendrás un paquete de software instalado, y una nueva versión vendrá que tiene muchas nuevas funcionalidades y por lo tanto depende de algún otro programa para correr. Por ejemplo, puedes tener instalado un visualizador de películas que soporta un sinfín de formatos de película. Cuando salgan nuevos formatos, los módulos para esos formatos se podrán añadir en paquetes separados, así que la última versión del visualizador de películas depende de un nuevo paquete que no tienes instalado aún en tu sistema. Si solamente haces un 'apt-get upgrade', obtendrás el último visualizador, pero no obtendrás todos los paquetes de nuevos formatos. El comando 'apt-get dist-upgrade' resuleve ese problema para tí: no solamente encuentra la versión más reciente de cada paquete instalado en el sistema como 'apt-get upgrade', también instala cualquier nuevo paquete que requiera que no estuviera en tu sistema todavía. Si quieres mantener tu sistema actualizado con los últimos detalles y parches de seguridad, ejecutar 'apt-get update; apt-get dist-upgrade' de vez en cuando es la mejor forma de lograrlo.

apt-get clean

Cuando pides a Apt que instale un paquete de software, descarga el paquete y lo almacena en una cache de tu disco antes de realizar la instalación. Si después de eso eliminas el paquete, pero te arrepientes y lo tratas de reinstalar, Apt no requiere de volverlo a obtener de la Internet porque el paquete se encuentra en la la cache local. Esto es grandioso para ahorrar ancho de banda, pero después de un rato puede utilizar espacio en tu disco, así que es buena idea borrar periódicamente paquetes viejos de la caché. Ejecutar 'apt-get clean' liberará totalmente la caché de paquetes, posiblemente liberando algo de valioso espacio en disco. Ejecutar este comando es bastante seguro, porque lo peor que puede pasar es que Apt necesite nuevamente descargar el paquete si lo eliminas y lo reinstalas.

apt-get  autoclean

Esto es casi lo mismo que 'apt-get clean', excepto que es un poco más astuto: en lugar de limpiar la caché de paquetes por completo, borra solamente los paquetes que ya cuenten con actualización. Por ejemplo, tu caché de paquetes puede contener paquetes de las últimas 7 versiones de un editor de texto que ha sido actualizado algunas veces: ejecutar 'apt-cache autoclean' borrará las 6 versiones antiguas de la caché, dejando solo la última. Esto hace sentido porque no es probable que reinstales nada excepto la última versión. Es de igual forma un comando muy seguro de ejecutar, así que si estás algo corto de espacio en disco y no quieres que tu caché de paquetes crezca demasiado puedes poner una tarea Cron para hacer una limpieza automática de cuando en cuando. No hay razón alguna para mantener paquetes antiguos en el disco de todas formas.

Synaptic

Synaptic es una adición relativamente reciente al universo Debian, y su intención es proveer una manera amigable de buscar en listas de paquetes disponibles e instalarlos. Si no lo tienes ya instalado en tu sistema, abre una terminal y cambiate al usuario root, y teclea

apt-get install synaptic

. Una vez instalado, solo teclea 'synaptic' como el usuario root para ejecutar Synaptic, y te será presentada una lista de categorías de paquetes y botones para manejarlos. No entraré en mucho detalle acerca de cómo navegar en Synaptic porque si lees la sección arriba sobre Apt, las variadas opciones en Synaptic deberían ser bastante explicativas. Muchas de las funcionalidades de Synaptic son directamente basadas en Apt, así que si piensas en Synaptic como Apt con la bondad del apunta y da click ya lo habrás entendido bastante.

Por ejemplo, para actualizar la lista de paquetes de software disponibles utilizando Apt teclearías 'apt-get update'. En Synaptic, existe un gran botón en la parte alta que dice 'Actualizar Lista (Update List)' que hace exactamente lo mismo. Lo mismo aplica para 'apt-get upgrade' ('Actualiza todos (Upgrade All)') y 'apt-get dist-upgrade' ('Actualiza Distribucion(Dist Upgrade)'). Buscando dentro de los paquetes disponibles, puedes seleccionarlos y dar click en las pestañas en la parte baja para ver diferente información acerca de ellos en casi la misma forma como usarías 'apt-cache show', y dar click en el botón 'Instalar' en la derecha para marcarlos para instalación. Nota que no sucederá mucho cuando lo hagas: solamente coloca una marca, no efectúa la instalación en el momento. Esto implica que puedes felizmente buscar dentro de los paquetes y marcar varios elementos para instalación mientras pasas, sin tener que parar y esperar a que termine cada uno. Entonces, cuando estés listo, dá click en el gran botón 'Proceder' en la parte alta para decirle a Synaptic que prosiga y traiga todos los paquetes que marcaste y los instale.

De forma similar si seleccionas un paquete que ya está seleccionado en tu sistema, puedes seleccionar el botón 'Eliminar' para ponerlo en la fila de borrado.

Aptitude y Dselect

No entraré en mucho detalle acerca de Aptitude y Dselect tampoco, ya que solamente son distintas herramientas para hacer un trabajo parecido a Synaptic. Algo que puede ser una ventaja si estás manejando una computadora remota o solamente prefieres usar la lína de comandos es que ambas herramientas se ejecutan en una consola, así que no tienes que ejecutar X para poder utilizarlos. Como Synaptic permiten buscar en una lista de paquetes, marcar paquetes para la instalación, ver la información de los paquetes y resolver dependencias, pero debido a su naturaleza basada en texto mucha gente los encuentra más difíciles de usar que una herramienta como Synaptic que provee una interface de manejo simple.

Dselect, en particular, puede provocar fuertes respuestas cuando es mencionado a los usuarios de Debian: nadie parece ser ambivalente acerca de el, o se saben todos los atajos del teclado y lo adoran, o le echaron una ojeada y no pudieron salir más pronto de él, juraron no volver a ejecutarlo nunca más. Sospecho que el uso de Dselect va en disminución excepto dentro de los más duros de los que proponen, ya que alternativas como Aptitude y ahora Synaptic han provisto tan buenas alternativas.

Adaptando tus fuentes de software

Para poder instalar todo este software tu computadora necesta que le digas dónde lo puede encontrar. Cuando Debian es instalado configura un conjunto de fuentes de software por defecto como punto de partida, pero tu puedes decidir que quieres adaptarlo para obtener el software desde otro distribuidor o de un servidor más cercano que mejore el rendimiento.

/etc/apt/sources.list

Tu computadora guarda una lista de posibles fuentes de software en un archivo llamado '/etc/apt/sources.list'. Cuando tu le dices que vaya y actualice su lista de paquetes de software disponibles, busca dentro de este archivo para ubicar las direcciones de servidores y luego les pide que le proporcionen una lista de los paquetes actuales. Este archivo también enlista otras fuentes locales, como CD-ROMs que puedes haber utilizado para instalar Debian. Una entrada típica para un servidor de software basado en Internet se vería más o menos así:

deb http://ftp.au.debian.org/debian stable main contrib 
deb http://ftp.debian.org/debian testing main non-free contrib
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib non-free
deb-src ftp://ftp.debian.org/debian/ testing main non-free contrib

Apt puede inteligentemente manejar múltiples fuentes, para que puedas agregar líneas extras a este archivo para tener acceso a más software. Si ve que el mismo paquete está disponible de múltiples fuentes, Apt solamente tomará la fuente que contiene la versión más alta y la instalará. Synaptic provee una muy bonita manera de manejar las entradas en tu sources.list sin editar el archivo directamente: solo abre el menú 'Configuración' y selecciona 'Repositorios' para una lista bien formateada con opciones para añadir, eliminar, editar, habilitar y deshabilitar entradas en la lista.

www.apt-get.org

¿Así que cómo encuentras servidores de software para agregar a tu sources.list? Los servidores que proveen paquetes compatibles con Debian han comenazado a esparcirse por toda la Internet, y hay un proyecto en camino para proveer un directorio centralizado en www.apt-get.org. Tu puedes buscar un paquete ahí, y te dirá las líneas que tienes que agregar en tu sources.list para tener acceso al servidor relevante. Nota que los paquetes de Debian de terceros pueden no ser de la misma calidad que los paquetes oficiales. Si descargas un paquete de una fuente dudosa en Internet, puedes no tener idea de lo que realmente viene en el paquete: puede ser de muy alta calidad y cuidadosamente mantenido, o puede estar lleno de defectos y nunca actualizado. Si sabes lo que estás haciendo las fuentes de terceros pueden ser una ventaja, pero siempre guarda precaución cuando utilices fuentes distintas de las oficiales.

Establecer prioridades entre repositorios para "apt"

Normalmente no se suelen mezclar los paquetes de las distintas ramas de Debian (Stable, Unstable, Testing, Experimental). Pero hay ocasiones en que pese a que estemos en una rama relativamente actualizada como “Testing” (a día de hoy ETCH) es posible que querramos un paquete o un programa (o metapaquete) que aún no haya llegado a esa rama.

Lo más sencillo es editar el archivo “/etc/apt/sources.list” y añadir un repositorio de la rama donde esté. Supongamos que hoy nos apetece probar un estupendo programa de almacenamiento de passwords llamado “Revelation”. Si estamos en la rama “Testing” ahora mismo en esta no existe el paquete. Sin embargo sí que está en “Unstable”. Añadimos el repositorio. Por ejemplo:

[...]
deb http://ftp.es.debian.org/debian/ stable main non-free contrib
deb http://ftp.es.debian.org/debian/ unstable main non-free contrib
[...]

Ahora hacemos un “apt-get update” y ya podremos instalar facilmente nuestro querido programa con un “apt-get install revelation”.

Esto funciona pero no es correcto. Porque si ahora quisieramos actualizar algún paquete suelto de nuestra distribución “Testing” ) o entera con un “apt-get upgrade”), apt actualizaría todo nuestro sistema a “Unstable” ya que sus paquetes serán más nuevos que los de Testing. Y ya está el lio. Seguramente nos quede el sistema bastante revuelto.

Para evitar estos problemas podemos establecer lo que se conoce como Prioridades entre Ramas; estamos en “testing” y queremos que “apt” instale o actualice siempre con paquetes de “testing” y solamente en caso de que no existan en esa rama o que se lo indiquemos expresamente, que los busque en la siguiente rama en prioridad (Unstable). Conseguir esto es tan sencillo como crear el archivo “/etc/apt/preferences”:

Package: *
Pin: release testing
Pin-Priority: 900

Package: *
Pin: release unstable
Pin-Priority: 600

Con esto los paquetes de “Testing” tendrán prioridad sobre los de “Unstable” (hacer “apt-get update”). Si queremos instalar un paquete que está en ambas ramas pero nos interesa la de “Unstable” hemos de indicar expresamente que lo queremos así con:

apt-get install -t unstable paquete