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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Riga 1: Riga 1:
==Debian==
==Installazione QEMU con qvm86/kqemu per Debian/Ubuntu==


===Installazione===
=== Qemu con supporto qvm86 (libero, ma sperimentale) ===
==== � possibile installare, con apt-get, anche i pacchetti indicati come 'suggeriti' e/o 'raccomandati'?====
Apt-get non offre ancora questa opzione, ma sono presenti due soluzioni:
* installare aptitude ed utilizzarlo al posto di apt:<pre># aptitude install nomepacchetti</pre>
* uno script che fa quanto richiesto appoggiandosi ad apt-get: <br/>'''aag''' - advanced-apt-get apt-get install with support for recommends and suggested - http://www.formorer.de/code/aag/


===Release===
====1. Fase Preliminare====
==== A cosa servono le release successive di una versione Stable di Debian (ad esempio Woody 3.0r4 o r6...)?====
Assicuratevi di aver installato i pacchetti necessari a scaricare e compilare il tutto:
Le varie release successive di una Debian Stable sono dovute a degli aggiornamenti di sicurezza, bugfix, rimozione di pacchetti non pi� usabili, ...
* '''ssh''' e '''cvs''' (per scaricare qvm86 occorre andare via cvs remoto)
* '''patch''' (per usare qvm86 con qemu occorre effettuare una piccola patch ai sorgenti di qemu)
* '''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>.


Ecco alcuni esempi:
====2. Recupero file QEMU====
Woody 3.0R3
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 come '''utente diverso da root''' scompattateli in una directory e poi entrateci.
Woody 3.0r4
$ tar zxvf qemu-0.8.0.tar.gz
Woody 3.0r5
$ cd qemu-0.8.0
Woody 3.0r6


===Repository===
====3. Recupero file qvm86====
==== Cos'� un repository?====
Scaricate via cvs i sorgenti di qvm86, in modo che siano all'interno della directory dei sorgenti di qemu, sempre con un utente '''diverso da root'''.
Un repository � un archivio di pacchetti .deb (quelli tipici Debian), che presenta una sruttura ben definita, molto simile a quella che si trova all'interno di uno dei CD di installazione.
$ export CVS_RSH=ssh
I pacchetti contenuti in un repository sono indicizzati in questi file:
$ export CVSROOT=:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qvm86
* '''Packages.gz''' (se sono pacchetti contenenti binari)
$ cvs -z3 co qvm86
* '''Sources.gz''' (se sono pacchetti contenenti codice sorgente)


Il comando
====4. Applicazione patch====
<pre>
Applicate dalla directory dei sorgenti di qemu la patch provvista da qvm86.
# apt-get update
$ patch -p0 < qvm86/patch.qvm86
</pre>
non fa altro che scaricare uno di questi file (a seconda che si sia scelto di avere la lista dei pacchetti binari o quella dei pacchetti sorgente) per ogni riga non commentata presente nel file <tt>/etc/apt/sources.list</tt>, cos� da avere disponibile sul proprio computer un elenco dei pacchetti contenuti nel repository indicato in quella riga.
Per approfondimenti vedere la sezione del wiki: [[Indice_Guide#Gestione_dei_Pacchetti | Gestione dei Pacchetti]].


E' dunque consigliabile avere nel proprio <tt>/etc/apt/sources.list</tt> diversi repository, in quanto potrebbero contenere pacchetti diversi.
====5. Configurazione====
Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
Verificate che sia tutto ok, poi compilate il tutto ed installate.
$ ./configure --cc=gcc-3.3
$ make
Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root. Leggete meglio sopra e ricominciate da capo.


Una lista completa dei repository ufficiali pu� essere trovata sul sito ufficiale Debian: http://www.debian.org/mirror/mirrors_full.
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>.  
Diversamente esistono in internet moltissimi repository non ufficiali per le pi� disparate esigenze. Un punto di partenza per cercare repository non ufficiali potrebbe essere http://www.apt-get.org
$ make clean
$ ./configure --cc=gcc-3.3 --target-list=i386-softmmu
$ make


====Come mai per Testing e Unstable non ci sono pi� i repository non-US?====
Se non ci sono errori, ora potete diventare root ed installare qemu.
Come si pu� leggere in [http://lists.debian.org/debian-release/2005/05/msg01163.html questa email] apparsa il 18 maggio su debian-release, il ramo non-US � stato assimilato a quello principale, non essendoci pi� le motivazioni necessarie per l'esistenza di questa sezione.
$ su
Password:
# make install


===Security===
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>.
==== Come arrivano in testing gli aggiornamenti di sicurezza?====
Gli aggiornamenti di sicurezza giungono nella distribuzione testing tramite unstable. Essi sono solitamente inviati con una priorit� impostata ad high, il che ridurr� il loro tempo di quarantena a due giorni. Dopo questo periodo, i pacchetti migreranno in testing automaticamente, se compilati per tutte le architetture e con tutte le dipendendenze soddisfatte in testing.


==== Come � gestita la sicurezza per contrib e non-free?====
====6. Caricamento modulo====
La risposta breve �: non lo �. Contrib e non-free non sono parti ufficiali della distribuzione Debian e per questo non sono supportate dal team sicurezza. Alcuni pacchetti non-free sono distribuiti senza sorgenti o senza una licenza che permetta la distribuzione di versioni modificate. E in quei casi sono completamente impossibili i fix di sicurezza. Se c'� la possibilit� di risolvere il problema e il manutentore del pacchetto o qualcun altro fornisce un pacchetto correttamente aggiornato, allora di solito il team sicurezza lo processa e rilascia un advisory.
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.  


====Per quanto tempo sono assicurati gli aggiornamenti di sicurezza?====
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
Il team sicurezza cerca di supportare una distribuzione stable per circa un anno dal rilascio della successiva distribuzione stable, a meno che un'ulteriore distribuzione stable sia rilasciata nell'anno stesso. Non � possibile supportare tre distribuzioni; supportarne due contemporaneamente � gi� abbastanza difficile.
# Queste due operazioni sono da fare come root una volta sola:
# mknod /dev/qvm86 c 222 0
# chmod 666 /dev/qvm86
#
# Questa operazione va eseguita come root ad ogni avvio del sistema per usare qemu
# modprobe qvm86


Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
# modprobe qvm86
# chmod 666 /dev/qvm86


==Java==
Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato):
=== Come posso installare Java su Debian, senza 'sporcare' il sistema? ===
* diventate root (<code>su -</code>)
Le soluzioni sono due:
* modificate il file <code>/etc/modules</code> aggiungendo la riga <code>qvm86</code>, in modo che il modulo venga automaticamente caricato al boot.
* scaricarlo da un repository non ufficiale
* create il file <code>/etc/modprobe.d/qvm86</code> contenente le seguenti righe:
* Crearsi da soli il pacchetto seguendo [[Make-jpkg:_Pacchettiziamo_Java_Sun | Questa Guida]]
** per chi '''non ha''' installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 \
&& (test -c /dev/qvm86 || mknod /dev/qvm86 c 222 0) \
&& chmod 666 /dev/qvm86
:* per chi '''ha''' installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 && chmod 666 /dev/qvm86


=== Come mai non � presente, in Debian, il Java di Sun? ===
Una volta caricato il modulo e dati i permessi di lettura a /dev/qvm86 siamo pronti per eseguire il nuovo qemu.
Debian, come spesso ricordato, fornisce una Distribuzione Linux 100% FreeSoftware. Quindi Java (quello di Sun) non pu� venir incluso, visto che non � assolutamente considerabile FreeSoftware.  


Vengono, quindi, inclusi dei 'cloni' o, meglio, delle nuove implementazioni del linguaggio (kaffe, ad esempio).
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>.


=== Come posso risolvere i problemi di dipendenze legati ai pacchetti dei programmi scritti in Java? ===
=== Qemu col supporto kqemu (proprietario) ===
L'unico modo per risolvere questi 'fastidiosi' problemi � installare Java in formato .deb. Per fare questo ci sono due strade:
* pacchettizzarlo da soli (tramite il comodo tool java-package, una guida � reperibile [[Make-jpkg:_Pacchettiziamo_Java_Sun | Qui]])
* scaricandolo direttamente da un repository contenente Java.


=== Come posso abilitare il supporto a Java in Firefox? ===
====1. Fase Preliminare====
Partiamo dal presupporto che java sia stato installato [[Make-jpkg:_Pacchettiziamo_Java_Sun | seguendo questo metodo]].
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'''
* '''gcc'''
* '''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>.


Localizziamo il file ''libjavaplugin_oji.so'' tramite il comando
====2. Recupero file QEMU/KQEMU====
<pre>
Scaricate archivi dei codici sorgenti di [http://fabrice.bellard.free.fr/qemu/download.html QEMU e KQEMU], e come '''utente diverso da root''' scompattateli in modo che la directory di kqemu venga estratta all'interno della directory di qemu. Quindi entrate nella directory dei sorgenti.
# dpkg -L sun-j2re1.5 | grep libjavaplugin_oji.so
$ tar zxvf qemu-0.8.0.tar.gz
</pre>
$ tar zxvf kqemu-0.7.2.tar.gz -C qemu-0.8.0
(ovviamente sun-j2re2.5 rappresenta il pacchetto che � stato creato tramite il processo descritto nella guida alla pacchettizzazione di Java)
$ cd qemu-0.8.0


Una volta individuato, � sufficiente creare un link simbolico:
====3. Configurazione====
<pre>
Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>.
# ln -s /usr/lib/j2re1.5-sun/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla-firefox/plugins/
Verificate che sia tutto ok e che il supporto kqemu sia attivato, in modo che venga compilato
</pre>
il modulo corretto per il vostro kernel. Poi compilate il tutto ed installate.
$ ./configure --cc=gcc-3.4
$ make
Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root invece che come utente comune. Leggete meglio sopra e ricominciate da capo.
Chi utilizza Ubuntu Breezy (5.10) definisca anche la variabile di  ambiente CC che punti a gcc-3.4 (<code>export CC='/usr/bin/gcc-3.4'</code>), altrimenti il linking di kqemu verra' fatto con gcc-4.0 (compilatore di default su Ubuntu Breezy 5.10) e in fase di caricamento del modulo si avra' l'errore '''Invalid module format''', poiche' il kernel standard di questa distribuzione e' compilato con gcc-3.4. La variabile va definita prima di eseguire il <code>make</code>; se cio' non e' stato fatto per tempo allora e' necessario entrare nella directory <code>kqemu/</code> ed eliminare quanto gia' compilato con <code>make clean</code>, poi ritornare nella directory principale e rilanciare <code>make</code>.


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>.
$ make clean
$ ./configure --cc=gcc-3.4 --target-list=i386-softmmu
$ make


Se non ci sono errori, ora potete diventare root ed installare qemu.
$ su
Password:
# make install


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. Caricamento modulo====
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.


==Kernel==
Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):'''
==== Si pu� aggiornare il kernel a una versione successiva senza doverlo ricompilare? ====
# Queste due operazioni sono da fare come root una volta sola:
Certamente!
# mknod /dev/kqemu c 250 0
con il comando
# chmod 666 /dev/kqemu
<pre>
#
# apt-cache search kernel-image
# Questa operazione va eseguita come root ad ogni avvio del sistema
</pre>
# modprobe kqemu
si ottiene una lista dei kernel precompilati disponibili per il download.
Una volta individuata la versione voluta, � necessario scegliere quello adatto per il proprio processore (in caso di incertezze, scegliere quello generico i386) ed installarlo come se si trattasse di un normale pacchetto:
<pre>
# apt-get install kernel-image.....
</pre>
Per installare il kernel dalla versione 2.6.12 in poi, bisogna cercare i pacchetti che iniziano con linux-image anzich� kernel-image.


Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev):
# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
# modprobe kqemu major=0
# chmod 666 /dev/kqemu


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:
install kqemu /sbin/modprobe --ignore-install kqemu \
&& (test -c /dev/kqemu || mknod /dev/keqmu c 250 0) \
&& chmod 666 /dev/kqemu
:* per chi '''ha''' installato il pacchetto udev:
options kqemu major=0
install kqemu /sbin/modprobe --ignore-install kqemu && chmod 666 /dev/kqemu


Una volta caricato il modulo e dati i permessi di lettura a /dev/kqemu siamo pronti per eseguire il nuovo qemu.


==Linux==
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>.
==== Che cosa esprime il comando uptime? ====
Il comando Uptime, di cui viene riportato un classico output
<pre>
$ uptime
23:02:23 up 23 days, 23:25,  1 user,  load average: 0.57, 0.57, 0.83
</pre>
rappresenta (nell'ordine):
* Ora attuale (23:02:23)
* Per quanto la macchina � stata accesa (up 23 days, 23:25); cio� il tempo passato dall'avvio o dall'ultimo reboot della macchina espresso in giorni, ore, minuti.
* Il numero di utenti connessi (1 user)
* Il carico della Macchina (load average: 0.57, 0.57, 0.83)


Il carico della macchina rappresenta i punti di carico degli ultimi 1, 5, 15 minuti
== Utilizzo QEMU ==
Riporto una breve descrizione, tratta dal [http://autistici.org/loa/web/main.html Corso di Linux di LOA Hacklab MI ](reperibile nella sezione Docs del loro sito).


<blockquote>Un punto di carico equivale a dire che la CPU ha lavoro a su?cienza per riempire il suo naturale ciclo di calcolo della durata di un secondo. Per dirla in altro modo, nell�arco di un secondo la CPU non ha tempo di eseguire un NOP, ossia un�istruzione vuota, che non fa nulla, che viene abitualmente "eseguita� nelle pause di elaborazione.</blockquote>
===Creazione immagine===
(facoltativo) Creazione di un file immagine per il disco (facoltativo)
$ qemu-img create hd.img 5G


===Esecuzione QEMU===
''(cambiare il boot per fare l'installazione da cd etc..)''


== X ==
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).
=== Generale ===
# qemu -boot c -cdrom /dev/cdrom -hda /home/rob/hd.img \
==== Come posso modificare il login manager di default? ====
-user-net -pci -m 256 -k it -localtime
Per cambiare il proprio login manager di default, � necessario prima installare quello sostituivo.


Facciamo un esempio con '''kdm''' (installato) e '''gdm''' (da installare).
Le principali opzioni di qemu sono:


1) Installiamo il nuovo Login Manager
* '''-m ''megabyte'' ''' --> memoria per l'emulatore = 256MB
<pre>
* '''-k it''' --> tastiera italiana
# apt-get install gdm
* '''-localtime''' --> usa ora locale (default UTC)
</pre>
* '''-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.


2) Durante l'installazione verr� chiesto quale Login Manager settare come default. Scegliamo quello nuovo.
=== QEMU Networking ===


Nel caso si fosse gi� scaricato il login manager, � necessario eseguire:
'''Sezione da revisionare per i cambiamenti nella versione 0.8.0'''
<pre>
# dpkg-reconfigure gdm
</pre>
(ovviamente sostituendo a gdm il nome del pacchetto del login manager)


Questo comando far� apparire la stessa finestra apparsa durante l'installazione con apt-get. Da qui � possibile scegliere il login manager di default.
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.


==== Come posso riconfigurare il server X? ====
Prima di iniziare, dovete verificare che il vostro kernel supporti i seguenti moduli:
Debian offre un comodo comando per fare questo:
  tun: "Network device support" -> "Universal TUN/TAP device driver support"
<pre>
  IP masquerade: "Networking options" -> "IP: Netfilter Configuration"
# dpkg-reconfigure xserver-xfree86
  bridging: "Networking options" -> "802.1d Ethernet Bridging"
</pre>
Cos� facendo, si acceder� alla stessa procedura guidata che viene mostrata durante l'installazione del pacchetto.


Altrimenti sono sempre disponibili i comandi standard:
e dovete installare il pacchetto bridge-utils:
<pre>
apt-get install bridge-utils
# xf86config
</pre>
per una configurazione testuale


<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.
# xf86cfg
</pre>
per una configurazione grafica con l'autorilevamento dell'hardware


=== kde ===
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:
==== Come mai non riesco ad avviare kppp anche se � installato? ====
wget http://puzzle.dl.sourceforge.net/sourceforge/vde/vde-1.5.9.tar.gz
Kppp, accedendo ad una componente 'critica' come una porta seriale, per poter essere eseguito da un utente normale, richiede che questo utente appartenga a due gruppi: '''dialout''' e '''dip'''.
tar -xvzf vde-1.5.9.tar.gz
Per fare cio' e' sufficiente usare i seguenti comandi:
cd vde-1.5.9
<pre>
./configure
# adduser nomeutente dip
make
# adduser nomeutente dialout
make install
</pre>
ed effettuare un ''logout - login'' per l'aggiornamento dei permessi.


==== Come posso abilitare in Kmail il supporto per le firme S/MIME? ====
Una volta fatto questo, siete pronti per configurare tun e il bridge:
dal 17 Marzo � sufficiente un normale:
vde_switch -tap tun0 -daemon
<pre>
chmod 777 /tmp/vde.ctl
# apt-get install gpgsm gnupg-agent
</pre>
ifconfig eth0 down
(presenti anche in sarge)
brctl addbr br0
cos�, inoltre, funzioner� anche il programma kleopatra
ifconfig eth0 0.0.0.0 promisc up
([http://lists.debian.org/debian-kde/2005/03/msg00134.html Link alla News])
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


==== L'avvio di kdm risulta essere lento, come fare per sistemarlo? ====
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é:
Normalmente sembra essere un fatto legato alla cache dei fonts...
chmod u+x /etc/init.d/vde_qemu
con un
update-rc.d -n vde_qemu defaults 90
<pre>
 
# fc-cache
Ora tutto è pronto per lanciare qemu, con l'ultima avvertenza che dovete usare l'apposito wrapper vdeqemu:
</pre>
vdeqemu -hda disk.img -localtime
dovrebbe tornare tutto a posto
 
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 [http://klingon.homelinux.net/files/amnhltm.zip qui], va installata sul Win9x GUEST.
 
==Collegamenti esterni==
*[http://ubuntuforums.org/showthread.php?t=39513 http://ubuntuforums.org/showthread.php?t=39513]
*[http://fabrice.bellard.free.fr/qemu/index.html http://fabrice.bellard.free.fr/qemu/index.html]
*[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/]
 
==Conributi==
[[Utente:Themonkey|Themonkey]] 20:31, Ago 19, 2005 (EDT) The_monk_ey ( skype: the_monk_ey )
 
[[Utente:ianezz|ianezz]] 17:40, Nov 25, 2005 (CET) ''(per la parte di compilazione ed installazione)''
 
[[Utente:Paulox|Paulox]] 11:13, Dic 21, 2005 (EST) ''(aggiornamento alla versione 0.8.0 e riformattazione della pagina)''

Versione delle 17:36, 23 feb 2006

Installazione QEMU con qvm86/kqemu per Debian/Ubuntu

Qemu con supporto qvm86 (libero, ma sperimentale)

1. Fase Preliminare

Assicuratevi di aver installato i pacchetti necessari a scaricare e compilare il tutto:

  • ssh e cvs (per scaricare qvm86 occorre andare via cvs remoto)
  • patch (per usare qvm86 con qemu occorre effettuare una piccola patch ai sorgenti di qemu)
  • 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 uname -r.

2. Recupero file QEMU

Scaricate da http://fabrice.bellard.free.fr/qemu/download.html gli archivi dei codici sorgenti di QEMU, e come utente diverso da root scompattateli in una directory e poi entrateci.

$ tar zxvf qemu-0.8.0.tar.gz
$ cd qemu-0.8.0

3. Recupero file qvm86

Scaricate via cvs i sorgenti di qvm86, in modo che siano all'interno della directory dei sorgenti di qemu, sempre con un utente diverso da root.

$ export CVS_RSH=ssh
$ export CVSROOT=:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qvm86
$ cvs -z3 co qvm86

4. Applicazione patch

Applicate dalla directory dei sorgenti di qemu la patch provvista da qvm86.

$ patch -p0 < qvm86/patch.qvm86

5. Configurazione

Configurate l'ambiente di compilazione avviando lo script ./configure. Verificate che sia tutto ok, poi compilate il tutto ed installate.

$ ./configure --cc=gcc-3.3
$ make

Se avviando ./configure avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root. Leggete meglio sopra e ricominciate da capo.

Se dopo aver avviato make ci sono errori di compilazione, ci si può limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione --target-list=i386-softmmu al comando ./configure.

$ make clean
$ ./configure --cc=gcc-3.3 --target-list=i386-softmmu
$ make

Se non ci sono errori, ora potete diventare root ed installare qemu.

$ su
Password:
# make install

A questo punto qemu è installato in /usr/local/bin/qemu, ed il modulo qvm86 si trova in /lib/modules/versione_del_kernel/misc/qvm86.ko.

6. Caricamento modulo

Prima di eseguire qemu va caricato il modulo del kernel qvm86, va eventualmente creato /dev/qvm86 (usato per interagire col kernel) e gli vanno dati permessi adeguati.

Esempio di procedura manuale (per chi non ha installato il pacchetto udev):

# Queste due operazioni sono da fare come root una volta sola:
# mknod /dev/qvm86 c 222 0
# chmod 666 /dev/qvm86
#
# Questa operazione va eseguita come root ad ogni avvio del sistema per usare qemu
# modprobe qvm86

Esempio di procedura manuale (per chi ha installato il pacchetto udev):

# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
# modprobe qvm86
# chmod 666 /dev/qvm86

Per far eseguire automaticamente queste operazioni ad ogni avvio del sistema (consigliato):

  • diventate root (su -)
  • modificate il file /etc/modules aggiungendo la riga qvm86, in modo che il modulo venga automaticamente caricato al boot.
  • create il file /etc/modprobe.d/qvm86 contenente le seguenti righe:
    • per chi non ha installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 \
&& (test -c /dev/qvm86 || mknod /dev/qvm86 c 222 0) \
&& chmod 666 /dev/qvm86
  • per chi ha installato il pacchetto udev:
install qvm86 /sbin/modprobe --ignore-install qvm86 && chmod 666 /dev/qvm86

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 /usr/local/bin/qemu: potete farlo eseguendo type qemu.

Qemu col supporto kqemu (proprietario)

1. Fase Preliminare

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
  • gcc
  • 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 uname -r.

2. Recupero file QEMU/KQEMU

Scaricate archivi dei codici sorgenti di QEMU e KQEMU, e come utente diverso da root scompattateli in modo che la directory di kqemu venga estratta all'interno della directory di qemu. Quindi entrate nella directory dei sorgenti.

$ tar zxvf qemu-0.8.0.tar.gz
$ tar zxvf kqemu-0.7.2.tar.gz -C qemu-0.8.0
$ cd qemu-0.8.0

3. Configurazione

Configurate l'ambiente di compilazione avviando lo script ./configure. 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.

$ ./configure --cc=gcc-3.4
$ make

Se avviando ./configure avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root invece che come utente comune. Leggete meglio sopra e ricominciate da capo. Chi utilizza Ubuntu Breezy (5.10) definisca anche la variabile di ambiente CC che punti a gcc-3.4 (export CC='/usr/bin/gcc-3.4'), altrimenti il linking di kqemu verra' fatto con gcc-4.0 (compilatore di default su Ubuntu Breezy 5.10) e in fase di caricamento del modulo si avra' l'errore Invalid module format, poiche' il kernel standard di questa distribuzione e' compilato con gcc-3.4. La variabile va definita prima di eseguire il make; se cio' non e' stato fatto per tempo allora e' necessario entrare nella directory kqemu/ ed eliminare quanto gia' compilato con make clean, poi ritornare nella directory principale e rilanciare make.

Se dopo aver avviato make ci sono errori di compilazione, ci si può limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione --target-list=i386-softmmu al comando ./configure.

$ make clean
$ ./configure --cc=gcc-3.4 --target-list=i386-softmmu
$ make

Se non ci sono errori, ora potete diventare root ed installare qemu.

$ su
Password:
# make install

A questo punto qemu è installato in /usr/local/bin/qemu, ed il modulo kqemu si trova in /lib/modules/versione_del_kernel/misc/kqemu.ko.

4. Caricamento modulo

Prima di eseguire qemu va caricato il modulo del kernel kqemu, va eventualmente creato /dev/kqemu (usato per interagire col kernel) e gli vanno dati permessi adeguati.

Esempio di procedura manuale (per chi non ha installato il pacchetto udev):

# Queste due operazioni sono da fare come root una volta sola:
# mknod /dev/kqemu c 250 0
# chmod 666 /dev/kqemu
#
# Questa operazione va eseguita come root ad ogni avvio del sistema
# modprobe kqemu

Esempio di procedura manuale (per chi ha installato il pacchetto udev):

# Queste due operazioni vanno eseguite come root ad ogni avvio del sistema
# modprobe kqemu major=0
# chmod 666 /dev/kqemu

Per far eseguire automaticamente queste operazioni ad ogni avvio del sistema (consigliato):

  • diventate root (su -)
  • modificate il file /etc/modules aggiungendo la riga kqemu, in modo che il modulo venga automaticamente caricato al boot.
  • create il file /etc/modprobe.d/kqemu contenente le seguenti righe:
    • per chi non ha installato il pacchetto udev:
install kqemu /sbin/modprobe --ignore-install kqemu \
&& (test -c /dev/kqemu || mknod /dev/keqmu c 250 0) \
&& chmod 666 /dev/kqemu
  • per chi ha installato il pacchetto udev:
options kqemu major=0
install kqemu /sbin/modprobe --ignore-install kqemu && chmod 666 /dev/kqemu

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 /usr/local/bin/qemu: potete farlo eseguendo type qemu.

Utilizzo QEMU

Creazione immagine

(facoltativo) Creazione di un file immagine per il disco (facoltativo)

$ qemu-img create hd.img 5G

Esecuzione 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).

# qemu -boot c -cdrom /dev/cdrom -hda /home/rob/hd.img \
-user-net -pci -m 256 -k it -localtime

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

Sezione da revisionare per i cambiamenti nella versione 0.8.0

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.

Prima di iniziare, dovete verificare che il vostro kernel supporti i seguenti moduli:

 tun: "Network device support" -> "Universal TUN/TAP device driver support"
 IP masquerade: "Networking options" -> "IP: Netfilter Configuration"
 bridging: "Networking options" -> "802.1d Ethernet Bridging"

e dovete installare il pacchetto bridge-utils:

apt-get install bridge-utils

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.

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:

wget http://puzzle.dl.sourceforge.net/sourceforge/vde/vde-1.5.9.tar.gz
tar -xvzf vde-1.5.9.tar.gz
cd vde-1.5.9
./configure
make
make install

Una volta fatto questo, siete pronti per configurare tun e il bridge:

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

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: vde_qemu, che va salvato in /etc/init.d. Dopodiché:

chmod u+x /etc/init.d/vde_qemu
update-rc.d -n vde_qemu defaults 90

Ora tutto è pronto per lanciare qemu, con l'ultima avvertenza che dovete usare l'apposito wrapper vdeqemu:

vdeqemu -hda disk.img -localtime

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.

Collegamenti esterni

Conributi

Themonkey 20:31, Ago 19, 2005 (EDT) The_monk_ey ( skype: the_monk_ey )

ianezz 17:40, Nov 25, 2005 (CET) (per la parte di compilazione ed installazione)

Paulox 11:13, Dic 21, 2005 (EST) (aggiornamento alla versione 0.8.0 e riformattazione della pagina)