Uso de APT: Trabajando con paquetes

Uso de APT: Trabajando con paquetes

Dos dias sin actualizar el blog, ya son muchos ups, pero veran el viernes me fui a un masivo, que anuncie previamente en la seccion se ska, que por cierto luego les pongo las fotos, hoy las hiba a poner pero no traje el usb ups.

Bueno regresando a los temas habituales del Blog vamos con la tercera entrega del Manejo del APT en Debian, bueno vamos…….

debian

Actualizando la lista de paquetes disponibles

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, revise El archivo /etc/apt/sources.list

Es una buena costumbre ejecutar este archivo regularmente para mantenerse informado acerca de las posibilidades de actualización para el sistema, particularmente las actualizaciones de seguridad.

Instalando paquetes

Finalmente, ¡el proceso que estaba esperando!. Con su archivo sources.list listo y su lista de paquetes disponibles al día, todo lo que necesita es ejecutar apt-get para tener el paquete que quiera instalado. Por ejemplo, puede ejecutar:

# apt-get install xchat

APT buscará 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. Observe este ejemplo:

# 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 desea continuar o no; supone automáticamente que se desean instalar esos paquetes.

Esto significa que APT sólo pregunta por confirmación cuando se van a instalar paquetes que no fueron especificados en la línea de comando.

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.

Puede especificar también que paquetes serán eliminados en la misma línea. Sólo agregue un “-” inmediatamente después del nombre del paquete que quiere eliminar, por ejemplo:

# 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]

Si de alguna forma daña un paquete instalado, o simplemente desea reinstalar la versión más nueva disponible del paquete, puede utilizar la opción –reinstall como se muestra:

# 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 tiene esta versión instalada, tiene algunas opciones más a su alcance: Puede 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á utilizando la estable. Los valores aceptados para distribución son stable, testing y unstable.

Podría preferir utilizar el modificador -t para especificar una distribución destino, dejando a apt-get la oportunidad de resolver a favor de esa distribución las dependencias.

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.

Eliminando paquetes

Si ya no necesita utilizar cierto paquete, puede eliminarlo de su sistema utilizando APT. Para realizar esta tarea sólo escriba: apt-get remove paquete. por ejemplo:

# 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 dependientes del paquete eliminado. No hay manera de eliminar un paquete utilizando APT sin eliminar los paquetes que éste necesitaba.

Ejecutando apt-get como en el ejemplo causará 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, ejecute:

# 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]

Observe 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, puede utilizar un símbolo con la opción de “remove” para invertir el significado de un paquete en especial. En el caso de la eliminación, si agrega un “+” después del nombre del paquete, el paquete será instalado en vez de eliminarlo.

# 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]

Observe que apt-get enlista 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).

Actualizando paquetes

Las actualizaciones de los paquetes son un gran éxito de APT. Pueden realizarse con tan sólo un comando: apt-get upgrade. Puede 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, consulte la sección Actualizando a una nueva versión.

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. Consulte la sección Actualizando la lista de paquetes disponibles. Observe este ejemplo:

# 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. Note que en las primeras líneas apt-get menciona que algunos paquetes fueron conservados. Esto significa que hay versiones nuevas de estos paquetes mas 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. Consulte la sección Actualizando a una nueva versión.

Actualizando a una nueva versión

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á utilizando la revisión 0 de la versión estable de Debian, y compra el CD con la revisión 3. Puede utilizar APT para actualizar el sistema al de el CD. Para lograr esto, utilice apt-cdrom (consulte 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 ejecute 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 su 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, observamos que algunos paquetes eran conservados. Solucionaremos este problema ahora con el programa dist-upgrade:

# 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]

Observe que los paquetes ahora serán actualizados, y que nuevos paquetes serán instalados (las nuevas dependencias de los paquetes). Observe 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:

# 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

Para saber que guarda o elimina un paquete puede utilizar:

# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
Reading Package Lists… Done
Building Dependency Tree… Done
Calculating Upgrade… Starting
Starting 2
Investigating python1.5
Package python1.5 has broken dep on python1.5-base
Considering python1.5-base 0 as a solution to python1.5 0
Holding Back python1.5 rather than change python1.5-base
Investigating python1.5-dev
Package python1.5-dev has broken dep on python1.5
Considering python1.5 0 as a solution to python1.5-dev 0
Holding Back python1.5-dev rather than change python1.5
Try to Re-Instate python1.5-dev
Done
Done
The following packages have been kept back
gs python1.5-dev
0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

De este modo, es fácil notar que el paquete python1.5-dev no puede ser instalado debido a una dependencia: python1.5.

Eliminando archivos de paquete no utilizados: apt-get clean y autoclean.

Cuando APT instala un paquete, descarga los archivos necesarios de los servidores enlistados en /etc/apt/sources, estos a su vez son guardados en un depósito local (/var/cache/apt/archives/), y de ahí se procede con la instalación.

Con el tiempo el depósito puede crecer y ocupar mucho espacio en disco. Afortunadamente, APT provee de herramientas para manejar su depósito local: apt-get, clean y autoclean.

apt-get clean elimina todo excepto los archivos “lock” de /var/cache/apt/archives/ y /var/cache/apt/archives/partial/. Así, si necesita reinstalar un paquete APT, lo descargará de nueva cuenta.

apt-get autoclean elimina sólo los archivos que no pueden ser descargados de nuevo.

EL siguiente ejemplo muestra como funciona la autolimpieza de apt-get:

# ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm*
logrotate_3.5.9-7_i386.deb
logrotate_3.5.9-8_i386.deb
gpm_1.19.6-11_i386.deb

En /var/cache/apt/archives hay dos archivos para el paquete logrotatey uno para gpm.

# apt-show-versions -p logrotate
logrotate/stable uptodate 3.5.9-8
# apt-show-versions -p gpm
gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12

apt-show-versions muestra que logrotate_3.5.9-8_i386.deb provee la versión actualizada de of logrotate, así pues logrotate_3.5.9-7_i386.deb es innecesario. También gpm_1.19.6-11_i386.deb no es necesario debido a que una versión mas reciente puede ser descargada.

# apt-get autoclean
Reading Package Lists… Done
Building Dependency Tree… Done
Del gpm 1.19.6-11 [145kB]
Del logrotate 3.5.9-7 [26.5kB]

Finalmente, apt-get autoclean elimina los archivos viejos. Consulte Cómo actualizar paquetes de versiónes específicas de Debian., para más información sobre apt-show-versions.

Utilizando APT con dselect

dselect es un programa que ayuda a los usuarios a 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á utilizando un CD ROM y quiere descargar los paquetes de Internet, la mejor opción es utilizar dselect.

Para entender mejor el uso de dselect, lea 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, utilice:

# apt-get -u dselect-upgrade

Como en el siguiente ejemplo:

# 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]

Compárelo con lo que pasa al ejecutar apt-get dist-upgrade en el mismo sistema:

# 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]

Observe 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.

Cómo mantener un sistema Híbrido.

La gente frecuentemente utiliza la distribución de prueba, ya que es más estable que la inestable y más al día que la estable. Sin embargo, los usuarios que quieren la última versión de algunos paquetes mas sin embargo no confian en cambiar su sistema completo, tienen la opción de utilizar una mezcla de un sistema prueba/inestable. Por otro lado, los mas conservadores querrán utilizar una mezcla de estable/prueba.

Para hacer esto, agrega la siguiente línea en /etc/apt/apt.conf:

APT::Default-Release “testing”;

Después, cuando esté listo a instalar paquetes de inestable, sólo utilice el modificador -t:

# apt-get -t unstable install packagename

No olvide que para utilizar paquetes de una versión de Debian, necesita agregar una línea de apt source a la lista en /etc/apt/sources. En el ejemplo, necesitamos líneas de unstableen vez de testing.

Cómo actualizar paquetes de versiónes específicas de Debian.

apt-show-versions provee una amnera segura de actualizar los sistemas híbridos sin tener que instalar más de la distribución menos estable de la que tenían en mente. Por ejemplo, es posible actualizar solo los paquetes inestables ejecutando:

# apt-get install apt-show-versions -u -b | grep unstable

Cómo mantener versiones específicas de paquetes instalados

Usted puede 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 haya actualizado su sistema a la versión 4.0 de Debian, pero quiere continuar con cierta versión de un programa de Debian 3.0 Puede marcar la versión que tiene instalada así ésta no será actualizada.

Utilizar este recurso es simple. Sólo se necesita editar el archivo /etc/apt/preferences.

El formato es simple:

Package:

Pin:

Pin-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*

Observe que utilizo un * (asterisco). Este es un “comodín”; este específica que yo quiero que este “pin” sea válido 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. Observe que si modificó un programa no querrá 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 será 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 sólo 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 se reemplazará por una versión anterior. Por lo tanto, si yo tuviera sylpheed 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.

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 números 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á utilizando servidores que no ofrezcan este archivo. Puede ver los contenidos de este archivo que tiene 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
Pin-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

Fuente | http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.es.html

Share this post

Comments (0)

Leave a comment

Tu dirección de correo electrónico no será publicada.