El sistema de paquetes utiliza una base de datos para llevar un monitoreo de
los paquetes instalados, los no instalados y cuales están disponibles para su
futura instalación. El programa apt-get
utiliza esta base de
datos para averiguar como instalar los paquetes que son requeridos por el
usuario y para indagar sobre que paquetes adicionales serán requeridos para que
el paquete seleccionado funcione correctamente.
Para actualizar la lista, se utiliza el comando apt-get update
.
Este comando busca el paquete en los archivos listados en
/etc/apt/sources.list; para más información acerca de este
archivo, revisa El archivo
/etc/apt/sources.list, Sección 2.1
Es una buena costumbre ejecutar este archivo regularmente para mantenerte informado acerca de las posibilidades de actualización para el sistema, particularmente las actualizaciones de seguridad.
Finalmente, ¡el proceso que estabas esperando!. Con tu archivo sources.list listo y tu lista de paquetes disponibles al día, todo lo que necesitas es ejecutar apt-get para tener el paquete que quieras instalado. Por ejemplo, puedes ejecutar:
apt-get install xchat
APT buscara en su base de datos para encontrar la versión más reciente del paquete y lo descargará del servidor correspondiente especificado en sources.list. Si este paquete necesitara otro para funcionar -- como en este caso -- APT resolverá las dependencias e instalará los paquetes necesarios. Observa este ejemplo:
[root]@[/] # apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
El paquete nautilus
necesita las librerías compartidas
mencionadas, así pues APT las descargará del servidor. Si se especifican antes
los nombres de esas librerías con el comando apt-get APT no
pregunta si deseas continuar o no; supone automáticamente que se desea instalar
esos paquetes.
Esto significa que APT solo pregunta por confirmación cuando se van a instalar más paquetes que los especificados en la línea de comando para satisfacer las necesidades del programa a instalar.
Las siguientes opciones de apt-get podrían ser útiles
-h This help text. -d Download only - do NOT install or unpack archives -f Attempt to continue if the integrity check fails -s No-act. Perform ordering simulation -y Assume Yes to all queries and do not prompt -u Show a list of upgraded packages as well
Pueden seleccionarse varios paquetes para instalar en una sola línea. Los archivos descargados son almacenados en el directorio /var/cache/apt/archives para su instalación posterior.
Puedes especificar también que paquetes serán eliminados en la misma línea. Solo agrega un "-" inmediatamente después del nombre del paquete que quieres eliminar, por ejemplo:
[root]@[/] # apt-get install nautilus gnome-panel- Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Consulta la sección Eliminando paquetes, Sección 3.3 para más detalles acerca de la eliminación de paquetes.
Si de alguna forma dañas un paquete instalado, o simplemente deseas reinstalar la misma versión del paquete, puedes utilizar la opción --reinstall como se muestra:
[root]@[/] # apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]
La versión de APT al crear este documento es la 0.5.3, la cual forma parte de la versión inestable de Debian (sid) al momento de escribir. Si tienes esta versión instalada, tienes algunas opciones más a tu alcance: Puedes utilizar un comando como apt-get install paquete/distribución para instalar paquetes de una distribución en específico, o apt-get install package=versión. por ejemplo:
apt-get install nautilus/unstable
Esta instrucción instalará nautilus de la distribución inestable aun si estás utilizando la estable. Los valores aceptados para distribución son stable, testing y unstable.
IMPORTANTE: La versión "unstable" de Debian es la versión a la cual se le agregan las nuevas versiones de los paquetes de Debian. Esta distribución tiene todos los cambios por los cuales atraviesan muchos de los paquetes, ya sean cambios pequeños o grandes que afecten a unos paquetes o a todo el sistema. Por esta razón, esta versión de la distribución no deberá ser usada por usuarios novatos o por aquellos que necesitan de estabilidad.
La distribución "testing" (de prueba) es un poco mejor que la inestable, con algo de estabilidad, pero para sistemas en producción la que se debe usar es la estable.
Si ya no necesitas más utilizar cierto paquete, puedes eliminarlo de tu sistema utilizando APT. Para realizar esta tarea solo escribe: apt-get remove paquete. por ejemplo:
[root]@[/] # apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Como se puede apreciar en el ejemplo anterior, APT se hace cargo de eliminar los paquetes de los cuales dependía el paquete eliminado. No hay manera de eliminar un paquete utilizando APT sin eliminar los paquetes que este necesitaba.
Ejecutando apt-get
como en el ejemplo causara que los paquetes
sean eliminados, pero sus archivos de configuración, si existían, permanecerán
intactos en el sistema. Para una eliminación completa del paquete, ejecuta:
[root]@[/] # apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Observa el "*" después de los nombres. Esto indica que los archivos de configuración de cada paquete serán eliminados también.
Al igual que en el caso de la instalación, puedes utilizar un símbolo con la opción de "remove" para invertir el significado para un paquete en especial. En el caso de la eliminación, si agregas un "+" después del nombre del paquete, el paquete sera instalado en vez de eliminarlo.
[root]@[/] # apt-get --purge remove gnome-panel nautilus+ Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 nautilus The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Observa que apt-get
lista los paquetes que serán instalados aparte
de los seleccionados (esto es, aquellos que su instalación es necesaria para el
funcionamiento de aquellos que son seleccionados), aquellos que serán
eliminados, y aquellos que serán instalados (incluyendo los paquetes
adicionales otra vez).
Las actualizaciones de los paquetes son un gran éxito de APT. Pueden realizarse con tan solo un comando: apt-get upgrade. Puedes utilizar esa opción para actualizar los paquetes de la distribución actual, o bien para actualizar a una nueva distribución, aunque el comando apt-get dist-upgrade es una mejor opción; para mayor información, consulta la sección Actualizando a una nueva versión, Sección 3.5.
Es muy útil utilizar este comando con la opción -u. Esta opción muestra la lista completa de paquetes que APT actualizará. Sin ella, se estaría actualizando a ciegas. APT descargará las versiones más recientes de cada paquete y las instalará de la manera más apropiada. Es muy importante ejecutar siempre apt-get update antes de probar esto. Consulta la sección Actualizando la lista de paquetes disponibles, Sección 3.1. Observa este ejemplo:
[root]@[/] # apt-get -u upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages have been kept back cpp gcc lilo The following packages will be upgraded adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. Do you want to continue? [Y/n]
El proceso es muy fácil. Nota que en las primeras líneas apt-get menciona que algunos paquetes fueron conservados. Esto significa que hay versiones nuevas de estos paquetes más no fueron actualizados por alguna razón. Algunas razones pueden ser dependencias fallidas (el paquete del cual depende no tiene una versión nueva para actualizar) o nuevas dependencias (el paquete ahora depende de nuevos paquetes que la versión anterior).
No hay una solución clara para el primer caso. Para el segundo, es suficiente con ejecutar apt-get install para el paquete en cuestión, ya que con esto se descargarán las nuevas dependencias. Una solución aún mejor es utilizar dist-upgrade. Consulta la sección Actualizando a una nueva versión, Sección 3.5.
Esta opción de APT permite actualizar un sistema debian en un solo paso, ya sea desde Internet o por CDs (comprado o descargado como una imagen ISO).
También es utilizado cuando son realizados cambios entre las relaciones de los paquetes instalados. Con apt-get upgrade, estos paquetes permanecerían sin modificación (conservados).
Por ejemplo, supongamos que estás utilizando la revisión 0 de la versión
estable de Debian, y compras el CD con la revisión 3. Puedes utilizar APT para
actualizar el sistema al de el CD. Para lograr esto, utiliza
apt-cdrom
(consulta la sección Agregando un CD-ROM al archivo sources.list,
Sección 2.4) para agregar el CD al archivo
/etc/apt/sources.list y ejecuta apt-get dist-upgrade
Es muy importante mencionar que APT siempre busca la versión más reciente de los paquetes. Así pues, si en tu archivo /etc/apt/sources.list se encontrara alguna otra fuente que tuviera una versión más reciente que la del CD, APT descargaría esta versión.
En el ejemplo mostrado en la sección Actualizando paquetes, Sección 3.4, observamos que algunos paquetes eran conservados. Solucionaremos este problema ahora con el programa dist-upgrade:
[root]@[/] # apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following NEW packages will be installed: cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages have been kept back lilo The following packages will be upgraded adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded. Need to get 0B/7098kB of archives. After unpacking 3118kB will be used. Do you want to continue? [Y/n]
Observa que los paquetes ahora serán actualizados, y que nuevos paquetes serán instalados (las nuevas dependencias de los paquetes). Observa también que lilo sigue siendo conservado. Probablemente tiene un problema aún más serio que una dependencia. Esto lo podemos saber si ejecutamos:
[root]@[/] # apt-get -u install lilo Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be REMOVED: debconf-tiny The following NEW packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be upgraded lilo 1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded. Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used. Do you want to continue? [Y/n]
Como se observa arriba, lilo tiene un nuevo conflicto con el paquete
debconf-tiny
, lo cual significa que no podrá ser instalado (o
actualizado) sin antes eliminar debconf-tiny
dselect
es un programa que ayuda a los usuarios en seleccionar
paquetes de Debian para su instalación. Es considerado como algo complicado y
un poco aburrido, pero con practica podrás utilizar su interfaz basada en
consola-ncurses.
dselect se caracteriza por ser un programa que sabe como explotar la capacidad de los paquetes Debian para "recomendar" y "sugerir" otros paquetes para su instalación. Para utilizar el programa, ejecuta 'dselect' como root. Selecciona 'apt' como el método de acceso. Esto no es verdaderamente necesario, pero si no estás utilizando un CD ROM y quieres descargar los paquetes de Internet, la mejor opción es utilizar dselect.
Para entender mejor el uso de dselect, lee la documentación que se encuentra en
la página de Debian http://www.debian.org/doc/ddp
Después de seleccionar los paquetes con dselect, utiliza:
apt-get -u dselect-upgrade
Como en el siguiente ejemplo:
[root]@[/] # apt-get -u dselect-upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: lbxproxy The following NEW packages will be installed: bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0 gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy util-linux-locales vacation xbill xplanet-images The following packages will be upgraded debian-policy 1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded. Need to get 7140kB of archives. After unpacking 16.3MB will be used. Do you want to continue? [Y/n]
Comparalo con lo que pasa al ejecutar apt-get dist-upgrade en el mismo sistema:
[root]@[/] # apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following packages will be upgraded debian-policy 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 421kB of archives. After unpacking 25.6kB will be freed. Do you want to continue? [Y/n]
Observa que muchos paquetes de arriba están siendo instalados porque otros paquetes los sugirieron o recomendaron. Otros están siendo instalados o eliminados (en el caso de lbxproxy, por ejemplo) por las selecciones que realizamos por medio de la lista de dselect. Dselect puede ser una herramienta poderosa al usarse en conjunción con APT.
Tu puedes modificarle algo a un programa, y no tener tiempo o no querer portar los cambios hacia una nueva versión del mismo. O tal vez hayas actualizado tu sistema a la versión 0.3 de Debian, pero quieres continuar con cierta versión de un programa de Debian 2.2. Puedes marcar la versión que tienes instalada así ésta no será actualizada.
Utilizar este recurso es simple. Solo se necesita editar el archivo /etc/apt/preferences.
El formato es simple:
Package: <package> Pin: <pin definition> Pin-Priority: <pin's priority>
Por ejemplo, para mantener el paquete sylpheed
el cual he
modificado para utilizar "reply-to-kist" en la versión 0.4.99,
agrego:
Package: sylpheed Pin: version 0.4.99*
Observa que utilizo un * (asterisco). Este es un "comodín"; este específica que yo quiero que este "pin" sea valido para todas las versiones que empiecen con 0.4.99. Esto es así porque Debian numera sus paquetes con una "revisión Debian" y yo no quiero entorpecer la instalación de esas revisiones. Así pues, las versiones 0.4.99-1 y 0.4.99-10 serán instaladas tan pronto como estén disponibles. Observa que si modificaste un programa no querrás hacer esto.
El campo Pin-Priority es opcional; si no se especifica algo, el valor por omisión es 989
Veamos como trabajan las prioridades de "pin". Una prioridad menor que 0 indica que el paquete jamás deberá ser instalado. Prioridades de 0 a 100 denotan paquetes que no están instalados y que no hay versiones disponibles. Esto no vendrá en el proceso de escoger-versión. La prioridad de 100 es asignada a los paquetes instalados - para la versión instalada de un paquete que sera reemplazado por una versión diferente, el reemplazo deberá tener una prioridad mayor a 100.
Prioridades mayores a 100 indican que el paquete debe ser instalado. Típicamente, la versión instalada del paquete cambia solo con las actualizaciones a una versión más nueva. Cualquier prioridad entre 100 y 1000 (incluyéndolos) indica este comportamiento típico. Un paquete con tal prioridad no sereemplazara por una versión anterior. Por lo tanto, si yo tuvierasylpheed 0.5.3 instalado y definiera un pin en sylpheed 0.4.99 con prioridad 999, el paquete 0.4.99 este no se instalaría para satisfacer el pin. Para hacer un programa que pueda reemplazarse por una versión anterior, necesita poseer una prioridad mayor a 1000.
Este concepto de degradación puede tener aplicaciones poderosas; supón que has actualizado tu versión estable de Debian a la testing pero quisieras deshacer el cambio - tal vez la versión testing no es lo suficientemente estable para ti. Tu puedes definir un pin por omisión, utilizando un comodín para el nombre del paquete, para regresar a la versión estable. Por ejemplo:
Package: * Pin: release a=stable Pin-Priority: 1001
Después de eso, apt-get -u dist-upgrade regresara el sistema a la versión estable.
Un "pin" puede ser especificado en una versión, sub-versión o al origen de un paquete.
Estableciendo un "pin" en una versión, como hemos visto, pueden ser especificadas utilizando numeros y comodines, varias versiones al mismo tiempo.
La opción "release" depende de el archivo "Release" de un servidor o CD. Esta opción podría no ser de mucha utilidad si estás utilizando servidores que no ofrezcan este archivo. Puedes ver los contenidos de este archivo que tienes en /var/lib/apt/lists/. Los parámetros para un "release" son: a (archive), c (components), v (version), o (origin) and l (label).
Un ejemplo:
Package: * Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian Priority: 1001
En este ejemplo, escogimos la versión 2.2* de Debian (la cual puede ser 2.2r2, 2.2r3 -- esto es un "point release" que típicamente incluyen parches de seguridad y otras actualizaciones importantes), el servidor estable, sección principal etiqueta y origen Debian. Origen(o=) define quien creó el archivo "Release", la etiqueta (l=) define el nombre d la distribución: Debian para Debian como si mismo y "Progeny" para "Progeny", por ejemplo:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Relea se Archive: stable version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386
APT HOWTO
1.7.3 - September 2001kov@debian.org