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_sizese il file manca, siamo in modalità bios
- controllare la connettività
user@debian:~$ ping ping -c 5 debian.org
- controllare il tempo
user@debian:~$ timedatectlse il tempo o la timezone è sbagliata, cercare nella lista delle proble timezones la propria:user@debian:~$ timedatectl list-timezonese 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