ITA - Un installazione manuale e moderna di debian
January 2025 (2172 Words, 13 Minutes)
Introduzione
Per la stesura di questo contenuto mi sono ispirato a questo articolo:
Ho deciso di aggiornare e rivedere gli appunti relativi a:
A differenza dell’articolo precedentemente userò una iso live di debian:
Preparazione all’ installazione
Preparazione della macchina virtuale
Come primo passo si scarica la iso:
$ wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.9.0-amd64-standard.iso /var/lib/libvirt/iso/debian-live-12.9.0-amd64-standard.iso
Creo il disco della nuova macchina:
$ sudo qemu-img create -f qcow2 -o preallocation=metadata /media/data/libvirt/images/modern-debian.qcow2 60G
Modalità testuale
Da un terminale creo la macchina virtuale:
$ sudo virt-install \
--os-type=Linux \
--os-variant=debiantesting \
--boot loader=/usr/share/qemu/OVMF.fd \
--name modern-debian \
--virt-type=kvm \
--boot cdrom,hd \
--network=default,model=virtio \
--disk path=/media/data/libvirt/images/modern-debian.qcow2,format=qcow2,device=disk,bus=virtio \
--memory=8196 \
--vcpu=4 \
--cdrom=/media/data/libvirt/iso/debian-live-12.9.0-amd64-standard.iso \
--graphics none \
--console pty,target_type=serial
Nello stesso terminale verrà aperta e collegata la console al sistema, e dopo qualche secondo apparirà GRUB:
GNU GRUB version 2.06-13+deb12u1
Ŀ
*Live system (amd64)
Live system (amd64 fail-safe mode)
Start installer
Start installer with speech synthesis
Advanced install options ...
Utilities...
Use the ^ and v keys to select which entry is highlighted.
Press enter to boot the selected OS, `e' to edit the commands
before booting or `c' for a command-line.
Ora è necessario forzare il sistema a effettuare l’avvio in modalità solo testuale.
Spostare il cursore sopra Live system (amd64)
e premere e
, questa combinazione porterà l’nterfaccia in modalità di modifica della consfigurazione:
GNU GRUB version 2.06-13+deb12u1
Ŀ
setparams 'Live system (amd64)'
linux /live/vmlinuz-6.1.0-29-amd64 boot=live components quie\
t splash findiso=${iso_path}
initrd /live/initrd.img-6.1.0-29-amd64
Minimum Emacs-like screen editing is supported. TAB lists
completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for a
command-line or ESC to discard edits and return to the GRUB menu.
Bisogna aggiungere console=tty0 console=ttyS0,115200n8
alla riga linux, ottenendo:
GNU GRUB version 2.06-13+deb12u1
Ŀ
setparams 'Live system (amd64)'
linux /live/vmlinuz-6.1.0-29-amd64 boot=live components quie\
t splash findiso=${iso_path} console=tty0 console=ttyS0,115200n8
initrd /live/initrd.img-6.1.0-29-amd64
Minimum Emacs-like screen editing is supported. TAB lists
completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for a
command-line or ESC to discard edits and return to the GRUB menu.
Premere CTRL-x
per avviare il sistema
Modalità grafica
Da un terminale creo la macchina virtuale:
$ sudo virt-install \\
--os-type=Linux \\
--os-variant=debiantesting \\
--boot loader=/usr/share/qemu/OVMF.fd \\
--name modern-debian \\
--virt-type=kvm \\
--boot cdrom,hd \\
--network=default,model=virtio \\
--disk path=/media/data/libvirt/images/modern-debian.qcow2,format=qcow2,device=disk,bus=virtio \\
--memory=8196 \\
--vcpu=4 \\
--cdrom=/media/data/libvirt/iso/debian-live-12.9.0-amd64-standard.iso \\
--console pty,target_type=serial \\
--graphics vnc,listen=localhost
--noautoconsole
Processo di installazione
Passo 1 - fase preliminare
Una volta che il sistema è avviato è possible accedere usando:
- utente: user
- passwd: live
Prima di iniziare a installare il sistema è importante eseguire alcune operazioni:
- configurare il layout della tastiera
user@debian:~$ loadkeys it
- controllare la modalià di boot, capire se si usa efi (e quale tipo) o se si usa BIOS:
user@debian:~$ cat /sys/firmware/efi/fw_platform_size
se il file manca, siamo in modalità bios - controllare la connettività
user@debian:~$ ping ping -c 5 debian.org
- controllare il tempo
user@debian:~$ timedatectl
se il tempo o la timezone è sbagliata, cercare nella lista delle proble timezones la propria:user@debian:~$ timedatectl list-timezones
e poi configurarla:user@debian:~$ sudo timedatectl set-timezone Europe/Rome
- installare i pacchetti necessari:
$ sudo apt install debootstrap cryptsetup dosfstools btrfs-progs zstd
Passo 2 - partizionamento dei dischi
Schema di partizionamento
Per abitudine i sistemi che installo sono criptati, seguendo questo schema di partizionamento:
| partizione | mount | fs | note |
|-----------------------|--------------------------|---------|---------------------|
| /dev/vda1 | | | bios boot |
| /dev/vda2 | /boot | ext4 | |
| /dev/vda3 | /boot/efi | fat32 | partizione efi |
| /dev/vda4 | | cryopt | partizione cryptata |
| /dev/mapper/syscrypt | | | volumi btrfs |
| | / | btrfs | volume di root |
| | /home | btrfs | volume home |
con una tabella delle partizioni gpt, questo schema permette di supportare sia sistemi di avvio BIOS che UEFI.
Procedura di partizionamento
Creazioni delle Partizioni
Lancio il tool di partizionamento:
user@debian:~# sudo cfdisk /dev/vda
Mi verrà proposto di selezionare lo schema di partizionamento:
┌ Select label type ───┐
│ gpt │
│ dos │
│ sgi │
│ sun │
└──────────────────────┘
Device does not contain a recognized partition table.
Select a type to create a new label, press 'L' to load script file, 'Q' quits.
Seleziono gpt
, e procedo con il partizionamento, fino ad ottenere:
Disk: /dev/vda
Size: 60 GiB, 64424509440 bytes, 125829120 sectors
Label: gpt, identifier: F4F4A67A-2BC5-A143-9805-804662A0A375
Device Start End Sectors Size Type
>> /dev/vda1 2048 411647 409600 200M BIOS boot
/dev/vda2 411648 1460223 1048576 512M EFI System
/dev/vda3 1460224 3557375 2097152 1G Linux filesystem
/dev/vda4 3557376 125827071 122269696 58.3G Linux filesystem
┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
│Partition UUID: A9B7E06F-43D0-D94A-AA95-92BB8571C465 │
│Partition type: BIOS boot (21686148-6449-6E6F-744E-656564454649) │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
[ Delete ] [ Resize ] [ Quit ] [ Type ] [ Help ] [ Write ] [ Dump ]
Controllo il risultato con il comando:
user@debian:~$ lsblk /dev/vda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 60G 0 disk
├─vda1 254:1 0 200M 0 part
├─vda2 254:2 0 512M 0 part
├─vda3 254:3 0 1G 0 part
└─vda4 254:4 0 58.3G 0 part
Partizione EFI
Se il sistema è stato avviato usando EFI, la partizione di efi deve essere formattata. Il mio consiglio è di crearla in ogni caso, per essere pronti a spostare il disco su una macchina nuova.
user@debian:~$ sudo mkfs.fat -F 32 /dev/vda2
mkfs.fat 4.2 (2021-01-31)
Partizione di boot
Formatto la partizione in ext4:
user@debian:~$ sudo mkfs.ext4 /dev/vda3
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 5a2ca0a0-984d-4a24-8075-9d875df6a31e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
user@debian:~$
Partizione di sistema
Inizializzo il filesystem criptato:
user@debian:~$ sudo cryptsetup luksFormat /dev/vda4
WARNING!
========
This will overwrite data on /dev/vda4 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/vda4:
Verify passphrase:
Dopo aver inserio passphrase di sblocco, procediamo a decifrare il disco:
user@debian:~$ sudo cryptsetup luksOpen /dev/vda4 syscrypt
Enter passphrase for /dev/vda3:
Controllo il risultato:
user@debian:~$ lsblk /dev/vda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 60G 0 disk
├─vda1 254:1 0 512M 0 part
├─vda2 254:2 0 1G 0 part
└─vda3 254:3 0 58.5G 0 part
└─vda3 254:3 0 58.5G 0 part
└─syscrypt 252:0 0 58.5G 0 crypt
NB: la chiave di cifratura può essere generata con il comando pwgen
Formatto il disco:
user@debian:~$ sudo mkfs.btrfs /dev/mapper/syscrypt
btrfs-progs v6.2
See http://btrfs.wiki.kernel.org for more information.
NOTE: several default settings have changed in version 5.15, please make sure
this does not affect your deployments:
- DUP for metadata (-m dup)
- enabled no-holes (-O no-holes)
- enabled free-space-tree (-R free-space-tree)
Label: (null)
UUID: b7706991-5f98-44e3-ae59-68900873b896
Node size: 16384
Sector size: 4096
Filesystem size: 58.48GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 1.00GiB
System: DUP 8.00MiB
SSD detected: no
Zoned device: no
Incompat features: extref, skinny-metadata, no-holes
Runtime features: free-space-tree
Checksum: crc32c
Number of devices: 1
Devices:
ID SIZE PATH
1 58.48GiB /dev/mapper/syscrypt
user@debian:~$
Monto la partizione temporaneamente:
user@debian:~$ sudo mount /dev/mapper/syscrypt /mnt/
Creo i volumi:
user@debian:~$ sudo btrfs subvolume create /mnt/@
Create subvolume '/mnt/@'
user@debian:~$ sudo btrfs subvolume create /mnt/@home
Create subvolume '/mnt/@home'
user@debian:~$ sudo btrfs subvolume create /mnt/@apt
Create subvolume '/mnt/@apt'
user@debian:~$ sudo btrfs subvolume create /mnt/@log
Create subvolume '/mnt/@log'
user@debian:~$ sudo btrfs subvolume create /mnt/@snapshot
Create subvolume '/mnt/@snapshot'
user@debian:~$
Ora posso smontare mnt
:
user@debian:~$ sudo umount /mnt
Montaggio delle partizioni
Procedo con il montare tutte le partizioni:
user@debian:~$ sudo mount -o compress=zstd,subvol=@ /dev/mapper/syscrypt /mnt
user@debian:~$ sudo mkdir /mnt/home
user@debian:~$ sudo mount -o compress=zstd,subvol=@home /dev/mapper/syscrypt /mnt/home/
user@debian:~$ sudo mkdir -p /mnt/var/cache/apt
user@debian:~$ sudo mount -o compress=zstd,subvol=@apt /dev/mapper/syscrypt /mnt/var/cache/apt
user@debian:~$ sudo mkdir -p /mnt/var/log
user@debian:~$ sudo mount -o compress=zstd,subvol=@log /dev/mapper/syscrypt /mnt/var/log
user@debian:~$ sudo mkdir /mnt/.snapshot
user@debian:~$ sudo mount -o compress=zstd,subvol=@snapshot /dev/mapper/syscrypt /mnt/.snapshot
user@debian:~$ sudo mkdir /mnt/boot/
user@debian:~$ sudo mount /dev/vda3 /mnt/boot/
user@debian:~$ sudo mkdir /mnt/boot/efi
user@debian:~$ sudo mount /dev/vda2 /mnt/boot/efi
Controllo il risultato:
user@debian:~$ lsblk /dev/vda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 254:0 0 60G 0 disk
├─vda1 254:1 0 512M 0 part /mnt/boot/efi
├─vda2 254:2 0 1G 0 part /mnt/boot
└─vda3 254:3 0 58.5G 0 part
└─syscrypt 252:0 0 58.5G 0 crypt /mnt/.snapshot
/mnt/var/cache/apt
/mnt/var/log
/mnt/home
/mnt
user@debian:~$
Passo 3 - Installazione del sistema base
Una volta partizionato e montato il disco, si può procedere all’installazione del sistema.
NB: i passi che seguono sono tratti da questa pagina della documentazione di debian e richiedono un po di tempo.
Bootstrap di debian
Eseguo il bootstrap del sistema base:
user@debian:~$ sudo debootstrap --arch amd64 --include=cryptsetup-initramfs,locales,zstd,btrfs-progs,cryptsetup,dosfstools,apt-transport-https,ca-certificates bookworm /mnt
Una volta che questo comando termina è necessario montare delle cartelle in bind:
user@debian:~$ sudo mount --bind /dev/ /mnt/dev/
user@debian:~$ sudo mount --type proc proc /mnt/proc
user@debian:~$ sudo mount --bind /sys/ /mnt/sys/
Ed entrare in chroot nel nuovo sistema:
user@debian:~$ sudo LANG=C.UTF-8 chroot /mnt/ /bin/bash
Da questo momento in avanti tutte le operazioni sono eseguite all’interno del chroot con i bind attivi
Generare il file fstab
Usando le informazioni del comando blkid
creo il file /etc/fstab
; il risultato dovrebbe essere:
root@debian:/# cat /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
UUID=6695-2BA4 /boot/efi vfat defaults,umask=0077 0 1
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e /boot ext4 defaults 0 0
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e / btrfs defaults,subvol=@,ssd,compress=zstd 0 0
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e /home btrfs defaults,subvol=@home,ssd,compress=zstd 0 0
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e /.snapshot btrfs defaults,subvol=@snapshot,ssd,compress=zstd 0 0
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e /var/cache/apt btrfs defaults,subvol=@apt,ssd,compress=zstd 0 0
UUID=5a2ca0a0-984d-4a24-8075-9d875df6a31e /var/log btrfs defaults,subvol=@log,ssd,compress=zstd 0 0
root@debian:/#
Per maggiori info su questo file vedere qui
Generare il file crypttab
Il secondo file importante da configurare è /etc/crypttab
, con il seguente contenuto :
syscrypt UUID=e3942b82-cbc4-46e9-9d27-0da8076a7d3d none luks,discard,tries=3
Dove l’UUID specificato è quello del device TYPE="crypto_LUKS"
che nel mio caso è /dev/vda3
.
Riconfigurare la timezone
Per configurare la timezone e l’ora, riconfiguro il pacchetto tzdata
:
root@debian:/# dpkg-reconfigure tzdata
Current default time zone: 'Europe/Rome'
Local time is now: Sun Jan 19 11:34:30 CET 2025.
Universal Time is now: Sun Jan 19 10:34:30 UTC 2025.
Configurazione di apt
Installo il supporto per https:
root@debian:/# apt install apt-transport-https ca-certificates
Nel file /etc/apt/sources.list
inserisco aggiorno i repository, come descritto qui, ottenendo:
deb https://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb-src https://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb https://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb-src https://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
Configurare locale e tastiera
Per configurare il pacchetto locales
:
root@debian:/# apt install locales
root@debian:/# dpkg-reconfigure locales
Per aggiornare la configurazione della tastiera:
root@debian:/# apt install console-setup
Installare il kernel
Prima di installare il kernel, mi assicuro che i pacchetti di supporto ai filesystem usati siano presenti:
root@debian:/# apt install dosfstools cryptsetup btrfs-progs cryptsetup-initramfs
Per installare il kernel sul host è necessario installare il pacchetto linux-image-amd64
:
root@debian:/# apt install linux-image-amd64
Passo 4 - Configurazione di rete
Configurare hostname
Scelgo il nome host :
echo modern-debian > /etc/hostname
Configurare file hosts
Creo il file /etc/hosts
e aggiungere le seguenti linee:
127.0.0.1 localhost
127.0.1.1 modern-debian
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Configurare le interfaccie
Configuro le reti nel file /etc/network/interfaces
root@rescue:/# cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Passo 5 - Configurazione di drop bear e GRUB
In questa parte si install GRUB, eseguo le operazioni relative alla piattaforma in esecuzione.
GRUB + BIOS
Installo grub:
root@debian:~# apt install grub-pc
Installo il boot loader sul disco:
root@debian:~# grub-install /dev/vda
GRUB + EFI
Installo grub:
root@debian:~# apt install grub-efi
Installo il boot loader sul disco:
root@debian:~# grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable
Aggiorno la configurazione di grup:
root@debian:~# update-grub
Passo 8 - Configurazione degli utenti
Come ultimo passo non mi rimane che configurare gli utenti.
NB: le password usate nei passi successivi sono state generate con il comando pwgen
Creoo l’utente myadmin
root@debian:~# adduser stethewwolf
Imposto la password per questo utente:
root@debian:~# passwd stethewwolf
Imposto la password di root:
root@debian:~# passwd
Conclusione
Questa è una procedura permette di installare manualmente debian arrivando a un sistem base senza ambiente grafico.
Riferimenti
- https://www.debian.org/releases/stable/i386/apds03.en.html
- https://wiki.archlinux.org/title/LVM
- https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS
- https://wiki.debian.org/it/fstab
- https://wiki.debian.org/it/SourcesList
- https://www.cyberciti.biz/faq/howto-linux-rename-ethernet-devices-named-using-udev/
- https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/
- https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/README.ipconfig
- https://gist.github.com/mjkstra/96ce7a5689d753e7a6bdd92cdc169bae
- https://wiki.ubuntu.com/UEFI/virt-install
- https://www.thomas-krenn.com/en/wiki/Installing_Ubuntu_20.04_via_a_serial_console
- https://stackoverflow.com/questions/30842216/debian-8-live-cd-what-is-the-standard-login-and-password
- https://github.com/BinaryShrub/ubuntu-btrfs-luks
- https://gist.github.com/MaxXor/ba1665f47d56c24018a943bb114640d7
- https://wiki.debian.org/SourcesList
- https://wiki.debian.org/Btrfs
- https://wiki.debian.org/UEFI

Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale Theme Moonwalk