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. Suggerimenti per l'archiviazione dei dati
9.3.1. Configurazione del partizionamento dei dischi
9.3.2. Accedere alle partizioni usando UUID
9.3.3. Configurazione del file system
9.3.4. Creare file system e verificarne l'integrità
9.3.5. Ottimizzare il file system con opzioni di mount
9.3.6. Ottimizzare il file system tramite il superblocco
9.3.7. Ottimizzare il disco rigido
9.3.8. Usare SMART per prevedere danni ai dischi fissi
9.3.9. Espandere lo spazio di archiviazione utilizzabile con LVM
9.3.10. Espandere lo spazio di archiviazione utilizzabile montando un'altra partizione
9.3.11. Espandere lo spazio di archiviazione utilizzabile usando collegamenti simbolici
9.3.12. Espandere lo spazio di archiviazione utilizzabile usando aufs
9.4. Suggerimenti per la cifratura dei dati
9.4.1. Cifratura di dischi removibili con dm-crypt/LUKS
9.4.2. Cifratura della partizione di swap con dm-crypt
9.4.3. Cifratura automatica di file con eCryptfs
9.4.4. Montare automaticamente eCryptfs
9.5. Monitorare, controllare ed avviare l'attività dei programmi
9.5.1. Cronometrare un processo
9.5.2. Priorità di schedulazione
9.5.3. Il comando ps
9.5.4. Il comando top
9.5.5. Elencare i file aperti da un processo
9.5.6. Tenere traccia delle attività di un programma
9.5.7. Identificazione di processi in base a file o socket
9.5.8. Ripetere un comando ad intervalli costanti
9.5.9. Ripetere un comando su diversi file
9.5.10. Avviare un programma dalla GUI
9.5.11. Personalizzare i programmi da avviare
9.5.12. Uccidere un processo
9.5.13. Pianificare compiti da eseguire una volta sola
9.5.14. Pianificare compiti in modo regolare
9.5.15. Tasto Alt-SysRq
9.6. Suggerimenti per l'amministrazione del sistema
9.6.1. Chi è nel sistema?
9.6.2. Avvertire tutti gli utenti
9.6.3. Identificazione dell'hardware
9.6.4. Configurazione dell'hardware
9.6.5. Orario di sistema e hardware
9.6.6. Configurazione del terminale
9.6.7. L'infrastruttura audio
9.6.8. Disabilitare il salvaschermo
9.6.9. Disabilitare i bip sonori
9.6.10. Uso della memoria
9.6.11. Verifica della sicurezza e dell'integrità del sistema
9.7. Il kernel
9.7.1. Kernel Linux 2.6
9.7.2. Parametri del kernel
9.7.3. Header del kernel
9.7.4. Compilare il kernel ed i moduli relativi
9.7.5. Compilare i sorgenti del kernel: il metodo Debian standard
9.7.6. Compilare i sorgenti dei moduli: il metodo Debian standard
9.7.7. Compilare i sorgenti del kernel: il metodo classico
9.7.8. Driver non liberi per l'hardware
9.8. Sistema virtualizzato
9.8.1. Strumenti per la virtualizzazione
9.8.2. Fasi del processo di virtualizzazione
9.8.3. Montare il file immagine di disco virtuale
9.8.4. Sistema chroot
9.8.5. Sistemi desktop multipli

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

9.1. Il programma screen

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.

Tabella 9.1. Elenco di programmi che supportano connessioni di rete interrotte

pacchetto popcon dimensione descrizione
screen * V:11, I:34 952 multiplexer per terminale con emulazione di terminale VT100/ANSI

9.1.1. Scenario di uso per screen(1)

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 consola 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 connessioni per connessioni a tempo, come dial-up o conteggiate a pacchetti, perché si può lasciare un processo attivo mentre si è disconnessio e poi ricollegarvisi successivamente quando è possibile connettersi di nuovo.

9.1.2. Associazioni dei tasti per il comando screen

In una sessione screen tutto l'input da tastiera viene inviato alla finestra attuale, tranne per le combinazioni di tasti per i comandi. Tutte le combinazioni di tasti per i comandi di screen vengono inserite digitando ^A ("Control-A") più un singolo tasto [più eventuali parametri]. Ecco alcune combinazioni di tasti importanti da ricordare.

Tabella 9.2. Elenco di associazioni di tasti per screen

azione associata significato
^A ? mostra una schermata di aiuto (visualizza le associazioni di tasti)
^A c crea una nuova finestra e si sposta in essa
^A n va alla finestra successiva
^A p va alla finestra precedente
^A 0 va alla finestra numero 0
^A 1 va alla finestra numero 1
^A w mostra l'elenco delle finestre
^A a invia Ctrl-A alla finestra attuale come input da tastiera
^A h scrive una copia della schermata della finestra attuale in un file
^A H inizia/termina la registrazione dell'attività della finestra attuale in un file
^A ^X blocca il terminale (protetto da password)
^A d scollega la sessione screen dal terminale
^A DD scollega la sessione di screen e fa il log out

Vedere screen(1) per i dettagli.

9.2. Registrazione e presentazione di dati

9.2.1. Demoni di registro

Molti programmi registrano le proprie attività nella directory "/var/log/".

  • Il demone del registro del kernel: klogd(8)
  • Il demone del registro di sistema: syslogd(8)

Vedere Sezione 3.5.9, «I messaggi di sistema» e Sezione 3.5.10, «I messaggi del kernel».

9.2.2. Analizzatori di registro

Quelli che seguono sono alcuni analizzatori di registro degni di nota ("~Gsecurity::log-analyzer" in aptitude(8)).

Tabella 9.3. Elenco di analizzatori del registro di sistema

pacchetto popcon dimensione descrizione
logwatch * V:3, I:3 2592 analizzatore di registro scritto on Perl con un bell'output
fail2ban * V:4, I:5 660 strumento per interdire IP che causano errori di autenticazione multipli
analog * V:1.0, I:16 4520 analizzatore del registro di server web
awstats * V:1.8, I:3 5200 analizzatore potente e ricco di funzionalità per registro di server web
sarg * V:1.9, I:2 644 generatore di rapporti sull'analisi di squid
pflogsumm * V:0.3, I:0.7 160 strumento per riassunti delle voci di registro di Postfix
syslog-summary * V:0.2, I:0.9 84 riassume i contenuti di un file di registro di sistema
lire * V:0.15, I:0.17 5304 analizzatore di file di registro e generatore di rapporti ricco di funzionalità
fwlogwatch * V:0.10, I:0.2 440 analizzatore del registro del firewall
squidview * V:0.11, I:0.6 244 monitora e analizza i file access.log di squid
visitors * V:0.09, I:0.3 228 analizzatore veloce del registro di server web
swatch * V:0.06, I:0.2 112 visualizzatore di file di registro con corrispondenze con espressioni regolari, evidenziazione ed eventi
crm114 * V:0.06, I:0.18 1300 Controllable Regex Mutilator e filtro per spam (CRM114)
icmpinfo * V:0.04, I:0.2 84 interpreta i messaggi ICMP

[Nota] Nota

CRM114 fornisce un'infrastruttura basata su un linguaggio per scrivere filtri fuzzy con la libreria per espressioni regolari TRE. Il suo utilizzo pià comune è come filtro per la posta spazzatura, ma può anche essere usato come analizzatore di registro.

9.2.3. Registrare le attività della shell in modo pulito

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.

9.2.4. Visualizzazione personalizzata di dati di testo

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.

9.2.5. Visualizzazione personalizzata di date e orari

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'").

Tabella 9.4. Esempi di visualizzazione di date e orari per il comando "ls -l" per lenny

valore dello stile per gli orari localizzazione visualizzazione di data e ora
iso qualsiasi 01-19 00:15
long-iso qualsiasi 2009-01-19 00:15
full-iso qualsiasi 2009-01-19 00:15:16.000000000 +0900
locale C Jan 19 00:15
locale en_US.UTF-8 2009-01-19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M qualsiasi 19.01.09 00:15
+%d.%b.%y %H:%M C o en_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

[Suggerimento] Suggerimento

Si può evitare di digirare 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.

9.2.6. Output colorato per la shell

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}"

9.2.7. Comandi colorati

I comandi colorati sono comodi per ispezionare il loro output in modo interattivo. Nel mio file "~/.bashrc" io includo quanto segue.

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=always'
    alias ll='ls --color=always -l'
    alias la='ls --color=always -A'
    alias less='less -R'
    alias ls='ls --color=always'
    alias grep='grep --color=always'
    alias egrep='egrep --color=always'
    alias fgrep='fgrep --color=always'
    alias zgrep='zgrep --color=always'
else
    alias ll='ls -l'
    alias la='ls -A'
fi

Questo uso degli alias limita gli effetti colorati all'uso interattivo dei comandi. Ha il vantaggio, rispetto all'esportazione della variabile d'ambiente "export GREP_OPTIONS='--color=auto'", che i colori possono essere visti in programmi di paginazione come less(1). Se si desidera eliminare i colori quando si invia l'output con una pipe ad altri comandi, usare nell'esempio precedente per "~/.bashrc" "--color=auto".

[Suggerimento] Suggerimento

Questi alias di colorazione possono essere disattivati nell'ambiente interattivo invocando la shell con il comando "TERM=dumb bash".

9.2.8. Registrare le attività dell'editor per ripetizioni complesse

È 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": exeguire 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.

9.2.9. Registrare l'immagine grafica di un'applicazione X

Ci sono alcuni modi per registrare l'immagine grafica di un'applicazione X, incluso il display di un xterm.

Tabella 9.5. Elenco di strumenti di manipolazione di immagini grafiche

pacchetto popcon dimensione comando
xbase-clients * V:3, I:47 132 xwd(1)
gimp * V:12, I:44 13560 menu della GUI
imagemagick * V:13, I:35 268 import(1)
scrot * V:0.3, I:1.4 80 scrot(1)

9.2.10. Registrare i cambiamenti a file di configurazione

Esistono strumenti specializzati per registrare i cambiamenti nei file di configurazione con l'aiuto del sistema DVCS.

Tabella 9.6. Elenco di pacchetti per registrare la cronologia della configurazione in VCS

pacchetto popcon dimensione descrizione
etckeeper * V:1.0, I:1.5 376 archivia i file di configurazione ed i loro metadati con Git (predefinito), Mercurial o Bazaar (nuovo)
changetrack * V:0.07, I:0.09 152 archivia i file di configurazione con RCS (vecchio)

Io raccomando l'uso del pacchetto etckeeper con git(1) che mette l'intera directory "/etc" sotto il controllo di VCS. La sua guida di installazione ed il suo tutorial si trovano in "/usr/share/doc/etckeeper/README.gz".

Fondamentalmente, l'esecuzione di "sudo etckeeper init" inizializza il repository git per "/etc", esattamente come nel procedimento spiegato in Sezione 10.9.5, «Git per registrare la cronologia della configurazione» ma con speciali script attivati da eventi per impostazioni più accurate.

Quando si cambia la configurazione, si può usare normalmente git(1) per registrare i cambiamenti. Esso registra automaticamente i cambiamenti in modo comodo anche ogni volta che vengono eseguiti i comandi di gestione dei pacchetti.

[Suggerimento] Suggerimento

Si può sfogliare la cronologia dei cambiamenti di "/etc" eseguendo "sudo GIT_DIR=/etc/.git" ottenendo una chiara visualizzazione dei nuovi pacchetti installati, di quelli rimossi e dei cambiamenti di versione dei pacchetti.

9.3. Suggerimenti per l'archiviazione dei dati

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. Vedere anche Sezione 10.3, «I dati binari».

9.3.1. Configurazione del partizionamento dei dischi

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.

Tabella 9.7. Elenco di pacchetti di gestione delle partizioni dei dischi

pacchetto popcon dimensione GPT descrizione
util-linux * V:91, I:99 2216 Non supportato utilità di sistema varie inclusi fdisk(8) e cfdisk(8)
parted * V:1.0, I:9 236 Supportato programma GNU Parted per il ridimensionamento delle partizioni dei dischi
gparted * V:3, I:31 4548 Supportato editor delle partizioni di GNOME basato su libparted
qtparted * V:0.10, I:0.9 NOT_FOUND Supportato editor delle partizioni di KDE basato su libparted
gptsync * V:0.01, I:0.18 72 Supportato sincronizza una tabella delle partizioni MBR classica con una GPT
kpartx * V:1.0, I:1.8 132 Supportato programma per creare la mappatura a device per le partizioni

[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), …) 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 10.3.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.

9.3.2. Accedere alle partizioni usando UUID

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 sia hanno più dischi ed il BIOS non assegna loro un nome di dispositivo costante.

  • mount(8) con l'opzione "-U" può montare un device a blocchi usando l'UUID invece di usare il suo nome di file come "/dev/sda3".
  • Il file "/etc/fstab" (vedere fstab(5)) può usare gli UUID.
  • Anche i bootloader (Sezione 3.3, «Stadio 2: il bootloader») possono usare gli UUID.
[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.5.11, «Il sistema udev».

9.3.3. Configurazione del file system

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

  • mkfs.ext3(8) per creare nuovi file system ext3
  • fsck.ext3(8) per controllare e riparare file system ext3 esistenti
  • tune2fs(8) per configurare i superblocchi di un file system ext3

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 ext3 , sono mkfs.ext3(8) e fsck.ext3(8) (sono un collegamento fisico a mke2fs(8) e e2fsck(8)).

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

Tabella 9.8. Elenco di pacchetti di gestione dei file system

pacchetto popcon dimensione descrizione
e2fsprogs * V:60, I:99 1924 utilità per i file system ext2/ext3/ext4
reiserfsprogs * V:2, I:8 1200 utilità per i file system Reiserfs
dosfstools * V:3, I:31 192 utilità per i file system FAT (Microsoft: MS-DOS, Windows)
xfsprogs * V:2, I:10 3272 utilità per i file system XFS (SGI: IRIX)
ntfsprogs * V:3, I:20 676 utilità per i file system NTFS (Microsoft: Windows NT, …)
jfsutils * V:0.5, I:2 1112 utilità per i file system JFS (IBM: AIX, OS/2)
reiser4progs * V:0.09, I:0.7 1264 utilità per i file system Reiser4
hfsprogs * V:0.06, I:0.8 316 utilità per i file system HFS e HFS Plus (Apple: Mac OS)
btrfs-tools * V:0.3, I:0.6 1288 utilità per i file system btrfs
zerofree * V:0.10, I:0.7 56 programma per impostare a 0 i blocchi liberi in file system ext2/3

[Suggerimento] Suggerimento

Il file system Ext3 è quello predefinito per il sistema Linux ed il suo uso è caldamente raccomandato a meno che non si abbiano buone ragioni specifiche per non farlo. A partire dal kernel Linux 2.6.30 (Debian squeeze), è disponibile anche il file system ext4 che dovrebbe diventare il prossimo file system predefinito per Linux. Ancora più in futuro, il file system btrfs dovrebbe diventare il file system predefinito per i sistemi Linux dopo ext4.

[Avvertimento] Avvertimento

Dato che ext4 è nuovo potrebbe comportare alcune limitazioni per l'utente; per esempio, è necessario un kernel Linux 2.6.30 o successivo per ridimensionare una partizione ext4.

[Suggerimento] Suggerimento

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

9.3.4. Creare file system e verificarne l'integrità

In un sistema Linux, il comando mkfs(8) crea i file system ed il comando fsck(8) fornisce funzioni di controllo dell'integrità e di riparazione dei file system.

[Attenzione] Attenzione

In generale l'esecuzione di fsck su file system montati non è sicura.

[Suggerimento] Suggerimento

Per vedere i risultati del comando fsck(8) avviato dallo script di avvio, controllare i file in "/var/log/fsck/".

[Suggerimento] Suggerimento

Per forzare l'esecuzione del comando fsck(8) in modo sicuro su tutti i file system, compreso il file system root, al prossimo avvio usare "shutdown -F -r now. Vedere la pagina man di shutdown(8) per ulteriori dettagli.

9.3.5. Ottimizzare il file system con opzioni di mount

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 e floppy)
  • La combinazione di opzioni "noexec,nodev,nosuid" è usate 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.3, «Stadio 2: il bootloader»), ad esempio "rootflags=data=journal". Per lenny la modalità di journaling predefinita è "rootflags=data=ordered"; per squeeze è "rootflags=data=writeback".

9.3.6. Ottimizzare il file system tramite il superblocco

Le caratteristiche di un file system possono essere ottimizzate attraverso il suo superblocco usando il comando tune2fs(8).

  • L'esecuzione di "sudo tune2fs -l /dev/hda1" mostra il contenuto del superblocco del file system in "/dev/hda1".
  • L'esecuzione di "sudo tune2fs -c 50 /dev/hda1" cambia per "/dev/hda1" la frequenza dei controlli dei file system (l'esecuzione di fsck all'avvio) a 50 avvii.
  • L'esecuzione di "sudo tune2fs -j /dev/hda1" aggiunge la funzionalità di journaling al file system in "/dev/hda1", cioè converte il file system da ext2 a ext3. (Eseguire questo comando su file system non montati.)
  • L'esecuzione di "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1" converte il filesystem in "/dev/hda1" da ext3 a ext4. (Eseguire questo comando su file system non montati.)
[Avvertimento] Avvertimento

La conversione del file system del dispositivo di avvio al file system ext4 dovrebbe essere evitato fino a che il boot loader GRUB non supporti bene il file system ext4 e non sia stata installata la versione 2.6.30, o una più recente, del kernel Linux.

[Suggerimento] Suggerimento

Nonostante il suo nome, tune2fs(8) non funziona soltanto sui file system ext2, ma anche sui file system ext3 e ext4.

9.3.7. Ottimizzare il disco rigido

[Avvertimento] Avvertimento

Prima di giocare con la configurazione dei dischi controllare il proprio hardware e leggere la pagina man di hdparam(8), perché è una cosa piuttosto pericolosa per l'integrità dei dati.

Si può testare la velocità di accesso ai dischi di un disco rigido, ad esempio "/dev/hda" con "hdparm -tT /dev/hda". È possibile velocizzare alcuni dischi fissi connessi con (E)IDE con "hdparm -q -c3 -d1 -u1 -m16 /dev/hda" che abilita il "supporto (E)IDE per I/O a 32 bit", l'uso dell'opzione "using_dma", imposta l'opzione "interrupt-unmask" e imposta l'"I/O di settori multipli a 16" (pericoloso!).

Si possono testare le capacità della cache in scrittura di un disco fisso, ad esempio "/dev/sda", con "hdparm -W /dev/sda". Si può disabilitare la funzionalità di cache in scrittura con "hdparm -W 0 /dev/sda".

Potrebbe essere possibile leggere CDROM masterizzati male in unità CD-ROM moderne ad alta velocità rallentandole con "setcd -x 2".

9.3.8. Usare SMART per prevedere danni ai dischi fissi

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.

9.3.9. Espandere lo spazio di archiviazione utilizzabile con LVM

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.

[Attenzione] Attenzione

L'uso del sistema LVM attuale può diminuire le garanzie contro la corruzione del file system offerte dai file system con journaling, come ext3fs, a meno di sacrificare le prestazioni di sistema disabilitando la cache in scrittura dei dischi fissi.

9.3.10. Espandere lo spazio di archiviazione utilizzabile montando un'altra partizione

Se è disponibile una nuova partizione vuota (per esempio "/dev/sdx"), la si può formattare con mkfs.ext3(1) e montarla con mount(8) in una directory in cui è necessario avere più spazio. (È necessario copiare il contenuto originale della directory.)

$ sudo mv dir-da-usare vecchia-dir
$ sudo mkfs.ext3 /dev/sdx
$ sudo mount -t ext3 /dev/sdx dir-da-usare
$ sudo cp -a vecchia-dir/* dir-da-usare
$ sudo rm -rf vecchia-dir
[Suggerimento] Suggerimento

In alternativa si può montare un file immagine vuoto del disco (vedere Sezione 10.2.5, «Creare un file con immagine di disco vuoto») come device loop (vedere Sezione 10.2.3, «Montare un file con un'immagine di disco»). Il reale uso del disco cresce mano a mano che vengono archiviati i dati.

9.3.11. Espandere lo spazio di archiviazione utilizzabile usando collegamenti simbolici

Se è disponibile una directory vuota (ad esempio "/percorso/della/dir-vuota" in un'altra partizione con spazio disponibile, si può creare un collegamento simbolico alla directory con ln(8).

$ sudo mv dir-da-usare vecchia-dir
$ sudo mkdir -p /percorso/della/dir-vuota
$ sudo ln -sf /percorso/della/dir-vuota dir-da-usare
$ sudo cp -a vecchia-dir/* dir-da-usare
$ sudo rm -rf vecchia-dir
[Attenzione] Attenzione

Certo software può non funzionare bene con un "collegamento simbolico ad una directory".

9.3.12. Espandere lo spazio di archiviazione utilizzabile usando aufs

Se è disponibile dello spazio utilizzabile in un'altra partizione (ad esempio "/percorso/della/"), si può creare in essa una directory e impilarla nella directory in cui si ha bisogno di spazio usando aufs.

$ sudo mv dir-da-usare vecchia-dir
$ sudo mkdir dir-da-usare
$ sudo mkdir -p /percorso/della/dir-vuota
$ sudo mount -t aufs -o br:/percorso/della/dir-vuota:vecchia-dir none dir-da-usare
[Attenzione] Attenzione

Non è una buona idea usare aufs per archiviazione di dati a lungo termine, dato che è uno strumento in fase di sviluppo e cambiamenti nella sua struttura potrebbero causare problemi.

[Suggerimento] Suggerimento

Per poter usare aufs, devono essere installati il suo pacchetto di utilità aufs-tools e un pacchetto con il modulo del kernel per aufs, come aufs-modules-2.6-amd64.

[Suggerimento] Suggerimento

aufs è usato da molti progetti moderni per CD live per fornire un file system root scrivibile.

9.4. Suggerimenti per la cifratura dei dati

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.4, «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.

Tabella 9.9. Elenco di utilità per la cifratura dei dati

pacchetto popcon dimensione descrizione
cryptsetup * V:3, I:5 1172 utilità per device a blocchi cifrati (dm-crypt / LUKS)
cryptmount * V:0.2, I:0.5 360 utilità per device a blocchi cifrati (dm-crypt / LUKS) con particolare attenzione al montaggio/smontaggio da parte di utenti normali
ecryptfs-utils * V:0.2, I:0.3 416 utilità per file system stack cifrati (eCryptfs)

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.4, «Infrastruttura di sicurezza dei dati».

9.4.1. Cifratura di dischi removibili con dm-crypt/LUKS

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

# badblocks -c 10240 -s -w -t random -v /dev/sdx
# shred -v -n 1 /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup luksOpen /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.10, «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 in un formato diverso, ad esempio ext3 usando "mkfs.ext3 /dev/sdx1".

[Nota] Nota

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

9.4.2. Cifratura della partizione di swap con dm-crypt

In questo esempio si suppone cheil 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

9.4.3. Cifratura automatica di file con eCryptfs

È 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.

9.4.4. Montare automaticamente eCryptfs

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»).

9.5. Monitorare, controllare ed avviare l'attività dei programmi

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

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

pacchetto popcon dimensione descrizione
coreutils * V:92, I:99 13828 nice(1): esegue un programma con priorità di schedulazione modificata
bsdutils * V:77, I:99 196 renice(1): modifica la priorità di schedulazione di un processo in esecuzione
procps * V:86, I:99 772 utilità per il file system "/proc": ps(1), top(1), kill(1), watch(1), …
psmisc * V:47, I:88 716 utilità per il file system "/proc": killall(1), fuser(1), peekfd(1), pstree(1)
time * V:6, I:84 152 time(1): esegue un programma per riportare l'uso delle risorse di sistema in funzione del tempo
sysstat * V:4, I:9 872 sar(1), iostat(1), mpstat(1), …: strumenti per le prestazioni di sistema per Linux
isag * V:0.07, I:0.4 152 Interactive System Activity Grapher (tracciamento interattivo dell'attivita) per sysstat
lsof * V:16, I:90 444 lsof(8): elenca, usando l'opzione "-p", i file aperti da un processo in esecuzione
strace * V:5, I:39 396 strace(1): traccia le chiamate e i segnali di sistema
ltrace * V:0.3, I:2 188 ltrace(1): traccia le chiamate di libreria
xtrace * V:0.02, I:0.18 372 xtrace(1): traccia la comunicazione tra client e server X11
powertop * V:0.7, I:12 524 powertop(1): informazioni sull'uso dell'alimentazione in portatili basati su Intel
cron * V:91, I:99 240 esegue processi dal demone cron(8) sullo sfondo in base ad una pianificazione
anacron * V:41, I:44 120 pianificatore di comandi in stile cron, per i sistemi che non sono in esecuzione 24 ore al giorno
at * V:50, I:83 220 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.

9.5.1. Cronometrare un processo

Mostrare il tempo usato dal processo invocato da un comaando.

# time un_qualche_comando >/dev/null
real    0m0.035s       # tempo di orologio (tempo reale trascorso)
user    0m0.000s       # tempo in modalità utente
sys     0m0.020s       # tempo in modalità kernel

9.5.2. Priorità di schedulazione

Per controllare la priorità di schedulazione di un processo è usato il valore di nice.

Tabella 9.11. Elenco di valori di nice per la priorità di schedulazione

valore di nice priorità di schedulazione
19 processo dalla priorità più bassa possibile (nice - gentile)
0 processo a priorità molto alta per l'utente
-20 processo a priorità molto alta per root (not-nice - non gentile)

# nice  -19 top                                      # molto gentile
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # molto veloce

A volte un valore molto alto di nice fa più male che bene al sistema; usare quindi questo comando con molta cautela.

9.5.3. Il comando ps

Il comando ps(1) in Debian supporta sia le funzionalità BSD sia quelle SystemV ed aiuta ad identificare l'attività dei processi in modo statico.

Tabella 9.12. Elenco degli stili per il comando ps

stile comando tipico funzione
BSD ps aux mostra %CPU %MEM
System V ps -efH mostra PPID

È possibile uccidere i processi figli zombie (defunti) tramite l'ID di processo del genitore identificato dal campo "PPID".

Il comando pstree(1) mostra un albero dei processi.

9.5.4. Il comando top

top(1) in Debian ha molte funzionalità e aiuta ad indentificare in modo dinamico i processi che si stanno comportando in modo strano.

Tabella 9.13. Elenco dei comandi per top

tasto del comando descrizione della risposta
h o ? mostra l'aiuto
f imposta/reimposta i campi mostrati
o riordina i campi mostrati
F imposta il campo da usare come chiave di ordinamento
k uccide un processo
r modifica il valore di nice di un processo
q esce dal comando top

9.5.5. Elencare i file aperti da un processo

È possibile elencare tutti i file aperti da un processo attraverso il suo PID (Identificativo di processo), ad esempio 1, con il comando seguente.

$ sudo lsof -p 1

Di solito il processo con PID=1 è il programma init.

9.5.6. Tenere traccia delle attività di un programma

Si può tenere traccia dell'attività di un programma con strace(1), ltrace(1) o xtrace(1) rispettivamente per quello che riguarda chiamate e segnali di sistema, chiamate di libreria o comunicazioni tra client e server X11.

Si può tenere traccia delle chiamte di sistema del comando ls nel modo seguente.

$ sudo strace ls

9.5.7. Identificazione di processi in base a file o socket

Usando fuser(1) è anche possibile identificare i processi in base ai file usando, ad esempio per "/var/log/mail.log" con il comando seguente.

$ sudo fuser -v /var/log/mail.log
                     USER        PID ACCESS COMMAND
/var/log/mail.log:   root       2946 F.... syslogd

Come si vede il file "/var/log/mail.log" è aperto in scrittura dal comando syslogd(8).

Usando fuser(1) si può anche identificare i processi in base ai socket, ad esempio per "smtp/tcp" con il comando seguente.

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

Ora si può vedere che sul sistema è in esecuzione exim4(8) per gestire le connessioni TCP alla porta SMTP (25).

9.5.8. Ripetere un comando ad intervalli costanti

watch(1) esegue un programma in modo ripetitivo ad intervalli regolari mostrando il suo output sullo schermo.

$ watch w

Questo comando mostra chi è attualmente connesso al sistema in modo aggiornato ogni 2 secondi.

9.5.9. Ripetere un comando su diversi file

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».

9.5.10. Avviare un programma dalla GUI

È possibile avviare un processo dalla interfaccia utente grafica (GUI).

Nell'ambiente desktop GNOME, un programma può essere avviato con le opzioni appropriate facendo doppio clic sulla icona del lanciatore, trascinando e rilasciando un'icona di file sull'icona del lanciatore o usando la voce di menu"Apri con …" che si ottiene cliccando con il pulsante destro sull'icona di un file. Anche in KDE si possono fare le azioni equivalenti.

Quello che segue è un esempio per GNOME di creazione di un'icona di lanciatore per mc(1) avviato in gnome-terminal(1).

Creare un programma "mc-term" eseguibile nel modo seguente.

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

Creare un lanciatore sul desktop nel modo seguente.

  1. Cliccare col pulsante destro in uno spazio libero sul desktop e selezionare "Crea lanciatore…".
  2. Impostare "Tipo" ad "Applicazione".
  3. Impostare "Nome" a "mc".
  4. Impostare "Comando" a "mc-term %f".
  5. Fare clic su "OK".

Creare un'associazione Apri-con nel modo seguente.

  1. Fare clic con il tasto destro su una cartella per selezionare "Apri con altra applicazione…".
  2. Cliccare ed aprire il dialogo "Usare un comando personalizzato" e inserire "mc-term %f".
  3. Fare clic su "Apri".
[Suggerimento] Suggerimento

Un lanciatore è un file in "~/Desktop" con estensione ".desktop".

9.5.11. Personalizzare i programmi da avviare

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

  • Menu di configurazione delle applicazioni:

    • Desktop GNOME: "Sistema" → "Preferenze" → "Applicazioni preferite"
    • Desktop KDE: "K" → "Centro di controllo" → "Componenti di KDE" → "Scelta componenti"
    • Browser Iceweasel: "Modifica" → "Preferenze" → "Applicazioni"
    • mc(1): "/etc/mc/mc.ext"
  • Variabili d'ambiente quali "$BROWSER", "$EDITOR", "$VISUAL" e "$PAGER" (vedere eviron(7))
  • Il sistema update-alternatives(8) per i programmi come "editor", "view", "x-www-browser", "gnome-www-browser" e "www-browser" (vedere Sezione 1.4.7, «Impostare un editor di testi predefinito»)
  • Il contenuto dei file "~/.mailcap" e "/etc/mailcap" che associano i tipi MIME con programmi (vedere mailcap(5))
  • Il contenuto dei file "~/.mime.types" e "/etc/mime.types" che associano le estensioni dei nomi di file con tipi MIME (vedere run-mailcap(1))
[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

9.5.12. Uccidere un processo

Per uccidere un processo (o inviare ad esso un segnale) in base al suo ID (identificativo) usare kill(1).

Per fare la stessa cosa ma in base al nome del comando del processo o ad altri attributi, usare killall(1) o pkill(1).

Tabella 9.14. Elenco dei segnali usati comunemente con il comando kill

valore del segnale nome del segnale funzione
1 HUP riavvia il demone
15 TERM normale uccisione
9 KILL uccisione forzata

9.5.13. Pianificare compiti da eseguire una volta sola

Per pianificare un compito da eseguire una volta soltanto eseguire il comando at(1) nel modo seguente.

$ echo 'comando -argomenti'| at 3:40 monday

9.5.14. Pianificare compiti in modo regolare

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

Se si è membri del gruppo crontab, 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".

9.5.15. Tasto Alt-SysRq

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.

Tabella 9.15. Elenco di tasti per il comando SAK

tasto premuto dopo Alt-R_Sist descrizione della azione
r ripristina la tastiera dalla modalità raw dopo un crash di X
0 cambia il livello di visualizzazione del registro sulla console a 0 per ridurre i messaggi di errore
k uccide (kill) tutti i processi nella console virtuale attuale
e invia un segnale SIGTERM a tutti i processi, tranne init(8)
i invia un segnale SIGKILL a tutti i processi, tranne init(8)
s sincronizza tutti i file system montati
u monta nuovamente tutti i file system in sola letturra (umount)
b riavvia (reboot) il sistema senza sincronizzare o smontare i file system

La combinazione di "Alt-R_Sist s", "Alt-R_Sist u" e "Alt-R_Sist r" è buona per uscire da situazioni veramente brutte.

Vedere "/usr/share/doc/linux-doc-2.6.*/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.

9.6. Suggerimenti per l'amministrazione del sistema

9.6.1. Chi è nel sistema?

Si può controllare chi è connesso al sistema nei modi seguenti.

  • who(1) mostra chi ha fatto il login ed è ancora connesso.
  • w(1) mostra l'elenco di chi ha fatto il login ed è connesso e cosa sta facendo.
  • last(1) mostra l'elenco degli utenti che hanno fatto il login più recentemente.
  • lastb(1) mostra l'elenco degli utenti che hanno tentato il login non riuscendovi più recentemente.
[Suggerimento] Suggerimento

Queste informazioni sugli utenti sono contenute in "/var/run/utmp", "/var/log/wtmp" e "/var/run/utmp". Vedere login(1) e utmp(5).

9.6.2. Avvertire tutti gli utenti

Si può mandare un messaggio a tutti gli utenti che sono connessi al sistema con wall(1) nel modo seguente.

$ echo "Arresto pianificato del sistema tra 1 ora" | wall

9.6.3. Identificazione dell'hardware

Per i dispositivi di tipo simile PCI (AGP, PCI-Express, CardBus, ExpressCard, ecc.), lspci(8) (probabilmente con l'opzione "-nn") è un buon punto di partenza per l'identificazione dell'hardware.

In alternativa, si può identificare l'hardware leggendo il contenuto di "/proc/bus/pci/devices" o sfogliando l'albero di directory in "/sys/bus/pci" (vedere Sezione 1.2.12, «procfs e sysfs»).

Tabella 9.16. Elenco di strumenti per l'identificazione dell'hardware

pacchetto popcon dimensione descrizione
pciutils * V:15, I:92 908 utilità PCI Linux: lspci(8)
usbutils * V:38, I:97 604 utilità Linux USB: lsusb(8)
pcmciautils * V:0.8, I:13 100 utilità PCMCIA per Linux 2.6: pccardctl(8)
scsitools * V:0.18, I:1.1 484 raccosta di strumenti per la gestione dell'hardware SCSI:lsscsi(8)
pnputils * V:0.01, I:0.16 108 utilità BIOS Plug and Play: lspnp(8)
procinfo * V:0.3, I:3 164 informazioni sul sistema ottenute da "/proc": lsdev(8)
lshw * V:1.2, I:7 604 informazioni sulla configurazione hardware: lshw(1)
discover * V:2, I:15 120 sistema di identificazione dell'hardware: discover(8)

9.6.4. Configurazione dell'hardware

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.

Tabella 9.17. Elenco di strumenti di configurazione dell'hardware

pacchetto popcon dimensione descrizione
hal * V:37, I:49 1668 HAL (Hardware Abstraction Layer): lshal(1)
console-tools * V:47, I:84 956 utilità Linux per i tipi di carattere e la mappa di tastiera in console
x11-xserver-utils * V:34, I:51 544 utilità del server X: xset(1), xmodmap(1)
acpid * V:51, I:91 208 demone per gestire eventi inviati dall'ACPI (Advanced Configuration and Power Interface, interfaccia avanzata per configurazione ed energia)
acpi * V:4, I:35 92 utilità per mostrare informazioni sui device ACPI
apmd * V:1.2, I:11 252 demone per gestire eventi inviati dall'APM (Advanced Power Management, gestione avanzata dell'energia)
noflushd * V:0.04, I:0.09 248 demone per permettere di fermare la rotazione dei dischi fissi inattivi
sleepd * V:0.07, I:0.09 148 demone per sospendere un portatile durante l'inattività
hdparm * V:11, I:38 304 ottimizzazione degli accessi al disco fisso (vedere Sezione 9.3.7, «Ottimizzare il disco rigido»)
smartmontools * V:7, I:23 1076 controllo e monitoraggio dei sistemi di archiviazione usando S.M.A.R.T.
setserial * V:1.5, I:3 180 raccolta di strumenti per la gestione delle porte seriali
memtest86+ * V:0.5, I:5 652 raccolta di strumenti per la gestione di hardware di memoria
scsitools * V:0.18, I:1.1 484 raccolta di strumenti per la gestione di hardware SCSI
tpconfig * V:0.3, I:0.5 220 utilità per configurare i dispositivi touchpad
setcd * V:0.06, I:0.3 28 ottimizzazione dell'accesso alle unità CD
big-cursor * I:0.16 68 puntatori del mouse più grandi per X

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.

9.6.5. Orario di sistema e hardware

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 UT(GMT).

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

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.

Vedere la documentazione seguente.

[Suggerimento] Suggerimento

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

9.6.6. Configurazione del terminale

Ci sono diversi componenti per configurare le funzionalità della console a caratteri e il sistema ncurses(3).

  • Il file "/etc/terminfo/*/*" (terminfo(5))
  • La variabile d'ambiente "$TERM" (term(7))
  • setterm(1), stty(1), tic(1) e toe(1)

:(Se, con un xterm non Debian, la voce terminfo per xterm non funziona, cambiare il tipo di terminale "$TERM" da "xterm" ad una delle versioni con funzionalità limitate come "xterm-r6" quando si fa il login ad un sistema Debian da remoto. Per ulteriori iedere "/usr/share/doc/libncurses5/FAQ" .

9.6.7. L'infrastruttura audio

I driver di dispositivo per le schede audio per l'attuale Linux 2.6 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).

Eseguire "dpkg-reconfigure linux-sound-base" per selezionare l'uso di ALSA per il sistema audio attraverso l'inserimento in una lista nera di moduli del kernel. A meno di avere hardware audio estremamente recente, l'infrastruttura udev dovrebbe configurare il sistema audio.

[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.

Tabella 9.18. Elenco di pacchetti relativi all'audio

pacchetto popcon dimensione descrizione
linux-sound-base * V:39, I:49 132 pacchetto base per i sistemi audio ALSA e OSS
alsa-base * V:2, I:48 500 file di configurazione del driver ALSA
alsa-utils * V:34, I:48 1984 utilità per configurare ed usare ALSA
oss-compat * V:28, I:33 60 compatibilità OSS in ALSA per prevenire errori "/dev/dsp not found"
esound-common * V:19, I:56 232 file comuni di ESD (Enlightened Sound Daemon) common (Enlightenment e GNOME)
esound * V:0.6, I:6 80 server ESD (Enlightened Sound Daemon) (Enlightenment e GNOME)
esound-clients * V:7, I:20 188 client ESD (Enlightened Sound Daemon) (Enlightenment e GNOME)
libesd0 * V:32, I:55 84 libreria ESD (Enlightened Sound Daemon) (Enlightenment e GNOME)
arts * I:7 40 server aRts (KDE)
libarts1c2a * V:13, I:23 5968 libreria aRts (KDE)
libartsc0 * V:10, I:32 48 libreria aRts (KDE)
jackd * V:0.8, I:3 32 server JACK (JACK Audio Connection Kit) (bassa latenza)
libjack0 * V:1.3, I:33 164 libreria JACK (JACK Audio Connection Kit) (bassa latenza)
nas * V:0.14, I:0.2 328 server NAS (Network Audio System)
libaudio2 * V:26, I:46 200 libreria NAS (Network Audio System)
pulseaudio * V:3, I:5 4052 server PulseAudio, sostituto per ESD
libpulse0 * V:15, I:36 792 libreria client PulseAudio, sostituto per ESD
libgstreamer0.10-0 * V:30, I:51 3368 GStreamer: motore audio di GNOME
libxine1 * V:5, I:27 36 xine: vecchio motore audio di KDE
libphonon4 * I:16 572 Phonon: nuovo motore audio di KDE

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

9.6.8. Disabilitare il salvaschermo

Per disabilitare il salvaschermo usare i comandi seguenti.

Tabella 9.19. Elenco di comandi per disabilitare il salvaschermo

ambiente comando
Console Linux setterm -powersave off
X Window (disabilitare il salvaschermo) xset s off
X Window (disabilitare DPMS) xset -dpms
X Window (configurazione tramite GUI del salvaschermo) xscreensaver-command -prefs

9.6.9. Disabilitare i bip sonori

Per disabilitare i bip sonori è sempre possibile disconnettere l'altoparlante del PC; la rimozione del modulo pcspkr del kernel fa stessa cosa per conto dell'utente.

Il comando seguente evita che il programma readline(3) usato da bash(1) emetta suoni bip quando incontra "\a" (ASCII=7).

$ echo "set bell-style none">> ~/.inputrc

9.6.10. Uso della memoria

I messaggi di avvio del kernel nel file "/var/log/dmesg" contengono la dimensione esatta della memoria disponibile.

free(1) e top(1) mostrano informazioni sulle risorse di memoria nel sistema mentre è in funzione.

$ grep '\] Memory' /var/log/dmesg
[    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
$ free -k
             total       used       free     shared    buffers     cached
Mem:        997184     976928      20256          0     129592     171932
-/+ buffers/cache:     675404     321780
Swap:      4545576          4    4545572
[Suggerimento] Suggerimento

Non ci si deve preoccupare della grande dimensione del valore "used" (usata) e della piccolo valore di "free" (libera) nella riga "Mem:", ma si può invece leggere la riga sottostante (con 675404 e 321780 nell'esempio precedente) e rilassarsi.

Per il mio MacBook con 1GB=1048576k DRAM (il sistema video ne ruba un po'), vedo le informazioni seguenti.

Tabella 9.20. Elenco di dimensioni della memoria riportate

fonte dimensione
Dimensione totale in dmesg 1016784k = 1GB - 31792k
Libera in dmesg 990528k
Dimensione totale nella shell 997184k
Libera nella shell 20256k (ma in effetti 321780k)

9.6.11. Verifica della sicurezza e dell'integrità del sistema

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.

Tabella 9.21. Elenco di strumenti per verificare la sicurezza e l'integrità del sistema

pacchetto popcon dimensione descrizione
logcheck * V:3, I:3 152 demone per inviare via posta anomalie nei file di registro di sistema all'amministratore
debsums * V:2, I:3 320 utilità per controllare i file dei pacchetti installati con le somme di controllo MD5
chkrootkit * V:2, I:6 808 rilevatore di rootkit
clamav * V:2, I:11 616 utilità anti-virus per Unix - interfaccia a riga di comando
tiger * V:0.8, I:1.0 3148 riporta vulnerabilità nella sicurezza di sistema
tripwire * V:0.6, I:0.7 9456 strumento di controllo dell'integrità di file e directory
john * V:0.7, I:2 532 strumento di violazione delle password attive
aide * V:0.2, I:0.4 1213 AIDE - ambiente avanzato di rilevamento delle intrusioni - binario statico
bastille * V:0.12, I:0.4 1960 strumento di rafforzamento della sicurezza
integrit * V:0.08, I:0.16 440 programma di controllo dell'integrità di file
crack * V:0.03, I:0.2 204 programma per indovinare password

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.

9.7. Il kernel

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

9.7.1. Kernel Linux 2.6

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

  • I device vengono creati dal sistema udev (vedere Sezione 3.5.11, «Il sistema udev»).
  • L'accesso in lettura/scrittura ai dispositivi CD/DVD IDE non usa il modulo ide-scsi.
  • Le funzioni di filtraggio dei pacchetti di rete usando i moduli iptable del kernel.

9.7.2. Parametri del kernel

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-2.6.*/Documentation/filesystems/*") fornita dai pacchetti linux-doc-2.6.*.

9.7.3. Header del kernel

La maggior parte dei normali programmi non ha bisogno degli header del kernel per essere compilata, anzi di fatto può corrompersi se si usano direttamente gli header. Questi programmi dovrebbero essere compilati nel sistema Debian usando gli header in "/usr/include/linux" e "/usr/include/asm" forniti dal pacchetto libc6-dev (creato dal pacchetto sorgente glibc).

[Nota] Nota

Per compilare alcuni programmi specifici per il kernel, come moduli per il kernel da fonti esterne e il demone automounter (amd), è necessario includere nella propria riga di comando il percorso ai corrispondenti header del kernel, ad esempio "-I/usr/src/linux-particular-version/include/". module-assistant(8) (o la suo forma abbbreviata m-a) aiuta l'utente a compilare ed installare pacchetti di moduli in modo semplice per uno o più kernel personalizzati.

9.7.4. Compilare il kernel ed i moduli relativi

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

Tabella 9.22. Elenco di pacchetti chiave da installare per la ricompilazione del kernel in un sistema Debian

pacchetto popcon dimensione descrizione
build-essential * I:47 48 pacchetti essenziali per compilare pacchetti Debian: make, gcc, …
bzip2 * V:51, I:79 132 utilità di compressione e decompressione per file bz2
libncurses5-dev * V:4, I:25 6900 librerie di sviluppo e documentazione per ncurses
git * V:5, I:17 10632 git: sistema distribuito di controllo delle revisioni usato dal kernel Linux
fakeroot * V:4, I:32 444 fornisce un ambiente fakeroot per compilare pacchetti da utente non root
initramfs-tools * V:49, I:98 468 strumento per compilare un initramfs (specifico di Debian)
kernel-package * V:1.5, I:14 2316 strumento per compilare pacchetti con kernel Linux (specifico di Debian)
module-assistant * V:2, I:18 568 strumento per aiutare a compilare pacchetti con moduli (specifico di Debian)
dkms * V:6, I:9 468 DKMS (Dynamic Kernel Module Support, supporto dinamico per i noduli del kernel) (generico)
devscripts * V:2, I:11 1696 script di aiuto per i manutentori di pacchetti Debian (specifico di Debian)
linux-tree-2.6.* N/D N/D pacchetto con l'albero dei sorgenti del kernel Linux (specifico di Debian)

Se si usa initrd nello Sezione 3.3, «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. Verrà utilizzata per squeeze per il mantenimento dei moduli esterni all'albero dei sorgenti. Rende anche molto facile la ricompilazione dei moduli quando si aggiornano i kernel.

9.7.5. Compilare i sorgenti del kernel: il metodo Debian standard

Il metodo Debian standard per compilare i sorgenti del kernel per creare un pacchetto con kernel personalizzato usa make-kpkg(1). La documentazione ufficiale è nel file "/usr/share/doc/kernel-package/README.gz" (alla fine). Per la personalizzazione vedere kernel-pkg.conf(5) e kernel-img.conf(5).

Questo è un esempio per un sistema amd64.

# aptitude install linux-tree-<versione>
$ cd /usr/src
$ tar -xjvf linux-source-<versione>.tar.bz2
$ cd linux-source-<versione>
$ cp /boot/config-<vecchiaversione> .config
$ make menuconfig
 ...
$ make-kpkg clean
$ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=rev.01 kernel_image modules_image
$ cd ..
# dpkg -i linux-image*.deb

Riavviare il sistema con il nuovo kernel con "shutdown -r now".

[Attenzione] Attenzione

Quando si vuole creare un kernel non-modulare compilato per una sola macchina, invocare make-kpkg senza l'opzione "--initrd", dato che initrd non è in quel caso usato. Non è necessario invocare i comandi "make oldconfig" e "make dep" dato che sono invocati da "make-kpkg kernel_image".

9.7.6. Compilare i sorgenti dei moduli: il metodo Debian standard

Il metodo Debian standard per creare ed installare un pacchetto con un modulo personalizzato per un pacchetto con kernel personalizzato fa uso dei pacchetti module-assistant(8) e module-source. Ad esempio i comandi seguenti compilano ed installano il pacchetto per il modulo unionfs per il kernel.

$ sudo aptitude install module-assistant
...
$ sudo aptitude install unionfs-source unionfs-tools unionfs-utils
$ sudo m-a update
$ sudo m-a prepare
$ sudo m-a auto-install unionfs
...
$ sudo apt-get autoremove

9.7.7. Compilare i sorgenti del kernel: il metodo classico

È sempre possibile compilare il kernel Linux dai sorgenti originali con il metodo classico. In questo caso è necessario prendersi cura manualmente dei dettagli della configurazione del sistema.

$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<versione>.tar.bz2
$ tar -xjvf linux-<versione>.tar.bz2
$ cd linux-<versione>
$ cp /boot/config-<versione> .config
$ make menuconfig
 ...
$ make dep; make bzImage
$ make modules
# cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<versione>
# make modules_install
# depmod -a
# update-initramfs -c -k <versione>

Impostare il bootloader in uno dei modi seguenti.

  • Modificare "/etc/lilo.conf" ed eseguire "/sbin/lilo", se si usa lilo.
  • Modificare "/boot/grub/menu.lst", se si usa grub.

Riavviare il sistema con il nuovo kernel con "shutdown -r now".

9.7.8. Driver non liberi per l'hardware

Sebbene la maggior parte dei driver per l'hardware sia disponibile come software libero e come parte del sistema Debian, potrebbe essere necessario caricare alcuni driver non liberi esterni per supportare dell'hardware specifico, come Winmodem, sul proprio sistema.

Controllare le risorse di informazioni pertinenti.

9.8. Sistema virtualizzato

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

9.8.1. Strumenti per la virtualizzazione

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.23. Elenco di strumenti di virtualizzazione

pacchetto popcon dimensione descrizione
schroot * V:1.0, I:1.6 2460 strumento specializzato per eseguire pacchetti Debian binari in chroot
sbuild * V:0.11, I:0.3 428 strumento per compilare pacchetti Debian binari da sorgenti Debian
pbuilder * V:0.5, I:2 1192 creatore di pacchetti personali per pacchetti Debian
debootstrap * V:1.6, I:12 268 avviare un sistema Debian base (scritto in sh)
cdebootstrap * V:0.3, I:2 116 avviare un sistema Debian (scritto in C)
rootstrap * V:0.02, I:0.17 156 strumento per creare immagini complete di un file system Linux
virt-manager * V:0.5, I:1.6 5908 Virtual Machine Manager: applicazione desktop per gestire macchine virtuali
libvirt-bin * V:1.4, I:2 2240 programmi per la libreria libvirt
user-mode-linux * V:0.07, I:0.3 20540 Linux User-mode (kernel)
bochs * V:0.05, I:0.3 3280 Bochs: emulatore PC IA-32
qemu * V:0.6, I:6 460 QEMU: veloce emulatore generico di processore
qemu-system * V:2, I:3 38196 QEMU: binari per emulazione completa del sistema
qemu-user * V:0.3, I:3 16716 QEMU: binari per emulazione in spazio utente
qemu-utils * V:0.4, I:3 756 QEMU: utilità
qemu-kvm * V:1.3, I:2 4308 KVM: virtualizzazione completa su hardware x86 convirtualizzazione assistita da hardware
virtualbox-ose * V:2, I:4 31728 VirtualBox: soluzione per virtualizzazione i dx86 su i386 e amd64
xen-tools * V:0.2, I:1.9 1236 strumenti per gestire server virtuali XEN Debian
wine * V:1.7, I:13 96 Wine: implementazione della API Windows (suite standard)
dosbox * V:0.5, I:2 2460 DOSBox: emulatore x86 con grafica Tandy/Herc/CGA/EGA/VGA/SVGA, suono e DOS
dosemu * V:0.2, I:1.2 5940 DOSEMU: emulatore DOS di Linux
vzctl * V:0.7, I:1.1 1056 OpenVZ, soluzione per virtualizzazione server - strumenti di controllo
vzquota * V:0.7, I:1.2 204 OpenVZ, soluzione per virtualizzazione server - strumenti per quote
lxc * V:0.05, I:0.2 744 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.

9.8.2. Fasi del processo di virtualizzazione

[Nota] Nota

Alcune funzionalità descritte in seguito sono disponibili solamente in squeeze.

[Nota] Nota

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

Il tipico processo di virtualizzazione comporta diverse fasi.

9.8.3. Montare il file immagine di disco virtuale

Per i file immagine raw di disco, vedere Sezione 10.2, «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 10.2.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).

9.8.4. Sistema chroot

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.

9.8.5. Sistemi desktop multipli

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 il sistema Debian per QEMU si può creare con ipiccoli 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.