Macchine virtuali con libvirt+qemu/kvm per fuss-server e fuss-client
Per fare test di fuss-server e fuss-client è utile avere a disposizione delle macchine virtuali; specialmente se si lavora su debian stretch o successive (dove VirtualBox non è più disponibile) è comodo usare qemu/kvm tramite libvirt.
Installazione e configurazione
Installazione di libvirt
Installare i seguenti pacchetti:
apt install qemu libvirt-clients libvirt-daemon virtinst \ libvirt-daemon-system virt-viewer virt-manager dnsmasq-base
Aggiungere il proprio utente ai gruppi
libvirtekvm:adduser $UTENTE libvirt adduser $UTENTE kvm
Una volta che l’utente fa parte dei gruppi (ad esempio previo
logout/ri-login) si può usare virt-manager per gestire macchine
virtuali e reti tramite un’interfaccia grafica simile a quella di
VirtualBox.
Volendo invece usare la riga di comando, si può proseguire con questa guida.
Configurazione della rete
fuss-server richiede la configurazione di almeno due, in alcuni casi tre o quattro, schede di rete: una con accesso ad internet e due o tre su rete isolata.
Per creare queste interfacce di rete da riga di comando se ne deve
scrivere il file di configurazione e passarlo al comando virsh
net-define
Per la rete nattata, creare il file natted.xml con i seguenti
contenuti, sostituendo a 9.9.9.9 l’indirizzo di un server dns opportuno:
<network>
<name>natted</name>
<forward mode='nat' />
<bridge name='virbr7' stp='on' delay='0'/>
<dns>
<forwarder addr='9.9.9.9'/>
</dns>
<ip address='192.168.7.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.7.128' end='192.168.7.254'/>
</dhcp>
</ip>
</network>
Suggerimento
Con questa configurazione sull’host verrà configurata
un’interfaccia di rete virbr7 con assegnato l’indirizzo
192.168.7.1.
Le macchine virtuali avranno invece a disposizione un dchp che
assegnerà loro indirizzi nel range da 192.168.7.128 a
192.168.7.254, e le richieste DNS verranno inoltrate al server
9.9.9.9..
quindi lanciare, come root:
# virsh net-define natted.xml
# virsh net-start natted
Similmente, per le interfacce isolate si può usare quanto segue, nel
file isolated.xml:
<network>
<name>isolated</name>
<bridge name='virbr6' stp='on' delay='0'/>
<ip address='192.168.6.253' netmask='255.255.255.0'>
</ip>
</network>
e nel file isolated2.xml:
<network>
<name>isolated2</name>
<bridge name='virbr8' stp='on' delay='0'/>
<ip address='192.168.8.253' netmask='255.255.255.0'>
</ip>
</network>
e nel file isolated3.xml:
<network>
<name>isolated2</name>
<bridge name='virbr9' stp='on' delay='0'/>
<ip address='192.168.9.253' netmask='255.255.255.0'>
</ip>
</network>
E come prima, sempre con utente root:
# virsh net-define isolated.xml
# virsh net-start isolated
# virsh net-define isolated2.xml
# virsh net-start isolated3
# virsh net-define isolated3.xml
# virsh net-start isolated2
In questo modo le interfacce sono definite, ma non verranno avviate automaticamente; per farlo usare i seguenti comandi:
# virsh net-autostart natted
# virsh net-autostart isolated
# virsh net-autostart isolated2
# virsh net-autostart isolated3
oppure usare net-start per ciascuna interfaccia quando se ne ha bisogno.
Creazione delle macchine virtuali
Per creare la macchina che ospiterà il server, dopo aver abilitato le interfacce di rete e scaricato l”iso di fuss-server lanciare il seguente comando:
$ virt-install --connect qemu:///system --name fuss_server --memory 2048 \
--cdrom $PATH_ISO_FUSS-SERVER --network network=natted \
--network network=isolated --network network=isolated2 \
--network network=isolated3 \
--disk size=16,format=qcow2 --os-variant debian13
questo creerà una macchina virtuale che fa il boot dall’iso dell’installer e aprirà una finestra di virt-viewer per controllarla. Alla fine dell’installazione si può fare login e procedere con l”Installazione di Fuss Server
Una volta che il server è installato e configurato si può fare la stessa cosa per una (o più) macchine client:
$ virt-install --connect qemu:///system --name fuss_client --memory 2048 \
--cdrom $PATH_ISO_FUSS-CLIENT --network network=isolated \
--disk size=64,format=qcow2 --os-variant debian13
Creazione delle macchine virtuali con cloud init
In alternativa all’installazione da netinst si possono usare le immagini cloud init ufficiali pubblicate su https://cloud.debian.org/images/cloud/ .
Scaricare l’ultima immagine -generic- disponibile per la
distribuzione che si vuole usare, ad esempio:
Creare i seguenti file: meta-data-server:
instance-id: fuss_server
dsmode: local
Creare i seguenti file: meta-data-client:
instance-id: fuss_client
dsmode: local
user-data-server:
#cloud-config
fqdn: fuss.virtual.local
manage_etc_hosts: true
timezone: Europe/Rome
users:
- name: root
ssh_authorized_keys:
- ssh-rsa <fingerprint_chiave> <id_chiave>
user-data-client:
#cloud-config
fqdn: client.virtual.local
manage_etc_hosts: true
timezone: Europe/Rome
users:
- name: root
ssh_authorized_keys:
- ssh-rsa <fingerprint_chiave> <id_chiave>
network-data-server:
network:
version: 2
ethernets:
enp1s0:
dhcp4: true
enp2s0:
dhcp4: false
addresses:
- 192.168.6.1/24
Copiare l’immagine scaricata per creare lo storage per la macchina
virtuale per il server (attenzione, per accedere alla directory
/var/lib/libvirt/images/ è necessario essere root:
# cp debian-13-generic-amd64-daily.qcow2 /var/lib/libvirt/images/fuss_server.qcow2
e ridimensionarla ad una dimensione opportuna, sempre come root (le partizioni verranno ridimensionate automaticamente da cloud-init:
# qemu-img resize /var/lib/libvirt/images/fuss_server.qcow2 16G
infine creare la macchina virtuale con il comando:
$ virt-install --name fuss_server --import --os-variant debian13 \
--network network=natted --network network=isolated \
--network network=isolated2 \
--disk /var/lib/libvirt/images/fuss_server.qcow2 \
--cloud-init meta-data=meta-data-server,user-data=user-data-server,network-config=network-config-server
E ripetere similmente per il client:
# cp debian-13-generic-amd64-daily.qcow2 /var/lib/libvirt/images/fuss_client.qcow2
ridimensionare ad una dimensione opportuna, sempre come root:
# qemu-img resize /var/lib/libvirt/images/fuss_client.qcow2 64G
infine creare la macchina virtuale con il comando:
$ virt-install --name fuss_client --import --os-variant debian13 \
--network network=isolated \
--disk /var/lib/libvirt/images/fuss_client.qcow2 \
--cloud-init meta-data=meta-data-client,user-data=user-data-client
Gestione
Boot delle macchine
Per avviare le volte successive le macchine è necessario:
Se l’host è stato spento, e non è stato configurato l’autoavvio delle interfacce di rete, abilitarle:
# virsh net-start natted # virsh net-start isolated # virsh net-start isolated2
Avviare la macchina di cui si ha bisogno:
$ virsh --connect qemu:///system start fuss-server
Se necessario, avviare una sessione grafica sulla macchina:
$ virt-viewer --connect qemu:///system fuss-server
Snapshot
Per creare uno snapshot di una macchina:
virsh -c qemu:///system snapshot-create-as fuss-server <nome> "<descrizione>"
Per vedere l’elenco degli snapshot disponibili:
virsh -c qemu:///system snapshot-list fuss-server
Per riportare la macchina ad uno snapshot, eliminando tutte le modifiche effettuate nel frattempo:
virsh -c qemu:///system snapshot-revert fuss-server <nome>
oppure, per usare lo snapshot corrente (sempre perdendo le modifiche):
virsh -c qemu:///system snapshot-revert fuss-server --current
Configurazioni del sistema
Configurazione della rete
All’interno del fuss-server, le interfacce di rete come definite in
questa pagina possono essere configurate aggiungendo a
/etc/network/interfaces le seguenti righe:
allow-hotplug enp1s0
iface enp1s0 inet dhcp
allow-hotplug enp2s0
iface enp2s0 inet static
address 192.168.6.1
netmask 255.255.255.0
In fuss-client non è invece necessaria nessuna configurazione, dato che viene usato dhcp come da default.
Vedi anche
In caso di problemi o per approfondire l’uso da riga di comando di libvirt è molto utile la pagina su Libvirt della wiki di Arch Linux , la maggior parte della quale si applica anche a sistemi Debian o Debian-based.