Virtualizacija - Windowsi pod Ubuntujem

Kaj torej storiti, če nujno potrebujemo nek program, ki teče samo v okolju Windows? Rešitev je uporaba virtualizacije. Z virtualizacijo znotraj računalnika ustvarimonov, navidezni računalnik, kamor lahko namestimo operacijski sistem. Nov računalnik v obastoječem sistemu vidimo kot posebno okno. Najbolj znan program za virtualizacijo je VMWare, ki je sicer zelo zmogljiv, ni pa brezplačen. A v svetu Linuxa obstaja tudi brezplačna rešitev. Imenuje se qemu.

Qemu je tekstovno orodje, ki je razmeroma neprijazno do uporabnika, poleg tega pa ga je potrebno prevesti in namestiti ročno. A če boste sledili spodnjim navodilom, težav skorajda ne bo.

OPOMBA: Uporabljam Kubuntu (vendar je to vseeno, dela tudi v Ubuntuju), spodaj pa so navodila za Ubuntu Hoary in Breezy preview release!

Gremo v konzolo in začnemo.

mkdir qemu
cd qemu

OPOMBA: Predpostavka je, da uporabljamo trenutno najnovejšo verzijo qemuja, torej 0.7.1!

wget -N http://fabrice.bellard.free.fr/qemu/qemu-0.7.1.tar.gz
wget -N http://fabrice.bellard.free.fr/qemu/kqemu-0.6.2-1.tar.gz
tar zxvf qemu-0.7.1.tar.gz
cd qemu-0.7.1
tar zxvf ../kqemu-0.6.2-1.tar.gz

sudo apt-get install libsdl1.2debian zlib1g libx11-dev libsdl1.2-dev texi2html sharutils libgpmg1-dev vgabios bochsbios

HOARY:
sudo apt-get install linux-headers-2.6.10-5-386

BREEZY PREVIEW:
sudo apt-get install linux-headers-2.6.10-5-386

sudo apt-get install build-essential

HOARY:
./configure --prefix= /usr --enable-slirp \ --target-list="i386-user i386 i386-softmmu arm-user sparc-user sparc-softmmu ppc-user ppc-softmmu"

BREEZY PREVIEW:
- potrebno je uporabiti isto verzijo prevajalnika kot je bila uporabljena za prevajanje jedra -
sudo apt-get install gcc-3.4

sudo rm /usr/bin/cpp
sudo ln -s /usr/bin/cpp-3.4 /usr/bin/cpp

sudo rm /usr/bin/g++
sudo ln -s /usr/bin/g++-4.0 /usr/bin/g++

sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-3.4 /usr/bin/gcc

sudo rm /usr/bin/gcov
sudo ln -s /usr/bin/gcov-3.4 /usr/bin/gcov

sudo rm /usr/bin/gccbug
sudo ln -s /usr/bin/gccbug-3.4 /usr/bin/gccbug

sudo rm /usr/bin/i486-linux-gnu-g++
sudo ln -s /usr/bin/i486-linux-gnu-g++-3.4 /usr/bin/i486-linux-gnu-g++

sudo rm /usr/bin/i486-linux-gnu-gcc
sudo ln -s /usr/bin/i486-linux-gnu-gcc-3.4 /usr/bin/i486-linux-gnu-gcc

sudo rm /usr/bin/i486-linux-gnu-cpp
sudo ln -s /usr/bin/i486-linux-gnu-cpp-3.4 /usr/bin/i486-linux-gnu-cpp

./configure --prefix= /usr --enable-slirp \ --cc=gcc-3.4

(end of BREEZY PREVIEW)

Dobimo izpis, ki mora biti podoben:
SDL support yes (OBVEZNO YES)
SDL static link yes
mingw32 support no
Adlib support no
FMOD support no
kqemu support yes (OBVEZNO YES)


make

sudo make install

sudo modprobe kqemu
sudo modprobe loop

(Pogledamo, če sta modula naložena:
lsmod)

sudo kedit /etc/modules (ali gedit namesto kedit)

Na konec dodamo dve vrstici:

kqemu
loop


sudo kedit /etc/init.d/bootmisc.sh

pred ": exit 0" dodamo naslednji dve vrstici:

mknod /dev/kqemu c 250 0
chmod 666 /dev/kqemu

NAMESTITEV KONČANA.

mkdir images
qemu-img create -f raw /home/matej/qemu/images/win2k.img 2G

Sedaj v CD enoto vstavimo namestitveni CD za Windows 2000 in poženemo virtualni računalnik:
sudo umount /dev/shm
OPOMBA: virtualnemu računalniku bomo dali 256 RAM-a od zanj rezerviramo do 272 RAM-a (dinamično dodeljevanje)
sudo mount -t tmpfs -o size=272m none /dev/shm
qemu -dummy-net -m 256 -cdrom /dev/cdrom -boot d /home/matej/qemu/images/win2k.img


Primer zagona virtualnega računalnika brez disketne in CD enote, z 256 Mb RAM-a ter dostopom do interneta ter dostopom do virtualnega Windows omrežja na Linux računalniku (samba - seveda moramo imeti sambo nameščeno, v navedenem primeru delimo mapo /home/matej/windows_network):

qemu -user-net -m 256 -smb /home/matej/windows_network /home/matej/qemu/images/win2k.img

Okno virtualnega računalnika zapustimo s pritiskom na Ctrl-Alt, s Ctrl-Alt-f vstopimo v celozaslonski način.

Ctrl-Alt-2 (ne F2!), in znajdemo se v ukazni konzoli (nazaj v okno virtualnega računalnika pridemo z Ctrl-Alt-1). Če vpišemo "help", se izpišejo ukazi, ki jih lahko vtipkamo v konzolo.
Če vtipkamo "savevm /home/matej/qemu/virtual_machines/win2k.vm", se bo znotraj podimenika virtual_machines (podimenik moramo prej seveda še ustvariti!), shranila datoteka win2k.vm. S tem smo shranili "stanje" virtualnega računalnika (tim. snapshot). Le-tega sedaj lahko ugasnemo z ukazom q (quit). Ugašanje poteka v manj kot sekundi. Če ga želimo ponovno zagnati, moramo pri zagonu vnesti parameter "-loadvm . Na primer:

qemu -user-net -m 256 /home/matej/qemu/images/win2k.img -loadvm /home/matej/qemu/virtual_machines/win2k.vm

V tem primeru se virtualni računalnik naloži v prejšnje stanje RAM-a izredno hitro (v dveh sekundah ali še manj).

Have phun! :)

Komentarji

  • Screamboy Član Ubuntu.si
    hm mislim da bi lahko lahko spisal vodiča ti ali?
  • bl4z Član Ubuntu.si
    lepo !
    bom sprobal ...
  • Bom premagnil v Wiki pa mathai pol mal uredi. Prav?
  • http://www.ubuntu.si/dokuwiki/doku.php?id=virtualizacija_-_windows_pod_ubuntujem

    Pa dj še kšn screenshot pripopaj. Pa vse pohvale za vodič
  • Bom, naslednji teden, ko bom imel čas. "Skrinšote" imam tudi.
  • Screamboy Član Ubuntu.si
    pohvale ja take userje rabimo na tej strani
  • Wiki sem malce popravil in dodal slike, vendar ne vem kako sliko zmanjšati... (razen ročno).
  • christooss Član Ubuntu.si
    Hm mislm da se ne da zmanjšat slike razen če jih spremeniš že preden jih uplodaš
  • christooss Član Ubuntu.si
    No zdj sm si dovolil da sem zmanjšal sliko namizja. Cko da upam da ne zameriš :)
  • christooss Član Ubuntu.si
    Če je naslov kr Virtualizacija - windows pod Ubuntujem potem sm tud naslov dodal :)
  • Naslov je OK.

    Sem v wiki dodal še en članek o šifriranju - uporabi GPG. :-)
  • christooss Član Ubuntu.si
    Hm dej vsak nov tutorial daj najvišje v njegovo skupino. In ne nevem po abecedi. No sej zaenkrat je dobr ampak morm kmal spremenit še wiki stran člankev. Ker je mal preveč razdrobljena
  • christooss Član Ubuntu.si
    Mathhai mogoče bi objavil tud članek o gpgju nasplošno? oz. kako pridt /nardit gpg ključ
  • lp

    pri koraku make men to vze vun:

    h4ck@h4ck:~/qemu/qemu-0.7.1$ make
    gcc -DQEMU_TOOL -Wall -O2 -g -fno-strict-aliasing -g -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o qemu-img qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c -lz
    block-qcow.c:26:18: zlib.h: No such file or directory
    block-qcow.c: In function `decompress_buffer':
    block-qcow.c:408: error: `z_stream' undeclared (first use in this function)
    block-qcow.c:408: error: (Each undeclared identifier is reported only once
    block-qcow.c:408: error: for each function it appears in.)
    block-qcow.c:408: error: syntax error before "strm1"
    block-qcow.c:411: error: `strm' undeclared (first use in this function)
    block-qcow.c:418: warning: implicit declaration of function `inflateInit2'
    block-qcow.c:419: error: `Z_OK' undeclared (first use in this function)
    block-qcow.c:421: warning: implicit declaration of function `inflate'
    block-qcow.c:421: error: `Z_FINISH' undeclared (first use in this function)
    block-qcow.c:423: error: `Z_STREAM_END' undeclared (first use in this function)
    block-qcow.c:423: error: `Z_BUF_ERROR' undeclared (first use in this function)
    block-qcow.c:425: warning: implicit declaration of function `inflateEnd'
    block-qcow.c: In function `qcow_compress_cluster':
    block-qcow.c:620: error: `z_stream' undeclared (first use in this function)
    block-qcow.c:620: error: syntax error before "strm"
    block-qcow.c:633: error: `strm' undeclared (first use in this function)
    block-qcow.c:634: warning: implicit declaration of function `deflateInit2'
    block-qcow.c:634: error: `Z_DEFAULT_COMPRESSION' undeclared (first use in this function)
    block-qcow.c:635: error: `Z_DEFLATED' undeclared (first use in this function)
    block-qcow.c:636: error: `Z_DEFAULT_STRATEGY' undeclared (first use in this function)
    block-qcow.c:647: warning: implicit declaration of function `deflate'
    block-qcow.c:647: error: `Z_FINISH' undeclared (first use in this function)
    block-qcow.c:648: error: `Z_STREAM_END' undeclared (first use in this function)
    block-qcow.c:648: error: `Z_OK' undeclared (first use in this function)
    block-qcow.c:650: warning: implicit declaration of function `deflateEnd'
    block-cloop.c:26:18: zlib.h: No such file or directory
    block-cloop.c:37: error: syntax error before "z_stream"
    block-cloop.c:37: warning: no semicolon at end of struct or union
    block-cloop.c:38: warning: type defaults to `int' in declaration of `BDRVCloopState'
    block-cloop.c:38: warning: data definition has no type or storage class
    block-cloop.c: In function `cloop_open':
    block-cloop.c:55: error: `s' undeclared (first use in this function)
    block-cloop.c:55: error: (Each undeclared identifier is reported only once
    block-cloop.c:55: error: for each function it appears in.)
    block-cloop.c:96: warning: implicit declaration of function `inflateInit'
    block-cloop.c:96: error: `Z_OK' undeclared (first use in this function)
    block-cloop.c: At top level:
    block-cloop.c:105: error: syntax error before '*' token
    block-cloop.c: In function `cloop_read_block':
    block-cloop.c:107: error: `s' undeclared (first use in this function)
    block-cloop.c:107: error: `block_num' undeclared (first use in this function)
    block-cloop.c:120: warning: implicit declaration of function `inflateReset'
    block-cloop.c:121: error: `Z_OK' undeclared (first use in this function)
    block-cloop.c:123: warning: implicit declaration of function `inflate'
    block-cloop.c:123: error: `Z_FINISH' undeclared (first use in this function)
    block-cloop.c:124: error: `Z_STREAM_END' undeclared (first use in this function)block-cloop.c: In function `cloop_read':
    block-cloop.c:135: error: `s' undeclared (first use in this function)
    block-cloop.c: In function `cloop_close':
    block-cloop.c:150: error: `s' undeclared (first use in this function)
    block-cloop.c:156: warning: implicit declaration of function `inflateEnd'
    block-dmg.c:27:18: zlib.h: No such file or directory
    block-dmg.c:49: error: syntax error before "z_stream"
    block-dmg.c:49: warning: no semicolon at end of struct or union
    block-dmg.c:50: warning: type defaults to `int' in declaration of `BDRVDMGState'block-dmg.c:50: warning: data definition has no type or storage class
    block-dmg.c: In function `dmg_open':
    block-dmg.c:78: error: `s' undeclared (first use in this function)
    block-dmg.c:78: error: (Each undeclared identifier is reported only once
    block-dmg.c:78: error: for each function it appears in.)
    block-dmg.c:166: warning: implicit declaration of function `inflateInit'
    block-dmg.c:166: error: `Z_OK' undeclared (first use in this function)
    block-dmg.c: At top level:
    block-dmg.c:174: error: syntax error before '*' token
    block-dmg.c: In function `is_sector_in_chunk':
    block-dmg.c:177: error: `chunk_num' undeclared (first use in this function)
    block-dmg.c:177: error: `s' undeclared (first use in this function)
    block-dmg.c:177: error: `sector_num' undeclared (first use in this function)
    block-dmg.c: At top level:
    block-dmg.c:184: error: syntax error before '*' token
    block-dmg.c: In function `search_chunk':
    block-dmg.c:187: error: `s' undeclared (first use in this function)
    block-dmg.c:190: error: `sector_num' undeclared (first use in this function)
    block-dmg.c: At top level:
    block-dmg.c:200: error: syntax error before '*' token
    block-dmg.c: In function `dmg_read_chunk':
    block-dmg.c:202: error: `s' undeclared (first use in this function)
    block-dmg.c:202: error: `sector_num' undeclared (first use in this function)
    block-dmg.c:235: warning: implicit declaration of function `inflateReset'
    block-dmg.c:236: error: `Z_OK' undeclared (first use in this function)
    block-dmg.c:238: warning: implicit declaration of function `inflate'
    block-dmg.c:238: error: `Z_FINISH' undeclared (first use in this function)
    block-dmg.c:239: error: `Z_STREAM_END' undeclared (first use in this function)
    block-dmg.c: In function `dmg_read':
    block-dmg.c:259: error: `s' undeclared (first use in this function)
    block-dmg.c: In function `dmg_close':
    block-dmg.c:274: error: `s' undeclared (first use in this function)
    block-dmg.c:285: warning: imp

    a ve kdo zakaj?
  • Screamboy Član Ubuntu.si
    kako lahko sploh vprasas ko pa tejkas irc kanal ubuntu.si
  • Kami Član Ubuntu.si
    Jaz sem imel enaki problem ampak sme potem qemu installal pač brez kquemo z sudo apt-get install qemu.

    Drugače pa mislim da je to problem z kompajlerjem.
  • amm sj #ubuntu.si lahk vrnme ce vam je to problem! kami tnx sem naredil, samo imam nasledni problem. Po instalacija win Xp se ne bota. pIse disk eror. a ve kdO?
  • Kami Član Ubuntu.si
    Tudi meni ne, uporabi savevm in potem zaganjal z -loadvm parametrom.
  • Kami Član Ubuntu.si
    Zaklepam,

    Vprašanja/Odgovori tukaj
Ta razprava je zaprta.