Post

INSTALACIÓN MANUAL DE DEBIAN CON SYSV

Cómo hacer una instalación manual de Debian usando SysVinit con BTRFS + LUKS2 + GRUB2.

INSTALACIÓN MANUAL DE DEBIAN CON SYSV

Pre-instalación

Descargar la ISO

Voy a utilizar el live de Debian para iniciar, pero también se puede usar cualquier otra distro con modo live. Puedes descargar la ISO desde el siguiente enlace:
Debian Live

Opcional: Instalar de forma remota
1
2
sudo passwd user # Asignamos una contraseña al usuario
sudo apt install ssh # Instalamos el servidor SSH
Instalación de paquetes

Nos hacemos root con sudo su:

1
apt install debootstrap cryptsetup arch-install-scripts dosfstools btrfs-progs gdisk

Particionado del disco

Particionamos el disco en dos particiones: una para el gestor de arranque y otra para el sistema.

1
2
3
4
5
6
7
8
9
10
11
# Disco a utilizar
export DISK=/dev/sda # Cambia esto al disco que corresponda, puedes verificar con lsblk

# Limpiar la tabla de particiones
sgdisk --zap-all $DISK

# Partición 1 - EFI
sgdisk -n 1:2048:+512M -t 1:EF00 $DISK

# Partición 2 - Linux LUKS
sgdisk -n 2:0:0 -t 2:8309 $DISK
Creación del sistema de archivos
1
2
3
4
5
6
7
8
9
10
11
# Formatear la partición EFI
mkfs.fat -F 32 -n EFI ${DISK}1

# Crear el contenedor LUKS para BTRFS
cryptsetup -v luksFormat --type luks2 --pbkdf pbkdf2 --hash sha512 ${DISK}2

# Abrir el contenedor LUKS, introduce la contraseña que diste en el paso anterior
cryptsetup open ${DISK}2 cryptroot

# Crear el sistema de archivos BTRFS
mkfs.btrfs /dev/mapper/cryptroot
Crear los subvolúmenes de BTRFS y montarlos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Montar el contenedor LUKS en /mnt
mount /dev/mapper/cryptroot /mnt

# Crear los subvolúmenes
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@swap 

# Desmontar el sistema de archivos BTRFS de /mnt
umount /mnt

# Montar el subvolumen de root
mount -o noatime,compress=zstd:1,subvol=@ /dev/mapper/cryptroot /mnt

# Creación de directorios para otros subvolúmenes
mkdir -p /mnt/{boot,home,.snapshots}

# Montar los otros subvolúmenes
mount -o noatime,compress=zstd:1,subvol=@home /dev/mapper/cryptroot /mnt/home
mount -o noatime,compress=zstd:1,subvol=@snapshots /dev/mapper/cryptroot /mnt/.snapshots

# Montar la partición EFI
mkdir /mnt/boot/efi
mount ${DISK}1 /mnt/boot/efi

## Opcional ##
# Creación y uso de swapfile
mkdir -p /mnt/swap
mount -o subvol=@swap /dev/mapper/cryptroot /mnt/swap
btrfs filesystem mkswapfile --size 16G /mnt/swap/swapfile # Puedes modificar la cantidad de GB que le asignas
swapon /mnt/swap/swapfile

Instalación con debootstrap

Creamos el árbol de directorios usando debootstrap. En este caso, usaré la última versión estable, Bookworm:

1
debootstrap --arch amd64 bookworm /mnt 
Configuración del sistema

Crearemos un subvolumen solo para los logs, de modo que podamos excluirlos de las snapshots de root.

1
2
3
4
mv /mnt/var/log /mnt/var/log-old
btrfs subvolume create /mnt/var/log
cp -a /mnt/var/log-old/* /mnt/var/log/
rm -rf /mnt/var/log-old

Montamos los sistemas de archivos virtuales:

1
2
3
4
5
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars

Generamos el archivo fstab con la utilidad genfstab del paquete arch-install-scripts:

1
genfstab -U /mnt >> /mnt/etc/fstab

Creamos el archivo crypttab:

1
2
3
4
5
# Con `blkid` vamos a obtener el UUID de la partición encriptada (por ejemplo: sda2), no del contenedor LUKS (cryptroot)
blkid

export CRYPTROOT_UUID=uuid-de-la-particion-encriptada
echo -e "cryptroot\tUUID=$CRYPTROOT_UUID\tnone\tluks" > /mnt/etc/crypttab

Entramos en un entorno chroot y hacemos una configuración básica:

1
2
3
4
5
6
7
8
9
10
11
12
# Entrar al `chroot` solo si se montaron de forma correcta los sistemas de archivos virtuales 
chroot /mnt /bin/bash

apt install locales console-setup vim

dpkg-reconfigure tzdata
dpkg-reconfigure locales
dpkg-reconfigure console-setup

export HOSTNAME=tunombredehost
echo $HOSTNAME > /etc/hostname
echo "127.0.1.1 $HOSTNAME.localdomain $HOSTNAME" >> /etc/hosts

Configuramos los mirrors para el gestor de paquetes apt. Puedes tomar como ejemplo la sources.list de Debian:
Debian SourcesList

1
2
3
4
5
6
7
8
9
10
vim /etc/apt/sources.list # Abre el archivo para ingresar los mirrors

deb http://deb.debian.org/debian bookworm main non-free-firmware
deb-src http://deb.debian.org/debian bookworm main non-free-firmware

deb http://deb.debian.org/debian-security/ bookworm-security main non-free-firmware
deb-src http://deb.debian.org/debian-security/ bookworm-security main non-free-firmware

deb http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main non-free-firmware

Actualizamos la lista de repositorios e instalamos el kernel junto a otras utilidades:

1
2
apt update
apt install linux-image-amd64 linux-headers-amd64 network-manager firmware-linux firmware-iwlwifi firmware-linux-nonfree bash-completion command-not-found btrfs-progs sudo neovim usbutils hwinfo connman wget curl htop

Asignamos una contraseña a root:

1
passwd

Añadimos un usuario normal y le asignamos sus grupos:

1
2
3
useradd -m -c "tu nombre" -s /bin/bash user
passwd user 
usermod -aG sudo,adm,dialout,cdrom,floppy,audio,dip,video,plugdev,users,netdev,bluetooth user

Instalacion de SysVinit

1
2
# Remplazamos a systemd con sysvinit
apt install -y sysvinit-core sysvinit-utils libpam-elogind
Añadir repositorios no-systemd
Loc-OS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Descargar 
wget -O /tmp/loc-os-23-archive-keyring_23.12.11_all.deb http://br.loc-os.com/pool/main/l/loc-os-23-archive-keyring/loc-os-23-archive-keyring_23.12.11_all.deb

# Instalacion
apt install -y /tmp/loc-os-23-archive-keyring_23*.deb 
rm /tmp/loc-os-23-archive-keyring*.deb 


# Editamos la mirrorlist `rim /etc/apt/sources.list.d/loc-os.list`
# Aqui podemos descomentar la que se encuentre mas cerca a nosotros o la que funcione mejor
# Ejemplo:

# BRAZIL
deb http://br.loc-os.com contutti main
# FRANCE
#deb http://fr.loc-os.com contutti main
# USA
#deb http://us.loc-os.com contutti main
Instalacion de paquetes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Actualizamos los repositorios
apt update  
apt install -y libeudev1 
apt-get purge --auto-remove *systemd*

# Bloqueamos a systemd 
echo -e "Package: *systemd*\nPin: origin \"*\"\nPin-Priority: -1" > /etc/apt/preferences.d/nosystemd

# De nuevo abrimos el archivo de las mirrorlist `vim /etc/apt/sources.list.d/loc-os.list`
# y comentamos todos las opciones, por el momento ya no son necesarias
# Ejemplo:

# BRAZIL
#deb http://br.loc-os.com contutti main
# FRANCE
#deb http://fr.loc-os.com contutti main
# USA
#deb http://us.loc-os.com contutti main 
Instalacion de microcodigo
1
2
apt install amd64-microcode # para procesadores de AMD
apt install intel-microcode # para procesadores de Intel

Instalacion del bootloader

Instalación y configuración de grub2
1
2
# Instalamos los paquetes necesarios
apt install -y efibootmgr grub-efi-amd64 cryptsetup-initramfs 
Configurar grub para UEFI:
Editamos el archivo /etc/default/grub
1
2
3
4
5
6
7
8
9
# Nos deberia de quedar como este ejemplo, el UUID es de la particion encriptada
# (example: sda2), puedes revisarlo con la herramienta `blkid`

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="cryptdevice=UUID=UUID-Particion-Encriptada:cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@ rw rootfstype=btrfs"
GRUB_ENABLE_CRYPTODISK=y
Instalamos el grub
1
2
grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot
update-grub

Instalación de un escritorio (opcional)

1
apt install xfce4 -y

Final

Ahora podemos reiniciar, solo es necesario desmontar los sistemas de archivos:

1
2
3
4
5
6
7
# Salimos del chroot
exit

# Desmontamos los sistemas de archivos
umount /mnt/boot/efi
umount /mnt/{dev/pts,dev,proc,sys}
umount /mnt

Reiniciamos el equipo:

1
reboot
This post is licensed under CC BY 4.0 by the author.