Custom Versio VM maken

posted on 2013-09-03

Ik heb net een Cloudbox genomen bij Versio, maar ik kan nergens de knop vinden om een ISO te uploaden voor installatie. Nou is dat geen probleem, aangezien er genoeg templates zijn om van te kiezen. Toch toen ik op een forum las dat het nog niet mogelijk was, dacht ik meteen: vast wel!

De eerste poging mislukte:

  • Voeg een extra schijf toe aan een template VM
  • Installeer op die schijf je eigen OS
  • Zet die schijf als primary en delete de template schijf

Jammer genoeg werkte alles behalve de laatste stap: het is niet mogelijk om zelf te bepalen welke schijf van je VM de primary is en welke een extra schijf is. Dus toen ik de primary weghaalde was de VM niet meer goed te krijgen.

De tweede poging wou wel lukken: als je zelf geen primary mag bepalen, dan maar de primary overschrijven met me eigen installatie.

De stappen van de gelukte poging zijn:

  • Maak een VM
  • Reboot de VM met een read-only filesystem
  • Schrijf een lokaal gemaakte VM disk over de primary disk heen

Ik werk op Linux, maar het vast mogelijk om deze paketten op Windows aan de praat te krijgen. In de rest van de post zal ik de stappen beschrijven om Xubuntu op Versio hosting aan de praat te krijgen.

Installeer Xubuntu in je eigen VM

We beginnen met het installeren van Xubuntu in een lokale VM. De schijf van die VM gaan we later, via een Versio template, uploaden. Ik gebruik hieronder kvm (ook wel qemu-system-x86_64 of qemu) met een aantal redenen: een IDE disk in raw formaat maken.

Let op dat de VM niet al te groot moet zijn, we kunnen later best een filesystem resize doen. Maak een disk image in raw formaat (default) en start de installatie van Xubuntu:

kvm-img create vm.raw 5G
kvm vm.raw -m 1024 -cdrom ~/Downloads/xubuntu-13.04-desktop-amd64.iso

Doorloop de installatie. In de tussentijd kunnen we stap twee doen.

Start een Versio template

Log in op je Cloudbox interface en maak een nieuwe VM aan vanuit een template. Omdat we deze alleen gebruiken voor het kopiëren van onze disk image, gebruiken we een van de eerste in de lijst: Arch Linux 2011.08 x64. De hoeveelheid ruimte op de schijf moet zijn wat we later willen hebben en in ieder geval groter dan de VM image die we lokaal maken.

Log met behulp van SSH als root in op de nieuwe VM en pas het bestand /etc/fstab aan, met bijvoorbeeld nano /etc/fstab. Zet in het bestand dat de /dev/vda1 partitie als read-only moet worden gebruikt. De laatste regel is dan:

/dev/vda1 / ext3 defaults,ro 0 1

waar de ,ro in is toegevoegd na defaults.

Start nu de VM opnieuw op met het commando reboot. Na opnieuw opstarten zal het bestandssysteem read-only zijn en kunnen we via SSH de schijf gaan overschrijven.

Upload de image naar de schijf

Sluit na de installatie en de eerste test boot de lokale VM netjes af. De disk image is wat groot, dus het is handig om compressie toe te passen voor we beginnen:

bzip2 --fast --keep vm.raw

Dit maakt het nieuwe bestand vm.raw.bz2, wat ons een hoop upload tijd zal schelen. We uploaden de image direct naar de nieuwe schijf met behulp van ssh. Vanaf de command line doen dat als volgt:

ssh root@ip_van_machine 'bzip2 -cd > /dev/vda' < vm.raw.bz2

Wat het commando doet is op de VM bij Versio het commando bzip2 -cd > /dev/vda draaien. Dit commando leest een bzip2 bestand van de terminal en stop de output in /dev/vda. De terminal vullen we met de inhoud van vm.raw.bz2 met het laatste deel van het commando. Er zal om je wachtwoord worden gevraagd. Na een tijdje uploaden (kijk naar je netwerk monitor aan als je bang bent dat er niets gebeurt) zal de volledige vm image uitgepakt zijn op /dev/vda bij Versio.

Omdat de schijf na dit proces helemaal corrupt lijkt te zijn, zal het niet meer lukken om in te loggen en een reboot commando te geven. Dus gebruik hiervoor de cloudbox control panel.

Als de reboot klaar is, zal via Overview -> Console te zien zijn dat de VM niet wil starten. Dit komt omdat de grub niets weet van de juiste plek van ons systeem. Waar het eerste /dev/sda was in de lokale VM, is het nu /dev/vda op de VM bij Versio. Om dit op te lossen moeten we bij het grub menu drukken op c om een command prompt te krijgen. We zullen nu aan grub zeggen wat onze root partitie is en Xubuntu starten:

root (hd0,0)
kernel /boot/vmlinz-3.8.0-19-generic root=/dev/vda1
boot

Het is mogelijk om bij het intypen van de linux regel, na /boot gebruik te maken van TAB om de regel af te maken. Bij de regel boot zal de machine gaan opstarten en Xubuntu starten.

Aan de grub configuratie moet nog wat werk worden verricht. Bij een korte poging bleek alleen sudo update-grub niet voldoende om bij de volgende boot gewoon door te gaan. Dat probleem moet nog verholpen worden.

Hoe nu verder

Het netwerk instellen met nm-connection-editor. Kijk in je cloudbox panel onder Networking -> IP Addresses om te ontdekken welke IPv4 settings je moet doen.

Xubuntu

De VM staat nu klaar, maar er is nog een hoop te doen: het goed zetten van grub, virtualisatie optimalisaties, de partitie uitbreiden, X11 configuratie, VNC opzetten, SSH installeren ...

Nog genoeg te doen en te leren dus. Veel plezier, en heb je nog tips overweeg dan om commentaar toe te voegen. Veel plezier!

Update: Zoals je boven al hebt kunnen lezen is een Versio VM onhandig. Tijdens mijn testen kwam ik meerdere errors tegen en bleek het doen van een eigen installatie niet iets wat ze leveren. Ik heb dus me account bij Versio opgezegd en ben bij TransIP gaan zitten.