Capitolo 9. Suggerimenti per il sistema

Indice

9.1. The console tips
9.1.1. Registrare le attività della shell in modo pulito
9.1.2. Il programma screen
9.1.3. Navigating around directories
9.1.4. Readline wrapper
9.2. Personalizzare vim
9.2.1. Customizing vim with internal features
9.2.2. Customizing vim with external packages
9.3. Registrazione e presentazione di dati
9.3.1. Demoni di registro
9.3.2. Analizzatori di registro
9.3.3. Visualizzazione personalizzata di dati di testo
9.3.4. Visualizzazione personalizzata di date e orari
9.3.5. Output colorato per la shell
9.3.6. Comandi colorati
9.3.7. Registrare le attività dell'editor per ripetizioni complesse
9.3.8. Registrare l'immagine grafica di un'applicazione X
9.3.9. Registrare i cambiamenti a file di configurazione
9.4. Monitorare, controllare ed avviare l'attività dei programmi
9.4.1. Cronometrare un processo
9.4.2. Priorità di schedulazione
9.4.3. Il comando ps
9.4.4. Il comando top
9.4.5. Elencare i file aperti da un processo
9.4.6. Tenere traccia delle attività di un programma
9.4.7. Identificazione di processi in base a file o socket
9.4.8. Ripetere un comando ad intervalli costanti
9.4.9. Ripetere un comando su diversi file
9.4.10. Avviare un programma dalla GUI
9.4.11. Personalizzare i programmi da avviare
9.4.12. Uccidere un processo
9.4.13. Pianificare compiti da eseguire una volta sola
9.4.14. Pianificare compiti in modo regolare
9.4.15. Tasto Alt-SysRq
9.5. Suggerimenti per l'amministrazione del sistema
9.5.1. Chi è nel sistema?
9.5.2. Avvertire tutti gli utenti
9.5.3. Identificazione dell'hardware
9.5.4. Configurazione dell'hardware
9.5.5. Orario di sistema e hardware
9.5.6. Configurazione del terminale
9.5.7. L'infrastruttura audio
9.5.8. Disabilitare il salvaschermo
9.5.9. Disabilitare i bip sonori
9.5.10. Uso della memoria
9.5.11. Verifica della sicurezza e dell'integrità del sistema
9.6. Suggerimenti per l'archiviazione dei dati
9.6.1. Uso dello spazio su disco
9.6.2. Configurazione del partizionamento dei dischi
9.6.3. Accedere alle partizioni usando UUID
9.6.4. LVM2
9.6.5. Configurazione del file system
9.6.6. Creare file system e verificarne l'integrità
9.6.7. Ottimizzare il file system con opzioni di mount
9.6.8. Ottimizzare il file system tramite il superblocco
9.6.9. Ottimizzare il disco rigido
9.6.10. Ottimizzare le unità a stato solido
9.6.11. Usare SMART per prevedere danni ai dischi fissi
9.6.12. Specificare una directory per l'archiviazione di dati temporanei usando $TMPDIR
9.6.13. Espandere lo spazio di archiviazione utilizzabile con LVM
9.6.14. Espandere lo spazio di archiviazione utilizzabile montando un'altra partizione
9.6.15. Espandere lo spazio di archiviazione utilizzabile montando un collegamento ad un'altra directory
9.6.16. Espandere lo spazio di archiviazione utilizzabile montando un'altra directory da sovrapporre
9.6.17. Espandere lo spazio di archiviazione utilizzabile usando collegamenti simbolici
9.7. Immagine del disco
9.7.1. Creare un file con un'immagine di disco
9.7.2. Scrivere direttamente sul disco
9.7.3. Montare un file con un'immagine di disco
9.7.4. Pulire un file con un'immagine di disco
9.7.5. Creare un file con immagine di disco vuoto
9.7.6. Creare un file con un'immagine ISO9660
9.7.7. Scrivere direttamente sul CD/DVD-R/RW
9.7.8. Montare un file con un'immagine ISO9660
9.8. I dati binari
9.8.1. Visualizzare e modificare dati binari
9.8.2. Manipolare file senza montare i dischi
9.8.3. Dati ridondanti
9.8.4. recupero di file dati ed analisi forensi
9.8.5. Suddividere un file grande in file più piccoli
9.8.6. Pulire il contenuto di file
9.8.7. File fittizi
9.8.8. Cancellare un intero disco fisso
9.8.9. Cancellare area inutilizzate di un disco fisso
9.8.10. De-cancellare file cancellati ma ancora aperti
9.8.11. Cercare tutti i collegamenti fisici
9.8.12. Consumo invisibile dello spazio su disco
9.9. Suggerimenti per la cifratura dei dati
9.9.1. Cifratura di dischi removibili con dm-crypt/LUKS
9.9.2. Montare dischi removibili con dm-crypt/LUKS
9.10. Il kernel
9.10.1. Parametri del kernel
9.10.2. Header del kernel
9.10.3. Compilare il kernel ed i moduli relativi
9.10.4. Compilare i sorgenti del kernel: il metodo raccomandato dal Team del Kernel di Debian
9.10.5. Driver per hardware e firmware
9.11. Sistema virtualizzato
9.11.1. Virtualization and emulation tools
9.11.2. Fasi del processo di virtualizzazione
9.11.3. Montare il file immagine di disco virtuale
9.11.4. Sistema chroot
9.11.5. Sistemi desktop multipli

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

There are some utility programs to help your console activities.


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 started, file is typescript

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

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

There are alternative methods to record the shell activities:

  • Use tee (usable during the boot process in the initramfs):

    $ sh -i 2>&1 | tee typescript
  • Use gnome-terminal with the extend line buffer for scrollback.

  • Use screen with "^A H" (see Sezione 9.1.2, «Il programma screen») to perform recording of console.

  • Use vim with ":terminal" to enter the terminal mode. Use "Ctrl-W N" to exit from terminal mode to normal mode. Use ":w typescript" to write the buffer to a file.

  • Use emacs with "M-x shell", "M-x eshell", or "M-x term" to enter recording console. Use "C-x C-w" to write the buffer to a file.

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.

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.


Vedere screen(1) per i dettagli.

See tmux(1) for functionalities of the alternative command.

In Sezione 1.4.2, «Personalizzare bash», 2 tips to allow quick navigation around directories are described: $CDPATH and mc.

If you use fuzzy text filter program, you can do without typing the exact path. For fzf, include following in ~/.bashrc.

FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
if [ -f $FZF_KEYBINDINGS_PATH ]; then
  . $FZF_KEYBINDINGS_PATH
fi
FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash
if [ -f $FZF_COMPLETION_PATH ]; then
  . $FZF_COMPLETION_PATH
fi

For example:

  • You can jump to a very deep subdirectory with minimal efforts. You first type "cd **" and press Tab. Then you will be prompted with candidate paths. Typing in partial path strings, e.g., s/d/b foo, will narrow down candidate paths. You select the path to be used by cd with cursor and return keys.

  • You can select a command from the command history more efficiently with minimal efforts. You press Ctrl-R at the command prompt. Then you will be prompted with candidate commands. Typing in partial command strings, e.g., vim d, will narrow down candidates. You select the one to be used with cursor and return keys.

After you learn basics of vim(1) through Sezione 1.4.8, «Using vim», please read Bram Moolenaar's "Seven habits of effective text editing (2000)" to understand how vim should be used.

[Attenzione] Attenzione

Don't try to change the default key bindings without very good reasons.

The behavior of vim can be changed significantly by enabling its internal features through the Ex-mode commands such as "set ..." to set vim options.

These Ex-mode commands can be included in user's vimrc file, traditional "~/.vimrc" or git-friendly "~/.vim/vimrc". Here is a very simple example [2]:

colorscheme murphy             " from /usr/share/vim/vim??/colors/*.vim
filetype plugin indent on      " filetype aware behavior
syntax enable                  " Syntax highlight
"set spelllang=en_us            " Spell check language as en_us
"set spell                      " Enable spell check
set autoindent                 " Copy indent from current line
set smartindent                " More than autoindent (Drop/Pop after {/})
set nosmarttab                 " <Tab>-key always inserts blanks
set backspace=indent,eol,start " Back space through everything
set laststatus=2               " Always show status line
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V

Simple customization to enable secure-modelines and classical IDE can be enabled by installing vim-scripts package and appending the following to user's vimrc file.

packadd! secure-modelines
packadd! winmanager
let mapleader = ' '
" Toggle paste mode with <SPACE>p
set pastetoggle=<leader>p
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w         :WMToggle<CR>
" Use safer keys <SPACE>? for moving to another window
nnoremap <leader>h         <C-W>h
nnoremap <leader>j         <C-W>j
nnoremap <leader>k         <C-W>k
nnoremap <leader>l         <C-W>l

The new native Vim package system works nicely with "git" and "git submodule". One such example configuration can be found at my git repository: dot-vim. This does essentially:

  • By using "git" and "git submodule", latest external packages, such as "name", are placed into ~/.vim/pack/*/opt/name and similar.

  • By adding :packadd! name line to user's vimrc file, these packages are placed on runtimepath.

  • Vim loads these packages on runtimepath during its initialization.

  • At the end of its initialization, tags for the installed documents are updated with "helptags ALL".

For more, please start vim with "vim --startuptime vimstart.log" to check actual execution sequence and time spent for each step.

Interesting external plugin packages can be found:

It is quite confusing to see too many ways[3] to manage and load these external packages to vim. Checking the original information is the best cure.


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.

The default display format of time and date by the "ls -l" command depends on the locale (see Sezione 1.2.6, «Orari» for value). The "$LANG" variable is referred first and it can be overridden by the "$LC_TIME" or "$LC_ALL" exported environment variables.

The actual default display format for each locale depends on the version of the standard C library (the libc6 package) used. I.e., different releases of Debian had different defaults. For iso-formats, see ISO 8601.

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

You can eliminate typing long option on commandline using command alias (see Sezione 1.5.9, «Alias di comandi»):

alias ls='ls --time-style=+%d.%m.%y %H:%M'

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}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${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.8. Elenco di strumenti per monitorare e controllare l'attività dei programmi.

pacchetto popcon dimensione descrizione
coreutils V:892, I:999 17372 nice(1): esegue un programma con priorità di schedulazione modificata
bsdutils V:681, I:999 402 renice(1): modifica la priorità di schedulazione di un processo in esecuzione
procps V:738, I:999 1648 utilità per il file system "/proc": ps(1), top(1), kill(1), watch(1), …
psmisc V:407, I:828 793 utilità per il file system "/proc": killall(1), fuser(1), peekfd(1), pstree(1)
time V:12, I:228 129 time(1): esegue un programma per riportare l'uso delle risorse di sistema in funzione del tempo
sysstat V:160, I:183 1923 sar(1), iostat(1), mpstat(1), …: strumenti per le prestazioni di sistema per Linux
isag V:0, I:3 117 Interactive System Activity Grapher (tracciamento interattivo dell'attivita) per sysstat
lsof V:383, I:945 451 lsof(8): elenca, usando l'opzione "-p", i file aperti da un processo in esecuzione
strace V:15, I:144 2367 strace(1): traccia le chiamate e i segnali di sistema
ltrace V:1, I:20 363 ltrace(1): traccia le chiamate di libreria
xtrace V:0, I:0 353 xtrace(1): traccia la comunicazione tra client e server X11
powertop V:11, I:213 680 powertop(1): informazioni sull'uso dell'alimentazione da parte del sistema
cron V:796, I:996 263 esegue processi dal demone cron(8) sullo sfondo in base ad una pianificazione
anacron V:407, I:482 107 pianificatore di comandi in stile cron, per i sistemi che non sono in esecuzione 24 ore al giorno
at V:143, I:255 161 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 command "$x" ; fi; done
  • Combinazione di find(1) e xargs(1):

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

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

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

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.

For the graphical user interface (GUI) compliant to the freedesktop.org standards, the *.desktop files in the /usr/share/applications/ directory provide necessary attributes for the GUI menu display of each program. Each package which is compliant to Freedesktop.org's xdg menu system installs its menu data provided by "*.desktop" under "/usr/share/applications/". Modern desktop environments which are compliant to Freedesktop.org standard use these data to generate their menu using the xdg-utils package. See "/usr/share/doc/xdg-utils/README".

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[fr]=Explorer le 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).

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[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".

Systemd has low level capability to schedule programs to run without cron daemon. For example, /lib/systemd/system/apt-daily.timer and /lib/systemd/system/apt-daily.service set up daily apt download activities. See systemd.timer(5) .

Pressing Alt-SysRq (PrtScr) followed by one keys does the magic of rescuing control of the system.


See more on Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks

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

The current (2021) Debian amd64 Linux kernel has /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2 - enable control of console logging level (ON)

  • 4 = 0x4 - enable control of keyboard (SAK, unraw) (ON)

  • 8 = 0x8 - enable debugging dumps of processes etc. (OFF)

  • 16 = 0x10 - enable sync command (ON)

  • 32 = 0x20 - enable remount read-only (ON)

  • 64 = 0x40 - enable signaling of processes (term, kill, oom-kill) (OFF)

  • 128 = 0x80 - allow reboot/poweroff (ON)

  • 256 = 0x100 - allow nicing of all RT tasks (ON)

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 MMDDhhmmCCYY
# 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).

If the hardware time is set to UTC, change the setting to "UTC=yes" in the "/etc/default/rcS".

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

Application softwares may be configured not only to access sound devices directly but also to access them via some standardized sound server system. Currently, PulseAudio, JACK, and PipeWire are used as sound server system. See Debian wiki page on Sound for the latest situation.

Normalmente esiste un motore audio comune per ciascun ambiente desktop. Ciascun motore audio usato dalle applicazioni può scegliere di connettersi a diversi server 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.


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.

You may need to umount(8) some devices manually from the command line before operating on them if they are automatically mounted by the GUI desktop system.

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.

Older PCs use the classic Master Boot Record (MBR) scheme to hold disk partitioning data in the first sector, i.e., LBA sector 0 (512 bytes).

Recent PCs with Unified Extensible Firmware Interface (UEFI), including Intel-based Macs, use GUID Partition Table (GPT) scheme to hold disk partitioning data not in the first sector.

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

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.

Btrfs status can be found at Debian wiki on btrfs and kernel.org wiki on btrfs. It is expected to be the next default filesystem after the ext4 filesystem.

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

Solid state drive (SSD) is auto detected now.

Reduce unnecessary disk accesses to prevent disk wear out by mounting "tmpfs" on volatile data path in /etc/fstab.

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

    • restart the smartd(8) daemon by "sudo systemctl restart smartmontools".

[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=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work

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 disk.img
# dd if=/dev/sdb of=disk.img

Si può creare l'immagine del disco del MBR (master boot record) dei PC tradizionali (vedere Sezione 9.6.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 partition.img
Loop device is /dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0

Questo può essere semplificato nel modo seguente.

# mkdir -p /mnt/loop0
# mount -t auto -o loop partition.img /mnt/loop0
...hack...hack...hack
# umount partition.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 # verify kernel capability
max_part:Maximum number of partitions per loop device
max_loop:Maximum number of loop devices
# losetup -a # verify nothing using the loop device
# rmmod loop
# modprobe loop max_part=16

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

# losetup -v -f disk.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
...hack...hack...hack
# 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 disk.img
...
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2
...
...hack...hack...hack
# 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=disk.img seek=5G

Instead of using dd(1), specialized fallocate(8) may be used here.

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

# losetup -f -v disk.img
Loop device is /dev/loop1
# mkfs.ext4 /dev/loop1
...hack...hack...hack
# losetup -d /dev/loop1
$ du  --apparent-size -h disk.img
5.0G  disk.img
$ du -h disk.img
83M disk.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.7.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 volume_id -o cd.iso source_directory

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 volume_id \
   -b isolinux/isolinux.bin -c isolinux/boot.cat \
   -no-emul-boot -boot-load-size 4 -boot-info-table source_directory

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.6.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 facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper.


[Attenzione] Attenzione

Data encryption costs CPU time etc. Encrypted data becomes inaccessible if its password is lost. Please weigh its benefits and costs.

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

# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup open /dev/sdx1 secret
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2021-10-04 18:44 control
lrwxrwxrwx 1 root root       7 2021-10-04 23:55 secret -> ../dm-0
# mkfs.vfat /dev/mapper/secret
...
# cryptsetup close secret

Then, it can be mounted just like normal one on to "/media/username/disk_label", except for asking password (see Sezione 10.1.7, «Supporti di archiviazione removibili») under modern desktop environment using the udisks2 package. The difference is that every data written to it is encrypted. The password entry may be automated using keyring (see Sezione 10.3.6, «Password keyring»).

You may alternatively format media in different filesystem, e.g., ext4 with "mkfs.ext4 /dev/mapper/sdx1". If btrfs is used instead, the udisks2-btrfs package needs to be installed. For these filesystems, the file ownership and permissions may need to be configured.

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

If you are reading this documentation, you probably don't need to compile Linux kernel by yourself.

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.

module-assistant(8) (or its short form m-a) helps users to build and install module package(s) easily for one or more custom kernels.

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.

The hardware driver is the code running on the main CPUs of the target system. Most hardware drivers are available as free software now and are included in the normal Debian kernel packages in the main area.

  • 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)

The firmware is the code or data loaded on the device attach to the target system (e.g., CPU microcode, rendering code running on GPU, or FPGA / CPLD data, …). Some firmware packages are available as free software but many firmware packages are not available as free software since they contain sourceless binary data. Installing these firmware data is essential for the device to function as expected.

  • The firmware data packages containing data loaded to the volatile memory on the target device.

    • firmware-linux-free (main)

    • firmware-linux-nonfree (non-free)

    • firmware-linux-* (non-free)

    • *-firmware (non-free)

    • intel-microcode (non-free)

    • amd64-microcode (non-free)

  • The firmware update program packages which update data on the non-volatile memory on the target device.

    • fwupd (main): Firmware update daemon which downloads firmware data from Linux Vendor Firmware Service.

    • gnome-firmware (main): GTK front end for fwupd

    • plasma-discover-backend-fwupd (main): Qt front end for fwupd

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

Please also note that the firmware data downloaded by fwupd from Linux Vendor Firmware Service and loaded to the running Linux kernel may be non-free.

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

There are several virtualization and emulation tool platforms.

  • Complete hardware emulation packages such as ones installed by the games-emulator metapackage

  • Mostly CPU level emulation with some I/O device emulations such as QEMU

  • Mostly CPU level virtualization with some I/O device emulations such as Kernel-based Virtual Machine (KVM)

  • OS level container virtualization with the kernel level support such as LXC (Linux Containers), Docker, ...

  • OS level filesystem access virtualization with the system library call override on the file path such as chroot

  • OS level filesystem access virtualization with the system library call override on the file ownership such as fakeroot

  • OS API emulation such as Wine

  • Interpreter level virtualization with its executable selection and run-time library overrides such as virtualenv and venv for Python

The container virtualization uses Sezione 4.7.4, «Linux security features» and it is the backend technology of Sezione 7.6, «Sandbox».

Here are some packages to help you to setup the virtualized system.

Tabella 9.27. Elenco di strumenti di virtualizzazione

pacchetto popcon dimensione descrizione
schroot V:7, I:9 2708 strumento specializzato per eseguire pacchetti Debian binari in chroot
sbuild V:1, I:4 271 strumento per compilare pacchetti Debian binari da sorgenti Debian
debootstrap V:5, I:61 308 avviare un sistema Debian base (scritto in sh)
cdebootstrap V:0, I:2 116 avviare un sistema Debian (scritto in C)
virt-manager V:11, I:42 2298 Virtual Machine Manager: applicazione desktop per gestire macchine virtuali
libvirt-clients V:43, I:62 1185 programmi per la libreria libvirt
games-emulator I:0 26 games-emulator: Debian's emulators for games
bochs V:0, I:1 6999 Bochs: emulatore PC IA-32
qemu I:29 100 QEMU: veloce emulatore generico di processore
qemu-system I:21 101 QEMU: binari per emulazione completa del sistema
qemu-user V:0, I:10 106589 QEMU: binari per emulazione in spazio utente
qemu-utils V:12, I:105 6471 QEMU: utilità
qemu-kvm V:5, I:37 107 KVM: virtualizzazione completa su hardware x86 convirtualizzazione assistita da hardware
virtualbox V:11, I:14 106967 VirtualBox: soluzione per virtualizzazione i dx86 su i386 e amd64
xen-tools V:0, I:3 727 strumenti per gestire server virtuali XEN Debian
wine V:17, I:73 191 Wine: implementazione della API Windows (suite standard)
dosbox V:2, I:17 2718 DOSBox: emulatore x86 con grafica Tandy/Herc/CGA/EGA/VGA/SVGA, suono e DOS
lxc V:10, I:14 21166 strumenti in spazio utente per contenitori Linux containers
python3-venv I:52 6 venv for creating virtual python environments (system library)
python3-virtualenv V:9, I:59 415 virtualenv for creating isolated virtual python environments
pipx V:0, I:1 885 pipx for installing python applications in isolated environments

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

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

If you wish to try a new Debian environment from a terminal console, I recommend you to use chroot. This enables you to run console applications of Debian unstable and testing without usual risks associated and without rebooting. chroot(8) is the most basic way.

[Attenzione] Attenzione

Examples below assumes both parent system and chroot system share the same amd64 CPU architecture.

Although you can manually create a chroot(8) environment using debootstrap(1). But this requires non-trivial efforts.

The sbuild package to build Debian packages from source uses the chroot environment managed by the schroot package. It comes with helper script sbuild-createchroot(1). Let's learn how it works by running it under script(1) as follows.

$ sudo mkdir -p /srv/chroot
$ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian

You see how debootstrap(8) populates system data for unstable environment under "/srv/chroot/unstable-amd64-sbuild" for a minimal build system.

You can login to this environment using schroot(1).

$ sudo schroot -v -c chroot:unstable-amd64-sbuild

You see how a system shell running under unstable environment is created.

[Nota] Nota

The "/usr/sbin/policy-rc.d" file which always exits with 101 prevents daemon programs to be started automatically on the Debian system. See "/usr/share/doc/sysv-rc/README.policy-rc.d.gz".

[Nota] Nota

Some programs under chroot may require access to more files from the parent system to function than sbuild-createchroot provides as above. For example, "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc. may need to be bind-mounted or copied.

[Suggerimento] Suggerimento

The sbuild package helps to construct a chroot system and builds a package inside the chroot using schroot as its backend. It is an ideal system to check build-dependencies. See more on sbuild at Debian wiki and sbuild configuration example in "Guide for Debian Maintainers".

If you wish to try a new GUI Desktop environment of any OS, I recommend you to use QEMU, KVM, or VirtualBox on a Debian stable system to run multiple desktop systems safely using virtualization. These enable you to run any desktop applications including ones of Debian unstable and testing without usual risks associated with them and without rebooting. The configuration of these tools are relatively straight forward.

Since pure QEMU is very slow, it is recommended to accelerate it with KVM when the host system supports it.

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.



[2] More elaborate customization examples: "Vim Galore", "sensible.vim", "#vim Recommendations" ...

[3] vim-pathogen was popular.