Old:Installazione Qemu con supporto accelerazione Kqemu: differenze tra le versioni

aggiornamento alla versione 0.8.0 e riformattazione della pagina
(Nota su scompattazione e compilazione da NON farsi come root.)
(aggiornamento alla versione 0.8.0 e riformattazione della pagina)
Riga 1: Riga 1:
== INSTALLAZIONE QEMU + QVM86 o KQEMU PER DEBIAN / UBUNTU ==
=Introduzione=
A causa delle numerose migrazioni gli utenti di testing possono trovarsi davanti a qualche problema relativo alla mancanza di pacchetti nel repository ufficiale Debian...


=== Qemu col supporto qvm86 (libero) ===
Questo � dovuto alla politica di gestione di testing, la quale richiede che un pacchetto debba avere le seguenti caratteristiche, prima di entrare in testing:
* Sia stato in unstable per almeno 10 giorni (nel caso di priorit� bassa (''low''));
* Non abbia Bug gravi;
* Le dipendenze richieste siano completamente soddisfatte in testing.


1. Assicuratevi di aver installato i pacchetti necessari a scaricare e compilare il tutto:
=Lo stato di un pacchetto=
* '''ssh''' e '''cvs''' (per scaricare qvm86 occorre andare via cvs remoto)
� possibile conoscere lo stato di un pacchetto (per l'esattezza di un pacchetto di sorgenti) tramite il sito della [http://qa.debian.org Quality Assurance], nel seguente modo:
* '''patch''' (per usare qvm86 con qemu occorre effettuare una piccola patch ai sorgenti di qemu)
* ricavare il pacchetto sorgente da cui viene creato il pacchetto binario in questione:
* '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0)
<pre> $ apt-cache show nomepacchetto | grep Source</pre>
* '''libsdl1.2-dev'''
* recarsi su http://packages.qa.debian.org ed inserire il nome del pacchetto sorgente
* '''zlib1g-dev'''
* leggere lo stato del pacchetto!
* '''make'''
* '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>.


2. Scaricate da [http://fabrice.bellard.free.fr/qemu/download.html http://fabrice.bellard.free.fr/qemu/download.html] gli archivi dei codici sorgenti di QEMU, scompattateli in una directory e poi entrateci.
{{Box|Nota:|� possibile automatizzare la procedura inserendo, nella pagina http://packages.qa.debian.org, il nome del pacchetto binario... il sistema mostrer� il nome del pacchetto di sorgenti relativo ed in 10 secondi reindirizzer� alla pagina relativa al suo stato.}}


Esempio:
=Creare i pacchetti binari per la propria distribuzione=
<pre>
Premetto che la seguente procedura utilizzabile prevalentemente per il backport da ''unstable'' a ''testing'', mentre potrebbe dare problemi per il backport da ''testing'' a ''stable''.
rob@klingon:/home/rob$ tar zxvf qemu-0.7.2.tar.gz
rob@klingon:/home/rob$ cd qemu-0.7.2</pre>
 
 
3. Scaricate via cvs i sorgenti di qvm86, in modo che siano all'interno della directory dei sorgenti di qemu.
 
Esempio:
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ export CVS_RSH=ssh
rob@klingon:/home/rob/qemu-0.7.2$ export CVSROOT=:ext:anoncvs@savannah.nongnu.org:/cvsroot/qvm86
rob@klingon:/home/rob/qemu-0.7.2$ cvs -z3 co qvm86</pre>
 
4. Applicate dalla directory dei sorgenti di qemu la patch provvista da qvm86.
 
Esempio:
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ patch -p0 < qvm86/patch.qvm86</pre>
 
5. Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
Verificate che sia tutto ok, poi compilate il tutto ed installate.
 
Esempio:
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ ./configure --cc=gcc-3.3
rob@klingon:/home/rob/qemu-0.7.2$ make</pre>
 
Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>.
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ make clean
rob@klingon:/home/rob/qemu-0.7.2$ ./configure --cc=gcc-3.3 --target-list=i386-softmmu
rob@klingon:/home/rob/qemu-0.7.2$ make</pre>
 
Se non ci sono errori, ora potete diventare root ed installare qemu.
 
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ su
Password:
rob@klingon:/home/rob/qemu-0.7.2# make install</pre>
 
A questo punto qemu installato in <code>/usr/local/bin/qemu</code>, ed il modulo qvm86 si trova in <code>/lib/modules/''versione_del_kernel''/misc/qvm86.ko</code>.
 
4. Prima di eseguire qemu va caricato il modulo del kernel <code>qvm86</code>, va eventualmente creato <code>/dev/qvm86</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati.
 
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
<pre>
# Queste due operazioni sono da fare come root una volta sola:
rob@klingon:/home/rob/qemu-0.7.2# mknod /dev/qvm86 c 222 0
rob@klingon:/home/rob/qemu-0.7.2# chmod 666 /dev/qvm86
 
# Questa operazione va eseguita come root ad ogni avvio del sistema per usare qemu
rob@klingon:/home/rob/qemu-0.7.2# modprobe qvm86</pre>
 
Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
<pre>
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
rob@klingon:/home/rob/qemu-0.7.2# modprobe qvm86
rob@klingon:/home/rob/qemu-0.7.2# chmod 666 /dev/qvm86</pre>
 
Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato):
* diventate root (<code>su -</code>)
* modificate il file <code>/etc/modules</code> aggiungendo la riga <code>qvm86</code>, in modo che il modulo venga automaticamente caricato al boot.
* create il file <code>/etc/modprobe.d/qvm86</code> contenente le seguenti righe:
** per chi '''non ha''' installato il pacchetto udev:
<pre>
install qvm86 /sbin/modprobe --ignore-install qvm86 \
&& (test -c /dev/qvm86 || mknod /dev/qvm86 c 222 0) \
&& chmod 666 /dev/qvm86</pre>
:* per chi '''ha''' installato il pacchetto udev:
<pre>
install qvm86 /sbin/modprobe --ignore-install qvm86 && chmod 666 /dev/qvm86</pre>
 
Una volta caricato il modulo e dati i permessi di lettura a /dev/qvm86 siamo pronti per eseguire il nuovo qemu.
 
Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>.
 
=== Qemu col supporto kqemu (proprietario) ===
 
1. Assicuratevi di aver installato i pacchetti necessari a compilare il tutto:
* '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0)
* '''libsdl1.2-dev'''
* '''zlib1g-dev'''
* '''make'''
* '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>.
 
2. Scaricate da [http://fabrice.bellard.free.fr/qemu/download.html http://fabrice.bellard.free.fr/qemu/download.html] gli archivi dei codici sorgenti di QEMU e di KQEMU, e scompattateli in modo che la directory di kqemu venga estratta all'interno della directory di qemu. Quindi entrate nella directory dei sorgenti.
 
Esempio:
<pre>
rob@klingon:/home/rob$ tar zxvf qemu-0.7.2.tar.gz
rob@klingon:/home/rob$ tar zxvf kqemu-0.7.2.tar.gz -C qemu-0.7.2
rob@klingon:/home/rob$ cd qemu-0.7.2</pre>
 
3. Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
Verificate che sia tutto ok e che il supporto kqemu sia attivato, in modo che venga compilato
il modulo corretto per il vostro kernel. Poi compilate il tutto ed installate.
 
Esempio:
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ ./configure --cc=gcc-3.3
rob@klingon:/home/rob/qemu-0.7.2$ make</pre>
 
Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>.
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ make clean
rob@klingon:/home/rob/qemu-0.7.2$ ./configure --cc=gcc-3.3 --target-list=i386-softmmu
rob@klingon:/home/rob/qemu-0.7.2$ make</pre>
 
Se non ci sono errori, ora potete diventare root ed installare qemu.
 
<pre>
rob@klingon:/home/rob/qemu-0.7.2$ su
Password:
rob@klingon:/home/rob/qemu-0.7.2# make install</pre>
 
A questo punto qemu � installato in <code>/usr/local/bin/qemu</code>, ed il modulo kqemu si trova in <code>/lib/modules/''versione_del_kernel''/misc/kqemu.ko</code>.
 
4. Prima di eseguire qemu va caricato il modulo del kernel <code>kqemu</code>, va eventualmente creato <code>/dev/kqemu</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati.
 
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
<pre>
# Queste due operazioni sono da fare come root una volta sola:
rob@klingon:/home/rob/qemu-0.7.2# mknod /dev/kqemu c 250 0
rob@klingon:/home/rob/qemu-0.7.2# chmod 666 /dev/kqemu
 
# Questa operazione va eseguita come root ad ogni avvio del sistema
rob@klingon:/home/rob/qemu-0.7.2# modprobe kqemu</pre>
 
Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
<pre>
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
rob@klingon:/home/rob/qemu-0.7.2# modprobe kqemu major=0
rob@klingon:/home/rob/qemu-0.7.2# chmod 666 /dev/kqemu</pre>
 
Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato):
* diventate root (<code>su -</code>)
* modificate il file <code>/etc/modules</code> aggiungendo la riga <code>kqemu</code>, in modo che il modulo venga automaticamente caricato al boot.
* create il file <code>/etc/modprobe.d/kqemu</code> contenente le seguenti righe:
** per chi '''non ha''' installato il pacchetto udev:
<pre>
install kqemu /sbin/modprobe --ignore-install kqemu \
&& (test -c /dev/kqemu || mknod /dev/keqmu c 250 0) \
&& chmod 666 /dev/kqemu</pre>
:* per chi '''ha''' installato il pacchetto udev:
<pre>
options kqemu major=0
install kqemu /sbin/modprobe --ignore-install kqemu && chmod 666 /dev/kqemu</pre>
 
Una volta caricato il modulo e dati i permessi di lettura a /dev/kqemu siamo pronti per eseguire il nuovo qemu.
 
Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>.
 
== AVVIARE QEMU ==
 
1. (facoltativo) Creazione di un file immagine per il disco (facoltativo)
 
<pre>
rob@klingon:/home/rob$ qemu-img create hd.img 3500M
</pre>
 
2. Eseguiamo qemu:
(cambiare il boot per fare l'installazione da cd etc..)
 
Per semplicita` qui avviamo qemu da root (gli utenti comuni in Debian solitamente non possono leggere direttamente /dev/cdrom), tuttavia qemu puo` tranquillamente essere eseguito come utente comune (consigliato).
 
<pre>
rob@klingon# qemu -boot c -cdrom /dev/cdrom -hda /home/rob/hd.img \
              -user-net -pci -m 256 -k it -localtime
</pre>
 
Le principali opzioni di qemu sono:
 
* '''-m ''megabyte'' ''' --> memoria per l'emulatore = 256MB
* '''-k it''' --> tastiera italiana
* '''-localtime''' --> usa ora locale (default UTC)
* '''-pci''' --> emula scheda di rete rtl8029 PCI
* '''-boot c''' --> avvia dal dico rigido emulato (usare '''-boot d''' per il boot dal cdrom emulato)
* '''-user-net''' --> Il sistema GUEST deve essere configurato in DHCP. Qemu assegna un indirizzo dinamico "10.0.2.15" al SO guest, il quale sar� in grado di pingare solo il suo GW che � "10.0.2.2". Per testare la rete quindi avviare le applicazioni di rete, visto che il ping ''host'' non funziona.
 
=== Qemu Networking ===


Con la soluzione indicata qui sopra, il sistema Guest riesce a navigare in Internet, ma non riesce ad accedere alle risorse del proprio host. La maniera pi� facile per configurare qemu in modo che possa fare entrambe le cose, � quella di installare vde e usare tun/tap con un bridge.
==Pacchetti necessari==
Per eseguire le operazioni illustrare in questa pagina sono necessari i seguenti pacchetti, normalmente utilizzati per lo sviluppo dei pacchetti Debian:
* dpkg-dev
* devscripts
* fakeroot


Prima di iniziare, dovete verificare che il vostro kernel supporti i seguenti moduli:
==Scaricare i sorgenti==
  tun: "Network device support" -> "Universal TUN/TAP device driver support"
Dalla pagina relativa allo stato del pacchetto � possibile scaricare i sorgenti necessari per questo backport (nel riquadro '''Source files'''). I file sono, per l'esattezza, 3:
  IP masquerade: "Networking options" -> "IP: Netfilter Configuration"
* l'archivio contenente i sorgenti originali, '''.orig.tar.gz'''
  bridging: "Networking options" -> "802.1d Ethernet Bridging"
* l'archivio contenente le patch per creare il pacchetto, '''.patch.gz'''
* il file contenente la descrizione del pacchetto, '''.dsc'''


e dovete installare il pacchetto bridge-utils:
Una volta scaricati in una unica directory � necessario estrarli:
<pre>
<pre>
apt-get install bridge-utils
$ dpkg-source -x nomepacchetto.....dsc
</pre>
</pre>


[http://vde.sourceforge.net Vde] sta per Virtual Distributed Ethernet ed � un programma open source che vi permette di creare un network virtuale. Noi lo utilizzeremo per far fare in modo che il sistema Guest veda se stesso come un'unit� distinta dal sistema host e possa colloquiare con questi.
==Scaricare le dipendenze==
 
Prima di procedere alla compilazione � necessario installare i pacchetti ''-dev'' necessari per la compilazione...
Per quel che ne so io, non esiste (ancora) un pacchetto deb gi� pronto per l'uso, ma per installare vde sono sufficenti poche righe:
Anche in questo caso, come sempre del resto, il sistema di gestione dei pacchetti Debian ci viene in aiuto: � infatti necessario un semplice
<pre>
<pre>
wget http://puzzle.dl.sourceforge.net/sourceforge/vde/vde-1.5.9.tar.gz
# apt-get build-deps nomepacchetto
tar -xvzf vde-1.5.9.tar.gz
cd vde-1.5.9
./configure
make
make install
</pre>
</pre>
per installare le dipendenze necessarie alla compilazione.


Una volta fatto questo, siete pronti per configurare tun e il bridge:
{{Box|Nota:|il comando potrebbe non risolvere tutte le dipendenze (nel peggiore dei casi potrebbe non trovare informazioni riguardo a queste). In questo caso, quindi, bisogner� installarle a mano. Le dipendenze mancanti verranno mostrate nell'output di ''dpkg-buildpackage'' e dovranno essere installate come viene installato normalmente un pacchetto. Non sar� possibile continuare nel processo di compilazione se non si soddisfano tutte le dipendenze di compilazione.}}
 
<pre>
vde_switch -tap tun0 -daemon
chmod 777 /tmp/vde.ctl
 
ifconfig eth0 down
brctl addbr br0
ifconfig eth0 0.0.0.0 promisc up
ifconfig tun0 0.0.0.0 promisc up
#l'IP qui sotto � quello del computer host; modificatelo per adeguarlo alle vs esigenze
ifconfig br0 192.168.0.200 netmask 255.255.255.0 broadcast 192.168.0.255 up
 
brctl stp br0 off
brctl setfd br0 1
brctl sethello br0 1
brctl addif br0 eth0
brctl addif br0 tun0
#questo invece � l'indirizzo IP del gateway
route add default gw 192.168.0.1
</pre>
 
NB: Una volta verificato che tutto funziona, queste istruzioni vanno inserite in uno script in modo da essere eseguite automaticamente all'accensione del computer
qui ne trovate uno piuttosto grezzo: [http://www.itaca.coopsoc.it/download/sources/vde_qemu vde_qemu], che va salvato in /etc/init.d. Dopodich�: <pre>chmod u+x /etc/init.d/vde_qemu
update-rc.d -n vde_qemu defaults 90</pre>
 
 
Ora tutto � pronto per lanciare qemu, con l'ultima avvertenza che dovete usare l'apposito wrapper vdeqemu:
<pre>
vdeqemu -hda disk.img -localtime
</pre>
 
Potete utilizzare tutte le opzioni di qemu, fuorch� -user-net, che disattiverebbe tun.
 
Ora il sistema guest dovrebbe accedere a tutte le porte del sistema host, in maniera totalmente trasparente: da risorse di rete dovreste vedere il vostro server samba con le sue partizioni; dal browser dovreste accedere alle pagine del vostro server web, etc. etc.
 
=== PATCH PER WINDOWS ===
 
Per quanto riguarda l'utilizzo della CPU, a quanto pare
Windows 9x non fa un uso corretto della istruzione CPU HLT e
quindi spara la cpu a 100% quando � in idle (non fa nulla) e
invece la usa regolarmente quando � sotto "sforzo", paradossalmente
infatti, se viene utilizzata la cpu di qemu l'utilizzo di
cpu si abbassa su linux in proporzione.
 
la patch puo' essere scaricata qui, va installata sul Win9x GUEST.
 
[http://klingon.homelinux.net/files/amnhltm.zip http://klingon.homelinux.net/files/amnhltm.zip]
 


Link utili (in inglese):
==Compilare il pacchetto==
Una volta installate le dipendenze si pu� procedere con la compilazione del pacchetto:
* bisogna entrare nella directory dei sorgenti creata durante l'estrazione dei sorgenti;
* per far partire la compilazione si pu� usare il seguente comando: <pre>$ fakeroot dpkg-buildpackage</pre>


*[http://ubuntuforums.org/showthread.php?t=39513 http://ubuntuforums.org/showthread.php?t=39513]
Se tutto procede senza problemi verranno creati, nella directory precedente, i pacchetti binari frutto della compilazione... per installarli � sufficiente il classico
*[http://fabrice.bellard.free.fr/qemu/index.html http://fabrice.bellard.free.fr/qemu/index.html]
<pre> # dpkg -i nomepacchetto.....deb</pre>
*[http://fabrice.bellard.free.fr/qemu/qemu-doc.html http://fabrice.bellard.free.fr/qemu/qemu-doc.html]
*[http://www.debian-administration.org/?article=40 http://www.debian-administration.org/?article=40]
*[http://oui.com.br/n/content.php?article.21 http://oui.com.br/n/content.php?article.21]
*[http://www.carlsonhome.net/computer_help_log.php http://www.carlsonhome.net/computer_help_log.php]
*[http://savannah.nongnu.org/projects/qvm86/ http://savannah.nongnu.org/projects/qvm86/]
--


[[Utente:Themonkey|Themonkey]] 20:31, Ago 19, 2005 (EDT)
=Conclusioni=
The_monk_ey ( skype: the_monk_ey )
Questo rappresenta il metodo pi� semplice per ottenere un pacchetto per testing partendo da un pacchetto sorgente di unstable, anche se non sempre pu� essere applicato (a causa di dipendenze non risolte perch� non presenti in testing (in questo caso � necessario partire dal backporting delle librerie mancanti) o perch� le versioni dei pacchetti in testing non sono abbastanza aggiornate per concludere con successo la compilazione (evento molto raro)).


[[Utente:ianezz|ianezz]] 17:40, Nov 25, 2005 (CET) (per la parte di compilazione ed installazione)
Nel Backport Howto vedremo, pi� in dettaglio, come eseguire un Backport da ''testing''/''unstable'' verso ''stable''...
20

contributi