Gestión de paquetes - IES Gonzalo Nazareno

Transcripción

Gestión de paquetes - IES Gonzalo Nazareno
G
estión de
paquetes
uso de apt en la terminal
Versión 1.0
Manuel F.Viera Tirado
02/12/2007
Copyright© 2007 Manuel F. Viera Tirado
Este programa es Software Libre; usted puede redistribuirlo
y/o modificarlo bajo los términos de la "GNU General Public
License" como lo publica la "FSF Free Software Foundation",
o (a su elección) de cualquier versión posterior.
Este programa es distribuido con la esperanza de que le será
útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
particular. Vea la "GNU General Public License" para más
detalles.
Usted debe haber recibido una copia de la "GNU General Public
License" junto con este programa, si no, escriba a la "FSF
Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Para el propósito de la aplicación de la GPL a este documento,
considero que el término "Código fuente" se refiere al texto con formato odt
y "Código objeto" a los archivos info, tex, dvi, pdf, y Postscript generados.
Tabla de contenidos
1 Introducción
1.1 ¿Qué es un paquete?
1.2 ¿Qué es una dependencia?
1.3 ¿Qué es un gestor de paquetes?
1.4 Funcionamiento de APT
1.4.1 ¿Qué es un repositorio?
2 Uso de APT en la terminal
2.1 apt-cdrom
2.2 apt-get
2.3 apt-cache
3 Añadiendo un nuevo repositorio
4 Front-ends de APT
1 Introducción
En los comienzos de GNU/Linux solamente existían los paquetes .tar.gz. De esta forma los usuarios
tenían que compilar cada programa que quisieran usar en su sistema GNU/Linux. Pero esto no era tan
simple como parece ya que un programa podía tener varias dependencias, por lo que antes de compilar el
programa en cuestión había que leer el fichero README adjunto para ver dichas dependencias,
descargarlas, compilarlas e instalarlas antes de compilar e instalar el programa en cuestión.
La instalación de un programa podría llegar a ser tediosa al tener varias dependencias y que a su vez
estas dependencias tuviesen otras dependencias por su parte.
Para facilitar este trabajo al crearse Debian se incluyó un programa para gestionar la paquetería
instalada en el sistema. Este programa se llamó dpkg, a través del cual se instalarían y desinstalarían
paquetes del sistema. Así fue creado el primer “paquete” en GNU/Linux.
A raíz de lo dicho anteriormente, podemos diferenciar 2 ramas importantes de paquetes:
➢
Paquetes .rpm: gestionados por la aplicación 'rpm' propia de distribuciones comerciales como Red
Hat, Suse, Mandriva, etc.
➢
Paquetes .deb: gestionados por la aplicación 'dpkg' propia de Debian y todas las distribuciones
basadas en esta.
NOTA: Además de las anteriores existen más ramas de paquetes, como por ejemplo, la propia de Gentoo.
1.1 ¿Qué es un paquete?
Un paquete no es más que un archivador (también llamado 'ar') que contiene varios ficheros dentro
como si de uno sólo se tratase. Este paquete normalmente suele traer una versión precompilada del
software a instalar, aunque puede descargarse también las fuentes para compilarlo manualmente.
Los paquetes que utiliza Debian son deb y normalmente están compuestos por varios ficheros:
➢
debian-binary: versión del formato deb.
➢
control.tar.gz: contiene toda la metainformación del paquete (dependencias, etc).
➢
data.tar.gz: contiene los ficheros que se instalan en el sistema.
1.2 ¿Qué es una dependencia?
Una dependencia es aquel paquete/programa necesario por otro paquete para poder funcionar
correctamente.
Según la filosofía de GNU/Linux, un paquete (programa) solamente tiene una única función en el
sistema. Al tener una sola función puede ser utilizada en cualquier momento por otro paquete en cuanto le
sea necesario. Esta modularización hace que un paquete dependa de otro para poder funcionar, y de esta
forma no vamos a tener dos programas que realicen la misma función en el sistema sino un mismo
programa accesible por todos los demás.
Como hemos dicho anteriormente, para que un paquete pueda ser instalado correctamente deben
cumplirse todas sus dependencias.
1.3 ¿Qué es un gestor de paquetes?
El gestor de paquetes es un software que se encarga de la instalación/desinstalación de paquetes del
sistema, resolviendo a su vez todas las dependencias de un determinado paquete.
En Debian el gestor de paquetes se llama APT (Advanced Packaging Tool).
1.4 Funcionamiento de APT
Como hemos comentado anteriormente, en los inicios de GNU/Linux los usuarios tenían que
compilar sus programas para poder hacer uso de ellos y resolver las dependencias de estos de forma
manual.
Cuando apareció Debian, esta contaba con un programa llamado 'dpkg' encargado de manejar los
paquetes en el sistema. De esta forma, el usuario ya no tenía que compilar sus programas si no que se
adquiría un paquete con extensión .deb ya precompilado (lo cual no quiere decir que no se siguiese
utilizando la compilación de programas).
Pero dpkg tenía un problema, y es que no resuelve las dependencias de un paquete, es decir, dpkg
solo instala, desinstala y muestra información acerca de paquetes. Si un paquete tiene una dependencia
tendremos que adquirir dicha dependencia (descargarla manualmente) e instalarla para poder continuar
con la instalación del paquete.
Para facilitar, mejorar y conseguir una gestión de paquetes mucho más eficiente Debian comenzó a
utilizar una herramienta llamada APT (Advanced Packaging Tool = Herramienta Avanzada de
Empaquetamiento). Esta herramienta innovó en la gestión de paquetes debido a que resuelve las
dependencias de un determinado paquete y se basa en repositorios para descargar los paquetes y
dependencias a instalar.
Debido a que dpkg es una herramienta de bajo nivel, se necesitaba una aplicación de alto nivel que
se encargase de resolver las dependencias y descargar los paquetes de lugares remotos. Por lo tanto hay
que aclarar que APT NO instala paquetes, sino que solamente se encarga de resolver las dependencias y
descargarlas de servidores remotos (también llamados repositorios).
1.4.1 ¿Qué es un repositorio?
Un repositorio es un servidor remoto donde se encuentran alojados todos los paquetes de una
determinada distribución GNU/Linux. Normalmente estos repositorios permiten la descargar de paquetes
mediante varios protocolos como http o ftp.
Un repositorio no tiene por qué contener solamente los paquetes de una distribución, es más
normalmente contienen los paquetes de varias distribuciones.
Además de contener paquetes, en estos repositorios podemos encontrar imágenes iso de la
distribución listas para descargar a través de http, ftp, bitTorrent, jigdo, etc.
El funcionamiento de APT (como hemos dicho anteriormente) se basa en el uso de una lista de
repositorios desde los cuales va a poder descargar los paquetes y dependencias. Esta lista de repositorios se
configura en el fichero /etc/apt/sources.list.
Ejemplo de fichero sources.list
#Repositorio CICA
deb http://ftp.cica.es/debian/ etch main contrib non-free
deb-src http://ftp.cica.es/debian/ etch main contrib non-free
#Repositorios de seguridad
deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
APT se descarga el índice de paquetes de los repositorios que tenemos configurados para poder
realizar búsquedas de paquetes. Cuando decidimos instalar un paquete, APT se lo descarga de los
repositorios junto con sus dependencias y los almacena en el directorio /var/cache/apt/archives. Una vez
descargado el paquete y sus dependencias, APT le pasa el turno a dpkg el cual se encarga de instalarlos en el sistema.
Resumiendo, APT y dpkg trabajan en equipo y por turnos; APT se encarga de resolver las
dependencias y descargar los paquetes y dpkg los instala en el sistema.
2 Uso de APT en la terminal
Para poder usar APT desde la terminal debemos conocer las instrucciones básicas, que son las
siguientes:
2.1
apt-cdrom
Nos permite añadir un cd o dvd como repositorio de paquetes. Esta opción es bastante útil cuando
estamos usando un equipo que no tiene acceso a internet, de esta forma vamos a poder instalar paquetes
desde los cds o dvds de la propia distribución.
La opción más importante de esta instrucción es add. Su sintaxis de uso es:
#apt-cdrom add
Cuando ejecutamos los anterior en la terminal, apt automáticamente escaneará el cd / dvd en busca
de paquetes y creará un índice para su posterior uso. Veamos que ocurre en la terminal:
blackr:/home/imanu# apt-cdrom add
Usando el punto de montaje del CD-ROM /cdrom/
Desmontando el CD-ROM
Esperando el disco...
Por favor inserte un disco en la unidad y presione Intro
Montando el CD-ROM...
Identificando.. [6689021057ce64953ac7d1fb8eba8cfe-2]
Buscando en el disco archivos de índices...
Se encontraron 2 índices de paquetes, 0 de fuentes y 0 firmas
Found label 'Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40'
Este disco se llama:
'Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40'
Reading Package Indexes... Hecho..
Escribiendo nueva lista de fuente
Las entradas de la lista de fuentes para este disco son:
deb cdrom:[Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40]/ etch contrib
main
Desmontando CD-ROM...Repita este proceso para el resto de los CDs del conjunto.
Una vez finalizado, si miramos el fichero /etc/apt/sources.list podemos ver que se ha añadido un nuevo
repositorio.
blackr:/home/imanu# cat /etc/apt/sources.list
deb cdrom:[Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40]/ etch contrib
main
deb http://ftp.cica.es/debian/ etch main contrib non-free
deb-src http://ftp.cica.es/debian/ etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
2.2
apt-get
apt-get es la herramienta que se usa para el manejo de paquetes. Siempre debemos especificar una
de las siguientes órdenes a menos que usemos -h o --help.
2.2.1
update
update se utiliza para actualizar el índice de paquetes local con respecto a los repositorios
configurados en /etc/apt/sources.list. El índice de paquetes se descarga en un fichero llamado Packages.gz.
Es importante que realicemos un update cada vez que hagamos cambios en el fichero sources.list.
La sintaxis de uso es la siguiente:
#apt-get update
Veamos un ejemplo en la terminal.
blackr:/home/imanu# apt-get update
Des:1 http://ftp.cica.es etch Release.gpg [378B]
Obj http://ftp.cica.es etch Release
Des:2 http://security.debian.org etch/updates Release.gpg [189B]
Ign http://ftp.cica.es etch/main Packages/DiffIndex
Des:3 http://security.debian.org etch/updates Release [22,5kB]
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Ign http://security.debian.org etch/updates/contrib Packages/DiffIndex
Ign http://security.debian.org etch/updates/main Sources/DiffIndex
Ign http://security.debian.org etch/updates/contrib Sources/DiffIndex
Des:4 http://security.debian.org etch/updates/main Packages [179kB]
Obj http://security.debian.org etch/updates/contrib Packages
Des:5 http://security.debian.org etch/updates/main Sources [24,7kB]
Obj http://security.debian.org etch/updates/contrib Sources
Ign http://ftp.cica.es etch/contrib Packages/DiffIndex
Ign http://ftp.cica.es etch/non-free Packages/DiffIndex
Ign http://ftp.cica.es etch/main Sources/DiffIndex
Ign http://ftp.cica.es etch/contrib Sources/DiffIndex
Ign http://ftp.cica.es etch/non-free Sources/DiffIndex
Obj http://ftp.cica.es etch/main Packages
Obj http://ftp.cica.es etch/contrib Packages
Obj http://ftp.cica.es etch/non-free Packages
Obj http://ftp.cica.es etch/main Sources
Obj http://ftp.cica.es etch/contrib Sources
Obj http://ftp.cica.es etch/non-free Sources
Descargados 227kB en 21s (10,6kB/s)
Leyendo lista de paquetes... Hecho
Como podemos observar con apt-get update, APT se conecta a los repositorios y descarga todo el
índice de paquetes actualizado.
2.2.2
upgrade
Con upgrade podemos actualizar todos los paquetes de nuestra distribución a su versión más
actualizada en los repositorios.
Si lo que queremos es actualizar la versión de nuestra distribución, también podemos hacerlo con
upgrade, pero no se van a resolver las dependencias de los paquetes de la nueva distribución, por lo que
pueden quedar paquetes obsoletos que en la nueva distribución no se utilicen. Para resolver este “problema”
deberemos utilizar la orden dist-upgrade.
Un detalle importante a la hora de utilizar upgrade o dist-upgrade es el uso de la opción -u
mediante la cual indicamos a apt-get que nos muestre la lista completa de paquetes que va a actualizar. Si
no especificamos esta opción no sabemos qué paquetes se van a actualizar, es decir, actualizaremos “a
ciegas”.
La sintaxis de uso es similar a la de update:
•
#apt-get [-u] upgrade
•
#apt-get [-u] dist-upgrade
NOTA: es conveniente que antes de ejecutar un apt-get upgrade / dist-upgrade, actualicemos los índices de paquetes con apt-get
update.
2.2.3
install
La orden install instala los paquetes que se especifican a partir de la palabra install. La sintaxis es la
siguiente:
#apt-get install paquete1 paquete2 paqueteN
El nombre del paquete no es el nombre_paquete+versión.deb, sino sólo el nombre del paquete. Por
ejemplo, el nombre del paquete sería libc6 y no libc6_1.9.6-2.deb.
Veamos un ejemplo práctico, instalaremos el juego supertuxkart. Para ello ejecutaremos:
blackr:/home/imanu# apt-get install supertuxkart
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Se instalarán los siguientes paquetes extras:
freeglut3 plib1.8.4c2 supertuxkart-data
Se instalarán los siguientes paquetes NUEVOS:
freeglut3 plib1.8.4c2 supertuxkart supertuxkart-data
0 actualizados, 4 se instalarán, 0 para eliminar y 14 no actualizados.
Necesito descargar 11,2MB de archivos.
Se utilizarán 23,3MB de espacio de disco adicional después de desempaquetar.
¿Desea continuar [S/n]? s
Des:1 http://ftp.cica.es etch/main freeglut3 2.4.0-5 [88,5kB]
Des:2 http://ftp.cica.es etch/main plib1.8.4c2 1.8.4-6 [639kB]
Des:3 http://ftp.cica.es etch/main supertuxkart-data 0.2-1 [10,3MB]
Des:4 http://ftp.cica.es etch/main supertuxkart 0.2-1 [182kB]
Descargados 11,2MB en 6m11s (30,1kB/s)
Seleccionando el paquete freeglut3 previamente no seleccionado.
(Leyendo la base de datos ...
78313 ficheros y directorios instalados actualmente.)
Desempaquetando freeglut3 (de .../freeglut3_2.4.0-5_i386.deb) ...
Seleccionando el paquete plib1.8.4c2 previamente no seleccionado.
Desempaquetando plib1.8.4c2 (de .../plib1.8.4c2_1.8.4-6_i386.deb) ...
Seleccionando el paquete supertuxkart-data previamente no seleccionado.
Desempaquetando supertuxkart-data (de .../supertuxkart-data_0.2-1_all.deb) ...
Seleccionando el paquete supertuxkart previamente no seleccionado.
Desempaquetando supertuxkart (de .../supertuxkart_0.2-1_i386.deb) ...
Configurando freeglut3 (2.4.0-5) ...
Configurando plib1.8.4c2 (1.8.4-6) ...
Configurando supertuxkart-data (0.2-1) ...
Configurando supertuxkart (0.2-1) ...
blackr:/home/imanu#
¿Qué es lo que ha ocurrido? Cuando le hemos dicho a APT “quiero instalar el paquete supertuxkart”,
APT automáticamente ha resuelto las dependencias y te avisa con los paquetes que son necesarios instalar.
Se instalarán los siguientes paquetes extras:
freeglut3 plib1.8.4c2 supertuxkart-data
Se instalarán los siguientes paquetes NUEVOS:
freeglut3 plib1.8.4c2 supertuxkart supertuxkart-data
Una vez que nosotros damos el visto bueno, APT continua con la instalación y lo que hace es descargar cada
uno de los paquetes de los repositorios.
Des:1 http://ftp.cica.es etch/main freeglut3 2.4.0-5 [88,5kB]
Des:2 http://ftp.cica.es etch/main plib1.8.4c2 1.8.4-6 [639kB]
Des:3 http://ftp.cica.es etch/main supertuxkart-data 0.2-1 [10,3MB]
Des:4 http://ftp.cica.es etch/main supertuxkart 0.2-1 [182kB]
Descargados 11,2MB en 6m11s (30,1kB/s)
Descargados los paquetes, se procede a la instalación y configuración de estos en el sistema
Seleccionando el paquete freeglut3 previamente no seleccionado.
(Leyendo la base de datos ...
78313 ficheros y directorios instalados actualmente.)
Desempaquetando freeglut3 (de .../freeglut3_2.4.0-5_i386.deb) ...
Seleccionando el paquete plib1.8.4c2 previamente no seleccionado.
Desempaquetando plib1.8.4c2 (de .../plib1.8.4c2_1.8.4-6_i386.deb) ...
Seleccionando el paquete supertuxkart-data previamente no seleccionado.
Desempaquetando supertuxkart-data (de .../supertuxkart-data_0.2-1_all.deb) ...
Seleccionando el paquete supertuxkart previamente no seleccionado.
Desempaquetando supertuxkart (de .../supertuxkart_0.2-1_i386.deb) ...
Configurando freeglut3 (2.4.0-5) ...
Configurando plib1.8.4c2 (1.8.4-6) ...
Configurando supertuxkart-data (0.2-1) ...
Configurando supertuxkart (0.2-1) ...
Ahora ya tenemos instalados los paquetes y podemos usarlo cuando queramos desde una terminal o
mediante Alt+F2 y escribiendo el nombre de la aplicación, en este caso, supertuxkart.
2.2.4
remove
Desinstala todos los paquetes que se especifiquen detrás de la palabra remove y todas las
dependencias de estos. La sintaxis es similar a la de install:
#apt-get remove paquete1 paquete2 paqueteN
Veamos un ejemplo práctico, desinstalaremos el juego que instalamos antes.
blackr:/home/imanu# apt-get --purge remove supertuxkart*
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Nota, seleccionando supertuxkart para la expresión regular 'supertuxkart*'
Nota, seleccionando supertuxkart-data para la expresión regular 'supertuxkart*'
Los siguientes paquetes se ELIMINARÁN:
supertuxkart* supertuxkart-data*
0 actualizados, 0 se instalarán, 2 para eliminar y 14 no actualizados.
Necesito descargar 0B de archivos.
Se liberarán 21,3MB después de desempaquetar.
¿Desea continuar [S/n]?
(Leyendo la base de datos ...
78683 ficheros y directorios instalados actualmente.)
Desinstalando supertuxkart ...
Purgando ficheros de configuración de supertuxkart ...
Desinstalando supertuxkart-data ...
blackr:/home/imanu#
Bueno en el ejemplo, la sintaxis es un poco distinta ya que hemos añadido la opción –purge, con la
que indicamos que además de desinstalar los paquetes, borre los ficheros de configuración.
Como podemos ver, APT permite el uso de expresiones regulares ya que después del nombre del
paquete hemos añadido un asterisco (*), con lo que indicamos a APT que desinstale todo aquel paquete que
empiece con la palabra supertuxkart.
2.2.5
clean
Como se comentó anteriormente, APT utiliza una caché donde descarga los paquetes de los
repositorios. Esta caché se encuentra en /var/cache/apt/archives. Si vemos lo que contiene el directorio anterior
podemos ver todos los paquetes descargados.
blackr:/home/imanu# ls -l /var/cache/apt/archives/
total 41652
-rw-r--r-- 1 root root 2522280 2006-12-17 13:47 abiword_2.4.6-1.1_i386.deb
-rw-r--r-- 1 root root 1845778 2006-12-17 13:47 abiword-common_2.4.6-1.1_all.deb
-rw-r--r-- 1 root root
42366 2004-11-27 20:32 airstrike_0.99+1.0pre6a-3_i386.deb
-rw-r--r-- 1 root root 1876354 2004-11-27 18:47 airstrike-common_0.99+1.0pre6a-3_all.deb
-rw-r--r-- 1 root root 6291562 2006-11-23 00:17 azureus_2.5.0.0+0-1_all.deb
-rw-r--r-- 1 root root
39868 2006-10-15 05:32 bumprace_1.5.1.dfsg-2.1_i386.deb
-rw-r--r-- 1 root root
717034 2006-10-15 05:32 bumprace-data_1.5.1.dfsg-2.1_all.deb
-rw-r--r-- 1 root root
88502 2006-04-05 08:02 freeglut3_2.4.0-5_i386.deb
-rw-r--r-- 1 root root
29456 2006-11-01 01:51 libsdl-image1.2_1.2.5-2+b1_i386.deb
-rw-r--r-- 1 root root
136842 2006-11-01 01:51 libsdl-mixer1.2_1.2.6-1.1+b2_i386.deb
-rw-r--r-- 1 root root
326972 2005-11-15 00:17 libseda-java_3.0-3_all.deb
-rw-r--r-- 1 root root
102112 2006-09-03 20:03 libsmpeg0_0.4.5+cvs20030824-1.9_i386.deb
-rw-r--r-- 1 root root 1155842 2007-01-16 21:32 libswt-gtk-3.2-java_3.2.1-5_i386.deb
-rw-r--r-- 1 root root
156322 2007-01-16 21:32 libswt-gtk-3.2-jni_3.2.1-5_i386.deb
-rw-r----- 1 root root
0 2007-11-28 20:38 lock
-rw-r--r-- 1 root root
45228 2007-11-21 18:00 mysql-client_5.0.32-7etch3_all.deb
-rw-r--r-- 1 root root 7188116 2007-11-21 18:00 mysql-client-5.0_5.0.32-7etch3_i386.deb
-rw-r--r-- 1 root root
53548 2007-11-21 18:00 mysql-common_5.0.32-7etch3_all.deb
-rw-r--r-- 1 root root
47306 2007-11-21 18:00 mysql-server_5.0.32-7etch3_all.deb
drwxr-xr-x 2 root root
4096 2007-11-28 21:01 partial
-rw-r--r-- 1 root root
639312 2006-10-24 23:36 plib1.8.4c2_1.8.4-6_i386.deb
-rw-r--r-- 1 root root
181580 2006-09-30 12:17 supertuxkart_0.2-1_i386.deb
-rw-r--r-- 1 root root 10256154 2006-09-30 12:17 supertuxkart-data_0.2-1_all.deb
-rw-r--r-- 1 root root
142618 2006-10-06 03:47 transmission_0.6.1.dfsg-1_i386.deb
-rw-r--r-- 1 root root
30428 2006-05-15 11:32 xcruise_0.30-7_i386.deb
-rw-r--r-- 1 root root
781792 2006-12-11 01:02 xmoto_0.2.2-2_i386.deb
-rw-r--r-- 1 root root 5317556 2006-12-11 01:02 xmoto-data_0.2.2-2_all.deb
Con la orden clean podemos borrar esta caché al completo y liberar espacio en disco. La sintaxis es
la siguiente:
#apt-get clean
Veamos un ejemplo práctico.
blackr:/home/imanu# apt-get clean
blackr:/home/imanu# ls -l /var/cache/apt/archives/
total 4
-rw-r----- 1 root root
0 2007-11-28 21:51 lock
drwxr-xr-x 2 root root 4096 2007-11-28 21:48 partial
Como podemos observar en el directorio no hay ningún paquete. Sin embargo el directorio no está vacío,
hay un fichero llamado 'lock' que impide que ejecutemos varios apt-get y estemos instalando en varias
terminales al mismo tiempo; y un directorio llamado 'partial' donde se almacenan los paquetes que se han
quedado pendiente de descargar, por ejemplo, paquetes que se estaban descargando hasta que se produjo
un corte de conectividad con internet o porque paramos la descarga manualmente. Gracias al directorio
partial podemos reanudar la descarga del paquete por donde la dejamos.
2.2.6
autoclean
La orden autoclean tiene el mismo objetivo que clean, es decir, borrar paquetes de la caché y liberar
espacio en disco, pero funciona de forma diferente. Autoclean sólo borra de la caché aquellos paquetes
desactualizados, es decir, si hemos descargado el paquete de apache1.3 y en los repositorios está la versión
2.0, el paquete será eliminado porque no lo volveremos a descargar, sólo descargaremos versiones
actualizadas.
La sintaxis es la misma que la de clean:
#apt-get autoclean
Nota: para más información acerca de apt-get consultar el man. (man apt-get)
2.3
apt-cache
apt-cache nos permite realizar operaciones sobre la cache de APT. apt-cache no modifica el estado
del sistema pero nos permite realizar búsquedas y obtener información sobre los paquetes.
apt-cache cuenta con una serie de ordenes, siempre debemos especificar una a menos que usemos
la opción -h o –help para mostrar la ayuda. Algunas de estas ordenes son las siguientes:
2.3.1
search
search hace una búsqueda de un patrón por todos los paquetes. La búsqueda se hace tanto en el
nombre del paquete como en su descripción. Se pueden especificar varios argumentos de búsqueda
separados por espacios. La sintaxis de uso es la siguiente:
#apt-cache search patron1 patron2 patronN
burn”:
Veamos un ejemplo, queremos buscar algun software para grabar cd, asi que buscaremos por “cd
blackr:/home/imanu# apt-cache search cd burn
arson - KDE frontend for burning CDs
backup-manager - command-line backup tool
banshee - Audio Management and Playback application
banshee-daap - Audio Management and Playback application (DAAP sharing plugin)
banshee-official-plugins - Audio Management and Playback application (Additional Plugins)
bonfire - CD/DVD burning application for GNOME (dummy package)
brasero - CD/DVD burning application for GNOME
burn - Command line Data-CD, Audio-CD, ISO-CD, Copy-CD writing tool
cdcontrol - A parallel burner that allow you to write to one or more CD-Writers at once
cdlabelgen - generates front cards and tray cards for CDs and DVDs
cdrbq - graphical cd burning frontend
cdrdao - records CDs in Disk-At-Once (DAO) mode
cdrskin - command line CD-R/CD-RW writing tool
cue2toc - converts CUE files to cdrdao's TOC format
cwcdr - Chez Wam CD Ripper
dvd+rw-tools - DVD+-RW/R tools
gcdmaster - Gnome GUI for cdrdao
gnomebaker - application for CD/DVD creation in the GNOME desktop
gramofile - Transfer sound from gramophone records to CD
gthumb - an image viewer and browser
k3b - A sophisticated KDE CD burning application
kpowersave - frontend to powersave for setting user specific policies
libk3b-dev - The KDE cd burning application library - development files
libk3b2 - The KDE cd burning application library - runtime files
libnautilus-burn-dev - Nautilus Burn Library - development version
libnautilus-burn3 - Nautilus Burn Library - runtime version
listen - A nice music player and manager for GNOME
mp3burn - burn audio CDs directly from MP3, Ogg Vorbis, or FLAC files
mp3cd - Burns normalized audio CDs from lists of MP3s/WAVs/Oggs/FLACs
muine-plugin-serpentine - Audio CD burning plugin for the Muine audio player
multicd - Backup your data to CD-R/CD-RW
nautilus-cd-burner - CD Burning front-end for Nautilus
partimage - backup partitions into a compressed image file
partimage-doc - Partition Image User Documentation
quodlibet-plugins - various contributed plugins for Quod Libet
rezound - Audio file editor
rhythmbox - music player and organizer for GNOME
Una vez realizada la búsqueda se muestra el nombre del paquete y una breve descripción. Si
quisiéramos instalar alguno de ellos, solo tendríamos que ejecutar apt-get install nombre_del_paquete.
2.3.2
show
show muestra una información más detallada del paquete que especifiquemos. Su sintaxis de uso es
la siguiente:
$apt-cache show nombre_paquete
Vamos a ver la información del paquete firefox:
imanu@blackr:~$ apt-cache show firefox
Package: firefox
Priority: optional
Section: web
Installed-Size: 108
Maintainer: Eric Dorland <[email protected]>
Architecture: all
Source: iceweasel
Version: 2.0.0.6+2.0.0.8-0etch1
Depends: iceweasel (>= 2.0.0.6+2.0.0.8-0etch1), iceweasel (<< 2.0.0.6+2.0.0.8-0etch1.1~)
Filename: pool/updates/main/i/iceweasel/firefox_2.0.0.6+2.0.0.8-0etch1_all.deb
Size: 54052
MD5sum: 6f1dc415423a1722a2f78b31d8c2c853
SHA1: 1213da3ca11c636caadf0d92021ebd2ba3b121d3
SHA256: 704f69dd4c82fd2098131a530855e1885d914489a384ed962423fabf3644c624
Description: Transition package for iceweasel rename
Package to ease upgrading from older firefox packages to the new
iceweasel package.
.
This package can be purged at anytime once the iceweasel package has
been installed.
Package: firefox
Priority: optional
Section: web
Installed-Size: 108
Maintainer: Eric Dorland <[email protected]>
Architecture: all
Source: iceweasel
Version: 2.0.0.3-1
Depends: iceweasel (>= 2.0.0.3-1), iceweasel (<< 2.0.0.3-1.1~)
Filename: pool/main/i/iceweasel/firefox_2.0.0.3-1_all.deb
Size: 53260
MD5sum: d396af28aee46a3fa8efdb98b6a9b61a
SHA1: 8cf6b173b4fa7a7d2cf7db8d17d9d7ff176a6d0a
SHA256: 3fb9f4a6ddc32b05883e27ecc260767366a197450bb80ba91bf710244d798f98
Description: Transition package for iceweasel rename
Package to ease upgrading from older firefox packages to the new
iceweasel package.
.
This package can be purged at anytime once the iceweasel package has
been installed.
Como podemos ver, con la orden show podemos ver la versión, dependencias, mantenedor, tamaño, y
descripción más o menos extensa de un paquete.
Nota: el uso de apt-cache no requiere que seamos root, es decir, podemos buscar información acerca de paquetes siendo un usuario sin privilegios.
2.3.3
depends
depends muestra las dependencias de un determinado paquete. Su sintaxis de uso es la siguiente:
$apt-cache depends nombre_paquete
Veamos qué dependencias tiene iceweasel (navegador firefox):
imanu@blackr:~$ apt-cache depends iceweasel
iceweasel
Depende: fontconfig
Depende: psmisc
Depende: debianutils
Depende: libatk1.0-0
Depende: libc6
Depende: libcairo2
Depende: libfontconfig1
Depende: libfreetype6
Depende: libgcc1
Depende: libglib2.0-0
Depende: libgtk2.0-0
Depende: libjpeg62
Depende: libmyspell3c2
Depende: libpango1.0-0
Depende: libpng12-0
Depende: libstdc++6
Depende: libx11-6
Depende: libxft2
Depende: libxinerama1
Depende: libxp6
Depende: libxrender1
Depende: libxt6
Depende: zlib1g
Sugiere: iceweasel-gnome-support
Sugiere: <latex-xft-fonts>
Sugiere: xprint
Sugiere: mozplugger
Sugiere: libkrb53
Entra en conflicto: mozilla-firefox
Entra en conflicto: firefox
Reemplaza: mozilla-firefox
Reemplaza: firefox
3 Añadiendo un nuevo repositorio
En nuestro sistema Debian GNU/Linux podemos tener configurados todos los repositorios que
queramos, aunque es recomendable utilizar los repositorios oficiales para no volver inestable la distribución
debido a incompatibilidades entre paquetes, etc. Es recomendable que utilicemos repositorios no oficiales
sólo cuando no haya más remedio y nos haga falta instalar un paquete que no se encuentre en los
repositorios oficiales. Para añadir y hacer uso de un nuevo repositorios seguiremos los siguientes pasos.
Primero debemos editar el fichero /etc/apt/sources.list, donde se encuentran configurados los
repositorios, y añadiremos el nuevo:
deb http://www.debian-multimedia.org/
stable
main
El segundo paso, y como se comentó anteriormente, SIEMPRE después de hacer un cambio en el
fichero sources.list debemos actualizar el índice de paquetes con apt-get.
blackr:/home/imanu# apt-get update
Des:1 http://ftp.cica.es etch Release.gpg [378B]
Obj http://ftp.cica.es etch Release
Des:2 http://security.debian.org etch/updates Release.gpg [189B]
Des:3 http://www.debian-multimedia.org stable Release.gpg [189B]
Obj http://security.debian.org etch/updates Release
Ign http://ftp.cica.es etch/main Packages/DiffIndex
Des:4 http://www.debian-multimedia.org stable Release [5535B]
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Ign http://ftp.cica.es etch/contrib Packages/DiffIndex
Ign http://ftp.cica.es etch/non-free Packages/DiffIndex
Ign http://ftp.cica.es etch/main Sources/DiffIndex
Ign http://ftp.cica.es etch/contrib Sources/DiffIndex
Ign http://ftp.cica.es etch/non-free Sources/DiffIndex
Ign http://www.debian-multimedia.org stable Release
Ign http://security.debian.org etch/updates/contrib Packages/DiffIndex
Ign http://security.debian.org etch/updates/main Sources/DiffIndex
Obj http://ftp.cica.es etch/main Packages
Obj http://ftp.cica.es etch/contrib Packages
Obj http://ftp.cica.es etch/non-free Packages
Des:5 http://www.debian-multimedia.org stable/main Packages [41,9kB]
Ign http://security.debian.org etch/updates/contrib Sources/DiffIndex
Des:6 http://security.debian.org etch/updates/main Packages [180kB]
Obj http://ftp.cica.es etch/main Sources
Obj http://ftp.cica.es etch/contrib Sources
Obj http://ftp.cica.es etch/non-free Sources
Obj http://security.debian.org etch/updates/contrib Packages
Des:7 http://security.debian.org etch/updates/main Sources [24,9kB]
Obj http://security.debian.org etch/updates/contrib Sources
Descargados 253kB en 37s (6804B/s)
Leyendo lista de paquetes... Hecho
W: GPG error: http://www.debian-multimedia.org stable Release: Las firmas siguientes no se pudieron
verificar porque su llave pública no está disponible: NO_PUBKEY 07DC563D1F41B907
W: Tal vez quiera ejecutar 'apt-get update' para corregir estos problemas
Como podemos observar al descargar los índices de paquetes del nuevo repositorio, se produce un error de
GPG (Gnu Privacy Guard), es decir, APT avisa de que no tiene la clave pública que identifica a ese
repositorio por lo que puede que no sea de confianza. Este error no nos impide instalar paquetes de dicho
repositorio, pero cada vez que hagamos algo (actualización de índices de paquetes, instalación, etc) nos
avisará con el error.
El tercer paso será eliminar este molesto error. Para ello lo que haremos será pedir a dicho
repositorio su clave pública (también llamada llave pública), y para ello ejecutaremos lo siguiente:
blackr:/home/imanu# gpg --keyserver pgp.mit.edu --recv-keys 07DC563D1F41B907
gpg: directory `/root/.gnupg' created
gpg: can't open `/gnupg/options.skel': No existe el fichero o el directorio
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key 1F41B907 from hkp server pgp.mit.edu
gpg: key 1F41B907: duplicated user ID detected - merged
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 1F41B907: public key "Christian Marillat <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:
imported: 1
El cuarto paso será exportar la clave pública a un fichero de texto.
blackr:/home/imanu# gpg --armor --export 1F41B907 > key.asc
El quinto y último paso será añadir dicha clave a APT y actualizar de nuevo el índice de paquetes
para comprobar que el error ya no aparece. Para ello ejecutamos lo siguiente:
blackr:/home/imanu# apt-key add key.asc
OK
blackr:/home/imanu# apt-get update
Des:1 http://ftp.cica.es etch Release.gpg [378B]
Des:2 http://www.debian-multimedia.org stable Release.gpg [189B]
Obj http://ftp.cica.es etch Release
Des:3 http://security.debian.org etch/updates Release.gpg [189B]
Ign http://ftp.cica.es etch/main Packages/DiffIndex
Des:4 http://www.debian-multimedia.org stable Release [5535B]
Obj http://security.debian.org etch/updates Release
Ign http://ftp.cica.es etch/contrib Packages/DiffIndex
Ign http://ftp.cica.es etch/non-free Packages/DiffIndex
Ign http://ftp.cica.es etch/main Sources/DiffIndex
Ign http://ftp.cica.es etch/contrib Sources/DiffIndex
Ign http://ftp.cica.es etch/non-free Sources/DiffIndex
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Obj http://ftp.cica.es etch/main Packages
Obj http://ftp.cica.es etch/contrib Packages
Obj http://ftp.cica.es etch/non-free Packages
Ign http://www.debian-multimedia.org stable/main Packages/DiffIndex
Ign http://security.debian.org etch/updates/contrib Packages/DiffIndex
Ign http://security.debian.org etch/updates/main Sources/DiffIndex
Obj http://ftp.cica.es etch/main Sources
Obj http://ftp.cica.es etch/contrib Sources
Obj http://www.debian-multimedia.org stable/main Packages
Ign http://security.debian.org etch/updates/contrib Sources/DiffIndex
Obj http://security.debian.org etch/updates/main Packages
Obj http://ftp.cica.es etch/non-free Sources
Obj http://security.debian.org etch/updates/contrib Packages
Obj http://security.debian.org etch/updates/main Sources
Obj http://security.debian.org etch/updates/contrib Sources
Descargados 5726B en 10s (538B/s)
Leyendo lista de paquetes... Hecho
Como podemos ver el error ha desaparecido, ya que al acceder al repositorio APT tiene almacenada la llave
o clave pública de este.
4 Front-ends de APT
Un front-end nos es más que una aplicación que interactúa con el usuario y que facilita el uso de otra
aplicación. APT tiene varios front-ends como aptitude, synaptic o dselect. Profundizaremos en uno de ellos,
porque es en modo texto y hay que usarlo en la terminal ;-)
4.1
aptitude
aptitude es una aplicación que intenta abstraer al usuario del uso de APT, es decir, facilitar el uso de
APT al usuario. Esta aplicación digamos que tiene 2 partes: una parte en modo texto y otra parte en modo
interactivo.
Al modo interactivo podemos acceder ejecutando 'aptitude' en la terminal. Veamos cómo invocar el
modo interactivo de aptitude.
blackr:/home/imanu# aptitude
Nos aparecerá una pantalla como la siguiente:
Mediante esta pantalla podremos instalar/desinstalar paquetes moviéndonos por el menú con las teclas de
dirección.
El modo texto de aptitude es similar al de APT, solo que aptitude muestra más información al usuario
para así facilitarle su uso. Con aptitude podemos hacer lo mismo que con APT: actualizar los índices de
paquetes, buscar, instalar, desinstalar.
2.1.1
update
update actualiza los índices de paquetes de nuestra máquina con respecto a los repositorios. Su
sintaxis es la siguiente:
#aptitude update
Veamos un ejemplo práctico:
blackr:/home/imanu# aptitude update
Des:1 http://ftp.cica.es etch Release.gpg [378B]
Obj http://ftp.cica.es etch Release
Des:2 http://security.debian.org etch/updates Release.gpg [189B]
Ign http://ftp.cica.es etch/main Packages/DiffIndex
Des:3 http://security.debian.org etch/updates Release [22,5kB]
Ign http://ftp.cica.es etch/contrib Packages/DiffIndex
Ign http://ftp.cica.es etch/non-free Packages/DiffIndex
Ign http://ftp.cica.es etch/main Sources/DiffIndex
Ign http://ftp.cica.es etch/contrib Sources/DiffIndex
Ign http://ftp.cica.es etch/non-free Sources/DiffIndex
Obj http://ftp.cica.es etch/main Packages
Obj http://ftp.cica.es etch/contrib Packages
Obj http://ftp.cica.es etch/non-free Packages
Obj http://ftp.cica.es etch/main Sources
Obj http://ftp.cica.es etch/contrib Sources
Obj http://ftp.cica.es etch/non-free Sources
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Ign http://security.debian.org etch/updates/contrib Packages/DiffIndex
Ign http://security.debian.org etch/updates/main Sources/DiffIndex
Ign http://security.debian.org etch/updates/contrib Sources/DiffIndex
Obj http://security.debian.org etch/updates/main Packages
Obj http://security.debian.org etch/updates/contrib Packages
Obj http://security.debian.org etch/updates/main Sources
Obj http://security.debian.org etch/updates/contrib Sources
Descargados 22,6kB en 27s (835B/s).
Leyendo lista de paquetes... Hecho
Como podemos observar es el mismo resultado que obtuvimos con apt.
Nota: aptitude update es una alternativa a ejecutar apt-get update
2.1.2
search
search nos permite buscar paquetes a partir de uno o más patrones especificados. Su sintaxis de uso
es la siguiente:
#aptitude search patron1 patron2 patronN
Veamos una búsqueda con el patrón 'xfce4':
blackr:/home/imanu# aptitude search xfce4
i A libxfce4mcs-client3
- Client library for Xfce4 configure interfa
p
libxfce4mcs-dev
- Development files for libxfce4mcs-client a
i A libxfce4mcs-manager3
- Manager library for Xfce4 configure interf
p
libxfce4util-dev
- Development files for libxfce4util4
i A libxfce4util4
- Utility functions library for Xfce4
i
xfce4
- Meta-package for the Xfce Lightweight Desk
p
xfce4-appfinder
- Application finder for the Xfce4 Desktop E
i A xfce4-artwork
- additional artwork for the Xfce4 Desktop E
i A xfce4-battery-plugin
- battery monitor plugin for the Xfce4 panel
i A xfce4-clipman-plugin
- clipboard history plugin for the Xfce4 pan
i A xfce4-cpufreq-plugin
- cpufreq information plugin for the Xfce4 p
i A xfce4-cpugraph-plugin
- CPU load graph plugin for the Xfce4 panel
p
xfce4-dev-tools
- Script to help building Xfce from svn
i A xfce4-diskperf-plugin
- disk performance display plugin for the Xf
i A xfce4-fsguard-plugin
- filesystem monitor plugin for the Xfce4 pa
i A xfce4-genmon-plugin
- Generic Monitor for the Xfce4 panel
i
xfce4-goodies
- enhancements for the Xfce4 Desktop Environ
i A xfce4-icon-theme
- Xfce Standard icon theme
...
aptitude en este caso muestra más información que apt-cache search puesto que muestra el estado de cada
paquete en nuestro sistema.
i : indica que el paquete se encuentra instalado.
p : indica que el paquete no está instalado en el sistema.
i A : indica que el paquete se encuentra instalado (i) pero como dependencia de otro paquete (A).
2.1.3
install
install nos permite instalar uno o más paquetes en nuestro sistema. Funciona de forma similar a aptget install y su sintaxis es la siguiente:
#aptitude install paquete1 paquete2 paqueteN
Veamos un ejemplo de instalación:
blackr:/home/imanu# aptitude install vim-full
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se instalarán automáticamente los siguientes paquetes NUEVOS:
tcl8.4 vim-gui-common vim-runtime
Se instalarán los siguiente paquetes NUEVOS:
tcl8.4 vim-full vim-gui-common vim-runtime
0 paquetes actualizados, 4 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 8596kB de ficheros. Después de desempaquetar se usarán 27,6MB.
¿Quiere continuar? [Y/n/?] Y
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.cica.es etch/main tcl8.4 8.4.12-1.1 [1144kB]
Des:2 http://security.debian.org etch/updates/main vim-gui-common 1:7.0-122+1etch3 [143kB]
Des:3 http://security.debian.org etch/updates/main vim-runtime 1:7.0-122+1etch3 [6362kB]
Des:4 http://security.debian.org etch/updates/main vim-full 1:7.0-122+1etch3 [947kB]
Descargados 8596kB en 20m58s (6831B/s).
Seleccionando el paquete tcl8.4 previamente no seleccionado.
(Leyendo la base de datos ...
78344 ficheros y directorios instalados actualmente.)
Desempaquetando tcl8.4 (de .../tcl8.4_8.4.12-1.1_i386.deb) ...
Seleccionando el paquete vim-gui-common previamente no seleccionado.
Desempaquetando vim-gui-common (de .../vim-gui-common_1%3a7.0-122+1etch3_all.deb) ...
Seleccionando el paquete vim-runtime previamente no seleccionado.
Desempaquetando vim-runtime (de .../vim-runtime_1%3a7.0-122+1etch3_all.deb) ...
Seleccionando el paquete vim-full previamente no seleccionado.
Desempaquetando vim-full (de .../vim-full_1%3a7.0-122+1etch3_i386.deb) ...
Configurando tcl8.4 (8.4.12-1.1) ...
Configurando vim-gui-common (7.0-122+1etch3) ...
Configurando vim-runtime (7.0-122+1etch3) ...
Processing /usr/share/vim/addons/doc
Configurando vim-full (7.0-122+1etch3) ...
El proceso de instalación es: aptitude usa apt para descargar los paquetes y apt usa dpkg para instalarlos.
2.1.4
remove
remove nos permite desinstalar paquetes del sistema. Su sintaxis de uso es:
#aptitude remove paquete1 paquete2 paqueteN
Vamos a desinstalar el paquete que instalamos anteriormente:
blackr:/home/imanu# aptitude remove vim-full
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Los siguientes paquetes no se usan y se ELIMINARÁN:
tcl8.4 vim-gui-common vim-runtime
Se ELIMINARÁN los siguientes paquetes:
vim-full
0 paquetes actualizados, 0 nuevos instalados, 4 para eliminar y 0 sin actualizar.
Necesito descargar 0B de ficheros. Después de desempaquetar se liberarán 27,6MB.¿Quiere continuar?
[Y/n/?] y
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ...
79907 ficheros y directorios instalados actualmente.)
Desinstalando vim-full ...
Desinstalando tcl8.4 ...
Desinstalando vim-gui-common ...
Desinstalando vim-runtime ...
La única diferencia que tiene aptitude y apt-get a la hora de desinstalar es que aptitude trata mejor los
paquetes huérfanos, es decir, los paquetes instalados que no usa ningún programa.
2.1.5
show
show permite mostrar información acerca de un paquete. Su sintaxis es la siguiente:
$aptitude show nombre_paquete
Veamos un ejemplo:
imanu@blackr:~$ aptitude show mencal
Paquete: mencal
Estado: sin instalar
Versión: 2.3-7
Prioridad: opcional
Sección: utils
Desarrollador: Amaya Rodrigo Sastre <[email protected]>
Tamaño sin comprimir: 98,3k
Depende de: perl
Descripción: A menstruation calendar
Mencal is a menstruation calendar written in Perl.
It is a simple variation of the well-known Unix command cal. The main difference is that you can have
some periodically repeating days highlighted in color. This can be used to track menstruation (or other)
cycles conveniently.
Author: C. McCohy <[email protected]> Homepage: http://mencal.kyberdigi.cz/english.html
Marcas: implemented-in::perl, interface::commandline, role::program, use::timekeeping, works-with::pim
Nota: al igual que con apt-cache, con aptitude search no hace falta ser superusuario (root)
2.1.6
upgrade
Al igual que apt-get upgrade, permite actualizar todos los paquetes del sistema. La sintaxis de uso es
la siguiente:
#aptitude upgrade
2.2
Synaptic
Synaptic es un gestor de paquetes gráfico. Su función, como la de cualquier front-end, es la de
facilitar el uso o gestión de paquetes al usuario.
Desde esta interfaz gráfica podemos, por ejemplo, actualizar los índices de paquetes pulsando “Reload”
(recargar), instalar y desinstalar paquetes haciendo una búsqueda por un patrón pulsando en “Search” y
marcando para instalar y desinstalar haciendo doble clic en el paquete deseado.

Documentos relacionados