OpenBSD VMM kasutamine
Sissejuhatus
Operatsioonisüsteem OpenBSD v. 6.1 võimaldab kasutada virtuaalseid arvuteid. Lisaks on v. 6.1 koosseisus man switch lahendus, mis peaks kunagi asendama man bridge.
Mõisted
- vmm - virtual machine monitor
- vmd - deemon, mis haldab virtuaalseid arvuteid
- vmctl - vmd deemoni juhtimise utiliit
- bridge - nn legacy virtuaalne võrguseade
- switch - nn uus virtuaalne võrguseade
- vio - virtuaalne arvuti võrguseade
- /etc/firmware/vmm-bios - virtuaalne arvuti kaustab vaikimisi seda bios'i
Tööpõhimõte
Virtualiseerimist saab kasutada ainult sobiva riistvaraga, tavaliselt kaasaegne riistvara sobib ja sellest annab tunnistust
# dmesg | grep ^vmm vmm0 at mainbus0: VMX/EPT
Virtuaalsete arvutite kasutamist kirjeldab selline skeem
vm1 vm2 vm3 10.10.10.11 10.10.10.12 10.10.10.13 - gw 10.10.10.254 _____ _____ _____ | | | | | | | | | | | | |_____| |_____| |_____| | vio0 | vio0 | vio0 | | | | | | --|---------------|---------------|---- virtuaalne võrk | __|__ tap0, tap1 .. | | host arvuti | | vehter0 - 10.10.10.254 switch0 või |_____| bridge0 | | em0 | | em1 füüsiline võrk
kus
- vmN - virtuaalsed arvutid
- vio0 - virtuaalsetes arvutites olevad võrguseadmed (ip aadressidega 10.10.10.11 ... ning vaikelüüsiga 10.10.10.254)
- em0, em1 - füüsilise arvuti võrguseadmed
- tapN - virtuaalsete arvutite võrguseadmetele vastavad füüsilises arvutis olevad võrguliidesed
- host arvutis on seadistatud käima nn legacy bridge0 seade või kaasaegne switch0 seade
- vether0 - seade on vajalik switch0 kasutamisel, selleks, et host ise näeks virtuaalsete arvutite võrku
- bridge või switch seadme abil saab ühendada kokku virtuaalsete arvutite võrgu füüsilise võrguga
- host - füüsiline arvuti
- jooned tähistavad võrguühendusi (virtuaalsel arvutil võib olla ka enam kui üks võrguliidest)
Üks nö töövoog virtuaalsete arvutitega tegelemisel võiks olla
- tekitada host arvutisse switch seade käisiti
- moodustada virtuaalsed arvutid käsitsi
- seadistada /etc/switchd.conf, /etc/vm.conf ja /etc/hostname.* seadistusfailid selliselt, et host arvuti operatsioonisüsteemi alglaadimisel käivitatakse võrk ja virtuaalsed arvutid automaatselt
Väited
- man switch ei oska kasutada vlan silte
- virtuaalse arvuti plokkseadmetele vastavad failid host arvuti failisüsteemis tõmmistena
Ettevalmistused
Enne virtuaalsete arvutite kasutamist maksab läbi mõelda
- mida virtuaalsed arvutid tegema hakkavad
- kus host arvuti failisüsteemis hakkavad asuma virtuaalsete arvutite plokkseadmetele vastavad tõmmis failid
- kuidas hakkab tööle võrk (millised seadmed omavahel kokku ühendatakse, kas bridge või switch abil)
- kui palju mälu jt ressursse saavad virtuaalsed arvutid kasutada
Käesoleval juhul on valitud
- virtuaalsete arvutite tõmmised asuvad /srv/vm kataloogis
- install materjal asub kataloogis /srv/vm-install
- võrk on korraldatud man switch abil
Veenduda, et virtuaalse arvuti bios tõmmis on olemas, nt
# fw_update vmm-firmware-1.10.2p2: ok # ls -ld /etc/firmware/vmm-bios* -rw-r--r-- 1 root bin 65536 Mar 27 17:59 /etc/firmware/vmm-bios -rw-r--r-- 1 root bin 7639 Mar 27 17:59 /etc/firmware/vmm-bios-license
Tõenäoliselt on vaja lülitada host arvutis sisse ruutimine
# sysctl -w net.inet.ip.forwarding=1
parem
# cp /etc/examples/sysctl.conf /etc/sysctl.conf # grep net.inet.ip.forwarding /etc/sysctl.conf net.inet.ip.forwarding=1 # 1=Permit forwarding (routing) of IPv4 packets
ning paketifiltris kasutada nt src nat teisendusi, nt
# cat /etc/pf.conf .. set skip on lo match out on egress inet from !(egress:network) to any nat-to (egress:0) ...
Virtuaalsetesse arvutitesse saab praktiliselt paigaldada ainult 6.1+ versioon OpenBSD operatsioonisüsteemi. Install materjal peab olema kasutada nt host arvuti failisüsteemist
# ls -ld /srv/vm-install/* -rwxr-xr-x 1 root wheel 9431142 Apr 16 15:19 /srv/vm-install/bsd.rd -rw-r--r-- 1 root wheel 294092800 Apr 16 17:19 /srv/vm-install/install61.fs
switch kasutamine
vether seadme moodustamiseks, nii ta tekib ka alglaadimise järel automaatselt
# cat /etc/hostname.vether0 inet 10.10.10.254/24 # sh /etc/netstart vether0
Käsitsi switch tekitamiseks sobib öelda
# ifconfig switch0 create
ning lisada sinna vether liides nö lokaalses režiimis
# ifconfig switch0 addlocal vether0
Arvuti alglaadimisel käivitab switchi sobivalt
# cat /etc/hostname.switch0 up !rcctl -f start switchd !switchctl connect /dev/switch0 !ifconfig switch0 addlocal vether0 !ifconfig vether0 up
Switchi käsitsi käivitamiseks tuleb käivitada flow controller switchd ning ühendada switch flow kontrolleriga
# /etc/rc.d/switchd -f start # switchctl connect /dev/switch0
Alglaadimiseks, aga seda pole vaja kuna käivitatakse hostname.switch0 seest
# rcctl set switchd status on
bridge kasutamine
TODO
Virtuaalse arvuti moodustamine ja käivitamine
Virtuaalse arvuti plokkseadmele vastava tõmmise tekitamiseks sobib öelda
# mkdir /srv/vm # cd /srv/vm # vmctl create vm1.drive -s 2g vmctl: imagefile created
Enne vmctl käsude andmist peab töötama vmd protsess, alustuseks sobib see käivitada tühja või puuduva seadistusfailita /etc/vm.conf
# /etc/rc.d/vmd -f start
Alglaadimisel käivitamiseks
# rcctl set vmd status on
Virtuaalse arvuti paigaldamiseks sobib öelda
# vmctl start "vm1" -c -m 1G -i 1 -d vm1.drive -d /srv/vm-install/install61.fs -b /srv/vm-install/bsd.rd
kus
- "vm1" - virtuaalse arvuti nimi
- -c - käivitatud arvutile ühendatakse konsool külge
- -m - mälu
- -i - võrguliideste hulk
- -d - virtuaalise arvuti plokkseadmed, järjekorras
- -b - millega arvuti käivitatakse, installeriga
Seejärel käivitub arvuti ja installer ning tuleb läbida installer tavalisel viisil. sd0 on arvuti enda plokkseade, sd1 on install61.fs materjal. Peale paigaldust sobib lõpus öelda
# halt -p
host arvutis saab jälgida virtuaalse arvuti olukorda
# vmctl status ID PID VCPUS MAXMEM CURMEM TTY OWNER NAME 3 71875 1 1.0G 169M ttyp3 root vm1
Paigaldatud arvuti käsitsi käivitamiseks sobib öelda (st ilma vm.conf failita)
# vmctl start "vm1" -c -m 1G -i 1 -d vm1.drive
seejuures maksab tähele panna, et host'i tekib võrguseade tapX, nt tap0 ja selle ühendamiseks switchiga sobib öelda
# ifconfig switch0 add tap0
Tulemus paistab nii, nüüd peavad saama host ja virtuaalne arvuti üksteist pingida
# ifconfig switch0 switch0: flags=41<UP,RUNNING> description: switch1-local0 index 31 llprio 3 groups: switch datapath 0x19a7a825507b982d maxflow 10000 maxgroup 1000 tap0 flags=0<> port 33 ifpriority 0 ifcost 0 vether0 flags=1000<LOCAL> port 4294967294 ifpriority 0 ifcost 0
Töötava arvuti konsoolile saab külge ühenduda
# vmctl console ID
Taustal töötab
root 13266 0.0 0.0 408 1312 p1 I+p 3:38PM 0:01.65 /usr/bin/cu -l /dev/ttyp2 -s 9600
Konsoolist saab lahti (klaviatuuri abil shift+tilde klaht kaks korda ja punkti klahv) abil
~~.
Virtuaalse arvuti riistvara paistab selline, protsessor sama mis host arvutil
# sysctl hw hw.machine=amd64 hw.model=Intel(R) Pentium(R) CPU J3710 @ 1.60GHz hw.ncpu=1 hw.byteorder=1234 hw.pagesize=4096 hw.disknames=sd0:a35570cddd43a473 hw.diskcount=1 hw.sensors.vmmci0.timedelta0=-289.509179 secs, OK, Sun Apr 16 19:07:46.461 hw.cpuspeed=1600 hw.vendor=OpenBSD hw.physmem=1056956416 hw.usermem=1056944128 hw.ncpufound=1 hw.allowpowerdown=1
Virtuaalsete arvutite töötamisega kaasnevad sellised protsessid, lisaks muudele kaasneb iga virtuaalse arvutiga üks vmd protsess
# ps aux | grep vm _vmd 55137 0.0 0.0 1168 1656 ?? Isp 7:02PM 0:00.03 vmd: control (vmd) root 32399 0.0 0.0 1104 1564 ?? Is 7:02PM 0:00.02 vmd: priv (vmd) root 46264 0.0 0.0 1404 1588 ?? Isp 7:02PM 0:00.01 /usr/sbin/vmd _vmd 38095 0.0 0.0 1240 1716 ?? Isp 7:02PM 0:00.02 vmd: vmm (vmd) _vmd 34198 0.0 0.4 1051300 73836 ?? Ip 7:02PM 3:11.36 vmd: vm1 (vmd) _vmd 4400 0.0 0.4 1051296 72796 ?? Ip 7:02PM 3:11.72 vmd: vm2 (vmd)
vm.conf kasutamine
Selleks, et arvuti juba paigaldatud ja seadistatud arvuti käivitamine toimuks hõlpsamini sobib kasutada nt sellist vmd seadistusfaili /etc/vm.conf
# cat /etc/vm.conf switch "local0" { interface switch0 } vm "vm1" { memory 1G disk "/srv/vm/vm1.drive" interface { switch "local0" } } vm "vm2" { memory 1G disk "/srv/vm/vm2.drive" interface { switch "local0" } }
kus
- füüsilises arvutis olevale switch0 seadmele viidatakse vm.conf failis local0
- arvuteid saab käivitada lihtsustatult, nt
# vmctl start vm2
Märkused
- Tundub, et mingil hetkel võib peale virt arvutis halt -p ütlemist tekkida selline olukord
# vmctl status ID PID VCPUS MAXMEM CURMEM TTY OWNER NAME - - 1 1.0G - - root vm1 - - 1 1.0G - - root vm2
kui ühtegi virtuaalset arvutit ei tööta, siis lahenduseks sobib vmd protsessi stop ja start
# rcctl -f stop vmd # rcctl -f start vmd
bsd.sp -> bsd.mp muutmine
TODO
Kasulikud lisamaterjalid
Kasulikud lisamaterjalid
- http://daemonforums.org/showthread.php?t=10001
- https://gist.github.com/tvlooy/fd6bc5a77bc03f4d419f395dfcf4f038
- https://www.openbsd.org/papers/asiabsdcon2016-vmd-slides.pdf
- https://www.bsdcan.org/2016/schedule/attachments/371_switchd-slides-bsdcan2016
- https://www.auul.pri.ee/wiki/Operatsioonis%C3%BCsteemi_OpenBSD_kasutamine#switchd_kasutamine