FaciLinux

Guide Facili per Linux

VM

Virtual Machine

È possibile installare le guest additions di VirtualBox anche su macchine linux di tipo "server", che tipicamente non montano una GUI?

La risposta a questa domanda è molto semplice, ed è sì.

In questa guida prenderemo ad esempio una vm server con installato Debian.

Fase Preliminare

NB Tutti i comandi dati da terminale in questa guida sono da eseguire con utente root

Prima di tutto occorre accedere in console alla vm, e installare tutti i pacchetti necessari alla corretta installazione delle Guest Additions; da root quindi diamo il seguente comando:

apt update && apt upgrade && apt install gcc make perl linux-headers-$(uname -r)

Ora siamo pronti per installare le Guest Additions; dal menu di VirtualBox selezioniamo la voce "Dispositivi > Inserisci l'immagine del CD delle Guest Additions".

Il CD è ora inserito, smontato, all'interno del server.

Copia dei file e installazione

Montiamo il cd delle Guest Additions con il seguente comando:

mount /dev/cdrom /mnt

Ora copiamo il file relativo alla Guest Additions per sistemi Linux all'interno della home di root:

cp /mnt/VBoxLinuxAdditions.run ~

Ora eseguiamo l'installazione delle Guest Additions, utilizzando il flag -nox11 (per consentire l'installazione da console non grafica) e l'opzione install:

/root/VBoxLinuxAdditions.run --nox11 install

Il comando produrrà un output simile a questo:

Verifying archive integrity... All good.
Uncompressing VirtualBox 6.0.4 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.0.4 of VirtualBox Guest Additions...
update-initramfs: Generating /boot/initrd.img-4.9.0-9-amd64
root@debian-9:~# /root/VBoxLinuxAdditions.run --nox11 install
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.0.4 Guest Additions for Linux........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: Building the modules for kernel 4.9.0-9-amd64.
update-initramfs: Generating /boot/initrd.img-4.9.0-9-amd64
VirtualBox Guest Additions: Running kernel modules will not be replaced until 
the system is restarted
VirtualBox Guest Additions: Starting.

Se è andato tutto liscio le Guest Additions sono ora installate sulla VM.

Verifica È possibile verificare, aprendo un terminale sull'host che esegue VirtualBox, se le guest additions sono installate su una VM. Il comando da dare è:

vboxmanage showvminfo "Nome VM"

sostituiendo "Nome VM" con la label o l'UUID della VM di cui si vogliono ottenere le informazioni.

NB È possibile ottenere la lista delle label e degli UUD delle VM con il comando vboxmanage list vms

L'output del comando conterrà qualcosa di questo genere:

Additions run level:         2
Additions version            6.0.4 r128413

Guest Facilities:

Facility "VirtualBox Base Driver": active/running (last update: 2019/06/06 14:29:09 UTC)
Facility "VirtualBox System Service": active/running (last update: 2019/06/06 14:29:33 UTC)
Facility "Seamless Mode": not active (last update: 2019/06/06 14:29:09 UTC)
Facility "Graphics Mode": not active (last update: 2019/06/06 14:29:09 UTC)

Rimozione delle Guest Additions

Per rimuovere le Guest Additions è sufficiente lanciare il comando:

/root/VBoxLinuxAdditions.run --nox11 uninstall

Installazione su altre distribuzioni GNU/Linux

Questa guida porta ad esempio l'installazione delle guest additions su una VM Debian; la guida può funzionare anche per sistemi derivati (o imparentati...), come Ubuntu e LinuxMint.

Per sistemi diversi l'elenco delle dipendenze da installare nei prerequisiti potrebbe essere diverso; ad esempio, nei sistemi RedHat, Fedora, CentOS, il pacchetto linux-headers viene nominato come kernel-devel.

Generalmente lo script di installazione delle Guest Additions è piuttosto evoluto, quindi se manca una dipendenza l'installazione fallirà, suggerendovi i passi da seguire per le dipendenze mancanti.

NAT forwarding in VirtualBox

- Posted in VM by

Grazie a VirtualBox è possibile creare velocemente delle VM sulla propria workstation, per finalità di sviluppo e test. Supponiamo di voler provare l'ultima versione di un CMS senza impattare su servizi in produzione; è possibile creare al volo una macchina virtuale con un server Apache a bordo e installare il CMS per test e sviluppo. Le VM in VirtualBox vengono generalmente impostate con un indirizzo NAT interno, il che significa che - nel nostro esempio - il web server di test che gira sulla guest vm non sarà raggiungibile dal browser della nostra workstation. Ciò, a meno di impostare una regola di inoltro. Ecco come fare, e soprattutto ecco come farlo da linea di comando.

VBoxManage

vboxmanage è il coltellino svizzero che ci servirà per tutte le operazioni di questa guida; apriamo quindi un terminale e digitiamo:

vboxmanage list vms

Nel mio caso il comando riporta questa lista:

vboxmanage list vms
"W10" {5c7b69f8-e1a9-4799-8f4c-2e33e08339ea}
"LinuxMint19.1" {fb9c380e-eecb-446a-ac80-3c61f0cd8d6c}
"OpenMandriva 4" {33e112cc-65b1-4465-bb98-2b696add9942}
"Debian 9.8" {9816d8a6-0110-4c81-8c38-921e68e72a3c}
"NuTyX" {0982b040-2bbe-4574-86d0-d04aa033d31b}
"OpenSuse" {a3da54bf-3573-4b3d-b52c-0dcf759b0f2a}
"Debian5.0" {1cae2c0b-50ad-40c0-af52-668d6bbbae8a}

La VM su cui gira il web server è "Debian 9.8". Per avviarla basta dare il seguente comando:

vboxmanage startvm "Debian 9.8"

Scoprire l'indirizzo IP della VM

Una volta che la VM sarà partita è necessario scoprire quale sia il suo indirizzo IP, necessario per impostare la regola di forward. Anche in questo caso il tool vboxmanage ci viene in aiuto; è possibile infatti scoprire tutte le informazioni di una vm con il comando vboxmanage guestproperty enumerate "Nome VM". Nel caso di esempio il comando diventa:

vboxmanage guestproperty enumerate "Debian 9.8"

con il seguente output (NB la parte non necessaria è stata rimossa):

Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 10.0.2.15

ATTENZIONE: perché il comando di enumerate funzioni occorre che sulla VM siano installate le guest additions

Creaimo una regola di port forwarding

Le regole di port forwarding si creano con il comando vboxmanage controlvm e l'opzione natpf. Dal comando di enumerate precedente abbiamo i seguenti dati:

  • numero della scheda di rete (ricavabile da /VirtualBox/GuestInfo/Net/0/V4/IP ), che va incrementato di 1 per il successivo comando
  • indirizzo ip

Sulla macchina di test sta girando un server Apache, in ascolto sulla porta 80; con questo comando abilitiamo una regola di port-forwarding dal nome "Regola1" della porta 80 della VM sulla porta 8080 di localhost (ovvero 127.0.0.1) della workstation

vboxmanage controlvm "Debian 9.8" natpf1 "Regola1",tcp,127.0.0.1,8080,10.0.2.15,80

NB l'opzione natpf deve essere seguita dal numero della scheda di rete su cui impostare la regola. Nell'esempio la scheda è la prima (di quattro massime impostabili su un VM), quindi il comando diventa natpf1; se si dovesse impostare una regola sulla seconda scheda il comando diventerebbe natpf2 e così via.

Verifica

È possibile verificare lo stato delle regole impostate sia direttamente, ovvero aprendo un browser all'indirizzo http://127.0.0.1:8080

verifica diretta sia indirettamente, ovvero controllando l'output del comando

vboxmanage showvminfo "Debian 9.8"

Nel caso dell'esempio riportato qui sopra, nell'output del comando compaiono le righe:

NIC 1 Rule(0):   name = Regola1, protocol = tcp, host ip = 127.0.0.1, host port = 8080, guest ip = 10.0.2.15, guest port = 80

che confermano l'applicazione della regola impostata.

Il Natting di default di VirtualBox imposta indirizzi della sottorete 10.0.15.XX. Può essere comodo o necessario a volte modificare il natting di default di una macchina già installata, ecco come fare.

Da macchina spenta aprire un terminale e digitare:

VBoxManage setextradata VM_NAME VBoxInternal/Devices/pcnet/0/LUN#0/Config/Network 172.23.24/24

(In questo esempio viene settato l'ip privato 172.23.24).

Lo stesso comando può venire dato anche su sistemi Windows, naturalmente, avendo l'accortezza, dopo aver aperto un propt dei comandi, di portarsi nella directory di installazione di VirtualBox.