1. Homepage
  2. Articoli
  3. Video
  4. Bash scripting
  5. Sistema
  6. Tips
  7. News


Windows dentro Linux

» Author: Andrea Ganduglia Date: 2005-12-05 02:01:01 Copyright: (c)2005 Andrea Ganduglia

Ci sono ottime ragioni perché un utente GNU/Linux abbia il desiderio di eseguire applicazioni scritte per Microsoft Windows all'interno del proprio sistema. Una strada è quella di eseguire un singolo applicativo via Wine, un ambiente software che fornisce le API di Windows; un'altra, quella descritta in quest'articolo, è eseguire l'intero sistema operativo in emulazione con QEMU.

QEMU, in breve, è un emulatore generico di CPU, scritto e ideato da Fabrice Bellard, è free software ed offre una buona velocità di esecuzione anche se confrontato con i suo concorrenti commerciali. QEMU offre supporto per una decina di CPU differenti, anche se quelle per cui il supporto è stabile sono x86, x86_64 e ppc. Per le macchine x86 che emulino una macchina x86 esiste poi QEMU Accelerator in grado di migliorare le prestazioni di emulazione, un prodotto che, pur essendo dello stesso autore, è proprietario per le ragioni illustrate in questa pagina.

E ora divertiamoci ad installare Windows dentro Linux!

Installazione

Per gli utenti Debian, a cui è dedicata questa breve guida, l'installazione è semplice e immediata:

~# apt-get install qemu

Configurazione della rete

Prima di procedere all'installazione di Windows, è oppurtuno configurare la rete, in modo che il sistema emulato possa usufruire della connessione Internet della macchina host. Per fare questo è necessario il device /dev/net/tun per virtualizzare la rete. Verificate di avere il device:

~$ file /dev/net/tun
/dev/net/tun: character special (10/200)

Se invece la risposta è:

~$ file /dev/net/tun
/dev/net/tun: ERROR: cannot open `/dev/net/tun' (No such file or directory)

sarà necessario crearlo:

~# mkdir -p /dev/net
~# mknod /dev/net/tun c 10 200

ed abilitare il modulo nel Kernel:

~# modprobe tun
~# echo 'tun' >> /etc/modules

Debian, di default, non permette all'utente di utilizzare questo device, dovrete quindi cambiare i permessi:

~# chgrp qemu /dev/net/tun 
~# chmod g+w /dev/net/tun

Ricordate di iscrivere l'utente al gruppo qemu! L'ultimo passo per abilitare la rete è permettere al sistema ospite di utilizzarla, quindi:

~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
~# echo "1" >/proc/sys/net/ipv4/ip_forward

Cdrom e harddisk

Ora che i preliminari sono finiti possiamo fare le cose divertenti. Prima di tutto creiamo una directory di lavoro e andiamoci dentro.

~$ mkdir win2k
~$ cd win2k

Dal nome della directory è facile intuire che abbiamo deciso per l'installazione di Microsoft Windows 2000, che a quanto dice la documentazione di Qemu è un'ottima scelta tra i sistemi Windows. Quindi procuriamoci il cd di installazione e memorizziamone il contenuto all'interno di una immagine ISO.

dd if=/dev/cdrom of=win2k.iso

Ora prepariamo l'harddisk, che sarà un file lungo circa 4GB.

~$ dd of=hd.img bs=1024 seek=4000000 count=0
entrati 0+0 record
usciti 0+0 record
0 bytes transferred in 0.000133 seconds (0 bytes/sec)

Creare l'immagine disco in questo modo ha il vantaggio che potremo montarla in loop e quindi intervenire sul filesystem di Windows senza necessariamente avviare il sistema in emulazione. Per montare l'immagine disco è sufficiente:

~$ mkdir loop
~$ mount -o loop,offset=32256 hd.img loop

Sarà possibile montare il disco non appena terminata l'installazione, per i dettagli far riferimento a Mounting disks with Linux's loopback device.

Installiamo

A questo punto è possibile installare Windows 2000 con un solo comando:

~$ qemu -hack-win2k -cdrom win2k.iso -hda hd.img -user-net -boot d

In pochi secondi si apriranno le schermate tipiche di Windows 2000 e l'installazione procederà esattamente come fosse un PC dedicato ad esso.

win2k_under_linux_a.pngwin2k_under_linux_b.png
Installazione di Windows 2000 (1/3)

win2k_under_linux_c.pngwin2k_under_linux_d.png
Installazione di Windows 2000 (2/3)

win2k_under_linux_e.pngwin2k_under_linux_f.png
Installazione di Windows 2000 (3/3)

L'installazione (senza QEMU Accelerator) occupa circa due ore di tempo su una macchina con CPU da 2.4Ghz e 512MB di RAM, qualcosa come il doppio rispetto ad una installazione dedicata.

Boot del sistema

A questo punto Windows chiederà di rimuovere il cdrom di installazione e riavviare la macchina. A noi basterà un bel killall -9 qemu e poi lanciare il boot direttamente dall'immagine disco.

~$ qemu -hda hd.img -boot c -user-net

Ed ecco qua:

win2k_under_linux_g.png
Boot di Windows 2000 dentro Qemu

Windows è sempre Windows

Quello che il software libero non è ancora riuscito a fare è migliorare il software proprietario, infatti se Windows funziona male fuori, funzionerà male anche dentro QEMU. Ecco infatti che pochi secondi dopo il boot esce una schermata inquietante: la DLL msgina.dll è corrotta e non funziona... ovviamente il suggerimento di Microsoft è quello di sostituirla con quella originale... :-(.

win2k_under_linux_h.png
msgina.dll blocca il sistema

Spulciando nella documentazione Microsoft si trova una pagina dedicata all'argomento, che dice, grosso modo: prendete un altro PC con Windows 2000, copiate msgina.dll su un floppy, fate boot con il cd di installazione e il floppy, sostituite via MS-DOS la DLL corrotta con quella del sistema funzionante.

Fantastico: per correggere un errore di Microsoft devo comprare un altro prodotto Microsoft! Sono dei campioni. Comunque, la cosa funziona, quindi salvate msgina.dll su un floppy e mettelo nel lettore della vostra Linux Box. Quindi:

~$ dd if=/dev/fd0 of=~/win2k/floppy.img

Ora fate boot con il cd di installazione e il floppy insieme...

~$ qemu -cdrom win2k.iso -hda hd.img -fda floopy.img -boot d -user-net

Seguite le istruzioni e ...

Windows, finalmente

Avviando nuovamente l'emulatore da HD il boot viene completato e Windows 2000 è disponibile all'interno della finestra di QEMU. Per abilitare la rete dovrete seguire le istruzioni che appaiono cliccando l'icona "Connessione ad Internet" sul desktop, a seguire avrete un sistema Windows pienamente funzionante in cui installare applicativi o fare test ed esperimenti.

win2k_under_linux_i.pngwin2k_under_linux_l.png
Finalmente il boot senza errori

win2k_under_linux_m.pngwin2k_under_linux_o.png
Le proprietà del disco e il primo programma installato

win2k_under_linux_z.png Ora è possibile spegnere il computer

Alcune note finali

Ora che funziona, la prima cosa da fare è conservare l'immagine disco, in modo che si possa lavorare in regime di backup attivo. Farlo è molto semplice, basta copiare il file:

~$ cp -v hd.img hd_copy.img

ed avviare dalla copia:

~$ qemu -hda hd_copy.img -boot c -user-net

E' ovviamente possibile installare sia Windows 95/98 che Windows XP con lo stesso sistema, anche se, senza acceleratore, le prestazioni non saranno altrettanto buone, così come è possibile installare qualsiasi distribuzione Linux per x86, mentre molto presto sarà possibile emulare MAC OS X richiamando l'emulatore qemu-ppc. Per una lista dei sistemi supportati fate riferimento alla pagina QEMU OS Support. Personalmente ho provato molte distribuzioni live, tra cui Knoppix, Ubuntu e Damn Small Linux, e tutte con ottimi risultati:

~$ qemu -cdrom live-distro.iso -boot d -user-net