Kör en virtuell maskin med VirtualBox på en huvudlös server

01 juli 2010

Att köra virtuella maskiner på en huvudlös server (textbaserad server) går väldigt bra och är inte vidare jättesvårt, bara man vet hur man gör det. :P

Om du har en huvudlös server och installerar VirtualBox via förrådet kommer du att få med ca 500MB totalt onödiga beroenden. Därför har jag valt att använda mig av DEB-filen som Oracle tillhandahåller på deras hemsida. Enda nackdelen med detta är att du själv får hålla koll på när det kommer en ny version av VirtualBox.

Installation

Börja med att installera en del beroenden:

sudo aptitude install libcurl3 dkms libqt4-network libqtgui4 libxslt1.1 libasound2 libdirectfb-1.2-0 libgl1-mesa-dri libgl1-mesa-glx libqt4-opengl libsdl1.2debian libsdl1.2debian-alsa libsysfs2 libts-0.0-0 libxcursor1 linux-headers-`uname -r` libxdamage1 libxfixes3 libxmu6 libxxf86vm1 tsconf

Ladda sedan hem den senaste versionen av VirtualBox: http://dlc.sun.com/virtualbox/vboxdownload.html. Du kan med fördel använda wget för att hämta DEB-filen:

wget http://download.virtualbox.org/virtualbox/3.2.6/virtualbox-<...>.deb

Installera DEB-filen med kommandot:

sudo dpkg -i virtualbox-<...>.deb

Konfiguration

För att kunna använda VirtualBox behöver din användare tillhöra gruppen vboxusers, du lägger till dig i gruppen med kommandot:

sudo adduser <Användare> vboxusers

Se till att vboxusers har lämpliga rättigheter genom att skapa filen 40-permissions.rules i mappen /etc/udev/rules.d/:

sudo nano /etc/udev/rules.d/40-permissions.rules

I filen lägger du till följande rad:

KERNEL=="vboxdrv", GROUP="vboxusers", MODE="0660"

Spara ändringarna och avsluta textredigeraren med kommandot:

Ctrl-X + Y

Skapa en virtuell maskin

Skapa en profil för den virtuella maskinen med kommandot:

VBoxManage createvm -name <Namn> -register

Sedan kommer vi att välja mängden RAM-minne som maskinen ska få åtkomst till och även välja en bryggad anslutning så att den virtuella maskinen får en egen IP-adress:

VBoxManage modifyvm debian-server --memory 512 --pae on --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 eth0

Skapa en virtuell hårddisk:

VBoxManage createhd --filename <Namn>.vdi --size <Storlek i megabyte> --variant Fixed --register

Skapa en IDE-kontroller vid namn IDE0:

VBoxManage storagectl <Namn> --name IDE0 --add ide

Anslut den virtuella hårddisken till maskinen:

VBoxManage storageattach <Namn> --storagectl IDE0 --port 0 --device 0 --type hdd --medium <Namn>.vdi

Skapa och bind en virtuell DVD-enhet och montera ISO-filen:

VBoxManage storageattach <Namn> --storagectl IDE0 --port 1 --device 0 --type dvddrive --medium /home/hund/debian-504-i386-netinst.iso

Nu är du klar och allting ska fungera!

Eftersom du inte har ett grafiskt användargränssnitt för att komma åt dom virtuella maskinerna, använder man sig av Remote Desktop Protocol (RDP) för att ansluta till maskinen/maskinerna.

Om du tänker köra flera virtuella maskiner på samma server, behöver varje maskin en unik port att lyssna på för att du ska komma åt dom. Du ändrar standardporten på en maskin med kommandot:

VBoxManage modifyvm debian-server --vrdpport <Port>

Starta och anslut till din virtuella maskin

Börja med att starta din nya virtuella maskin med kommandot:

VBoxHeadless -startvm <Namn>

Anslut sedan till maskinen via rdesktop med kommandot:

rdesktop -k sv-se -a 16 <Värdens IP-adress>

Avmontera ISO-filen efter installationen

När du har installerat ditt operativsystem på den virtuella maskinnen kommer du säkert vilja avmontera ISO-filen. Detta ordnar du med kommandot:

VBoxManage closemedium dvd <UUID-värdet>

Jag har inte lyckats hitta något smidigt kommando för att lisa UUID-värdet, utan du får kolla i filen ~/.VirtualBox/VirtualBox.xml vad DVD-enheten har för värde. Du kan enkelt visa innehållet i filen med kommandot:

cat ~/.VirtualBox/VirtualBox.xml

I outputen letar du reda på denna del:

<DVDImages>
<Image uuid="{72937dc7-5fc3-491f-998f-hd52f4b96258}" location="/home/hund/debian-504-i386-netinst.iso"/>
</DVDImages>

Den fetmarkerade texten är alltså UUID-värdet.

Dela med dig

RSS Twitter Epost Facebook Delicious Epost

Liknande Inlägg

7 kommentarer

  1. Daniel skriver:

    Du glömde den där infon om hur man kommer åt den sen ;)
    VBox är ju lite dum och kräver en form av "portforwarding" ;)

  2. Hund skriver:

    Jag bloggade om hur jag gjorde för att få det att fungera. :)

  3. Simon Josefsson skriver:

    Jag kan tipsa om kvm+Libvirt också, som är helt fri och stöds officiellt av Ubuntu:

    https://help.ubuntu.com/10.04/serverguide/C/libvirt.html

    RedHat-gänget ligger bakom libvirt, och det känns gjort mer på "rätt" sätt än VirtualBox tycker jag.

    /Simon

  4. Maths skriver:

    Härligt! Du har fått med hela processen. Köra huvudlöst hade jag koll på. Nu vill jag mecka med det andra också, när jag kommer hem från semestern. :-)

  5. Daniel skriver:

    Lägger väl till portforward biten då, krävs ändå för att det ska funka ;)

    Format:
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/DescriptiveName/HostPort" HostPort
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/DescriptiveName/GuestPort" GuestPort
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/DescriptiveName/Protocol" Protocol

    Exempel:
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 22
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
    VBoxManage setextradata GuestName "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP

    Läs mer:
    http://www.sitepoint.com/blogs/2009/10/27/build-your-own-dev-server-with-virtualbox/#

    :)

  6. Tagert skriver:

    Värt att nämna är också om du har Windows Vista eller nyare version av Windows så kan du eventuellt ha Intel/MT 1000 virtual network adapter istället och då blir det följande exempelinställningar för portforwarding för ssh:

    VBoxManage setextradata GuestName "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/HostPort" 22
    VBoxManage setextradata GuestName "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/GuestPort" 22
    VBoxManage setextradata GuestName "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/Protocol" TCP

    Då pcnet är utbytt mot e1000 (Intel PRO/1000 MT Desktop).
    Hade länge problem med detta, men till slut kom jag på det :)

    Testade Windows 2008 Server som Guest OS, och då fungerade endast denna adapter.
    ~~ http://www.virtualbox.org/manual/ch06.html#nichardware

    /Mvh Martin

  7. Hund skriver:

    @Tagert:

    Där ser man. Tack för tips. :)

Lämna ett svar