Instalación de Linux y gestión de paquetes
LPI 102.1 Diseño de discoLPI 102.2 Gestor de arranqueLPI 102.3 Librerías compartidasLPI 102.4 Paquetes DebianLPI 102.5 Paquetes RPM/YUM/DNFLPI 102.6 Invitado de virtualización
Este módulo es el más largo del Bloque 1 porque junta dos mundos distintos: las decisiones que tomas una vez, al instalar el sistema (particionado, gestor de arranque), y el trabajo del día a día que vas a repetir miles de veces en tu carrera: instalar, actualizar y quitar paquetes. El examen pregunta por los dos gestores de paquetes principales del ecosistema Linux — Debian/APT y RPM/DNF — aunque tu distro use solo uno de ellos.
- Diseñar un esquema de particionado razonado, no solo "todo en una partición".
- Entender qué hace un gestor de arranque al instalarse y qué alternativas existen.
- Gestionar librerías compartidas:
ldd,ldconfigy las rutas de búsqueda del enlazador dinámico. - Dominar
dpkgy APT (apt/apt-get/apt-cache) de memoria. - Dominar
rpmyyum/dnfde memoria, aunque no los practiques en tu VM Debian/Ubuntu. - Reconocer cuándo tu sistema es un invitado de virtualización y qué paquetes necesita por ello.
1. LPI 102.1 — Diseñar el particionado del disco
En el módulo 00 usaste el particionado guiado con LVM sin preguntarte por qué. Toca entender el razonamiento: ¿qué ganas separando /home de /, o /var de todo lo demás?
| Partición/punto de montaje | Por qué se separa |
|---|---|
/boot | El gestor de arranque necesita leerla antes de que existan drivers de LVM/RAID/cifrado — por eso vive fuera del volumen LVM, como viste en el módulo 00 |
/home | Si reinstalas el sistema, conservas los datos de los usuarios formateando solo / |
/var | Contiene logs, colas de correo y cachés de paquetes — crece de forma impredecible; separarla evita que un log descontrolado deje sin espacio a / y tumbe el sistema |
/tmp | Se puede montar con noexec,nosuid (nadie ejecuta binarios ni escala privilegios desde ahí) y limitar su tamaño sin arriesgar el resto del disco |
swap | Memoria de intercambio — ver reglas de tamaño más abajo |
/ (raíz) | El resto: binarios del sistema, /etc, /usr... en un portátil o VM de laboratorio sencilla, puede ser la única partición de datos aparte de /boot y swap |
Separar particiones tiene un coste: espacio "atrapado" en una partición que no puedes usar en otra sin redimensionar. Por eso el esquema guiado del módulo 00 usaba LVM — los volúmenes lógicos se pueden agrandar (y con ciertos sistemas de ficheros, encoger) sin mover datos a mano, algo que una tabla de particiones clásica no permite sin herramientas externas.
Las herramientas concretas para crear particiones (fdisk, parted, gdisk) y sistemas de ficheros (mkfs) se detallan en el módulo 104 — aquí lo importante es el criterio de diseño, que es justo lo que pregunta 102.1.
Practica más — labs ya publicados en Ghost Academy sobre este tema: 💾 GParted (lab) · 🔄 TestDisk: recuperación de particiones (lab) · 💿 Montaje de sistemas de archivos (lab)
2. LPI 102.2 — Instalar un gestor de arranque
El proceso de arranque con GRUB2 ya se vio a fondo en el módulo 101. El objetivo 102.2 mira ese mismo tema desde el momento de la instalación: ¿qué gestor eliges, y qué pasa si en el disco ya hay otro sistema operativo?
| Gestor de arranque | Estado |
|---|---|
| GRUB2 | Estándar actual en Debian, Ubuntu y la inmensa mayoría de distros |
| GRUB legacy (0.9x) | Predecesor de GRUB2, en desuso — el examen solo espera que sepas que existió |
| LILO | Mucho más antiguo que GRUB, sin menú interactivo real, prácticamente abandonado — conocimiento histórico |
| systemd-boot | Gestor minimalista solo-UEFI, alternativa moderna a GRUB en algunas distros (no es el caso de Debian/Ubuntu por defecto) |
| syslinux/isolinux | Pensado para medios extraíbles y arranque en red (PXE), no para el disco principal |
Si instalas Linux en un equipo que ya tiene Windows, el instalador (a través de os-prober) detecta el otro sistema y añade una entrada de chainload en el menú de GRUB:
$ os-prober
/dev/sda1:Windows Boot Manager:Windows:efi$ update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-18-amd64
Found initrd image: /boot/initrd.img-6.1.0-18-amd64
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
done3. LPI 102.3 — Gestionar librerías compartidas
La mayoría de binarios en Linux no llevan todo su código dentro: dependen de librerías compartidas (ficheros .so, "shared object") que varios programas reutilizan en memoria. Gestionar esas dependencias es justo lo que pregunta 102.3.
3.1 Ver de qué librerías depende un binario: ldd
$ ldd /bin/ls
linux-vdso.so.1 (0x00007ffc8b5fe000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f2e1a1b0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e19fc5000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f2e19f30000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2e1a1f0000)Si alguna línea muestra not found, el binario no va a ejecutarse — es el síntoma clásico de una librería que falta tras una actualización o una instalación manual fuera del gestor de paquetes.
3.2 Dónde busca el sistema las librerías
| Ruta | Qué contiene |
|---|---|
/lib, /usr/lib | Librerías del sistema y de paquetes instalados |
/lib64, /usr/lib64 | Equivalente de 64 bits en sistemas que distinguen arquitecturas (más habitual en familia RPM) |
/etc/ld.so.conf | Lista rutas adicionales de búsqueda — normalmente solo incluye /etc/ld.so.conf.d/*.conf |
/etc/ld.so.conf.d/*.conf | Ficheros donde paquetes de terceros añaden sus propias rutas de librerías |
/etc/ld.so.cache | Caché binaria precalculada de todas las rutas anteriores — la que realmente consulta el enlazador dinámico en cada ejecución |
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf$ ldconfig -p | grep libpcre2
libpcre2-8.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libpcre2-8.so.0ldconfig, sin argumentos, regenera /etc/ld.so.cache leyendo de nuevo todas las rutas configuradas. Hay que ejecutarlo cada vez que instalas una librería a mano fuera del gestor de paquetes (los gestores de paquetes ya lo llaman automáticamente en sus scripts post-instalación). ldconfig -p en cambio no regenera nada: solo muestra el contenido actual de la caché.3.3 LD_LIBRARY_PATH: la ruta de emergencia
Puedes forzar que el enlazador busque primero en una ruta concreta con una variable de entorno, sin tocar ld.so.conf:
$ LD_LIBRARY_PATH=/opt/miapp/lib ./mi_programa4. LPI 102.4 — Gestión de paquetes Debian (dpkg + APT)
Debian y Ubuntu (y toda su familia: Linux Mint, Kali, Raspberry Pi OS...) usan el formato de paquete .deb. Hay dos capas de herramientas, y el examen distingue bien entre ellas:
| Capa | Herramienta | Qué resuelve |
|---|---|---|
| Baja — paquetes individuales | dpkg | Instala/consulta/elimina un fichero .deb concreto que ya tienes en disco. No resuelve dependencias de internet. |
| Alta — repositorios | apt / apt-get / apt-cache | Busca, descarga y resuelve dependencias automáticamente desde los repositorios configurados |
4.1 dpkg: el gestor de bajo nivel
| Comando | Qué hace |
|---|---|
dpkg -i paquete.deb | Instala un .deb local |
dpkg -r paquete | Elimina el paquete, conserva ficheros de configuración |
dpkg -P paquete | Elimina el paquete y purga su configuración (--purge) |
dpkg -l | Lista todos los paquetes instalados y su estado |
dpkg -l 'nombre*' | Lista solo los paquetes que coinciden con un patrón |
dpkg -L paquete | Lista qué ficheros instaló ese paquete en el sistema |
dpkg -S /ruta/fichero | La pregunta inversa: ¿qué paquete instaló este fichero? |
dpkg --configure paquete | Termina la configuración de un paquete que quedó a medias |
dpkg-reconfigure paquete | Vuelve a lanzar los diálogos de configuración interactiva de un paquete ya instalado |
$ dpkg -l | grep openssh
ii openssh-client 1:9.2p1-2+deb12u3 amd64 secure shell (SSH) client, for secure access$ dpkg -L openssh-client | grep bin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-keygen$ dpkg -S /usr/bin/ssh
openssh-client: /usr/bin/sshdpkg -l indica el estado deseado (i=instalar, r=eliminar) y la segunda el estado real (i=instalado, c=solo queda configuración, n=no instalado). ii es lo normal: instalado y correcto.4.2 APT: la capa que resuelve dependencias
| Comando | Qué hace |
|---|---|
apt update | Descarga la lista de paquetes disponibles de los repositorios — no instala nada, solo actualiza el índice |
apt upgrade | Actualiza los paquetes instalados a su última versión, sin instalar paquetes nuevos ni eliminar ninguno |
apt full-upgrade (antes dist-upgrade) | Igual, pero permite instalar/eliminar paquetes si hace falta para resolver cambios de dependencias entre versiones |
apt install paquete | Instala un paquete y sus dependencias desde los repositorios |
apt remove paquete | Desinstala el paquete, conserva ficheros de configuración |
apt purge paquete | Desinstala y borra también la configuración |
apt autoremove | Elimina dependencias que ya no necesita ningún paquete instalado |
apt search texto | Busca paquetes por nombre o descripción |
apt show paquete | Muestra la ficha completa de un paquete: versión, tamaño, dependencias, descripción |
apt-cache policy paquete | Muestra qué versión tienes instalada y qué versiones ofrece cada repositorio configurado |
apt list --installed | Lista los paquetes instalados (equivalente moderno y más legible que dpkg -l) |
$ apt update
Hit:1 http://deb.debian.org/debian bookworm InRelease
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [52.1 kB]
Get:3 http://security.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Fetched 100 kB in 1s (89.4 kB/s)
Reading package lists... Done$ apt install tree
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
tree
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 47.2 kB of archives.
After this operation, 116 kB of additional disk space will be used.
Setting up tree (2.1.1-2) ...$ apt-cache policy tree
tree:
Installed: 2.1.1-2
Candidate: 2.1.1-2
Version table:
*** 2.1.1-2 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status4.3 Repositorios: sources.list
$ cat /etc/apt/sources.list
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmwareCada línea define un repositorio: tipo (deb o deb-src para fuentes), URL, distribución (bookworm) y componentes (main, contrib, non-free-firmware). Los repositorios de terceros se añaden como ficheros independientes en /etc/apt/sources.list.d/*.list, cada uno firmado con una clave GPG propia referenciada con la opción moderna signed-by=/usr/share/keyrings/... — el antiguo apt-key está en desuso desde Debian 11/Ubuntu 22.04 precisamente por depositar todas las claves en un único llavero global, menos seguro.
dpkg, dpkg-reconfigure, apt, apt-get, apt-cache, aptitude (interfaz alternativa a APT, mencionada como awareness), /etc/apt/sources.list, /etc/apt/sources.list.d/.5. LPI 102.5 — Gestión de paquetes RPM y YUM/DNF
La familia RPM (Red Hat, Fedora, CentOS Stream, AlmaLinux, Rocky Linux, openSUSE) usa el mismo esquema de dos capas que Debian: una herramienta de bajo nivel para paquetes sueltos (rpm) y una de alto nivel que resuelve dependencias contra repositorios (yum, sustituido por dnf en las distros modernas).
5.1 rpm: el equivalente de dpkg
| Comando | Equivalente en Debian | Qué hace |
|---|---|---|
rpm -i paquete.rpm | dpkg -i | Instala un paquete local (sin resolver dependencias) |
rpm -U paquete.rpm | — | Instala o actualiza — es la forma que se usa casi siempre en vez de -i |
rpm -e paquete | dpkg -r | Desinstala un paquete |
rpm -q paquete | dpkg -l | grep | Consulta si un paquete está instalado y su versión |
rpm -qa | dpkg -l | Lista todos los paquetes instalados |
rpm -qf /ruta/fichero | dpkg -S | ¿Qué paquete instaló este fichero? |
rpm -ql paquete | dpkg -L | Lista los ficheros que instaló el paquete |
rpm -qi paquete | apt show | Ficha completa del paquete |
rpm -i --nodeps paquete.rpm | — | Fuerza la instalación ignorando dependencias no resueltas — último recurso |
rpm2cpio paquete.rpm | cpio -idv | — | Extrae el contenido de un .rpm sin instalarlo, como un .cpio normal |
$ rpm -qa | grep httpd
httpd-2.4.57-2.el9.x86_64$ rpm -qi httpd
Name : httpd
Version : 2.4.57
Release : 2.el9
Architecture: x86_64
Install Date: Mon 15 Sep 2026 10:02:11 AM UTC
Group : Unspecified
Size : 1345982
License : ASL 2.0
Summary : Apache HTTP Server5.2 YUM/DNF: el equivalente de APT
dnf es el sucesor directo de yum — mismo propósito, resolución de dependencias más moderna y rápida. En RHEL 8+, Fedora, AlmaLinux y Rocky, yum es literalmente un alias de dnf: los dos comandos funcionan y aceptan la misma sintaxis.
| Comando | Equivalente en APT | Qué hace |
|---|---|---|
dnf install paquete | apt install | Instala un paquete y sus dependencias desde los repositorios |
dnf remove paquete | apt remove | Desinstala un paquete |
dnf update / dnf upgrade | apt upgrade | Actualiza todos los paquetes instalados |
dnf search texto | apt search | Busca paquetes |
dnf info paquete | apt show | Ficha del paquete |
dnf list installed | apt list --installed | Lista paquetes instalados |
dnf repolist | apt-cache policy (parcial) | Lista los repositorios configurados y activos |
dnf history | — | Historial de transacciones — permite dnf history undo <id> para deshacer una instalación/actualización completa |
dnf clean all | apt clean | Limpia la caché local de paquetes descargados |
$ dnf install httpd
Last metadata expiration check: 0:12:34 ago.
Dependencies resolved.
================================================================
Package Arch Version Repository Size
================================================================
Installing:
httpd x86_64 2.4.57-2.el9 appstream 1.3 M
Installing dependencies:
httpd-filesystem noarch 2.4.57-2.el9 appstream 40 k
...
Complete!$ dnf history
ID | Command line | Date and time | Action(s) | Altered
3 | install httpd | 2026-09-30 11:02 | Install | 3
2 | update | 2026-09-28 09:14 | Update | 14
1 | install @core | 2026-09-15 10:02 | Install | 342Los repositorios se definen en ficheros .repo dentro de /etc/yum.repos.d/, uno por repositorio, con una sintaxis de tipo INI ([nombre], baseurl=, gpgcheck=1, gpgkey=) — el equivalente conceptual de sources.list.d en Debian.
rpm, rpm2cpio, yum, dnf, /etc/yum.repos.d/.6. LPI 102.6 — Linux como invitado de virtualización
Tu propia VM de laboratorio es justo el escenario de este objetivo: Linux ejecutándose como invitado dentro de un hipervisor (VirtualBox, VMware, KVM/QEMU, Hyper-V, o un proveedor cloud como AWS/Azure/GCP por debajo). El examen espera que sepas detectarlo y qué paquetes especiales suele necesitar.
$ systemd-detect-virt
oracle$ dmidecode -s system-product-name
VirtualBoxsystemd-detect-virt es la forma moderna y más fiable: devuelve none en hardware físico, o el nombre del hipervisor (kvm, oracle para VirtualBox, vmware, microsoft para Hyper-V...) cuando corre virtualizado. dmidecode consulta directamente la tabla DMI/SMBIOS que el hipervisor expone y llega a la misma conclusión por otro camino.
| Hipervisor | Paquete de integración típico |
|---|---|
| VirtualBox | Guest Additions (ya instaladas en el módulo 00) |
| VMware | open-vm-tools |
| KVM/QEMU | qemu-guest-agent |
| Proveedores cloud (AWS, Azure, GCP...) | cloud-init — configura automáticamente red, claves SSH y usuario inicial en el primer arranque a partir de metadatos que entrega la plataforma |
Estos paquetes no son opcionales de cara al examen ni de cara al trabajo real: sin el guest agent correcto, cosas como el redimensionado dinámico de la pantalla, las carpetas compartidas o los snapshots consistentes con la aplicación simplemente no funcionan — exactamente los mismos síntomas que ya viste si saltaste algún paso del manual de VirtualBox del módulo 00.
El rendimiento de E/S de un invitado depende además de qué controlador usa: los discos y tarjetas de red virtio (paravirtualizados, diseñados específicamente para entornos virtualizados) son notablemente más rápidos que emular hardware real como el e1000 que viste en el módulo 101 — el examen solo pide que sepas que esta distinción existe, no configurarla a mano.
Práctica guiada
- En tu VM:
ldd /bin/bashy localiza al menos dos librerías de las que depende. cat /etc/ld.so.confyls /etc/ld.so.conf.d/— compara con lo explicado en el punto 3.2.ldconfig -p | wc -lpara ver cuántas librerías conoce tu sistema ahora mismo.apt updatey despuésapt list --upgradablepara ver qué paquetes tienen una versión más reciente disponible.- Instala algo inofensivo con
apt install tree, confírmalo condpkg -l treey revisa qué ficheros trajo condpkg -L tree. apt-cache policy treepara ver la versión instalada frente a la disponible en el repositorio.- Desinstálalo del todo:
apt purge treeseguido deapt autoremove. cat /etc/apt/sources.listy localiza qué distribución y qué componentes tiene configurados tu sistema.systemd-detect-virtpara confirmar que tu VM se reconoce a sí misma como tal.
Resumen: APT frente a RPM/DNF, la tabla que hay que saber de memoria
| Tarea | Debian/APT | RPM/DNF |
|---|---|---|
| Instalar paquete local | dpkg -i paquete.deb | rpm -U paquete.rpm |
| Instalar desde repositorio | apt install paquete | dnf install paquete |
| Quitar paquete | apt remove / purge | dnf remove / rpm -e |
| Actualizar todo el sistema | apt upgrade / full-upgrade | dnf upgrade |
| Listar instalados | dpkg -l | rpm -qa |
| ¿Qué paquete trajo este fichero? | dpkg -S | rpm -qf |
| ¿Qué ficheros trajo este paquete? | dpkg -L | rpm -ql |
| Repositorios | /etc/apt/sources.list(.d) | /etc/yum.repos.d/*.repo |
Autoevaluación
- ¿Por qué conviene separar
/vardel resto del sistema en un servidor de producción? - ¿Cuánto swap necesitas como mínimo si quieres poder hibernar un portátil con 16 GB de RAM?
lddte muestra una librería comonot found. ¿Qué comando regenera la caché del enlazador dinámico después de instalarla?- ¿Cuál es la diferencia exacta entre
apt removeyapt purge? - ¿Qué comando usarías en una distro basada en RPM para averiguar qué paquete instaló un fichero concreto?
- ¿Qué comando te dice, sin ambigüedad, si tu sistema actual corre dentro de un hipervisor y cuál?