Home

ITA - Un installazione manuale e moderna di debian

linux debian

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:

Prima di iniziare a installare il sistema è importante eseguire alcune operazioni:

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