VirtualBox: amministrazione da terminale: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
 
(96 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
=Versioni compatibili=
{{Virtualbox}}
* Debian Etch 4.0
== Introduzione ==
* Debian Lenny 5.0
{{Box|Nota|La configurazione della macchina [[host]] presa in esame per la guida prevede come indirizzo IP di <code>eth0</code> il seguente: <code>'''192.168.0.100'''</code>.}}
=Introduzione=
VirtualBox mette a disposizione lo strumento <code>VBoxManage</code> per creare e amministrare le macchine virtuali da terminale. È uno strumento molto potente e complesso e permette di gestire le proprie macchine virtuali in maniera molto dettagliata; ciononostante in questa guida vedremo solo i comandi e le opzioni principali.<br>
Virtualbox è un software di virtualizzazione sviluppato da Sun; normalmente viene utilizzato come un normale programma dotato di interfaccia grafica, ma con qualche accorgimento è possibile installarlo e utilizzarlo anche su una macchina server dove non sia stato installato il server grafico X.org.<br>
Per una spiegazione dettagliata del tool consiglio di far riferimento alla User Guide di VirtualBox: [http://www.virtualbox.org/manual/UserManual.html#vboxmanage VBoxManage].
La configurazione della macchina host presa in esame per la guida prevede come indirizzo IP di <tt>eth0</tt> il seguente: <tt>'''192.168.0.100'''</tt>.
{{Suggerimento|Onde evitare complicazioni al momento di avviare la VM si consiglia di decidere subito quale utente si intende usare per avviarla, in modo da usare subito il suddetto utente per la procedura di creazione della medesima.}}
=Installazione=
 
VirtualBox è rilasciato in due versioni e con due licenze diverse: la versione opensource ha alcune limitazioni (non gestisce l'USB, ad esempio); la versione completa non è opensource, ma è liberamente scaricabile per utilizzi non commerciali.<br>
== Creazione di una Virtual Machine ==
Per installare VirtualBox nella sua versione completa (quella opensource, chiamata <tt>virtualbox-ose</tt> è già presente nei repository di Debian) occorre aggiungere il repository di VirtualBox. Aprite il vostro sources.list:
Creiamo innanzitutto una directory dove conservare tutte le nostre macchine virtuali. Io la creerò sotto <code>/opt</code>, ma siete liberi di metterla dove meglio credete (ricordatevi di modificare il percorso nei comandi seguenti!):
<pre>
<pre>
nano /etc/apt/sources.list
# mkdir /opt/vm
</pre>
</pre>
e aggiungete una di queste righe:
* '''Lenny'''
<pre>
deb http://download.virtualbox.org/virtualbox/debian lenny non-free
</pre>
* '''Etch'''
<pre>
deb http://download.virtualbox.org/virtualbox/debian etch non-free
</pre>
* '''Sarge'''
<pre>
deb http://download.virtualbox.org/virtualbox/debian sarge non-free
</pre>
Quindi importate la chiave del repository:
<pre>
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | apt-key add -
</pre>
aggiornate la lista dei pacchetti e infine installate VirtualBox:
<pre>
apt-get update
apt-get install linux-headers-$(uname -r) build-essential virtualbox-3.1
</pre>
Sostituite <tt>virtualbox-3.1</tt>
* con <tt>virtualbox</tt> per installare VirtualBox 1.6.6
* con <tt>virtualbox-2.0</tt> per installare VirtualBox 2.0.12
* con <tt>virtualbox-2.1</tt> per installare VirtualBox 2.1.4
* con <tt>virtualbox-2.2</tt> per installare VirtualBox 2.2.4
* con <tt>virtualbox-3.0</tt> per installare VirtualBox 3.0.12
Prima di effettuare l'installazione, controllate alla pagina http://www.virtualbox.org/wiki/Linux_Downloads che non esistano versioni più nuove di quelle elencate in questa guida; in caso ci fossero, sostituite il comando precedente con quello che si adatta alla versione che desiderate installate.<br>
Durante l'installazione, che purtroppo comprende come dipendenze circa 160 MB di librerie di KDE, di Gnome e di varia natura, vi verranno poste alcune domande:
<pre>
Creating group 'vboxusers'
Users of VirtualBox must be member of that group in order to have
write permissions to /dev/vboxdrv. Otherwise starting of VMs will not be possible. <---- Ok


Unable to find a precompiled module for the current kernel! [...]
{{Box|Nota|Nel seguito la maggior parte dei comandi saranno preceduti dal simbolo di root '#', questo non perché sia necessario avere i privilegi di amministratore per creare e gestire delle macchine virtuali tramite VirtualBox, ma perché per questo esempio si è scelto di usare una cartella in cui di norma solo l'utente root ha i permessi di scrittura. Naturalmente nulla vieterebbe all'utente di modificare i permessi sulla cartella <code>/opt/vm</code> in modo da poter eseguire i successivi comandi come utente normale.}}
Should the vboxdrv kernel module be compiled now? <---- Yes
</pre>
Probabilmente alla fine della compilazione vi sarete trovati questo messaggio d'avvertimento:
<pre>
W: Possible missing firmware /lib/firmware/tigon/tg3_tso5.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3_tso.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3.bin for module tg3
</pre>
Se, come me, siete persone che non dormono all'idea di avere un sistema con un'incompletezza, aprite di nuovo il vostro <tt>sources.list</tt> e, poichè il firmware in oggetto si trova in un pacchetto disponibile solo per Sid, modificatelo aggiungendo questa riga:
<pre>
deb http://ftp.de.debian.org/debian sid main non-free
</pre>
Quindi installate il pacchetto:
<pre>
apt-get update
apt-get install firmware-linux-nonfree
</pre>
che non porta con sè alcuna dipendenza.<br>
Come è intuibile dal nome, siate consapevoli che state installando un pacchetto contenente firmware '''non liberi'''.<br>
Una volta completata l'operazione, modificate nuovamente il vostro <tt>sources.list</tt> ed '''eliminate ogni traccia di Sid'''!! (Siamo pur sempre su un server e vogliamo stabilità innanzitutto...).<br>
Verificate infine che siano presenti i seguenti files:
<pre>
/lib/firmware/tigon/tg3_tso5.bin
/lib/firmware/tigon/tg3_tso.bin
/lib/firmware/tigon/tg3.bin
</pre>
Per poter utilizzare VirtualBox come normale utente, occorre infine aggiungere quest'ultimo al gruppo <tt>vboxusers</tt>:
<pre>
adduser nome_utente vboxusers
</pre>


=Utilizzare VirtualBox da linea di comando=
VirtualBox mette a disposizione lo strumento <tt>VBoxManage</tt> per creare e amministrare le macchine virtuali da terminale. E' uno strumento molto potente e complesso e permette di gestire le proprie macchine virtuali in maniera molto dettagliata; ciononostante in questa guida vedremo solo i comandi e le opzioni principali.<br>
Per una spiegazione dettagliata del tool consiglio di far riferimento alla User Guide di VirtualBox: http://www.virtualbox.org/manual/UserManual.html#vboxmanage
==Creazione di una Virtual Machine==
Creiamo innanzitutto una directory dove conservare tutte le nostre macchine virtuali. Io la creerò sotto <tt>/opt</tt>, ma siete liberi di metterla dove meglio credete (ricordatevi di modificare il percorso nei comandi seguenti!):
<pre>
mkdir /opt/vm
</pre>
Procediamo quindi a creare la nostra virtual machine di prova:
Procediamo quindi a creare la nostra virtual machine di prova:
<pre>
<pre>
VBoxManage createvm --name prova --basefolder /opt/vm/ --register
# VBoxManage createvm --name prova --basefolder /opt/vm/ --register
</pre>
</pre>
Analizziamo il comando seguente:
Analizziamo il comando seguente:
* <tt>createvm</tt> indica a VBoxManage di creare una nuova virtual machine
* <code>createvm</code> indica a VBoxManage di creare una nuova virtual machine
* <tt>--name</tt> consente di specificare il nome della nuova virtual machine. Consiglio di usare nomi senza spazi o caratteri strani
* <code>--name</code> consente di specificare il nome della nuova virtual machine. Consiglio di usare nomi senza spazi o caratteri strani
* <tt>--basefolder</tt> permette di specificare la directory dove sarà creata la virtual machine. All'interno di questa directory sarà automaticamente creata una directory avente il nome che abbiamo assegnato alla virtual machine
* <code>--basefolder</code> permette di specificare la directory dove sarà creata la virtual machine. All'interno di questa directory sarà automaticamente creata una directory avente il nome che abbiamo assegnato alla virtual machine.
* <tt>--register</tt> permette di importare in VirtualBox il file XML contenente le specifiche della virtual machine
{{Warningbox|Si noti che a meno di non indicare un percorso assoluto tutti i file e le cartelle saranno creati all'interno della directory <code>~/.Virtualbox</code> dell'utente che sta creando la macchina virtuale.}}
<br>
* <code>--register</code> permette di importare in VirtualBox il file XML contenente le specifiche della virtual machine
 
Ora modifichiamo la configurazione della nostra nuova virtual machine:
Ora modifichiamo la configurazione della nostra nuova virtual machine:
<pre>
<pre>
VBoxManage modifyvm prova --memory 1024MB --acpi on --boot1 dvd --boot2 disk --nic1 bridged --bridgeadapter1 eth0 --ostype Windows2003 --usb on
# VBoxManage modifyvm prova --memory 1024 --acpi on --boot1 dvd --boot2 disk --nic1 bridged --bridgeadapter1 eth0 --ostype Windows2003 --usb on
</pre>
</pre>
Le modifiche che abbiamo introdotto nella nostra virtual machine sono le seguenti:
Le modifiche che abbiamo introdotto nella nostra virtual machine sono le seguenti:
* <tt>--memory</tt> specifica in MB la dimensione della RAM da assegnare
* <code>--memory</code> specifica in MB la dimensione della RAM da assegnare (almeno a partire dalla versione 4.1 è necessario indicare solo la dimensione omettendo quindi l'unità di misura, cioè MB).
* <tt>--acpi</tt> abilita o disabilita la modalità ACPI
* <code>--acpi</code> abilita o disabilita la modalità ACPI
* <tt>--boot1</tt> specifica che il primo dispositivo di boot è nel nostro caso un DVD
* <code>--boot1</code> specifica che il primo dispositivo di boot è nel nostro caso un DVD
* <tt>--boot2</tt> specifica che il secondo dispositivo di boot è nel nostro caso l'hard disk virtuale
* <code>--boot2</code> specifica che il secondo dispositivo di boot è nel nostro caso l'hard disk virtuale
* <tt>--nic1</tt> indica che la prima interfaccia di rete virtuale utilizzerà la modalità bridge
* <code>--nic1</code> indica che la prima interfaccia di rete virtuale utilizzerà la modalità bridge
* <tt>--bridgeadapter1</tt> indica l'interfaccia di rete del nostro server Debian che verrà usata dalla virtual machine
* <code>--bridgeadapter1</code> indica l'interfaccia di rete del nostro server Debian che verrà usata dalla virtual machine; qualora sul server siano già stati configurati uno o più bridge di rete sarà necessario o specificare un interfaccia di rete non appartenente ad alcun bridge, oppure al contrario il nome di un bridge esistente. Si noti anche che la macchina guest avrà pieno accesso alla LAN, tuttavia detta interfaccia dovrà essere configurata o automaticamente attraverso un server dhcp attivo nella LAN oppure manualmente dall'utente.
* <tt>--ostype</tt> permette di specificare il tipo di sistema virtuale che installeremo. Per un elenco si dia il comando <tt>VBoxManage list ostypes</tt>
* <code>--ostype</code> permette di specificare il tipo di sistema virtuale che installeremo. Per un elenco si dia il comando <code>VBoxManage list ostypes</code>
* <tt>--usb</tt> abilita o disabilita le porte USB
* <code>--usb</code> abilita o disabilita le porte USB
Ogni volta che, attraverso il parametro <tt>modifyvm</tt> apportate delle modifiche alla configurazione della vostra virtual machine, queste vengono registrate nel file XML creato in precedenza.
Ogni volta che, attraverso il parametro <code>modifyvm</code> apportate delle modifiche alla configurazione della vostra virtual machine, queste vengono registrate nel file XML creato in precedenza.
<br>
{{Box|Nota|Nel succitato comando d'esempio per configurare l'interfaccia di rete virtuale si sono usate le opzioni ''--nic1 bridged --bridgeadapter1 eth0'', tuttavia qualora non si abbia bisogno/voglia di configurare un bridge di rete perché ad esempio al sistema guest non saranno richieste particolari funzionalità di rete, allora è possibile optare per la modalità NAT sostituendo alle opzioni in questione la più semplice ''--nic1 nat''. In questo modo l'utente non dovrà configurare nulla, tuttavia la macchina virtuale fungerà da firewall bloccando tutte le connessioni in entrata proprio come un router; in modalità NAT dunque qualora si avesse bisogno di rendere disponibile qualche servizio, come una connessione ssh tra host e guest, l'utente dovrà creare delle apposite regole come spiegato [http://www.virtualbox.org/manual/ch06.html#nat-limitations qui].}}
Ora preoccupiamoci di creare un hard disk virtuale per la nostra virtual machine:
Ora preoccupiamoci di creare un hard disk virtuale per la nostra virtual machine:
<pre>
<pre>
VBoxManage createhd --filename /opt/vm/prova/prova.vdi --size 10000 --register
# VBoxManage createhd --filename /opt/vm/prova/prova.vdi --size 10000 --register (l'opzione register non è più supportata in questo contesto almeno dalla versione 4.1)
</pre>
</pre>
Piccola spiegazione:
Piccola spiegazione:
* <tt>--filename</tt> specifica la directory dove creare il disco virtuale
* <code>--filename</code> specifica la directory dove creare il disco virtuale
* <tt>--size</tt> indica la dimensione del disco in MB
* <code>--size</code> indica la dimensione del disco in MB
<br>
<br>
Ora modifichiamo la virtual machine collegandole il disco virtuale che abbiamo appena creato:
Installiamo quindi un controller IDE nella nostra Virtual Machine:
<pre>
# VBoxManage storagectl "prova" --name "IDE Controller" --add ide --controller ICH6
</pre>
Infine modifichiamo la virtual machine collegandole il disco virtuale che abbiamo appena creato con uno dei seguenti due comandi:
<pre>
# VBoxManage modifyvm prova -hda /opt/vm/prova/prova.vdi
</pre>
oppure:
<pre>
<pre>
VBoxManage modifyvm prova -hda /opt/vm/prova/prova.vdi
# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "/opt/vm/prova/prova.vdi"
</pre>
</pre>
Possiamo collegare alla nostra macchina un massimo di 3 hard disk virtuali (<tt>hda</tt>, <tt>hdb</tt>, <tt>hdd</tt>). <tt>hdc</tt> è riservato per il CD/DVD.
Possiamo collegare alla nostra macchina un massimo di 3 hard disk virtuali (<code>hda</code>, <code>hdb</code>, <code>hdd</code>). <code>hdc</code> è riservato per il CD/DVD.
<br><br>
 
Arrivati a questo punto dobbiamo montare un'immagine ISO o un CD/DVD nel nostro lettore CD/DVD virtuale, in modo di poter installare il nostro sistema operativo virtuale. In questo esempio monterò un'immagine ISO:
Arrivati a questo punto dobbiamo montare un'immagine ISO o un CD/DVD nel nostro lettore CD/DVD virtuale, in modo di poter installare il nostro sistema operativo virtuale. In questo esempio monterò un'immagine ISO:
<pre>
<pre>
VBoxManage openmedium dvd /home/ferdy/w2003.iso
# VBoxManage openmedium dvd /home/ferdy/w2003.iso (valido solo per le versioni inferiori alla 4.0)
VBoxManage modifyvm "prova" -dvd /home/ferdy/w2003.iso
# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium "/home/ferdy/w2003.iso"
</pre>
</pre>


==Importazione di una Virtual Machine==
Se invece vogliamo utilizzare il lettore CD/DVD della macchina host, anziché ricorrere all'utilizzo di un'immagine ISO, allora:
Se abbiamo già una virtual machine creata in precedenza, possiamo importarla all'interno della nostra installazione di VirtualBox per poi avviarla. Per importare una virtual machine esistente si utilizzi il comando:
<pre>
<pre>
VBoxManage registervm /opt/vm/prova2/prova2.xml
# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium Host:/dev/cdrom
</pre>
</pre>
==Avvio e gestione di una Virtual Machine==
 
Arrivati a questo punto possiamo avviare la nostra virtual machine con il comando:
== Avvio di una macchina virtuale ==
{{Box|IMPORTANTE|
* Qualora si abbia la necessità di accedere a dispositivi USB ricordarsi di aggiungere l'utente usato per creare e amministrare le  macchine virtuali al gruppo ''vboxusers'':<br/>
<pre># adduser nome_utente vboxusers</pre>
* Una macchina virtuale creata e registrata da un certo utente non sarà avviabile da utenti diversi dal medesimo, a meno di non ripetere la procedura di configurazione e registrazione della macchina anche per gli altri utenti o di esportarla e poi importarla.
}}
 
=== Metodo 1 ===
{{Warningbox|Per utilizzare il protocollo VRDP è necessario aver installato l'extension pack}}
 
Arrivati a questo punto è possibile avviare la macchina virtuale con il comando:
<pre>
# VBoxHeadless --startvm prova
</pre>
Il comando <code>VBoxHeadless</code> avvia la virtual machine indicata e nel contempo inizializza una sessione VRDP Server (Virtual Remote Desktop Protocol). Purtroppo però, pur essendo il comando suggerito dalla User Guide di VirtualBox, ha il difetto di bloccare la sessione di terminale fino allo spegnimento della macchina virtuale. Per questo motivo consiglio di avviare una virtual machine con il comando alternativo:
<pre>
<pre>
VBoxHeadless --startvm prova
# VBoxHeadless --startvm prova &
</pre>
</pre>
Il comando <tt>VBoxHeadless</tt> avvia la virtual machine indicata e nel contempo inizializza una sessione VRDP Server (Virtual Remote Desktop Protocol). Purtroppo però, pur essendo il comando suggerito dalla User Guide di VirtualBox, ha il difetto di bloccare la sessione di terminale fino allo spegnimento della macchina virtuale. Per questo motivo consiglio di avviare una virtual machine con il comando alternativo:
che non sempre funziona, oppure:
<pre>
<pre>
VBoxManage startvm prova --type vrdp
# VBoxManage startvm prova --type vrdp (vecchia sintassi)
# VBoxManage startvm prova --type headless
</pre>
</pre>
dagli effetti identici al precedente, ma senza che la nostra shell sia resa inutilizzabile.
dagli effetti identici al primo, ma senza che la nostra [[shell]] sia resa inutilizzabile. Si noti che in virtualbox i parametri per configurare ''vrdp'' contengono la parola chiave ''vrde'' (e non appunto ''vrdp'' come inve ci si potrebbe aspettare).
=Collegamento alla VM da Windows XP=
 
=== Metodo 2 ===
Un secondo metodo, molto simile al precedente, prevede di usare in primis screen per generare una sessione di terminale aggiuntiva in cui avviare la macchina virtuale, in secondo luogo di usare il protocollo ''VNC'' al posto di ''VRDE'' (che come già detto è la versione oracle di VRDP). Un volta avviato screen e superata la schermata di benvenuto digitare:
<pre># VBoxHeadless -s prova -n -m numero_porta</pre>
* '''-s''' è l'abbreviazione di ''--startvm'';
* '''-n''' abilità il server vnc integrato;
* '''-m''' definisce il numero della porta su cui la macchina virtuale rimarrà in ascolto.
 
== Gestione di una macchina virtuale ==
=== Condividere una o più directory tra host e guest ===
A macchina virtuale spenta è possibile mettere in condivisione automaticamente una o più risorse col seguente comando:
<pre># VBoxManage sharedfolder add prova --name "nome_arbitrario" --hostpath "/percorso/risorsa/host" --automount</pre>
In windows aprendo esplora risorse dette cartelle figureranno ciascuna come dischi di rete cui è già stata assegnata la prima lettera dell'alfabeto disponibile, mentre in linux risulteranno visibili sotto <code>/media</code>, ma ai loro nomi sarà stato sistematicamente aggiunto il prefisso ''sf''. Per maggiori informazioni si veda l'apposita [http://www.virtualbox.org/manual/ch04.html#sharedfolders pagina] del manuale.
 
=== Collegamento alla VM da Windows XP ===
Aprite "Connessione Desktop Remoto" e digitate l'indirizzo IP del vostro server Debian: si aprirà la console della macchina virtuale che avete avviato.
Aprite "Connessione Desktop Remoto" e digitate l'indirizzo IP del vostro server Debian: si aprirà la console della macchina virtuale che avete avviato.
==Comandi utili di "Connessione Desktop Remoto"==
* <tt>ALT+PGSU</tt>: Passa da un programma all'altro da sinistra verso destra.
* <tt>ALT+PGGIÙ</tt>: Passa da un programma all'altro da destra verso sinistra.
* <tt>ALT+INS</tt>: Passa da un programma all'altro nell'ordine in cui sono stati aperti.
* <tt>ALT+HOME</tt>: Visualizza il menu Start.
* <tt>CTRL+ALT+INTERR</tt>: Passa da una finestra alla modalità schermo intero e viceversa.
* <tt>CTRL+ALT+FINE</tt>: Visualizza la finestra di dialogo Protezione di Windows.
* <tt>ALT+CANC</tt>: Visualizza il menu Windows.
* <tt>CTRL+ALT+SEGNO MENO (-) del tastierino numerico</tt>: Copia negli Appunti del computer remoto la finestra attiva del computer client (esegue la stessa funzione della combinazione di tasti ALT+STAMP in un computer locale).
* <tt>CTRL+ALT+SEGNO PIÙ (+) del tastierino numerico</tt>: Copia negli Appunti del computer remoto l'intera schermata del computer client (esegue la stessa funzione del tasto STAMP in un computer locale).
* <tt>CTRL+ALT+freccia DESTRA</tt>: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
* <tt>CTRL+ALT+freccia SINISTRA</tt>: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
* La combinazione <tt>CTRL+ALT+CANC</tt> ha sempre effetto sul desktop del computer locale. Per inviare la combinazione <tt>CTRL+ALT+CANC</tt> al computer remoto, è necessario premere <tt>'''CTRL+ALT+FINE'''</tt>.


===Collegamento alla VM da Linux===
==== Comandi utili di "Connessione Desktop Remoto" ====
Aprite un terminale e digitate:
* <code>ALT+PGSU</code>: Passa da un programma all'altro da sinistra verso destra.
* <code>ALT+PGGIU</code>: Passa da un programma all'altro da destra verso sinistra.
* <code>ALT+INS</code>: Passa da un programma all'altro nell'ordine in cui sono stati aperti.
* <code>ALT+HOME</code>: Visualizza il menù Start.
* <code>CTRL+ALT+INTERR</code>: Passa da una finestra alla modalità schermo intero e viceversa.
* <code>CTRL+ALT+FINE</code>: Visualizza la finestra di dialogo Protezione di Windows.
* <code>ALT+CANC</code>: Visualizza il menù Windows.
* <code>CTRL+ALT+SEGNO MENO (-) del tastierino numerico</code>: Copia negli Appunti del computer remoto la finestra attiva del computer client (esegue la stessa funzione della combinazione di tasti ALT+STAMP in un computer locale).
* <code>CTRL+ALT+SEGNO PIÙ (+) del tastierino numerico</code>: Copia negli Appunti del computer remoto l'intera schermata del computer client (esegue la stessa funzione del tasto STAMP in un computer locale).
* <code>CTRL+ALT+freccia DESTRA</code>: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
* <code>CTRL+ALT+freccia SINISTRA</code>: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
* La combinazione <code>CTRL+ALT+CANC</code> ha sempre effetto sul desktop del computer locale. Per inviare la combinazione <code>CTRL+ALT+CANC</code> al computer remoto, è necessario premere <code>'''CTRL+ALT+FINE'''</code>.
 
=== Collegamento alla VM da Linux ===
 
{{Box|Importante|A partire dalla versione 4.1.X la connessione tramite vrde/vrdp è possibile solo dopo aver installato l'extension pack sulla macchina host, anche se la macchina virtuale viene avviata specificando di usare vrde/vrdp.}}
 
==== VRDE (VRDP) ====
Dalla macchina client aprire un terminale e digitare:
<pre>$ rdesktop -a 16 192.168.0.100</pre>
Si aprirà la console della macchina virtuale che avete avviato.<br>
Alternativamente è possibile usare altri applicativi come ''vinagre'' (in tal caso ricordarsi di selezionare il giusto protocollo, cioè RDP e non VNC!) e ''gnome-rdp'' in GNOME, o ''krdc'' in KDE.
 
==== VNC ====
Se per un qualsiasi motivo non si riesce (o non si vuole) usare VRDE, perché per esempio si riceve un messaggio d'errore come il seguente:
<pre>
<pre>
rdesktop -a 16 192.168.0.100
Autoselected keyboard map it
ERROR: nome_macchina: unable to connect
</pre>
</pre>
Si aprirà la console della macchina virtuale che avete avviato.<br><br>
provare ad avviare ''VBoxHeadless'' specificando ''VNC'' come protocollo (opzione ''-n'', si veda il precedente paragrafo ''metodo 2'') ed usare dei client VNC, come i già citati ''vinagre'' e ''krdc''.
Per arrestare la virtual machine si usi il comando:
 
=== Arresto della VM ===
Per arrestare la macchina virtuale è possibile sfruttare l'apposita funzione all'interno del sistema guest se si è collegati tramite un client vnc, oppure direttamente dal terminale del server digitando:
<pre># VBoxManage controlvm prova savestate</pre>
Un metodo più brutale è il seguente:
<pre>VBoxManage controlvm prova poweroff</pre>
che è l'equivalente di togliere la spina ad una macchina reale.<br/>
Terminata l’installazione del sistema operativo, il DVD può essere rimosso dalla Virtual Machine col comando:
<pre># VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium none</pre>
Qualora l’immagine DVD non sia più necessaria, esiste la possibilità di de-registrarla dal database di VirtualBox:
<pre># VBoxManage closemedium dvd "/home/ferdy/w2003.iso"</pre>
 
== Importazione di una Virtual Machine ==
Se  abbiamo già una virtual machine creata in precedenza, possiamo  importarla all'interno della nostra installazione di VirtualBox per poi  avviarla. Per importare una virtual machine esistente si utilizzi il comando:
<pre>
<pre>
VBoxManage controlvm prova savestate
# VBoxManage registervm /opt/vm/prova2/prova2.xml
</pre>
</pre>


==Avvio automatico di una Virtual Machine==
== Avvio automatico di una Virtual Machine ==
Per avviare una virtual machine come demone al boot di Debian sono sufficienti pochi passi.<br>
 
Inannzitutto creiamo un file per il nostro script di boot:
{{Warningbox|
* È bene ricordare che una macchina virtuale creata e registrata da un certo utente non sarà avviabile da utenti diversi dal medesimo, a meno di non ripetere la procedura di configurazione e registrazione della macchina anche per gli altri utenti o di esportarla e poi importarla.
* Non usare nomi contenenti spazi per le VM che si vuole avviare automaticamente.
}}
 
Per avviare una virtual machine come demone al boot di Debian sono sufficienti pochi passi.
 
Innanzitutto creiamo un file per il nostro script di boot:
<pre>
<pre>
nano /etc/init.d/provavm
# nano /etc/init.d/provavm
</pre>
</pre>
e inseriamoci questo codice:
e inseriamoci questo codice:
Riga 184: Riga 181:
### BEGIN INIT INFO
### BEGIN INIT INFO
# Provides: VirtualBox - VM di Prova
# Provides: VirtualBox - VM di Prova
# Required-Start: vboxdrv
# Required-Stop:  vboxdrv
# Default-Start: 2 3 4 5
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Default-Stop: S 0 1 6
# Description: VirtualBox Virtual Machine
### END INIT INFO
### END INIT INFO


Riga 329: Riga 329:
:
:
</pre>
</pre>
I parametri che l'utente può/deve modificare secondo le sue convenzioni sono tre:
* ''VNAME'', se non si è scelto di usare il nome proposto in quest'esempio per la creazione della macchina virtuale.
* ''THIS_FILE'', se non si è scelto di usare il nome proposto in quest'esempio per la creazione dello script.
* ''RUNAS_USERNAME'', se a differenza di quest'esempio non si è creata la VM usando l'utenza di ''root''.
Rendiamo eseguibile lo script appena creato:
Rendiamo eseguibile lo script appena creato:
<pre>
<pre>
chmod 755 /etc/init.d/provavm
# chmod 755 /etc/init.d/provavm
</pre>
</pre>
e creiamo i link alle directory <tt>rcX.d</tt>:
e creiamo i link alle directory <code>rcX.d</code>:
<pre>
<pre>
update-rc.d provavm defaults
# update-rc.d provavm defaults 90 90
</pre>
</pre>
Da questo momento possiamo gestire il servizio con i soliti comandi:
Da questo momento possiamo gestire il servizio con i soliti comandi:
<pre>
<pre>
/etc/init.d/provavm start|stop
# /etc/init.d/provavm start|stop
</pre>
</pre>


==Installazione delle Guest Addictions==
=== Disabilitazione script ===
Il pacchetto Guest Addictions contiene i drivers per l'hardware virtuale emulato da VirtualBox e, se installato, permette di migliorare stabilità e prestazioni della nostra virtual machine.<br>
 
In maniera molto semplice, io ho scaricato l'immagine ISO delle Guest Addictions da qui: http://download.virtualbox.org/virtualbox/ , stando bene attento a scegliere la versione di VirtualBox che ho installato sul server. Poi ho montato l'immagine ISO all'interno del sistema operativo virtuale e ho installato i drivers.
Qualora si rendesse necessario disabilitare l'avvio automatico è sufficiente digitare da terminale:
==Salvare uno snapshot di una Virtual Machine==
<pre># update-rc.d -f provavm remove</pre>
Rimuovere fisicamente lo script dalla directory <code>/etc/init.d/</code> è facoltativo.
 
== Salvare uno snapshot di una Virtual Machine ==
 
Anche da linea di comando è possibile lavorare con gli snapshot di una macchina virtuale. Vediamo come.
Anche da linea di comando è possibile lavorare con gli snapshot di una macchina virtuale. Vediamo come.
* Salvare uno snapshot:
* Salvare uno snapshot:
<pre>
<pre>
VBoxManage snapshot prova take prova1 --description descrizione
# VBoxManage snapshot prova take prova1 --description descrizione
</pre>
</pre>
* Cancellare uno snapshot:
* Cancellare uno snapshot:
<pre>
<pre>
VBoxManage snapshot prova discard prova1
# VBoxManage snapshot prova discard prova1
</pre>
</pre>
* Ripristinare lo snapshot precedente:
* Ripristinare lo snapshot precedente:
<pre>
<pre>
VBoxManage snapshot prova discardcurrent --state
# VBoxManage snapshot prova discardcurrent --state
</pre>
</pre>
* Saltare l'ultimo snapshot e ripristinare lo snapshot precedente:
* Saltare l'ultimo snapshot e ripristinare lo snapshot precedente:
<pre>
<pre>
VBoxManage snapshot prova discardcurrent --all
# VBoxManage snapshot prova discardcurrent --all
</pre>
 
== Condividere cartelle tra host e guest ==
 
Si veda l'omonima sezione della guida dedicata all'[[VirtualBox: amministrazione da interfaccia grafica#Condividere cartelle tra host e guest| interfaccia grafica]].
 
== Aggiunta di una seconda Virtual Machine ==
Nel caso volessimo avere più di una Virtual Machine sullo stesso server fisico, occorrerà ripetere per ogni macchina virtuale le operazioni descritte fino a qui.
 
In più sarà necessario indicare a VirtualBox la porta RDP su cui mettere in ascolto ogni altra Virtual Machine diversa dalla prima, tenendo a mente che ad ogni porta può corrispondere solo una macchina virtuale. Poichè di default VRDP si pone in ascolto sulla porta 3389 (a questa porta risponderà la prima Virtual Machine installata), impostiamo come porta per la nostra seconda Virtual Machine la porta successiva:
<pre>
# VBoxManage modifyvm "SecondaVM" --vrdp on --vrdpport 3390 --vrdpauthtype null --vrdpmulticon on
</pre>
</pre>
<br><br/>
In questa maniera otterremo due macchine virtuali, entrambe avviabili al boot del server; la prima in ascolto sulla porta 3389, la seconda in ascolto sulla porta 3390 all'indirizzo IP del nostro server.
: [[Utente:Ferdybassi|Ferdybassi]]
 
----
== Eliminazione di una macchina virtuale ==
[[Categoria:Networking]]
{{Warningbox|Tutte le seguenti operazioni vanno effettuate a VM spenta.}}
[[Categoria:Server]]
 
[[Categoria:Sistema]]
<pre># VBoxManage unregistervm prova --delete</pre>
L'opzione ''--delete'' permette una contestuale eliminazione dei file associati. Qualora la cartella <code>/opt/vm/prova</code> non fosse stata automaticamente eliminata provvedere manualmente per recuperare spazio su disco.
 
Secondariamente rimuovere dai dispositivi conosciuti il disco dati:
<pre>VBoxManage closemedium disk /opt/vm/prova/prova.vdi</pre>
 
[[Categoria:Virtualizzazione]] [[Categoria:Non-Free]]

Versione attuale delle 13:28, 13 dic 2015

VirtualBox

Sommario

Installazione e configurazione
Amministrazione
Altro

Introduzione

Info.png Nota
La configurazione della macchina host presa in esame per la guida prevede come indirizzo IP di eth0 il seguente: 192.168.0.100.

VirtualBox mette a disposizione lo strumento VBoxManage per creare e amministrare le macchine virtuali da terminale. È uno strumento molto potente e complesso e permette di gestire le proprie macchine virtuali in maniera molto dettagliata; ciononostante in questa guida vedremo solo i comandi e le opzioni principali.
Per una spiegazione dettagliata del tool consiglio di far riferimento alla User Guide di VirtualBox: VBoxManage.

Bulb.png Suggerimento
Onde evitare complicazioni al momento di avviare la VM si consiglia di decidere subito quale utente si intende usare per avviarla, in modo da usare subito il suddetto utente per la procedura di creazione della medesima.


Creazione di una Virtual Machine

Creiamo innanzitutto una directory dove conservare tutte le nostre macchine virtuali. Io la creerò sotto /opt, ma siete liberi di metterla dove meglio credete (ricordatevi di modificare il percorso nei comandi seguenti!):

# mkdir /opt/vm
Info.png Nota
Nel seguito la maggior parte dei comandi saranno preceduti dal simbolo di root '#', questo non perché sia necessario avere i privilegi di amministratore per creare e gestire delle macchine virtuali tramite VirtualBox, ma perché per questo esempio si è scelto di usare una cartella in cui di norma solo l'utente root ha i permessi di scrittura. Naturalmente nulla vieterebbe all'utente di modificare i permessi sulla cartella /opt/vm in modo da poter eseguire i successivi comandi come utente normale.


Procediamo quindi a creare la nostra virtual machine di prova:

# VBoxManage createvm --name prova --basefolder /opt/vm/ --register

Analizziamo il comando seguente:

  • createvm indica a VBoxManage di creare una nuova virtual machine
  • --name consente di specificare il nome della nuova virtual machine. Consiglio di usare nomi senza spazi o caratteri strani
  • --basefolder permette di specificare la directory dove sarà creata la virtual machine. All'interno di questa directory sarà automaticamente creata una directory avente il nome che abbiamo assegnato alla virtual machine.
Warning.png ATTENZIONE
Si noti che a meno di non indicare un percorso assoluto tutti i file e le cartelle saranno creati all'interno della directory ~/.Virtualbox dell'utente che sta creando la macchina virtuale.


  • --register permette di importare in VirtualBox il file XML contenente le specifiche della virtual machine

Ora modifichiamo la configurazione della nostra nuova virtual machine:

# VBoxManage modifyvm prova --memory 1024 --acpi on --boot1 dvd --boot2 disk --nic1 bridged --bridgeadapter1 eth0 --ostype Windows2003 --usb on

Le modifiche che abbiamo introdotto nella nostra virtual machine sono le seguenti:

  • --memory specifica in MB la dimensione della RAM da assegnare (almeno a partire dalla versione 4.1 è necessario indicare solo la dimensione omettendo quindi l'unità di misura, cioè MB).
  • --acpi abilita o disabilita la modalità ACPI
  • --boot1 specifica che il primo dispositivo di boot è nel nostro caso un DVD
  • --boot2 specifica che il secondo dispositivo di boot è nel nostro caso l'hard disk virtuale
  • --nic1 indica che la prima interfaccia di rete virtuale utilizzerà la modalità bridge
  • --bridgeadapter1 indica l'interfaccia di rete del nostro server Debian che verrà usata dalla virtual machine; qualora sul server siano già stati configurati uno o più bridge di rete sarà necessario o specificare un interfaccia di rete non appartenente ad alcun bridge, oppure al contrario il nome di un bridge esistente. Si noti anche che la macchina guest avrà pieno accesso alla LAN, tuttavia detta interfaccia dovrà essere configurata o automaticamente attraverso un server dhcp attivo nella LAN oppure manualmente dall'utente.
  • --ostype permette di specificare il tipo di sistema virtuale che installeremo. Per un elenco si dia il comando VBoxManage list ostypes
  • --usb abilita o disabilita le porte USB

Ogni volta che, attraverso il parametro modifyvm apportate delle modifiche alla configurazione della vostra virtual machine, queste vengono registrate nel file XML creato in precedenza.

Info.png Nota
Nel succitato comando d'esempio per configurare l'interfaccia di rete virtuale si sono usate le opzioni --nic1 bridged --bridgeadapter1 eth0, tuttavia qualora non si abbia bisogno/voglia di configurare un bridge di rete perché ad esempio al sistema guest non saranno richieste particolari funzionalità di rete, allora è possibile optare per la modalità NAT sostituendo alle opzioni in questione la più semplice --nic1 nat. In questo modo l'utente non dovrà configurare nulla, tuttavia la macchina virtuale fungerà da firewall bloccando tutte le connessioni in entrata proprio come un router; in modalità NAT dunque qualora si avesse bisogno di rendere disponibile qualche servizio, come una connessione ssh tra host e guest, l'utente dovrà creare delle apposite regole come spiegato qui.

Ora preoccupiamoci di creare un hard disk virtuale per la nostra virtual machine:

# VBoxManage createhd --filename /opt/vm/prova/prova.vdi --size 10000 --register (l'opzione register non è più supportata in questo contesto almeno dalla versione 4.1)

Piccola spiegazione:

  • --filename specifica la directory dove creare il disco virtuale
  • --size indica la dimensione del disco in MB


Installiamo quindi un controller IDE nella nostra Virtual Machine:

# VBoxManage storagectl "prova" --name "IDE Controller" --add ide --controller ICH6

Infine modifichiamo la virtual machine collegandole il disco virtuale che abbiamo appena creato con uno dei seguenti due comandi:

# VBoxManage modifyvm prova -hda /opt/vm/prova/prova.vdi

oppure:

# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "/opt/vm/prova/prova.vdi"

Possiamo collegare alla nostra macchina un massimo di 3 hard disk virtuali (hda, hdb, hdd). hdc è riservato per il CD/DVD.

Arrivati a questo punto dobbiamo montare un'immagine ISO o un CD/DVD nel nostro lettore CD/DVD virtuale, in modo di poter installare il nostro sistema operativo virtuale. In questo esempio monterò un'immagine ISO:

# VBoxManage openmedium dvd /home/ferdy/w2003.iso (valido solo per le versioni inferiori alla 4.0)
# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium "/home/ferdy/w2003.iso"

Se invece vogliamo utilizzare il lettore CD/DVD della macchina host, anziché ricorrere all'utilizzo di un'immagine ISO, allora:

# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium Host:/dev/cdrom

Avvio di una macchina virtuale

Info.png IMPORTANTE
  • Qualora si abbia la necessità di accedere a dispositivi USB ricordarsi di aggiungere l'utente usato per creare e amministrare le macchine virtuali al gruppo vboxusers:
# adduser nome_utente vboxusers
  • Una macchina virtuale creata e registrata da un certo utente non sarà avviabile da utenti diversi dal medesimo, a meno di non ripetere la procedura di configurazione e registrazione della macchina anche per gli altri utenti o di esportarla e poi importarla.


Metodo 1

Warning.png ATTENZIONE
Per utilizzare il protocollo VRDP è necessario aver installato l'extension pack


Arrivati a questo punto è possibile avviare la macchina virtuale con il comando:

# VBoxHeadless --startvm prova

Il comando VBoxHeadless avvia la virtual machine indicata e nel contempo inizializza una sessione VRDP Server (Virtual Remote Desktop Protocol). Purtroppo però, pur essendo il comando suggerito dalla User Guide di VirtualBox, ha il difetto di bloccare la sessione di terminale fino allo spegnimento della macchina virtuale. Per questo motivo consiglio di avviare una virtual machine con il comando alternativo:

# VBoxHeadless --startvm prova &

che non sempre funziona, oppure:

# VBoxManage startvm prova --type vrdp (vecchia sintassi)
# VBoxManage startvm prova --type headless

dagli effetti identici al primo, ma senza che la nostra shell sia resa inutilizzabile. Si noti che in virtualbox i parametri per configurare vrdp contengono la parola chiave vrde (e non appunto vrdp come inve ci si potrebbe aspettare).

Metodo 2

Un secondo metodo, molto simile al precedente, prevede di usare in primis screen per generare una sessione di terminale aggiuntiva in cui avviare la macchina virtuale, in secondo luogo di usare il protocollo VNC al posto di VRDE (che come già detto è la versione oracle di VRDP). Un volta avviato screen e superata la schermata di benvenuto digitare:

# VBoxHeadless -s prova -n -m numero_porta
  • -s è l'abbreviazione di --startvm;
  • -n abilità il server vnc integrato;
  • -m definisce il numero della porta su cui la macchina virtuale rimarrà in ascolto.

Gestione di una macchina virtuale

Condividere una o più directory tra host e guest

A macchina virtuale spenta è possibile mettere in condivisione automaticamente una o più risorse col seguente comando:

# VBoxManage sharedfolder add prova --name "nome_arbitrario" --hostpath "/percorso/risorsa/host" --automount

In windows aprendo esplora risorse dette cartelle figureranno ciascuna come dischi di rete cui è già stata assegnata la prima lettera dell'alfabeto disponibile, mentre in linux risulteranno visibili sotto /media, ma ai loro nomi sarà stato sistematicamente aggiunto il prefisso sf. Per maggiori informazioni si veda l'apposita pagina del manuale.

Collegamento alla VM da Windows XP

Aprite "Connessione Desktop Remoto" e digitate l'indirizzo IP del vostro server Debian: si aprirà la console della macchina virtuale che avete avviato.

Comandi utili di "Connessione Desktop Remoto"

  • ALT+PGSU: Passa da un programma all'altro da sinistra verso destra.
  • ALT+PGGIU: Passa da un programma all'altro da destra verso sinistra.
  • ALT+INS: Passa da un programma all'altro nell'ordine in cui sono stati aperti.
  • ALT+HOME: Visualizza il menù Start.
  • CTRL+ALT+INTERR: Passa da una finestra alla modalità schermo intero e viceversa.
  • CTRL+ALT+FINE: Visualizza la finestra di dialogo Protezione di Windows.
  • ALT+CANC: Visualizza il menù Windows.
  • CTRL+ALT+SEGNO MENO (-) del tastierino numerico: Copia negli Appunti del computer remoto la finestra attiva del computer client (esegue la stessa funzione della combinazione di tasti ALT+STAMP in un computer locale).
  • CTRL+ALT+SEGNO PIÙ (+) del tastierino numerico: Copia negli Appunti del computer remoto l'intera schermata del computer client (esegue la stessa funzione del tasto STAMP in un computer locale).
  • CTRL+ALT+freccia DESTRA: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
  • CTRL+ALT+freccia SINISTRA: Consente di spostarsi al di fuori dei controlli di Desktop remoto su un controllo nel programma host, ad esempio un pulsante o una casella di testo. Utile quando i controlli di Desktop remoto sono incorporati in un altro programma (host).
  • La combinazione CTRL+ALT+CANC ha sempre effetto sul desktop del computer locale. Per inviare la combinazione CTRL+ALT+CANC al computer remoto, è necessario premere CTRL+ALT+FINE.

Collegamento alla VM da Linux

Info.png Importante
A partire dalla versione 4.1.X la connessione tramite vrde/vrdp è possibile solo dopo aver installato l'extension pack sulla macchina host, anche se la macchina virtuale viene avviata specificando di usare vrde/vrdp.


VRDE (VRDP)

Dalla macchina client aprire un terminale e digitare:

$ rdesktop -a 16 192.168.0.100

Si aprirà la console della macchina virtuale che avete avviato.
Alternativamente è possibile usare altri applicativi come vinagre (in tal caso ricordarsi di selezionare il giusto protocollo, cioè RDP e non VNC!) e gnome-rdp in GNOME, o krdc in KDE.

VNC

Se per un qualsiasi motivo non si riesce (o non si vuole) usare VRDE, perché per esempio si riceve un messaggio d'errore come il seguente:

Autoselected keyboard map it
ERROR: nome_macchina: unable to connect

provare ad avviare VBoxHeadless specificando VNC come protocollo (opzione -n, si veda il precedente paragrafo metodo 2) ed usare dei client VNC, come i già citati vinagre e krdc.

Arresto della VM

Per arrestare la macchina virtuale è possibile sfruttare l'apposita funzione all'interno del sistema guest se si è collegati tramite un client vnc, oppure direttamente dal terminale del server digitando:

# VBoxManage controlvm prova savestate

Un metodo più brutale è il seguente:

VBoxManage controlvm prova poweroff

che è l'equivalente di togliere la spina ad una macchina reale.
Terminata l’installazione del sistema operativo, il DVD può essere rimosso dalla Virtual Machine col comando:

# VBoxManage storageattach "prova" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium none

Qualora l’immagine DVD non sia più necessaria, esiste la possibilità di de-registrarla dal database di VirtualBox:

# VBoxManage closemedium dvd "/home/ferdy/w2003.iso"

Importazione di una Virtual Machine

Se abbiamo già una virtual machine creata in precedenza, possiamo importarla all'interno della nostra installazione di VirtualBox per poi avviarla. Per importare una virtual machine esistente si utilizzi il comando:

# VBoxManage registervm /opt/vm/prova2/prova2.xml

Avvio automatico di una Virtual Machine

Warning.png ATTENZIONE
  • È bene ricordare che una macchina virtuale creata e registrata da un certo utente non sarà avviabile da utenti diversi dal medesimo, a meno di non ripetere la procedura di configurazione e registrazione della macchina anche per gli altri utenti o di esportarla e poi importarla.
  • Non usare nomi contenenti spazi per le VM che si vuole avviare automaticamente.


Per avviare una virtual machine come demone al boot di Debian sono sufficienti pochi passi.

Innanzitutto creiamo un file per il nostro script di boot:

# nano /etc/init.d/provavm

e inseriamoci questo codice:

#! /bin/sh
### BEGIN INIT INFO
# Provides: VirtualBox - VM di Prova
# Required-Start: vboxdrv
# Required-Stop:  vboxdrv
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Description: VirtualBox Virtual Machine
### END INIT INFO

# Author: Ferdinando Bassi per Debianizzati.org

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin

#
# DA CAMBIARE E DA ADATTARE
#
# Name given to the virtual machine
VM_NAME="prova"

# Name of this file, excluding /etc/init.d/
THIS_FILE=provavm

# Username to run as
RUNAS_USERNAME=root

#
# FINE SEZIONE DA MODIFICARE
#

DESC="VirtualBox - ${VM_NAME}"
DAEMON=/usr/bin/VBoxVRDP
DAEMON_ARGS="-startvm \"${VM_NAME}\""
PIDFILE=/var/run/$THIS_FILE.pid
SCRIPTNAME=/etc/init.d/$THIS_FILE

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$THIS_FILE ] && . /etc/default/$THIS_FILE

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
#start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
#|| return 1
#start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
#$DAEMON_ARGS \
#|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.

su $RUNAS_USERNAME -c "VBoxManage startvm ${VM_NAME} --type vrdp"
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $THIS_FILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.

su $RUNAS_USERNAME -c "VBoxManage controlvm ${VM_NAME} savestate"

start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
# start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
echo "Reload not supported"
return 0
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$THIS_FILE"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$THIS_FILE"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 3
;;
esac

:

I parametri che l'utente può/deve modificare secondo le sue convenzioni sono tre:

  • VNAME, se non si è scelto di usare il nome proposto in quest'esempio per la creazione della macchina virtuale.
  • THIS_FILE, se non si è scelto di usare il nome proposto in quest'esempio per la creazione dello script.
  • RUNAS_USERNAME, se a differenza di quest'esempio non si è creata la VM usando l'utenza di root.

Rendiamo eseguibile lo script appena creato:

# chmod 755 /etc/init.d/provavm

e creiamo i link alle directory rcX.d:

# update-rc.d provavm defaults 90 90

Da questo momento possiamo gestire il servizio con i soliti comandi:

# /etc/init.d/provavm start|stop

Disabilitazione script

Qualora si rendesse necessario disabilitare l'avvio automatico è sufficiente digitare da terminale:

# update-rc.d -f provavm remove

Rimuovere fisicamente lo script dalla directory /etc/init.d/ è facoltativo.

Salvare uno snapshot di una Virtual Machine

Anche da linea di comando è possibile lavorare con gli snapshot di una macchina virtuale. Vediamo come.

  • Salvare uno snapshot:
# VBoxManage snapshot prova take prova1 --description descrizione
  • Cancellare uno snapshot:
# VBoxManage snapshot prova discard prova1
  • Ripristinare lo snapshot precedente:
# VBoxManage snapshot prova discardcurrent --state
  • Saltare l'ultimo snapshot e ripristinare lo snapshot precedente:
# VBoxManage snapshot prova discardcurrent --all

Condividere cartelle tra host e guest

Si veda l'omonima sezione della guida dedicata all' interfaccia grafica.

Aggiunta di una seconda Virtual Machine

Nel caso volessimo avere più di una Virtual Machine sullo stesso server fisico, occorrerà ripetere per ogni macchina virtuale le operazioni descritte fino a qui.

In più sarà necessario indicare a VirtualBox la porta RDP su cui mettere in ascolto ogni altra Virtual Machine diversa dalla prima, tenendo a mente che ad ogni porta può corrispondere solo una macchina virtuale. Poichè di default VRDP si pone in ascolto sulla porta 3389 (a questa porta risponderà la prima Virtual Machine installata), impostiamo come porta per la nostra seconda Virtual Machine la porta successiva:

# VBoxManage modifyvm "SecondaVM" --vrdp on --vrdpport 3390 --vrdpauthtype null --vrdpmulticon on

In questa maniera otterremo due macchine virtuali, entrambe avviabili al boot del server; la prima in ascolto sulla porta 3389, la seconda in ascolto sulla porta 3390 all'indirizzo IP del nostro server.

Eliminazione di una macchina virtuale

Warning.png ATTENZIONE
Tutte le seguenti operazioni vanno effettuate a VM spenta.


# VBoxManage unregistervm prova --delete

L'opzione --delete permette una contestuale eliminazione dei file associati. Qualora la cartella /opt/vm/prova non fosse stata automaticamente eliminata provvedere manualmente per recuperare spazio su disco.

Secondariamente rimuovere dai dispositivi conosciuti il disco dati:

VBoxManage closemedium disk /opt/vm/prova/prova.vdi