
Ejercicios de Gestión de Paqueteria:
1. ¿Qué acciones consigo al realizar apt update y apt upgrade?. Explica detalladamente.
Al hacer un apt update se conecta con el servidor comprobando los archivos packages.gz, release y release.gpg, verifica las firmas y la integridad y se descarga la lista de paquetes que pueden ser actualizados (con información como versiones, dependencias, etc), pero no los descarga los propios paquetes.
En cambio, con apt upgrade, se procede a verificar y descargar todos los paquetes que están pendientes de ser actualizados mediante apt update.
2. Lista la relación de paquetes que pueden ser actualizados. ¿Qué información puedes sacar a tenor de lo mostrado en el listado?.
Una forma de hacerlo es con:
apt list --upgradable.
Por ejemplo en mi equipo devuelve:
bind9-dnsutils/oldstable-security 1:9.16.44-1~deb11u1 amd64 [actualizable desde: 1:9.16.42-1~deb11u1]
Al hacerlo devuelve por pantalla por ejemplo la versión actual instalada, la versión disponible para actualizar, etc. (Aparece oldstable porque esta máquina es un Debian 11.)
3. Indica la versión instalada, candidata así como la prioridad del paquete openssh- client.
Se puede hacer de varias formas, por ejemplo con:
apt policy openssh-client
apt show openssh-client.
Es curioso porque al hacerlo desde debian bullseye, la versión más moderna es la 1:8.4p1-5deb11u1, mientras que desde debian bookworm es 1:9.2p1-2.
Más abajo dejaré una imagen hecha en bullseye. La prioridad es 500 (o estandard con apt show) y la versión candidata en bullseye es 1:8.4p1-5deb11u1 y en bookworm 1:9.2p1-2.
Dejaré tambien más abajo un copy/paste del equipo con bookworm.

andres@debian:~$ apt policy openssh-client openssh-client: Instalados: 1:9.2p1-2 Candidato: 1:9.2p1-2 Tabla de versión: \*\*\* 1:9.2p1-2 500 500 http://deb.debian.org/debian bookworm/main amd64 Packages 100 /var/lib/dpkg/status
4. ¿Cómo puedes sacar información de un paquete oficial instalado o que no este instalado?
Una de las formas es con:
dpkg -l paquete
Al hacerlo con el paquete tree devuelve datos como su nombre, versión, arquitectura, y descripción.

Pero también si es un paquete no instalado, puede hacerse con:
apt show paquete
La misma forma que el ejemplo anterior.
5. Saca toda la información que puedas del paquete openssh-client que tienes actualmente instalado en tu máquina.
Con dpkg -s me devuelve datos similar a un apt show. Por ejemplo:
dpkg -s de openssh-client
Devuelve el estado del paquete, la prioridad, el tamaño, arquitectura, la versión, e incluso las dependencias y los conflictos. Aunque también podria usar dpkg -l o apt show.

6. Saca toda la información que puedas del paquete openssh-client candidato a actualizar en tu máquina.
Puedo usar tanto apt show como apt-cache show openssh-client. Otro ejemplo seria:
aptitude show openssh-client.
Otra forma de obtener información es haciendo una simulación de la instalación del paquete, que en este caso seria con:
apt -s install openssh-client
- (-s de simulate), que de paso se ve si puede producir algún error en la instalación o conflicto.

7. Lista todo el contenido referente al paquete openssh-client actual de tu máquina. Utiliza para ello tanto dpkg como apt.
Para listar el contenido del paquete usando dpkg, es:
dpkg -L openssh-client
- Muestra el contenido del paquete, ubicaciones, entre otros datos.

Con apt se puede hacer:
apt-file list openssh-client

Para usar apt-file primero hay que descargarlo y luego actualizar sus datos:
apt install apt-file
apt-file update
8. Listar el contenido de un paquete sin la necesidad de instalarlo o descargarlo.
Para hacerlo con apt puedo usar apt-file igual que el ejercicio anterior o también simular la instalación con apt install -s.
Si lo tuviera descargado, seria usando el paquete binutils, el binario ar, para ver el contenido del paquete es con:
ar -t paquete.deb
9. Simula la instalación del paquete openssh-client.
Para simular la instalación es con el comando:
apt install -s openssh-client
10. ¿Qué comando te informa de los posible bugs que presente un determinado paquete?
Por ejemplo el comando apt-listbugs (hay que instalarlo), más en concreto:
apt-listbugs -S all list paquete
- Devuelve información sobre los informes de fallos y si están corregido.

11. Después de realizar un apt update && apt upgrade. Si quisieras actualizar únicamente los paquetes que tienen de cadena openssh. ¿Qué procedimiento seguirías?. Realiza esta acción, con las estructuras repetitivas que te ofrece bash, así como con el comando xargs.
Para hacer esto he encontrado varias formas de hacerlo, por ejemplo con aptitude ya que es una mejor herramienta y más avanzada. Mirando por internet una de las mejores soluciones es con:
aptitude safe-upgrade ‘?and(?name(^openssh), ?installed)’
-
(?and es para multiples condiciones como el nombre y que este instalado.
-
?name para especificar el nombre.

Otra opción es usando un bucle for, al que le inyectamos un archivo donde contenga todos los paquetes a actualizar. Por ejemplo:
dpkg -l | awk ‘/openssh/ {print $2}’ > archivo.txt
E intentarlo con apt, aunque haciendo un –only-upgrade, no instala únicamente los paquetes que se piden.
12. ¿Cómo encontrarías qué paquetes dependen de un paquete específico?.
Usando el comando apt depends y apt-rdepends, para poder ver las dependencias y las dependencias recursivas. Por ejemplo para el paquete tree:
apt-rdepends tree

13. ¿Cómo procederías para encontrar el paquete al que pertenece un determinado fichero?
Para encontrar el paquete al que pertenece un determiniado binario yo uso:
apt-file search ejemplo | egrep bin/ejemplo$
- Lo que me permite saber a que paquete pertenece un determinado binario.
14. ¿Que procedimientos emplearías para liberar la caché en cuanto a descargas de paquetería?
Se descargan en /var/cache/apt/archives y para limpiarlo es con:
apt clean
apt autoclean
15. Realiza la instalación del paquete keyboard-configuration pasando previamente los valores de los parámetros de configuración como variables de entorno.
Esto lo hecho exportando primero las variables y configuraciones a un archivo de texto, modificando lo que necesito y volviendo a importarlas con:
debconf-get-selections | grep keyboard-configuration > keyboard.conf
debconf-set-selections < keyboard.conf
- Necesita instalarse paquete debconf-utils .
16. Interrumpe la configuración de un paquete y explica los pasos a dar para continuar la instalación.
Para interrumpir la instalación de un paquete se puede usar control c, y configurar el paquete con:
dpkg-reconfigure paquete
Por último:
dpkg --configure -a
- Para ver otros posibles paquetes pendientes. Y para continuar:
sudo apt install -f
- f de fix broken para que corrija problemas.
17. Explica la instrucción que utilizarías para hacer una actualización completa de todos los paquetes de tu sistema de manera completamente no interactiva.
Para que no pregunte ni detenga la instalación es con -y. La instrucción es:
sudo apt update && sudo apt upgrade -y
18. Bloquea la actualización de determinados paquetes.
Lo primero es crear el archivo preferences con sudo nano /etc/apt/preferences donde tengo que indicar que paquete quiero mantener sin actualizar (la versión de la imagen es ficticia):

Luego hay que hacer un apt update para actualizar la lista de paquetes y ya apache2 (en este ejemplo) se mantendrá sin actualizar. Esto es por la prioridad de 1001 ya que al intentar actualizar, al tener una prioridad mayor, ignorará las demás actualizaciones.
Trabajo con ficheros .deb:
1. Descarga un paquete sin instalarlo, es decir, descarga el fichero .deb correspondiente.
Usando el comando:
apt -d install paquete
- Acaba descargado en /var/cache/apt/archives.
2. ¿Cómo puedes ver el contenido, que no extraerlo, de lo que se instalará en el sistema de un paquete deb?
Usando el binario ar del paquete binutils, por ejemplo para ver el contenido sin extraerlo:
ar -t paquete.deb

3. Sobre el fichero .deb descargado, utiliza el comando ar. ar permite extraer el contenido de una paquete deb. Indica el procedimiento para visualizar con ar el contenido del paquete deb. Con el paquete que has descargado y utilizando el comando ar, descomprime el paquete. ¿Qué información dispones después de la extracción?. Indica la finalidad de lo extraído.
Como en el ejercicio anterior, usando ar, con ar -t paquete.deb puedo ver el contenido, y para extraer el contenido del paquete:
ar -xv paquete.deb
Al hacerlo obtengo unos archivos como debian-binary (versiones en texto), control.tar.xz (archivos de control comprimido) y data.tar.xz (archivos que se instalarán, binarios, dependencias).
4. Indica el procedimiento para descomprimir lo extraído por ar del punto anterior. ¿Qué información contiene?
Por ejemplo para el archivo control, es con:
tar -xvf control.tar.xz
Lo que devuelve el archivo control que contiene datos del paquete como el nombre, versión, arquitectura, mantenedor, tamaño de instalación, dependencias, etc.
También se obtiene otro archivo llamado md5sums donde se encuentran las sumas de comprobacion MD5 para comprobar que el archivo no ha sido manipulado (hash).

Trabajo con repositorios:
1. Añade a tu fichero sources.list los repositorios de bullseye-backports y sid.
Para hacer esto hay que añadir al archivo /etc/apt/sources.list el siguiente contenido:
deb http://deb.debian.org/debian bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free deb https://deb.debian.org/debian unstable main deb http://deb.debian.org/debian/ sid main deb-src http://deb.debian.org/debian/ sid main
Y actualizar la lista de paquetes con los nuevos repositorios con:
sudo apt update
2. Configura el sistema APT para que los paquetes de debian bullseye tengan mayor prioridad y por tanto sean los que se instalen por defecto.
Para hacerlo tengo que modificar el archivo /etc/apt/preferences y añadir:
Package: \* Pin: release n=bullseye Pin-Priority: 1001
Y para acabar hacer un apt update para refrescar la lista de paquetes.
3. Configura el sistema APT para que los paquetes de bullseye-backports tengan mayor prioridad que los de unstable.
Package: \* Pin: release a=bullseye-backports Pin-Priority: 1002 Package: \* Pin: release n=unstable Pin-Priority: 1001
4. ¿Cómo añades la posibilidad de descargar paquetería de la arquitectura i386 en tu sistema. ¿Que comando has empleado?. Lista arquitecturas no nativas. ¿Cómo procederías para desechar la posibilidad de descargar paquetería de la arquitectura i386?
Para añadir la arquitectura i386 es con:
dpkg --add-architecture i386
Para instalar un paquete con esa arquitectura, es con:
apt install paquete:i386
Luego para ver la arquitectura es con:
dpkg --print-architecture
Para las no nativas:
dpkg --print-foreign-architectures
Y para desechar la arquitectura i386 es:
dpkg --remove-architecture i386
5. Si quisieras descargar un paquete, ¿cómo puedes saber todas las versiones disponible de dicho paquete?
Usando el comando:
apt-show-versions -a paquete
- Hay que instalarlo, y -a para incluir las del sistema.
6. Indica el procedimiento para descargar un paquete del repositorio stable.
Como es la rama stable, no hace falta ninguna modificación del sources.list pero se puede hacer también desde la web http://ftp.debian.org/debian/dists/stable/ y con wget.
7. Indica el procedimiento para descargar un paquete del repositorio de buster-backports.
Lo mismo que el ejercicio anterior, puedo hacer un wget del paquete que necesite de http://ftp.debian.org/debian/dists/buster-backports/ aunque mirando por internet esta también la opción:
apt -t buster-backports download paquete
- -t indica el repositorio buster.
8. Indica el procedimiento para descargar un paquete del repositorio de sid.
Con apt -t sid download paquete o http://ftp.debian.org/debian/dists/sid/ .
9. Indica el procedimiento para descargar un paquete de arquitectura i386.
Después de haber especificado en el ejercicio 4 la arquitectura, para descargar un paquete con arquitectura i386 es con apt install paquete:i386 (por ejemplo beep:i386)
Trabajo con directorios:
1. Que cometidos tienen:
/var/lib/apt/lists/:
Aquí se guardan listas de los paquetes que puedo instalar. Contiene información sobre los paquetes disponibles, como sus nombres, versiones y de donde descargarlos.
/var/lib/dpkg/available:
Almacena información sobre los paquetes que puedo instalar. Tambien contiene detalles sobre todos los programas disponibles, como sus nombres, versiones, descripciones etc.
/var/lib/dpkg/status:
Guarda información sobre todos los paquetes que ya tengo. Tambien contiene detalles sobre los paquetes instalados, como si están o no instalados, versiones, y datos varios.
/var/cache/apt/archives/:
Almacena los paquetes que he descargado manualmente que no he instalado automaticamente.