QEMU HOWTO

Dom, 22/07/2007 - 16:03

QEMU HOWTO

Inviato da kalos 6 commenti

Questa è una libera traduzione di come usare qemu apparsa su debian package of the day ad opera di Michael Williamson. Mi scuso per qualche eventuale inesattezza, ma confermo che i comandi funzionano tutti.

QEMU permette di emulare un sistema operativo in un computer ospite senza bisogno di una installazione sul nostro hard disk, cioè possiamo fare funzionare un computer virtuale nel nostro computer reale. Ciò lo rende perfetto per provare e verificare l'ultimo rilascio dei vari sistemi operativi , di distribuzione più vecchie, o semplicemente provare altre distro.

Così, diciamo che desiderate provare (senza bisogno di masterizzare) la iso di un LiveCD, che avete scaricato sul vostro sul vostro hard disk. Semplicissimo!
Apriamo la shell e scriviamo :

qemu - cdrom path/to/livecd.iso - boot d

L'opzione -cdrom dice a QEMU il percorso per CD che desiderate utilizzare, mentre -boot detta da quale dispositivo fare il boot - in questo caso, desideriamo caricare il sistema dal CD, che è sempre il dispositivo d.

Potreste ottenere un messaggio circa kqemu – per ora potete ignorare questo avviso.

Alternativamente, potete desiderare caricare il sistema da un CD reale, bene, date semplicemente il percorso del vostro lettore CD in /dev. Per esempio, se il vostro lettore CD è /dev/hdc, basta:

qemu - cdrom /dev/hdc -boot d

Naturalmente, non desideriamo usare sempre i CDs , ma potremmo desiderare realmente installare qualcosa! Perciò, prima di tutto creiamo un'immagine nel nostro hard disk. Ciò lo facciamo usando qemu-img, così come segue:

qemu-img create virtualharddrive.qcow 5G -f qcow

Ciò genera un'immagine denominata virtualharddrive.qcow, che è grande 5 gigabytes. Se la desideraste di 5 megabyte, bisogna scrivere 5M , per dieci gigabytes, scrivere 10G e così via.

Per concludere, l'opzione di -f dice a qemu-img quale formato desiderate usare. Tra i formati disponibili qcow è la norma - funziona abbastanza bene e sul hard disk occupa soltanto lo spazio effettivamente impiegato. Se il nostro hard disk virtuale avesse una capienza di 5 gigabytes, ma contenuto soltanto 2 gigabytes dei dati, allora occuperebbe soltanto circa 2 gigabytes sul nostro hard disk reale.

Bene, ora installiamo l'immagine che abbiamo creato. Semplicemente scrivere:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -boot d

Quindi, seguire le istruzioni come con un'installazione ordinaria.

Ora, non tutte le distribuzioni vengono rilasciate su un solo CD - in alcuni casi, dobbiamo scambiare i CDs. Per realizzare questo, dobbiamo fare due cose. In primo luogo, facciamo comparire il monitor di QEMU aggiungendo l'opzione -monitor stdio, quindi concludiamo il nostro comando in questo modo:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -boot d -monitor stdio

Quando diamo questo comando, QEMU dovrebbe lasciarci introdurre i comandi. Per cambiare CDs, si scriva semplicemente nella shell il comando:

eject cdrom
change cdrom path/to/newcd.iso

Voila! La macchina virtuale dovrebbe ora permetterci di cambiare CDs in modo da poter continuare l'installazione.

Naturalmente, possiamo cambiare i CDs in qualunque momento, ma non durante una installazione.

Una volta che l'installazione è completata, possiamo caricare il sistema direttamente dal nostro hard disk. Poiché QEMU fa questo per default, bisogna rimuove l'opzione -boot dal comando che sarà:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -monitor stdio

Se non abbiamo intenzione di usare il CD dopo l'installazione, possiamo eliminarlo e il comando sarà :

qemu virtualharddrive.qcow -monitor stdio

Ciò dovrebbe lasciarci giocare con il nostro sistema recentemente installato e rallegrarci senza mettere il nostro proprio pc in pericolo. Se desiderate aggiungere qualcosa, ma non si desidera fare cambiamenti all'immagine scritta, si aggiunga l'opzione
-snapshot
Se, dopo aver usato questa opzione, decidiamo che realmente desideriamo conservare i cambiamenti fatti sul hard disk, basta semplicemente scrivere
commit
nel monitor di QEMU ed i cambiamenti saranno scritti.
Questi comandii funzionano normalmente con distribuzioni leggere,mentre con alcune si nota un rallentamento. Ciò è dovuto al fatto che QEMU, per default, usa soltanto 128MB di RAM. Bene, possiamo aumentare la ram disponibile usando l'opzione -m, seguita dalla quantità di RAM in megabyte che vogliamo. Per esempio, se desiderassimo assegnare 256MB a QEMU per il funzionamento del LiveCD, dobbiamo scrivere:

qemu -cdrom path/to/livecd.iso -boot d -m 256

Questo dovrebbe accelerare le cose piacevolmente! Ma non si dia a QEMU troppa memoria, se desideriamo utilizzare altri programmi. Magari notiamo che Qemu gira ancora lento, allora è il caso d'installare l'acceleratore kqemu. L'installazione del kqemu dai repository è molto semplice.

apt-get install kqemu-source kqemu-common

se si usa Etch il modulo del proprio kernel è già pronto

Se non si ha già module-assistant, bisogna installarlo:

apt-get install module-assistant

Quindi (come root) dare nella shell

m-a prepare m-a a-i kqemu

Questo è tutto. D'ora in poi per usare kqemu, come root diamo il comando:

modprobe kqemu major=0

Allora, come utente ordinario, QEMU userà automaticamente kqemu, che dovrebbe velocizzarlo. Se QEMU protesta che ancora non può usare il kqemu, dobbiamo dargli i permessi necessari scriviamo quanto segue come root:

chmod 666 /dev/kqemu

A questo punto kqemu dovrebbe ora essere utilizzabile da QEMU.

Ci sarebbe un'opzione finale: -kernel-kqemu. Ciò, nella teoria, accelera l'emulazione ancora ulteriormente. Purtroppo, non è così semplice come sembra. In primo luogo, la versione di QEMU nei repositori di Debian ha un bug noto, come segnalato

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402289

Secondariamente, anche se potesse, non tutti i sistemi operativi ospiti funzionerebbero con questo comando; per esempio, una distribuzione recente di GNU/Linux probabilmente funzionerebbe più velocemente con questa opzione (se funzionasse!), ma Windows 98 sicuramente crasha (e ti pareva!). QEMU è disponibile da Debian Sarge e da Ubuntu Warty.

Buona virtualuzzazione
Kalos





Commenti

Ritratto di paolo
#1

Inviato da paolo il Mar, 31/07/2007 - 19:52.

Ottima guida

Ottima guida, precisa e ben formattata!

Voto: 10

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di kalos
#2

Inviato da kalos il Mar, 31/07/2007 - 20:24.

Re: Ottima guida

Beh... il plauso va a Michael Williamson, la mia è una semplice traduzione (fuori dai possibili strafalcioni)

If you haven't tried Debian lately, this would be a good time.

deb lenny/sid
linux user 384443 http://counter.li.org/
linux nelle scuole, firma la petizione



Ritratto di paolo
#3

Inviato da paolo il Mar, 31/07/2007 - 22:25.

Re: Ottima guida

Tempo fa iniziai una guida proprio su qemu, poi non ho mai trovato il tempo e la voglia per completarla:

http://www.debianitalia.org/modules/wfsection/article.php?page=1&articleid=97

Possiamo integrarle ?

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di Henryx
#4

Inviato da Henryx il Ven, 07/09/2007 - 15:01.

Aggiunte

Ottima guida. Vorrei pero` fare un'aggiunta: la gestione della rete. Con QEMU vi sono tre tipologie di rete:

- una rete utente, in cui l'indirizzo viene assegnato da QEMU tramite un DHCP interno;
- una rete socket, che permette la comunicazione tra due macchine QEMU;
- una rete bridge, che permette l'utilizzo della macchina virtuale all'interno di una rete fisica.

Per abilitare quest'ultima configurazione (personalmente, non mi sono dedicato alle altre due), bisogna eseguire i seguenti passi:

editare il file di configurazione /etc/network/interfaces in modo da abilitare il bridging di rete:

auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 5
dns-nameservers 192.168.1.1
dns-search mydomain

Una volta abilitato il bridge (a tal proposito, e` necessario installare anche il pacchetto bridge-utils) deve essere modificato il file /etc/qemu-ifup in questa maniera:

#!/bin/sh
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
sudo /usr/sbin/brctl addif br0 $1

Fatto questo, e` possibile avviare QEMU in modalita` bridge, mediante questo comando:

qemu  virtualdrive.qcow \
  -net nic,vlan=0,macaddr=00:00:10:52:37:48,model=rtl8139 \
  -net tap,vlan=0,ifname=tap0

La prima opzione (-net nic) indica il tipo di scheda (una Realtek 8139 in questo caso), la lan virtuale, e il macaddress associato alla scheda stessa. La seconda opzione (-net tap) indica la modalita` bridging, la lan virtuale, e il nome dell'interfaccia virtuale a cui connettersi. Ovviamente, dopo di cio` si potra` configurare la macchina virtuale in modo da avere un IP statico (o dinamico), a cui e` possibile accedervi da remoto da qualsiasi pc presente sulla LAN, e non solo dal pc su cui sta girando la macchina virtuale

Enrico



Ritratto di gullliver
#5

Inviato da gullliver il Dom, 09/03/2008 - 10:57.

ottima guida

guida molto utile
ciao



Ritratto di legolas
#6

Inviato da legolas il Sab, 29/03/2008 - 13:48.

Re: Aggiunte

@Enrico

Giusto per capire,
perche' dalla macchina virtuale non riesco pero' a navigare?
Sulla macchina fisica sostituisco la mia classica definizione della rete con il bridge da te esposto. Dalla macchina virtuale invece modifico il qemu-ifup sempre come da te suggerito.
Fatto questo una volta avviata la macchina virtuale, riesco a navigare sulla mia rete, ma non riesco ad andare oltre il router. Ho aggiornato i dns e tutto quanto, ma nulla.
Forse sarebbe anche meglio spiegare come creare il device tap/tun.
Un'ultima cosa, perche' con questa configurazione di rete (in bridge) non mi riesco piu' a montare una condivisione nfs?