Eksportere VM’er fra VMware workstation til ESXi

En god ting ved virtualisering er at alle kan “lege” med deres eget setup lokalt på deres egen maskine, når alt så er som det skal være, vil man måske gerne have flyttet sin maskine over i et rigtigt produktionsmiljø, men hvordan gør man lige det?

VM’en skal i Workstation eksporteres som en OVF fil, det gøres sådan her:

File -> Export to OVF

Selve processen i at eksporere kan tage et stykke tid alt afhængig af størelsen på diskene.

Når VM’en er eksporeret skal den importeres i ESXi, det gøres sådan her:

File -> Deploy OVF template -> Deploy from a file or URL

Find din OVF fil, start processen.

Det var det 🙂

Update!

Hvis VMX Hardware versionen er nyere på din VMware workstation end på din ESXi installation, kan du ikke umiddelbart importere din VM. Dette kan fixes ved at rette i ovf filen der nogenlunde svarer til vmx filen i en normal installation. Åben ovf filen og led efter en linie ala denne:

<vssd:VirtualSystemType>vmx-09</vssd:VirtualSystemType>

Her skifter du nummeret ud med det der passer til din hardware version, f.eks.:

<vssd:VirtualSystemType>vmx-07</vssd:VirtualSystemType>

Når dette er gjort skal vi have lavet en ny checksum på ovf filen. Checksummen findes i mf filen og skal stemme overens med virkeligheden, ellers kan man ikke importere. Du kan f.eks. generere en ny checksum med fciv ved at køre denne kommando:

fciv.exe -sha1 vmfilename.ovf

Den nye checksum nøgle erstattes med den eksisterende i .mf filen, nu er du klar til at importere din VM.

Langsom opstart af citrix sessioner på linux.

Jeg har tit undret mig over at mine Citrix xendesktop sessioner der startes op via et webinterfcae på en citrix access gateway, starter langsommere op på linux maskiner end på windows, i dag fandt jeg så en løsning (og en forklaring).

Vi starter med løsningen:

sudo ln -sf /dev/urandom /dev/random

Forklaringen må i få en anden dag 🙂

Og den kommer nu….

Både /dev/random og /dev/urandom bruges til at lave tilfældig data på et linux system. Begge filer opbygges ved at opsamle tilfældige data på systemet f.eks. når man arbejder med et program der placerer data i hukommelsen. Forskellen er at /dev/random stopper med at producere data når der ikke længere produceres data på maskinen, det er derfor man kan starte Citrix sessionen hurtigere op ved at køre musen rundt på skærmen, eller ved at åbne andre programmer mens man venter. /dev/urandom stopper derimod ikke med at producere tilfældig data, den genbruger den data der allerede er opsamlet, og bygger videre med eksisterende data.

Derfor er det også anbefalingen at bruge /dev/random når den tilfældige data skal bruges til at lave kryptering, da der teoretisk er en mulighed for at forudsige den tilfældige data.

Citrix gør altså hvad de skal, men det tager bare så lang tid 🙁

Hvordan gøres dette på Windows? Her starter sessionen også med det samme, ligesom hvis man bruger /dev/urandom på linux.

Fejl i Citrix Receiver for Linux amd64 (x86_64)

Den for tiden nyeste Citrix Receiver for Linux der er frigivet d. 23 April 2012 kan downloades i en 64bit deb pakke fra Citrix’ download område. Men der er et problem med pakken der gør at man får en irriterende fejl under installationen.

Jeg have hentet pakken og forsøgte at installere den på min Ubuntu 12.10 med kommandoen:

sudo dpkg -i icaclient_12.1.0_amd64.deb

Ovenstående resulterer i denne fejl:

E: Sub-process /usr/bin/dpkg returned an error code (1)

Fejlen skyldes at der under installationen laves at arkitektur check der fejler og derfor ikke kan finde den korrekte arkitektur for systemet. Dette rettes ved at finde denne fil:

/var/lib/dpkg/info/icaclient.postinst

Her skal følgende rettes:

echo $Arch|grep “i[0-9]86” >/dev/null
if [ $? -ne 0 ]; then
NotIntel=1
fi

Til:

echo $Arch|grep -E “i[0-9]86|x86_64” >/dev/null
if [ $? -ne 0 ]; then
NotIntel=1
fi

Nu finder scriptet arkitekturen og kører igennem uden fejl. Koden der skal rettes begynder i linie 2648.

Citrix Receiver for Linux, SSL error 61

Citrix leverer af en eller anden grund ikke SSL certifikater fra de dominerende udbydere med i deres installation af receiver klienten. Det betyder at man får denne fejl når man forsøger at logge på f.eks. en VDI maskine:

Citrix receiver error messageLøsningen er at kopiere det nødvendige certifikat fra udbyderen man bruger ind i cacerts mappen der ligger under: /opt/Citrix/ICAClient/keystore/

Den hurtige løsning er at tage de certifikater der følger med firefox installationen (hvis man har den installeret) og kopiere dem ind:

sudo cp /usr/share/ca-certificates/mozilla/*.crt /opt/Citrix/ICAClient/keystore/cacerts/

Ovenstående kommando løser problemet i de tilfælde hvor man bruger en leverandør som er med i de certifikater firefox installerer. (De fleste jeg har prøvet)

Ifconfig, send IP adressen automatisk

Forleden skulle vi have lavet ændringer i vores IP adresser i et lokale i kælderen på mit job hvor jeg har en lille test maskine stående. Maskinen kører DHCP og da jeg er doven og gerne ville slippe for at gå ned og finde den nye adresse efter de havde lavet ændringerne, biksede jeg dette sammen og lavede et CRON job der kørte på et tidspunkt hvor jeg viste de ville være færdige med ændringerne.

ifconfig | grep -v 127. | perl -nE ‘/dr:([^ ]+)/ && say$1’ | mail -s “Min nye adresse:” { min@mail_adresse.dk}

Nu fik jeg en mail med den nye IP adresse og slap altså for at gå en tur i kælderen 🙂

I eksemplet grepper jeg med -v som er IKKE, jeg vil altså ikke have interfacet der starter med 127. Duskal måske tilpasse dette til dit eget setup.

Nu står det her altså til en anden god gang.

/Kasper

Citrix receiver til Linux med flere skærme.

Der sker desværre ikke så meget i udviklingen af citrix klienten til Linux kaldet “Citrix Receiver for Linux”. Windows og Mac versionerne er en del foran når det kommer til brugervenlighed på klienten. Med brugervenlighed mener jeg at man i de andre klienter super nemt kan konfigurere brugen af USB, HDX og brugen af flere skærme, det skal selvfølgelig være super svært og nørdet i Linux klienten. Jeg vil herunder komme med et eksempel fra det virkelige liv (mit) for at understrege forskellighederne.

Hvis man på en windows maskine vil have sin citrix session til at strække sig over flere skærme gør man følgende:

  1. Start en session op og sørg for at den kører i “window” mode. (altså ikke maximeret)
  2. Træk vinduet ind midt på de to skærme, så halvdelen af vinduet med citrix sessionen er på hver skærm.
  3. Maximer vinduet.

Nu kører du i en session der strækker sig over to skærme.

På en linux klient skal man gøre følgende:

  1. Brug adskellige timer, måske dage på at søge i diverse forummer og i dokumentation fra citrix.
  2. Find ud af at wfica programmet i /usr/lib/ICAClient/ mappen understøtter en række attributter.
  3. Prøv at køre programmet med -span attributten og modtag følgende fejlmeddelelse:
    kasper@laptop:/usr/lib/ICAClient$ ./wfica -span h
    Error: 12 (E_MISSING_INI_ENTRY)
    Please refer to the documentation.
    Error in configuration file.
    Section “ApplicationServers” must contain an entry “”.
    kasper@laptop:/usr/lib/ICAClient$ ./wfica -span o
    Error: 12 (E_MISSING_INI_ENTRY)
    Please refer to the documentation.
    Error in configuration file.
    Section “ApplicationServers” must contain an entry “”.
    kasper@laptop:/usr/lib/ICAClient$ ./wfica -span a
    Error: 12 (E_MISSING_INI_ENTRY)
    Please refer to the documentation.
    Error in configuration file.
    Section “ApplicationServers” must contain an entry “”.
    kasper@laptop:/usr/lib/ICAClient$
  4. Find på ubeskrivelig vis frem til at der skal stå “-span 1,2” og forsøg nu at finde ud af hvordan man sørger for at denne attribut bliver kørt når man vil starte en virtuel desktop fra citrix webinterfacet.
  5. Find ud af at attributten skal sættes ind som en environment variabel.

Kommandoen “wfica -span h” burde returnere en liste med de skærme man kan angive som aktive, og som man gerne vil have strukket sessionen ud over, jeg aner ikke hvorfor jeg får ovenstående fejl.

Altså: for at citrix sessionen skal strække sig over 2 eller flere skærme skal man definere environment variablen WFICA_OPTS. Det gøres sådan her:

export WFICA_OPTS=”-span 1,2″

Dette kan f.eks. sættes ind i /$HOME$/.bash_profile eller en anden fil der køres når maskinen starter op.

Nu skulle det gerne virke 🙂

Jeg siger ikke at alle er ligeså tungnemme som mig, og skal bruge både halve og hele dage på at finde ud af ovenstående, men min påstand er altså at det er langt nemmere på windows platformen. Og det irriterer mig grænseløst når man tænker på at hele virtualiserings cirkusset (for Vmware og Citrix’ vedkommende) er bygget på Linux.

Citrix Xendesktop, vpnc, shortcuts osv.

Endelig fandt jeg ud af hvordan man forbinder til en cisco VPN løsning med SMS challenge fra en linux maskine, man skal bare bruge kommando linie klienten vpnc 🙂

Jeg har forsøgt alverdens ting med gnomes network-manager som ellers er en super nem løsning til cisco VPN, bare ikke hvis der skal indtastes en ekstra kode i et to faktor setup, det understøtter den simpelthen ikke (selvom den bruger vpnc i baggrunden)

Men nu har jeg altså fået adgang til mit netværk, og kan få adgang til vores virtuelle desktop miljø, og så støder man ind i næste problem 🙁

Vi kører med citrix xendesktop og det kræver som bekendt en citrix ICA klient at køre citrix sessioner. Efter endnu et (gud-ved-hvor-mange der snart har været) navneskift hedder klienten nu “Citrix Receiver”. Deni findes i både tar, deb og rpm formater til linux, men ikke i en AMD64 udgave, så der skal laves lidt fiflerier for at få det til at virke, her er min fremgangsmåde på ubuntu 11.04.

Først skal der installeres ia32-libs:

sudo apt-get install ia32-libs

Så skal der installeres libmotif4 i en 32 bit version, den kan f.eks. hentes her:

http://se.archive.ubuntu.com/ubuntu/pool/multiverse/o/openmotif/libmotif4_2.3.3-5ubuntu1_i386.deb

Pak den ud med:

dpkg -x libmotif4_2.3.3-5ubuntu1_i386.deb /home/username/Downloads/openmotif4_i386

Kopier alle filer fra /usr/lib/ i det du lige har pakket ud til /usr/lib32/

cp -r /home/username/Dowloads/openmotif4_i386/usr/lib/* /usr/lib32/

Nu burde du kunne køre wfcmgr i /usr/lib/ICAclient mappen og citrix receiveren starter op, tjek evt. om den mangler nogle dependencies med

ldd /usr/lib/ICAclient/wfcmgr

Hvis alt er ok skulle vi nu være kørende med en citrix klient - puha 🙂

Så opstår næste problem!

I Citrix klienten til windows har man ved fuld skærm en smart "drop down" menu i toppen af skærmen, her kan med indstille en del ting mht. HDX, session muligheder, skærmstørrelse osv. Den findes ikke i linux klienten 🙁

Nu er det sådan at min virtuelle maskine kører i fuld skærm, men har ikke den føromtalte menu. Hvordan kan jeg så disconnecte min session? Eller i det hele taget "hoppe ud" til min lokale maskine?

Det kan man ikke, mm. man læser citrix receiver dokumentationen og finder ud af at man kan sende kommandoer til den lokale maskine ved at trykke "CTRL-F2" og derefter skyde den kommando af man vil, det kunne f.eks. være "CTRL-ALT -> (pil til højre)" så man hopper over på en anden desktop. Her kan man så starte Citrix Receiver klienten og disconnecte ICA sessionen.

En anden ting jeg lige kan nævne der ikke virker "out of the box" når man kører 64 bit er registreringen af ICA pluginet i firefox. Derfor vil man når man forsøger at launche en virtuel desktop fra det fine webinterface blive spurgt om hvilken applikation man vil bruge. Her skal man vælge /usr/lib/ICAclient/wfica.sh

Ja, det er ikke altid nemt at være linux bruger.

Headless Virtualbox – starte VM’er automagisk :)

Hvis man har en headless (intet grafisk interface) virtualbox server er der efter hvad jeg ved ikke nogen speciel smart indbygget måde at få systemet til selv at starte VM’erne efter hosten har været genstartet.

Jeg har i lang tid bare levet med at starte de virtueller maskiner manuelt efter genstart af hosten, men jeg har også glemt det et par gange, og det er irriterende at opdage at maskinen nu ikke har kørt i f.eks. 10 dage fordi der har været en genstart.

Derfor besluttede jeg mig for at finde en løsning, og jeg kom frem til nedenstående.

I mit crontab (for min virtualbox bruger) har jeg indsat følgende:

@reboot /home/vmuser/startvm.sh

Det gør at scriptet startvm.sh bliver kørt hver gang computeren starter op.

Scriptet startvm.sh ser ud som følger:


#!/bin/bash

echo `VBoxManage list vms | awk {‘ print $1 ‘} | grep \”\*\” | sed s/\”//g` > /home/vmuser/vmlist

sleep 2

for VM in `cat /home/vmuser/vmlist`; do
VBoxManage startvm $VM –type headless
sleep 30
done

exit 0

Den laver altså en fil hvor den lister navnene på mine virtuelle maskiner, og starter dem så en ad gangen med 30 sekunders mellemrum.

Med ovenstående script og opsætning skulle dine VM’er gerne starte op automatisk når din maskine bliver genstartet.

UPDATE

Jeg har ændret oenstående script så det bruger et array istedet for en fil til at køre navnene på mine VM’er igennem scriptet. Det ser nu således ud:

#!/bin/bash

sleep 30

ARRAY=(`VBoxManage list vms | awk {‘ print $1 ‘} | grep \”\*\” | sed s/\”//g`)

sleep 2

for i in ${ARRAY[*]}; do
VBoxManage startvm $i –type headless
sleep 30
done
exit 0

Jeg bruger sleep 30 i starten for lige at lade den starte alle services inden den forsøger at starte VM’erne, og jeg bruger sleep 30 i for løkken for at give den 30 sekunder mellem hver VM den starter op.

Ovenstående er testet og virker i mit setup.

Forlænge windows prøve periode.

Ofte kan man have brug for at teste et eller andet i et givent OS, det kune f.eks. være Windows 7 embedded standard (det er ihvertfald det jeg skal teste)

Som standard er der en 30 dages prøvepriode, når den er udløbet begynder computeren bl.a. selv at reboote hver anden time for ligesom at gøre opmærksom på at prøve perioden er udløbet.

Den periode kunne være rar at forlænge, og det kan man også med følgende fremgangsmåde:

Skiv “cmd” i search boksen i start menuen. Nu kan man højreklikke på programmet cmd.exe øverst i listen og vælge “kør som administrator”

Når kommando prompten er fremme skriver man følgende:

slmgr -rearm

Du vil nu blive bedt om at genstarte computeren, og der skulle nu gerne være 30 nye dage til at teste i.

Ovenstående procedure kan gennemføres 3 gange og man kan altså i alt få 120 dage til at teste i

HTTP proxy fra din shell.

Hvordan får man internet forbindelse gennem en shell når man befinder sig bag en HTTP proxy?

Den hurtige måde er et lave en “export” af http_proxy variablen. Det ser nogenlunde sådan her ud:

export http_proxy="http://proxyadresse:port"

Nu kan man kontrollere om det virker ved at skrive export i shellen, det skulle gerne give en liste med alle variabler der er sat, og nederst skulle der være en der ser sådan her ud:

declare -x http_proxy="http://proxyadresse:port"

Man kan selvfølgelig også tjekke ved at prøve at gå på nettet, f.eks med wget.

Ovenstående virker kun i den session man allerede er logget ind i, og kun for den bruger man er logget ind som.

En anden metode er at sætte export kommandoen ind i sin ~/.bashrc fil. Den vil nu blive kørt hver gang man logger ind, og altså være permanent for den bruger man laver den på.

Den kan laves permanent for alle brugere ved at ligge export kommandoen ind i /etc/bash.bashrc filen.