Capitolo 9. Suggerimenti per il sistema

Indice

9.1. Il programma screen
9.1.1. Scenario di uso per screen(1)
9.1.2. Associazioni dei tasti per il comando screen
9.2. Registrazione e presentazione di dati
9.2.1. Demoni di registro
9.2.2. Analizzatori di registro
9.2.3. Registrare le attività della shell in modo pulito
9.2.4. Visualizzazione personalizzata di dati di testo
9.2.5. Visualizzazione personalizzata di date e orari
9.2.6. Output colorato per la shell
9.2.7. Comandi colorati
9.2.8. Registrare le attività dell'editor per ripetizioni complesse
9.2.9. Registrare l'immagine grafica di un'applicazione X
9.2.10. Registrare i cambiamenti a file di configurazione
9.3. Monitorare, controllare ed avviare l'attività dei programmi
9.3.1. Cronometrare un processo
9.3.2. Priorità di schedulazione
9.3.3. Il comando ps
9.3.4. Il comando top
9.3.5. Elencare i file aperti da un processo
9.3.6. Tenere traccia delle attività di un programma
9.3.7. Identificazione di processi in base a file o socket
9.3.8. Ripetere un comando ad intervalli costanti
9.3.9. Ripetere un comando su diversi file
9.3.10. Avviare un programma dalla GUI
9.3.11. Personalizzare i programmi da avviare
9.3.12. Uccidere un processo
9.3.13. Pianificare compiti da eseguire una volta sola
9.3.14. Pianificare compiti in modo regolare
9.3.15. Tasto Alt-SysRq
9.4. Suggerimenti per l'amministrazione del sistema
9.4.1. Chi è nel sistema?
9.4.2. Avvertire tutti gli utenti
9.4.3. Identificazione dell'hardware
9.4.4. Configurazione dell'hardware
9.4.5. Orario di sistema e hardware
9.4.6. Configurazione del terminale
9.4.7. L'infrastruttura audio
9.4.8. Disabilitare il salvaschermo
9.4.9. Disabilitare i bip sonori
9.4.10. Uso della memoria
9.4.11. Verifica della sicurezza e dell'integrità del sistema
9.5. Suggerimenti per l'archiviazione dei dati
9.5.1. Uso dello spazio su disco
9.5.2. Configurazione del partizionamento dei dischi
9.5.3. Accedere alle partizioni usando UUID
9.5.4. LVM2
9.5.5. Configurazione del file system
9.5.6. Creare file system e verificarne l'integrità
9.5.7. Ottimizzare il file system con opzioni di mount
9.5.8. Ottimizzare il file system tramite il superblocco
9.5.9. Ottimizzare il disco rigido
9.5.10. Ottimizzare le unità a stato solido
9.5.11. Usare SMART per prevedere danni ai dischi fissi
9.5.12. Specificare una directory per l'archiviazione di dati temporanei usando $TMPDIR
9.5.13. Espandere lo spazio di archiviazione utilizzabile con LVM
9.5.14. Espandere lo spazio di archiviazione utilizzabile montando un'altra partizione
9.5.15. Espandere lo spazio di archiviazione utilizzabile montando un collegamento ad un'altra directory
9.5.16. Espandere lo spazio di archiviazione utilizzabile usando collegamenti simbolici
9.5.17. Espandere lo spazio di archiviazione utilizzabile usando overlayfs
9.6. Immagine del disco
9.6.1. Creare un file con un'immagine di disco
9.6.2. Scrivere direttamente sul disco
9.6.3. Montare un file con un'immagine di disco
9.6.4. Pulire un file con un'immagine di disco
9.6.5. Creare un file con immagine di disco vuoto
9.6.6. Creare un file con un'immagine ISO9660
9.6.7. Scrivere direttamente sul CD/DVD-R/RW
9.6.8. Montare un file con un'immagine ISO9660
9.7. I dati binari
9.7.1. Visualizzare e modificare dati binari
9.7.2. Manipolare file senza montare i dischi
9.7.3. Dati ridondanti
9.7.4. recupero di file dati ed analisi forensi
9.7.5. Suddividere un file grande in file più piccoli
9.7.6. Pulire il contenuto di file
9.7.7. File fittizi
9.7.8. Cancellare un intero disco fisso
9.7.9. Cancellare area inutilizzate di un disco fisso
9.7.10. De-cancellare file cancellati ma ancora aperti
9.7.11. Cercare tutti i collegamenti fisici
9.7.12. Consumo invisibile dello spazio su disco
9.8. Suggerimenti per la cifratura dei dati
9.8.1. Cifratura di dischi removibili con dm-crypt/LUKS
9.8.2. Cifratura della partizione di swap con dm-crypt
9.8.3. Montare dischi removibili con dm-crypt/LUKS
9.8.4. Cifratura automatica di file con eCryptfs
9.8.5. Montare automaticamente eCryptfs
9.9. Il kernel
9.9.1. Kernel Linux 2.6/3.x
9.9.2. Parametri del kernel
9.9.3. Header del kernel
9.9.4. Compilare il kernel ed i moduli relativi
9.9.5. Compilare i sorgenti del kernel: il metodo raccomandato dal Team del Kernel di Debian
9.9.6. Driver per hardware e firmware
9.10. Sistema virtualizzato
9.10.1. Strumenti per la virtualizzazione
9.10.2. Fasi del processo di virtualizzazione
9.10.3. Montare il file immagine di disco virtuale
9.10.4. Sistema chroot
9.10.5. Sistemi desktop multipli

In questa sezione vengono descritti suggerimenti base per configurare e gestire il sistema, per lo più dalla console.

screen(1) è uno strumento molto utile per permettere alle persone di accedere a siti remoti attraverso una connessione non affidabile o intermittente, dato che supporta connessioni interrotte.


screen(1) non permette solamente il funzionamento di una finestra di terminale con processi multipli, ma permette anche ai processi in shell remote di sopravvivere a connessioni interrotte. Quello che segue è un tipico scenario di uso di screen(1).

  1. Si fa il login in una macchina remota.

  2. Si avvia screen in una console singola.

  3. Si eseguono svariati programmi in finestre screen create con ^A c ("Control-A" seguito da "c").

  4. Ci si sposta tra le svariate finestre screen create con ^A n ("Control-A" seguito da "n").

  5. All'improvviso si ha la necessità di lasciare il terminale, ma non si vuole perdere il lavoro attivo e si vuole mantenere la connessione.

  6. Si può scollegare la sessione screen in uno qualsiasi dei metodi seguenti.

    • Scollegare brutalmente la connessione di rete

    • Digitare ^A d ("Control-A" seguito da "d") e fare manualmente il log out dalla connessione remota.

    • Digitare ^A DD ("Control-A" seguito da "DD") per far si che screen si scolleghi e faccia il log out.

  7. Ci si ricollega alla stessa macchina remota (anche da un terminale diverso).

  8. Si avvia screen con "screen -r".

  9. screen magicamente ricollega tutte le finestre screen precedente con tutti i programmi in esecuzione attivi.

[Suggerimento] Suggerimento

Con screen si può risparmiare sui costi di connessione per connessioni a tempo, come dial-up o conteggiate a pacchetti, perché si può lasciare un processo attivo mentre si è disconnessi e poi ricollegarvisi successivamente quando è possibile connettersi di nuovo.

Il semplice uso di script(1) (vedere Sezione 1.4.9, «Registrare le attività della shell») per registrare l'attività della shell produce un file con caratteri di controllo. Ciò può essere evitato usando col(1) nel modo seguente.

$ script
Script è avviato, il file è typescript

Fare tutto quello che si vuole … e poi premere Ctrl-D per uscire da script.

$ col -bx <typescript >filepulito
$ vim filepulito

Se script non è disponibile (per esempio, durante il processo di avvio in initramfs), si può usare invece il comando seguente.

$ sh -i 2>&1 | tee typescript
[Suggerimento] Suggerimento

Alcuni x-terminal-emulator (emulatori di terminale in X), come Terminale di GNOME hanno la funzione di registrazione. Si potrebbe voler ampliare il buffer delle righe per scorrerle all'indietro.

[Suggerimento] Suggerimento

Si può usare screen(1) con "^A H" (vedere Sezione 9.1.2, «Associazioni dei tasti per il comando screen») per registrare la console.

[Suggerimento] Suggerimento

È possibile usare emacs(1) con "M-x shell", "M-x eshell" o "M-x term" per registrare la console. Si può successivamente usare "C-x C-w" per scrivere il buffer in un file.

Sebbene gli strumenti di paginazione, come more(1) e less(1) (vedere Sezione 1.4.5, «Il paginatore») e gli strumenti personalizzati per l'evidenziazione e la formattazione (vedere Sezione 11.1.8, «Evidenziare e formattare dati in puro testo») possano mostrare il testo in un modo piacevole, gli editor generici (vedere Sezione 1.4.6, «L'editor di testo») sono più versatili e personalizzabili.

[Suggerimento] Suggerimento

Per vim(1) e la sua modalità per paginatore, ossia view(1), ":set hls" abilita la ricerca con evidenziazione.

Il formato predefinito per la visualizzazione delle date e degli orari per il comando "ls -l" dipende dalla localizzazione (vedere Sezione 1.2.6, «Orari» per il valore). Si fa dapprima riferimento alla variabile "$LANG" che può essere scavalcata dalla variabile "$LC_TIME".

Il formato effettivo di visualizzazione predefinito per ciascuna localizzazione dipende dalla versione della libreria C (il pacchetto libc6) usata. Differenti rilasci di Debian hanno cioè valori predefiniti diversi.

Se si desidera veramente personalizzare questo formato di visualizzazione delle date e degli orari, oltre a ciò che è fatto con la localizzazione, si deve impostare il valore dello stile degli orari con l'opzione "--time-style" o con il valore di "$TIME_STYLE" (vedere ls(1), date(1), "info coreutils 'ls invocation'").


[Suggerimento] Suggerimento

Si può evitare di digitare lunghe opzioni nella riga di comando usando alias, per esempio "alias ls='ls --time-style=+%d.%m.%y\ %H:%M'" (vedere Sezione 1.5.9, «Alias di comandi»).

[Suggerimento] Suggerimento

Per i formati iso viene seguito lo standard ISO 8601.

L'output inviato a schermo dalla shell nella maggior parte dei terminali moderni può essere colorato usando codici di escape ANSI (vedere "/usr/share/doc/xterm/ctlseqs.txt.gz").

Per esempio, provare a fare quanto segue.

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}TESTO-ROSSO${NORMAL} ${REVERSE}TESTO-IN-NEGATIVO${NORMAL}"

È possibile registrare le attività dell'editor per ripetere azioni complesse.

Per vim fare nel modo seguente.

  • "qa": avviare la registrazione dei caratteri digitati in un registro chiamato "a".

  • … attività nell'editor

  • "q": terminare la registrazione dei caratteri digitati.

  • "@a": eseguire il contenuto del registro "a".

Per Emacs fare nel modo seguente.

  • "C-x (": iniziare la definizione di una macro da tastiera.

  • … attività nell'editor

  • "C-x )": terminare la definizione di una macro da tastiera.

  • "C-x e": eseguire la definizione di una macro da tastiera.

Le attività dei programmi possono essere monitorare e controllate usando strumenti specializzati.

Tabella 9.7. Elenco di strumenti per monitorare e controllare l'attività dei programmi.

pacchetto popcon dimensione descrizione
coreutils V:881, I:999 15103 nice(1): esegue un programma con priorità di schedulazione modificata
bsdutils V:851, I:999 238 renice(1): modifica la priorità di schedulazione di un processo in esecuzione
procps V:801, I:999 690 utilità per il file system "/proc": ps(1), top(1), kill(1), watch(1), …
psmisc V:567, I:970 589 utilità per il file system "/proc": killall(1), fuser(1), peekfd(1), pstree(1)
time V:39, I:819 82 time(1): esegue un programma per riportare l'uso delle risorse di sistema in funzione del tempo
sysstat V:100, I:119 1336 sar(1), iostat(1), mpstat(1), …: strumenti per le prestazioni di sistema per Linux
isag V:0, I:4 106 Interactive System Activity Grapher (tracciamento interattivo dell'attivita) per sysstat
lsof V:355, I:945 440 lsof(8): elenca, usando l'opzione "-p", i file aperti da un processo in esecuzione
strace V:21, I:163 1363 strace(1): traccia le chiamate e i segnali di sistema
ltrace V:1, I:22 360 ltrace(1): traccia le chiamate di libreria
xtrace V:0, I:1 333 xtrace(1): traccia la comunicazione tra client e server X11
powertop V:6, I:227 612 powertop(1): informazioni sull'uso dell'alimentazione da parte del sistema
cron V:877, I:997 251 esegue processi dal demone cron(8) sullo sfondo in base ad una pianificazione
anacron V:450, I:534 62 pianificatore di comandi in stile cron, per i sistemi che non sono in esecuzione 24 ore al giorno
at V:482, I:828 145 at(1) o batch(1): esegue un compito ad un orario specificato o quando il carico di sistema scende sotto un certo livello

[Suggerimento] Suggerimento

Il pacchetto procps fornisce strumenti estremamente di base per monitorare, controllare ed avviare le attività dei programmi. È consigliabile imparare ad usarli tutti.

Ci sono svariati modi di ripetere uno stesso comando su diversi file che rispondono ad una qualche condizione, ad esempio che corrispondono al modello glob "*.ext".

for x in *.ext; do if [ -f "$x"]; then comando "$x" ; fi; done
  • Combinazione di find(1) e xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 comando
  • find(1) con l'opzione "-exec" con un comando:

find . -type f -maxdepth 1 -name '*.ext' -exec comando '{}' \;
  • find(1) con l'opzione "-exec" con un breve script di shell:

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "comando '{}' && echo 'esecuzione con successo'" \;

Gli esempi precedenti sono stati scritti per assicurare la gestione appropriata di nomi di file particolari come quelli contenenti spazi. Per usi più avanzati di find(1), vedere Sezione 10.1.5, «Esempi di invocazione per la selezione di file».

Perl l'interfaccia a riga di comando (CLI), viene eseguito il primo programma con un nome corrispondente trovato nelle directory specificate nella variabile d'ambiente $PATH. Vedere Sezione 1.5.3, «La variabile "$PATH.

Per l'interfaccia utente grafica (GUI) conforme agli standard di freedesktop.org i file *.desktop nella directory /usr/share/applications/ forniscono gli attributi necessari per la visualizzazione di ogni programma nel menu della GUI. Vedere Sezione 7.2.2, «Menu Freedesktop.org».

Per esempio, il file chromium.desktop definisce gli attributi per il «Browser Web Chromium» come «Name» per il nome di programma, «Exec» per il percorso e gli argomenti di esecuzione del programma, «Icon» per l'icona usata, ecc. (vedere laSpecifica per le voci per desktop), nel modo seguente:

[Desktop Entry]
Version=1.0
Name=Chromium Web Browser
GenericName=Web Browser
Comment=Access the Internet
Comment[it]=Esplorare il Web
Exec=/usr/bin/chromium %U
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=chromium
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=Chromium
StartupNotify=true

Questa è una descrizione molto semplificata. I file *.desktop vengono analizzati nel modo seguente.

L'ambiente desktop imposta le variabili d'ambiente $XDG_DATA_HOME e $XDG_DATA_DIR. Per esempio, in GNOME 3:

  • $XDG_DATA_HOME non è impostata. (Viene usato il valore predefinito: $HOME/.local/share.)

  • $XDG_DATA_DIRS è impostata a /usr/share/gnome:/usr/local/share/:/usr/share/.

Perciò le directory base (vedere la XDG Base Directory Specification) e le directory applications sono le seguenti.

  • $HOME/.local/share/$HOME/.local/share/applications/

  • /usr/share/gnome//usr/share/gnome/applications/

  • /usr/local/share//usr/local/share/applications/

  • /usr/share//usr/share/applications/

I file *.desktop vengono analizzati all'interno di queste directory applications in tale ordine.

[Suggerimento] Suggerimento

Una voce del menu GUI personalizzata dell'utente può essere creata aggiungendo un file *.desktop nella directory $HOME/.local/share/applications/.

[Suggerimento] Suggerimento

In modo analogo, se viene creato un file *.desktop nella directory autostart all'interno di queste directory di base, il programma specificato nel file *.desktop viene eseguito automaticamente all'avvio dell'ambiente desktop. Vedere la specifica Desktop Application Autostart Specification.

[Suggerimento] Suggerimento

In modo simile, se viene creato un file *.desktop nella directory $HOME/Desktop e l'ambiente desktop è configurato per supportare la funzionalità di avviatore delle icone, il programma specificato in tale file viene eseguito quando si fa clic sull'icona. Notare che il nome effettivo della directory $HOME/Desktop dipende dalla localizzazione. Vedere xdg-user-dirs-update(1).

Alcuni programmi avviano automaticamente altri programmi. Quelli che seguono sono alcuni punti fondamentali per la personalizzazione di questo processo.

[Suggerimento] Suggerimento

update-mime(8) aggiorna il file "/etc/mailcap" usando il file "/etc/mailcap.order" (vedere mailcap.order(5)).

[Suggerimento] Suggerimento

Il pacchetto debianutils fornisce sensible-browser(1), sensible-editor(1) e sensible-pager(1) che prendono decisioni sensate riguardo, rispettivamente, a quale browser web, editor e paginatore invocare. La lettura di questi script di shell è raccomandata.

[Suggerimento] Suggerimento

Per eseguire un'applicazione per console, come mutt, come applicazione preferita in X si dovrebbe creare un'applicazione X nel modo seguente ed impostare "/usr/local/bin/mutt-term" come applicazione preferite da avviare come descritto in precedenza.

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

Per pianificare compiti in modo regolare usare cron(8). Vedere crontab(1) e crontab(5).

Si può pianificare l'esecuzione di processi come utente normale, ad esempio l'utente pippo, creando un file crontab(5) come "/var/spool/cron/crontabs/pippo" con il comando "crontab -e".

Quello seguente è un esempio di file crontab(5).

# usare /bin/sh per eseguire i comandi, qualsiasi cosa dica /etc/passwd
SHELL=/bin/sh
# inviare per posta l'output a paolo, chiunque sia il proprietario di questo crontab
MAILTO=paolo
# Min Ora GiornoMese Mese GiornoSett comando (Giorni... sono combinati con OR)
# eseguito alle 00:05, ogni giorno
5  0  *  * *   $HOME/bin/compito.quotidiano >> $HOME/tmp/output 2>&1
# eseguito alle 14:15 il primo giorno di ogni mese -- output inviato a paolo
15 14 1  * *   $HOME/bin/mensile
# eseguito alle 22:00 nei giorni infrasettimanali(1-5), disturbare Gianni. % per a capo, ultimo % per cc:
0 22 *   * 1-5 mail -s "Sono le 10pm" giannie%Gianni,%%dove sono i tuoi ragazzi?%.%%
23 */2  2 *   echo "eseguito 23 minuti dopo le 0am, 2am, 4am ..., il giorno 1 Feb "
5  4 *   * sun echo "eseguito alle 04:05 ogni domenica"
# eseguito alle 03:40 il primo lunedi' di ogni mese
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && comando -opzioni
[Suggerimento] Suggerimento

Per i sistemi non in esecuzione in maniera continuata, installare il pacchetto anacron per pianificare l'esecuzione di comandi periodici, in maniera il più possibile vicina agli intervalli specificati, in base a quanto permesso dal tempo di attività della macchina. Vedere anacron(8) e anacrontab(5).

[Suggerimento] Suggerimento

Gli script con compiti pianificati di amministrazione del sistema possono essere eseguiti periodicamente dall'account di root, ponendoli in "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/" o "/etc/cron.monthly/". L'orario di esecuzione di questi script può essere personalizzato con "/etc/crontab" e "/etc/anacrontab".

L'opzione "Magic SysRq key" (tasto R Sist), di compilazione del kernel, che è ora lo standard per i kernel Debian, fornisce una garanzia contro i malfunzionamenti del sistema. Premendo Alt-R Sist seguito da uno dei tasti seguenti, si ottiene magicamente di recuperare il controllo del sistema.


[Suggerimento] Suggerimento

Leggere le pagine di manuale signal(7), kill(1) e sync(1) per capire la descrizione soprastante.

La combinazione di "Alt-SysRq s", "Alt-SysRq u" e "Alt-SysRq r" è buona per uscire da situazioni veramente brutte e ottenere un accesso utilizzabile alla tastiera senza fermare il sistema.

Vedere "/usr/share/doc/linux-doc-3.*/Documentation/sysrq.txt.gz".

[Attenzione] Attenzione

La funzione Alt-R_Sist può essere considerata un rischio per la sicurezza dato che permette agli utenti l'accesso a funzioni con privilegi di root. Per disabilitale la funzione Alt-R_Sist mettere "echo 0 >/proc/sys/kernel/sysrq" in "/etc/rc.local" o "kernel.sysrq = 0" in "/etc/sysctl.conf".

[Suggerimento] Suggerimento

Si può usare la funzione Alt-R_Sist da un terminale SSH, ecc. scrivendo su "/proc/sysrq-trigger". Per esempio, "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" dal prompt di shell di root sincronizza ed esegue umount per tutti i file system montati.

Sebbene nei moderni sistemi desktop con interfaccia grafica, come GNOME e KDE, la maggior parte della configurazione dell'hardware possa essere gestita attraverso strumenti di configurazione con interfaccia grafica da essi forniti, è bene conoscere alcuni metodi di base di configurazione.


ACPI è un'infrastruttura per il sistema di gestione dell'energia più nuovo di APM

[Suggerimento] Suggerimento

La modifica della frequenza della CPU nei sistemi moderni è controllata da moduli del kernel come acpi_cpufreq.

I comandi seguenti impostano l'ora di sistema e hardware a MM/GG hh:mm, AAAA.

# date MMGGhhmmAAAA
# hwclock --utc --systohc
# hwclock --show

Nei sistemi Debian, gli orari sono mostrati normalmente come ora locale, ma l'ora di sistema e quella hardware usano di solito l'ora UTC(GMT).

Se l'ora hardware (BIOS) è impostata ad UTC, modificare l'impostazione nel file "/etc/default/rcS" ad "UTC=yes".

Il comando seguente riconfigura il fuso orario utilizzato dal sistema Debian.

# dpkg-reconfigure tzdata

Se si desidera tenere aggiornata l'ora di sistema attraverso la rete, si consideri l'uso del servizion NTP con pacchetti come ntp, ntpdate e chrony.

[Suggerimento] Suggerimento

In systemd, usare invece systemd-timesyncd per l'ora di rete. Vedere systemd-timesyncd(8).

Vedere la documentazione seguente.

[Suggerimento] Suggerimento

ntptrace(8), nel pacchetto ntp può tracciare una catena di server NTP all'indietro fino alla fonte originaria.

I driver di dispositivo per le schede audio per l'attuale Linux sono forniti da ALSA (Advanced Linux Sound Architecture). ALSA fornisce una modalità di emulazione per la compatibilità con il precedente sistema OSS (Open Sound System).

[Suggerimento] Suggerimento

Per testare l'altoparlante usare "cat /dev/urandom > /dev/audio" oppure speaker-test(1) (^C per interrompere).

[Suggerimento] Suggerimento

Se non si ottiene l'audio, è possibile che l'altroparlante sia connesso ad un output impostato come muto. I moderni sistemi sonori hanno svariati output. alsamixer(1) nel pacchetto alsa-utils è utile per configurare le impostazioni del volume e di muto.

I software applicativi possono essere configurati non solo per accedere direttamente a device audio, ma anche per accedervi attraverso un qualche sistema server sonoro standardizzato.


Normalmente esiste un motore audio comune per ciascun ambiente desktop. Ciascun motore audio usato dalle applicazioni può scegliere di connettersi a diversi server audio.

Una cattiva manutenzione del sistema può esporlo ad attacchi esterni.

Per verificare la sicurezza e l'integrità del sistema, si dovrebbe iniziare dai punti seguenti.


Con il piccolo script seguente è possibile controllare la presenza di tipici errori con permessi di scrittura per tutti per i file sbagliati.

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[Attenzione] Attenzione

Data che il pacchetto debsums usa le somme di controllo MD5 salvate localmente, non può essere completamente affidabile come strumento di controllo della sicurezza del sistema contro attacchi malevoli.

L'avvio del sistema con un CD live Linux o un CD del debian-installer in modalità ripristino rende semplice la riconfigurazione dell'archiviazione dei dati sul dispositivo di avvio.

Per la configurazione del partizionamento dei dischi, benché fdisk(8) sia considerato lo strumento standard, parted(8) merita un po' di attenzione. "Dati di partizionamento del disco", "tabella delle partizioni", "mappa delle partizioni" e "etichetta del disco" sono tutti sinonimi.

La maggior parte dei PC usa il classico schema basato su MBR (Master Boot Record) per contenere i dati sul partizionamento del disco nel primo settore, cioè il settore LBA 0 (512 byte).

[Nota] Nota

Alcuni PC più recenti con EFI (Extensible Firmware Interface), compresi i Mac basati su Intel, usano lo schema GPT (GUID Partition Table) per contenere i dati sul partizionamento del disco non nel primo settore.

Sebbene fdisk(8) sia stato lo strumento standard per il partizionamento dei dischi, parted(8) lo sta sostituendo.


[Attenzione] Attenzione

Sebbene parted(8) sostenga di creare e ridimensionare anche i file system, è più sicuro fare queste cose usando gli strumenti specializzati meglio mantenuti, come mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) e resize2fs(8).

[Nota] Nota

Per poter commutare tra GPT e MBR, è necessario cancellare direttamente i primi pochi blocchi del contenuto del disco (vedere Sezione 9.7.6, «Pulire il contenuto di file») e usare "parted /dev/sdx mklabel gpt" o "parted /dev/sdx mklabel msdos", per fare il cambiamento. Notare che in questo contesto è usato "msdos" per MBR.

Anche se la riconfigurazione delle partizioni o l'ordine di attivazione di supporti di archiviazione removibili può portare ad avere nomi diversi per le partizioni, è possibili accedere ad esse in modo coerente. Ciò è utile anche se si hanno più dischi ed il BIOS non assegna loro un nome di dispositivo costante.

[Suggerimento] Suggerimento

Si può scoprire l'UUID di un device a blocchi speciale con blkid(8).

[Suggerimento] Suggerimento

I nodi di device dei dispositivi come i supporti di archiviazione rimovibili possono essere resi statici usando regole udev, se necessario. Vedere Sezione 3.3, «Il sistema udev».

LVM2 è un gestore di volumi logici per il kernel Linux. Con LVM2 si possono creare partizioni dei dischi in volumi logici invece che sugli hard disk fisici.

LVM richiede quanto segue.

  • la gestione di device-mapper nel kernel Linux (predefinita per i kernel Debian)

  • la libreria per la gestione di device-mapper in spazio utente (pacchetto libdevmapper*)

  • gli strumenti LVM2 in spazio utente (pacchetto lvm2)

Per iniziare a comprendere LVM2 guardare le pagine di manuale seguenti.

  • lvm(8): Principi di base del meccanismo LVM2 (elenco di tutti i comandi di LVM2)

  • lvm.conf(5): File di configurazione per LVM2

  • lvs(8): Riporta informazioni sui volumi logici

  • vgs(8): Riporta informazioni sui gruppi di volumi

  • pvs(8): Riporta informazioni sui volumi fisici

Per il file system ext4, il pacchetto e2fsprogs fornisce gli strumenti seguenti.

  • mkfs.ext3(8) per creare nuovi file system ext4

  • fsck.ext4(8) per controllare e riparare file system ext4 esistenti

  • tune2fs(8) per configurare i superblocchi di un file system ext4

  • debugfs(8) per fare il debug di file system ext4 in modo interattivo. (Ha un comando undel per ripristinare file eliminati.)

I comandi mkfs(8) e fsck(8) sono forniti dal pacchetto e2fsprogs come front-end per vari programmi dipendenti dal file syste (mkfs.tipofs e fsck.tipofs). Per il file system ext4 , sono mkfs.ext4(8) e fsck.ext4(8) (sono un collegamento simbolico a mke2fs(8) e e2fsck(8)).

Sono disponibili comandi simili per ciascun file system supportato da Linux.


[Suggerimento] Suggerimento

Il file system Ext4 è il predefinito per il sistema Linux e il suo uso è caldamente raccomandato a meno che non sia abbiano specifiche ragioni per non farlo.

[Suggerimento] Suggerimento

Il file system Btrfs è disponibile nel kernel Linux 3.2 (Debian wheezy). Dovrebbe diventare il prossimo file system predefinito dopo quello ext4.

[Avvertimento] Avvertimento

Non si dovrebbe ancora usare il file system Btrfs per i propri dati importanti prima che abbia la funzionalità fsck(8) live in spazio kernel e il supporto nel bootloader.

[Suggerimento] Suggerimento

Alcuni strumenti permettono l'accesso a file system non supportati del kernel Linux (vedere Sezione 9.7.2, «Manipolare file senza montare i dischi»).

La configurazione statica di base del file system è fornita da «/etc/fstab». Ad esempio,

# <file system> <punto di mount>   <tipo>  <opzioni>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 noatime,errors=remount-ro 0 1
UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw  0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto 0       0
[Suggerimento] Suggerimento

Per identificare un dispositivo a blocchi si può usare il suo UUID (vedere Sezione 9.5.3, «Accedere alle partizioni usando UUID») invece del normale nome di device a blocchi quale «/dev/sda1», «/dev/sda2», …

Le prestazioni e le caratteristiche di un file system possono essere ottimizzate usando per esso opzioni per il montaggio (vedere fstab(5) e mount(8)).Alcune opzioni importanti sono le seguenti.

  • L'opzione "defaults" implica le opzioni predefinite: "rw,suid,dev,exec,auto,nouser,async". (Uso generico)

  • L'opzione "noatime" o "relatime" è molto efficace nel velocizzare l'accesso in lettura. (Uso generico)

  • L'opzione "user" permette ad un normale utente di montare il file system. Questa opzione implica la combinazione di opzioni "noexec,nosuid,nodev". (Uso generico, usato per CD o dispositivi di archiviazione USB)

  • La combinazione di opzioni "noexec,nodev,nosuid" è usata per migliorare la sicurezza. (Uso generico)

  • L'opzione "noauto" limita il montaggio solamente a quando esplicitamente richiesto. (Uso generico)

  • L'opzione "data=journal" per ext3fs può migliorare la salvaguardia dell'integrità dei dati contro interruzioni dell'alimentazione a prezzo della perdita di un po' di velocità in scrittura.

[Suggerimento] Suggerimento

Per utilizzare una modalità di journaling non predefinita per il file system root, è necessario fornire i parametri di avvio del kernel (vedere Sezione 3.1.2, «Stadio 2: il bootloader»), ad esempio "rootflags=data=journal". Per lenny la modalità di journaling predefinita è "rootflags=data=ordered"; per squeeze è "rootflags=data=writeback".

Le prestazioni e l'usura dei dischi delle unità a stato solido (SSD) possono essere ottimizzate nel modo seguente.

  • Usare il kernel Linux più recente (>= 3.2).

  • Ridurre le scritture su disco per gli accessi in lettura.

    • Impostare l'opzione di montaggio "noatime" o "relatime" in /etc/fstab.

  • Abilitare il comando TRIM.

    • Impostare l'opzione di montaggio "discard" in /etc/fstab per il file system ext4, le partizioni di swap, Btrfs, ecc. Vedere fstab(5).

    • Impostare l'opzione "discard" in /etc/lvm/lvm.conf per LVM. Vedere lvm.conf(5).

    • Impostare l'opzione "discard" in /etc/crypttab per dm-crypt. Vedere crypttab(5).

  • Abilitare lo schema di allocazione dello spazio su disco ottimizzato SSD.

    • Impostare l'opzione di mountaggio "ssd" in /etc/fstab per Btrfs.

  • Fare sì che il sistema muova tutti i dati su disco ogni 10 minuti sui PC portatili.

    • Impostare l'opzione di montaggio "commit=600" in /etc/fstab. Vedere fstab(5).

    • Impostare pm-utils in modo che usi la modalità laptop-mode anche quando collegato alla rete elettrica. Vedere Debian BTS #659260.

[Avvertimento] Avvertimento

Modificare l'intervallo di scrittura dei dati dai normali 5 secondi a 10 minuti rende i dati vulnerabili in caso di mancanza di corrente.

Con il demone smartd (8) è possibile monitorare e registrare i dischi fissi che sono conformi a SMART.

  1. Abilitare la funzionalità SMART nel BIOS.

  2. Installare il pacchetto smartmontools.

  3. Identificare i dispositivi dei dischi fissi usando df(1).

    • Si supponga che uno dei dispositivi dei dischi fissi da monitorare sia "/dev/hda".

  4. Controllare l'output di "smartctl -a /dev/hda" per vedere se la funzionalità SMART è veramente abilitata.

    • Se non la è, abilitarla con "smartctl -s on -a /dev/hda".

  5. Abilitare l'esecuzione del demone smartd(8) nel modo seguente.

    • Rimuovere il carattere iniziale di commento dalla riga "start_smartd=yes" nel file "/etc/default/smartmontools".

    • Riavviare il demone smartd(8) con il comando "sudo /etc/init.d/smartmontools restart".

[Suggerimento] Suggerimento

Il demone smartd(8) può essere personalizzato con il file /etc/smartd.conf, incluso per ciò che riguarda le notifiche dei messaggi di avvertimento.

Le partizioni create al momento dell'installazione su LVM (Logical Volume Manager (funzionalità di Linux) possono essere facilmente ridimensionate concatenando ad esse delle estensioni o suddividendo le loro estensioni su dispositivi di archiviazione multipli senza riconfigurazioni importanti del sistema.

Se è disponibile dello spazio utilizzabile in un'altra partizione (ad esempio "/percorso/della/vuota" e "/percorso/di/lavoro"), si può creare in essa una directory e impilarla in una vecchia directory (es., "/percorso/della/vecchia") in cui si ha bisogno di spazio usando OverlayFS con un kernel Linux 3.18 o successivo (Debian Stretch 9.0 o successiva).

$ sudo mount -t overlay overlay \
  -olowerdir=/percorso/della/vecchia,upperdir=/percorso/della/vuota,workdir=/percorso/di/lavoro

Qui, "/percorso/della/vuota" e "/percorso/di/lavoro" devono essere nella partizione abilitata in lettura e scrittura da scrivere in "/percorso/della/vecchia".

Questa sezione tratta della manipolazione di immagini di dischi.

Si può creare un file di immagine del disco, "disco.img", di un dispositivo non montato, ad esempio la seconda unità SCSI o serial ATA "/dev/sdb" usando cp(1) o dd(1) nel modo seguente.

# cp /dev/sdb disco.img
# dd if=/dev/sdb of=disco.img

Si può creare l'immagine del disco del MBR (master boot record) dei PC tradizionali (vedere Sezione 9.5.2, «Configurazione del partizionamento dei dischi»), che risiede nel primo settore del disco IDE primario usando dd(1) nel modo seguente.

# dd if=/dev/hda of=mbr.img bs=512 count=1
# dd if=/dev/hda of=mbr-nopart.img bs=446 count=1
# dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
  • "mbr.img": MBR con tabella delle partizioni

  • "mbr-nopart.img": MBR senza tabella delle partizioni

  • "mbr-part.img": solamente la tabella delle partizioni nell'MBR

Se il disco di avvio è un un dispositivo SCSI o serial ATA, sostituire "/dev/hda" con "/dev/sda".

Se si sta creando l'immagine di una partizione del disco originale, sostituire "/dev/hda" con "/dev/hda1", ecc.

Un'immagine di disco "partizione.img" contenente l'immagine di un'unica partizione, può essere montata e smontata usando il device loop nel modo seguente.

# losetup -v -f partizione.img
Loop device is /dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...bla...bla...bla
# umount /dev/loop0
# losetup -d /dev/loop0

Questo può essere semplificato nel modo seguente.

# mkdir -p /mnt/loop0
# mount -t auto -o loop partizione.img /mnt/loop0
...bla...bla...bla
# umount partizione.img

Ogni partizione di un'immagine di disco "disco.img" contentente più partizioni, può essere montata usando il device loop. Dato che quest'ultimo non gestisce in modo predefinito le partizioni, è necessario riconfigurarlo nel modo seguente.

# modinfo -p loop # verifica la capacita del kernel
max_part:Maximum number of partitions per loop device
max_loop:Maximum number of loop devices
# losetup -a # verifica che nulla stia usando il device loop
# rmmod loop
# modprobe loop max_part=16

Ora il device loop può gestire fino a 16 partizioni.

# losetup -v -f disco.img
Loop device is /dev/loop0
# fdisk -l /dev/loop0

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x452b6464

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1               1         600     4819468+  83  Linux
/dev/loop0p2             601         652      417690   83  Linux
# mkdir -p /mnt/loop0p1
# mount -t ext4 /dev/loop0p1 /mnt/loop0p1
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/loop0p2 /mnt/loop0p2
...bla...bla...bla
# umount /dev/loop0p1
# umount /dev/loop0p2
# losetup -d /dev/loop0

In alternativa, un risultato simile può essere ottenuto utilizzando i device mapper creati da kpartx(8), contenuto nel pacchetto kpartx, nel modo seguente.

# kpartx -a -v disco.img
...
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2
...
...bla...bla...bla
# umount /dev/mapper/loop0p2
...
# kpartx -d /mnt/loop0
[Nota] Nota

È anche possibile montare una singola partizione di una tale immagine di disco con un device loop indicando un offset per saltare l'MBR, ecc., ma questo metodo è più esposto agli errori.

Si può creare un'immagine di disco vuota "disco.img", che può crescere fino a 5GiB, usando dd(1) nel modo seguente.

$ dd bs=1 count=0 if=/dev/zero of=disco.img seek=5G

È possibile creare un file system ext4 in questa immagine di disco, "disco.img" usando il device loop nel modo seguente.

# losetup -f -v disco.img
Loop device is /dev/loop1
# mkfs.ext4 /dev/loop1
...bla...bla...bla
# losetup -d /dev/loop1
$ du  --apparent-size -h disco.img
5.0G  disco.img
$ du -h disco.img
83M disco.img

La dimensione del file "disco.img" è di 5.0GiB e il suo effettivo uso del disco è di soli 83MiB. Questa discrepanza è resa possibile dal fatto che il file system ext4 può contentere file sparsi.

[Suggerimento] Suggerimento

L'uso effettivo del disco dei file sparsi cresce insieme ai dati che in essi sono scritti.

Usando operazioni simili su device creati dal device loop o dal device mapper, come in Sezione 9.6.3, «Montare un file con un'immagine di disco», si può partizionare tale immagine di disco "disco.img" usando parted(8) o fdisk(8) e si può creare in essa file system usando mkfs.ext4(8), mkswap(8), ecc.

Si può creare un file immagine ISO9660 "cd.iso" dell'albero di directory originale in "directory_sorgente" usando genisoimage(1) fornito da cdrkit nel modo seguente.

#  genisoimage -r -J -T -V ID_volume -o cd.iso directory_sorgente

Analogamente, si può creare un file immagine ISO9660 avviabile, "cdboot.iso", da un albero di directory simile a quello del debian-installer in "directory_sorgente" nel modo seguente.

#  genisoimage -r -o cdboot.iso -V ID_volume \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table directory_sorgente

In questo esempio viene usato per l'avvio il bootloader Isolinux (vedere Sezione 3.1.2, «Stadio 2: il bootloader»).

Si può calcolare il valore md5sum e creare l'immagine ISO9660 direttamente dal device CD-ROM nel modo seguente.

$ isoinfo -d -i /dev/cdrom
CD-ROM is in ISO 9660 format
...
Logical block size is: 2048
Volume size is: 23150592
...
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum
# dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
[Avvertimento] Avvertimento

Per ottenere un risultato corretto, si deve accuratamente evitare il bug di Linux riguardante il read ahead del file system ISO9660, come nell'esempio precedente.

Questa sezione tratta della manipolazione diretta dei dati binari su supporti di archiviazione.

Avendo l'accesso fisico alla macchina, chiunque può facilmente ottenere privilegi di root e accedere a tutti i file nel PC (vedere Sezione 4.7.4, «Rendere sicura la password di root»). Ciò significa che il sistema delle password di login non può mettere al sicuro i dati privati e sensibili contro un possibile furto del PC. Per farlo deve essere usata una tecnologia di cifratura dei dati. Sebbene GNU Privacy Guard (vedere Sezione 10.3, «Infrastruttura di sicurezza dei dati») possa cifrare file, richiede un po' di lavoro da parte dell'utente.

dm-crypt e eCryptfs facilitano la cifratura automatica dei dati in modo nativo attraverso moduli del kernel Linux con un minimo lavoro da parte dell'utente.


Dm-crypt è un file system crittografico che usa device-mapper. Device mapper mappa un blocco di un device ad un altro.

eCryptfs è un altro file system crittografico che usa un file system stack; quest'ultimo si sovrappone ad una directory esistente in un file system montato.

[Attenzione] Attenzione

La cifratura dei dati consuma tempo CPU, ecc. Valutare bene i suoi costi e i benefici.

[Nota] Nota

È possibile installare un intero file system Debian in un disco cifrato con l'Installatore Debian (lenny o successivo) usando dm-crypt/LUKS e initramfs.

[Suggerimento] Suggerimento

Per lo strumento di cifratura in spazio utente GNU Privacy Guard vedere Sezione 10.3, «Infrastruttura di sicurezza dei dati».

Si può cifrare il contenuto di dispositivi di memorizzazione di massa removibili, ad esempio una chiavetta USB in "/dev/sdx", usando dm-crypt/LUKS. Formattarla semplicemente nel modo seguente.

# badblocks -c 1024 -s -w -t random -v /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open --type luks /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

Si può poi montarla come una chiavetta qualunque in "/media/<etichetta_disco>", tranne per il fatto che verrà chiesta la password (vedere Sezione 10.1.7, «Supporti di archiviazione removibili») nei moderni ambienti desktop, come GNOME che usa gnome-mount(1). La differenza è che ogni dato scritto in essa è cifrato. In alternativa è possibile formattare il supporto con un file system diverso, ad esempio ext4 usando "mkfs.ext4 /dev/sdx1".

[Nota] Nota

Se si è veramente paranoici per ciò che riguarda la sicurezza dei propri dati, potrebbe essere necessario sovrascrivere diverse volte (il comando "badblocks" nell'esempio precedente). Questa operazione richiede però parecchio tempo.

In questo esempio si suppone che il file "/etc/fstab" originale contenga quanto segue.

/dev/sda7 swap sw 0 0

Si può abilitare la cifratura della partizione di swap usando dm-crypt nel modo seguente.

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

È possibile cifrare automaticamente i file scritti in "~/Private/" usando eCryptfs e il pacchetto ecryptfs-utils.

  • Eseguire ecryptfs-setup-private(1) e impostare "~/Private/" nei prompt mostrati.

  • Attivare "~/Private/" eseguendo ecryptfs-mount-private(1).

  • Spostare i file con dati sensibili in "~/Private/" e creare i collegamenti simbolici necessari.

    • File candidati sono:"~/.fetchmailrc", "~/.ssh/identity", "~/.ssh/id_rsa", "~/.ssh/id_dsa" e altri file con permessi "go-rwx"

  • Spostare le directory con dati sensibili in una sottodirectory in "~/Private/" e creare i collegamenti simbolici necessari.

    • Directory candidate sono: "~/.gnupg" e altre directory con permessi "go-rwx"

  • Creare un collegamento simbolico da "~/Desktop/Private/" a "~/Private/" per facilitare le operazioni dal desktop.

  • Disattivare "~/Private/" eseguendo ecryptfs-umount-private(1).

  • Attivare "~/Private/" eseguendo ecryptfs-mount-private(1) quando sono necessari dati cifrati..

[Suggerimento] Suggerimento

Dato che eCryptfs cifra selettivamente solo i file sensibili, il suo costo in termini di risorse di sistema è molto minore dell'uso di dm-crypt sull'intero device root o "/home". Non richiede nessun lavoro speciale di archiviazione su disco, ma non può mantenere confidenziali tutti i metadati del file system.

Se si usa la propria password di login come wrapper per le chiavi di cifratura, si può automatizzare il montaggio di eCryptfs tramite PAM (Pluggable Authentication Modules).

Inserire la riga seguente immediatamente prima di "pam_permit.so" in "/etc/pam.d/common-auth".

auth required pam_ecryptfs.so unwrap

Inserire la riga seguente come ultima riga in "/etc/pam.d/common-session".

session optional pam_ecryptfs.so unwrap

Insrire la riga seguente come prima riga attiva in "/etc/pam.d/common-password".

password required pam_ecryptfs.so

Ciò risulta molto comodo.

[Avvertimento] Avvertimento

Errori di configurazione di PAM possono lasciare l'utente chiuso fuori dal proprio sistema. Vedere Capitolo 4, Autenticazione.

[Attenzione] Attenzione

Se si usa la propria password di login per fare da wrapper alle chiavi di cifratura, i dati cifrati sono sicuri tanto quanto la password di login dell'utente (vedere Sezione 4.3, «Password buone»). A meno che non si scelga prudentemente una password forte, i propri dati saranno a rischio se qualcuno esegue software di forzatura della password dopo aver rubato il portatile (vedere Sezione 4.7.4, «Rendere sicura la password di root»).

Debian distribuisce, per le architetture supportate, kernel Linux modulari contenuti in pacchetti.

Nel kernel Linux 2.6/3.x ci sono alcune funzionalità degne di nota rispetto alla versione 2.4.

Il salto di versione da Linux 2.6.39 a Linux 3.0 non è dovuto a cambiamenti tecnologici fondamentali, ma al ventesimo anniversario.

Molte caratteristiche di Linux possono essere configurate tramite parametri del kernel, nei modi seguenti.

Vedere "kernel-parameters.txt(.gz)" e altri documenti correlati nella documentazione del kernel Linux ("/usr/share/doc/linux-doc-3.*/Documentation/filesystems/*") fornita dai pacchetti linux-doc-3.*.

Debian ha un proprio metodo di compilazione del kernel e dei moduli relativi.


Se si usa initrd nello Sezione 3.1.2, «Stadio 2: il bootloader», ci si assicuri di leggere le informazioni relative in initramfs-tools(8), update-initramfs(8), mkinitramfs(8) e initramfs.conf(5).

[Avvertimento] Avvertimento

Quando si compilano i sorgenti del kernel Linux, non mettere collegamenti simbolici alle directory nell'albero dei sorgenti (ad esempio, "/usr/src/linux*") in "/usr/include/linux" e "/usr/include/asm". (Alcuni documenti ormai datati suggeriscono di farlo.)

[Nota] Nota

Quando si compila il kernel Linux più recente nel sistema Debian stable, potrebbe essere necessario l'uso delle versioni backport degli strumenti piu recenti da Debian unstable.

[Nota] Nota

Il DKMS (Dynamic Kernel Module Support, supporto dinamico per i moduli del kernel) è un nuova infrastruttura indipendente dalla distribuzione progettata per permettere l'aggiornamento di singoli moduli del kernel senza cambiare tutto il kernel. È utilizzata per il mantenimento dei moduli esterni all'albero dei sorgenti. Rende anche molto facile la ricompilazione dei moduli quando si aggiornano i kernel.

Un driver hardware è il codice eseguito nel sistema target. La maggior parte dei driver hardware sono ora disponibili come software libero e sono inclusi nei normali pacchetti Debian dei kernel nell'area main.

  • driver GPU

    • driver GPU Intel (main)

    • driver GPU AMD/ATI (main)

    • driver GPU NVIDIA (main per il driver nouveau e non-free per i driver solo binari supportati dal produttore.

  • driver Softmodem

    • pacchetti martian-modem e sl-modem-dkms (non-free)

Il firmware è il codice o i dati caricati sul dispositivo (ad esempio microcodice della CPU, codice di rendering eseguito nella GPU oppure dati FPGA/CPLD, …). Alcuni pacchetti firmware sono disponibili come software libero, ma molti pacchetti firmware non lo sono dato che contengono dati binari senza sorgenti.

  • firmware-linux-free (main)

  • firmware-linux-nonfree (non-free)

  • firmware-linux-* (non-free)

  • *-firmware (non-free)

  • intel-microcode (non-free)

  • amd64-microcode (non-free)

Notare che i pacchetti non-free e contrib non fanno parte del sistema Debian. La configurazione per abilitare e disabilitare le aree non-free e contrib è descritta in Sezione 2.1.4, «Nozioni di base sugli archivi Debian». Si dovrebbe essere consapevoli degli aspetti negativi legati all'uso dei pacchetti non-free e contrib come descritto in Sezione 2.1.5, «Debian è al 100% software libero».

L'uso di sistemi virtualizzati permette di eseguire più istanze di un sistema simultaneamente su un singolo hardware.

Ci sono diversi pacchetti in Debian relativi alla virtualizzazione ed emulazione di sistema che vanno oltre il semplice chroot. Alcuni pacchetti aiutano anche nell'impostazione di tali sistemi.

Tabella 9.26. Elenco di strumenti di virtualizzazione

pacchetto popcon dimensione descrizione
schroot V:6, I:10 2653 strumento specializzato per eseguire pacchetti Debian binari in chroot
sbuild V:1, I:3 283 strumento per compilare pacchetti Debian binari da sorgenti Debian
pbuilder V:2, I:18 962 creatore di pacchetti personali per pacchetti Debian
debootstrap V:6, I:68 259 avviare un sistema Debian base (scritto in sh)
cdebootstrap V:0, I:3 112 avviare un sistema Debian (scritto in C)
virt-manager V:8, I:31 7426 Virtual Machine Manager: applicazione desktop per gestire macchine virtuali
libvirt-clients V:25, I:47 1907 programmi per la libreria libvirt
bochs V:0, I:1 4086 Bochs: emulatore PC IA-32
qemu I:41 518 QEMU: veloce emulatore generico di processore
qemu-system I:43 91 QEMU: binari per emulazione completa del sistema
qemu-user V:2, I:42 70592 QEMU: binari per emulazione in spazio utente
qemu-utils V:8, I:94 6657 QEMU: utilità
qemu-kvm V:18, I:68 100 KVM: virtualizzazione completa su hardware x86 convirtualizzazione assistita da hardware
virtualbox V:51, I:64 72786 VirtualBox: soluzione per virtualizzazione i dx86 su i386 e amd64
xen-tools V:0, I:7 666 strumenti per gestire server virtuali XEN Debian
wine V:25, I:106 174 Wine: implementazione della API Windows (suite standard)
dosbox V:3, I:21 2755 DOSBox: emulatore x86 con grafica Tandy/Herc/CGA/EGA/VGA/SVGA, suono e DOS
dosemu V:1, I:4 4891 DOSEMU: emulatore DOS di Linux
vzctl V:2, I:4 1070 OpenVZ, soluzione per virtualizzazione server - strumenti di controllo
vzquota V:2, I:4 222 OpenVZ, soluzione per virtualizzazione server - strumenti per quote
lxc V:8, I:13 1297 strumenti in spazio utente per contenitori Linux containers

Vedere l'articolo di Wikipedia Comparison of platform virtual machines per una comparazione dettagliata di diverse soluzioni per la virtualizzazione di piattaforme.

[Nota] Nota

Alcune funzionalità descritte in seguito sono disponibili solamente in squeeze o rilasci successivi.

[Nota] Nota

I kernel Debian predefiniti hanno il supporto per KVM a partire da lenny.

Il tipico processo di virtualizzazione comporta diverse fasi.

Per i file immagine raw di disco, vedere Sezione 9.6, «Immagine del disco».

Per altri file immagine di dischi virtuali, si può usare qemu-nbd(8) per esportarli usando il protocollo per device a blocchi di rete e montarli usando il modulo nbd del kernel.

qemu-nbd(8) supporta i formati di disco supportati da QEMU; QEMU supporta i seguenti formati di dischi: raw, qcow2, qcow, vmdk, vdi, bochs, cow (copy-on-write di user-mode Linux), parallels, dmg, cloop, vpc, vvfat (VFAT virtuale) e host_device.

I device a blocchi di rete possono supportare partizioni nello stesso modo dei device loop (vedere Sezione 9.6.3, «Montare un file con un'immagine di disco»). Si può montare la prima partizione di "disk.img" nel modo seguente.

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Suggerimento] Suggerimento

È possibile esportare solamente la prima partizione di "disk.img" usando l'opzione "-P 1"per qemu-nbd(8).

chroot(8) offre il metodo più basilare per eseguire diverse istanze dell'ambiente GNU/Linux simultaneamente in un singolo sistema senza riavviare.

[Attenzione] Attenzione

Gli esempi seguenti presuppongono che entrambi i sistemi, quello genitore e quello chroot, condividano la stessa architettura.

Si può imparare a impostare ed usare chroot(8) eseguendo il programma pbuilder(8) in script(1) nel modo seguente.

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

Si può vedere come debootstrap(8) o cdebootstrap(1) popoli i dati di sistema per l'ambiente sid in "/sid-root".

[Suggerimento] Suggerimento

L'installatore Debian usa debootstrap(8) o cdebootstrap(1) per l'installazione Debian. Possono anche essere usati per installare Debian in un sistema senza usare un disco di installazione Debian, ma invece uno di un'altra distribuzione GNU/Linux.

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

Si può vedere come venga creata una shell di sistema in esecuzione nell'ambiente sid, nel modo seguente.

  1. Copiare la configurazione locale ("/etc/hosts", "/etc/hostname", "/etc/resolv.conf")

  2. Montare il file system "/proc"

  3. Montare il file system "/dev/pts"

  4. Creare "/usr/sbin/policy-rc.d" che restituisca sempre il codice 101

  5. Esegiore "chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'"

[Nota] Nota

Alcuni programmi in chroot per funzionare possono aver bisogno dell'accesso ad più file nel sistema genitore di quanti ne fornisca pbuilder. Per esempio, per essere montati con bind o copiati, possono essere necessari "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", ecc.

[Nota] Nota

Il file "/usr/sbin/policy-rc.d" evita che, in un sistema Debian, i programmi demone vengano avviati automaticamente. Vedere "/usr/share/doc/sysv-rc/README.policy-rc.d.gz".

[Suggerimento] Suggerimento

Lo scopo originale del pacchetto specializzato chroot, pbuilder è di costruire un sistema chroot e di compilare un pacchetto all'interno del chroot. È un sistema ideale per controllare che le dipendenze di compilazione di un pacchetto siano corrette e per assicurare che, nel pacchetto risultante, non ci siano dipendenze sbagliate o superflue.

[Suggerimento] Suggerimento

Il pacchetto simile schroot può dare un'idea di come eseguire un sistema chroot i386 in un sistema genitore amd64.

Io raccomando l'uso di QEMU o VirtualBox per eseguire, in un sistema Debian stable, sistemi desktop multipli in maniera sicura usando la virtualizzazione. Permettono di eseguire applicazioni desktop di Debian unstable e testing senza i comuni rischi ad essi associati.

Dato che QEMU puro è molto lento, è raccomandata la sua velocizzazione con KVM quando il sistema host lo permette.

L'immagine disco virtuale "virtdisk.qcow2" contenente un sistema Debian per QEMU si può creare con i piccoli CD dell'installatore Debian nel modo seguente.

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

Vedere altri suggerimenti su Debian Wiki: QEMU.

VirtualBox è fornito con strumenti con interfaccia utente grafica Qt piuttosto intuitivi. I suoi strumenti grafici e a riga di comando sono spiegati nel Manuale utente di VirtualBox e Manuale utente di VirtualBox (PDF).

[Suggerimento] Suggerimento

Eseguire altre distribuzioni GNU/Linux come Ubuntu e Fedora in una virtualizzazione è un ottimo metodo per imparare trucchetti di configurazione. Anche altri sistemi operativi proprietari possono essere eseguiti tranquillamente in queste virtualizzazioni GNU/Linux.