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.

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.

apt-get gennem HTTP proxy

For at få apt-get til at køre bag en HTTP proxy er det ikke nok at lave en export af http_proxy variablen. Der skal laves en apt.conf fil (hvis den ikke allerede eksisterer) i /etc/apt/ biblioteket.

Filen skal have en linie med følgende syntax:

Acquire::http::Proxy "http://proxyadresse:port";

Nu skulle du gerne kunne installere og opdatere dine programmer med apt-get.

xmltv id’er til DR’s xmlservice.

Hvis man har en PVR (Personal Video Recorder) er det rart også at have en liste over hvad de forskellige kanaler sender, det kan bl.a. DR hjælpe med da de har en xmltv service med et stort udvalg af kanaler.

Jeg bruger et system der hedder mythtv, og her kan man køre et program der hedder mythfilldatabase for at få fyldt data i databasen. Mythfilldatabase benytter sig af en såkaldt “grabber” der konfigureres til at hente info fra f.eks. DR, når dataen er hentet skal den indsættes korrekt i forhold til de kanaler man har indkodet i sin PVR. Dette gøres via de såkaldte xmltv ID’er, i mythtv gøres det næmmest via mythweb interfacet.

Hos DR hedder ID’erne noget alá: xxx.dr.dk, herunder er listen fra mit system:

‘+———–+————–+
| name | xmltvid |
+———–+————–+
| TV3 | dk3.dr.dk |
| DR Update | dru.dr.dk |
| DR K | tvk.dr.dk |
| Kanal5 | 999.dr.dk |
| dk4 | dk4.dr.dk |
| DR Ram | tvr.dr.dk |
| DR HD | tvh.dr.dk |
| TV 2 | td2.dr.dk |
| DR2 | dr2.dr.dk |
| DR1 | dr1.dr.dk |
| K5 HD | 999.dr.dk |
| 6rn HD | snt.dr.dk |
| Kanal4 | tvd.dr.dk |
| 6�eren | snt.dr.dk |
| TV3+HD | d3plus.dr.dk |
| Zulu | t2z.dr.dk |
| 2News | tws.dr.dk |
| Charli | 041.dr.dk |
| TV3+ | d3plus.dr.dk |
| Canal9 | ca9.dr.dk |
| Nickel | nis.dr.dk |
| 3Puls | tpl.dr.dk |
| DisnXD | 058.dr.dk |
| 2Sport | t2s.dr.dk |
| 2Film | t2f.dr.dk |
| FilmHD | t2f.dr.dk |
| 2Sp HD | t2s.dr.dk |
| NickHD | nis.dr.dk |
+———–+————–+

Listen har jeg hentet fra min mythconverg database med denne kommando:

select name,xmltvid from channel where xmltvid !='' order by name;

Ovenstående er de kanaler jeg har konfigureret (dem jeg mener er interessante fra yousees store pakke) der findes flere, men dem har jeg ikke.

Mythmote, en mythtv remote control til android.

Jeg har fået min kones aflagte HTC Tattoo telefon. Den kører android 1.6, og der er derfor gode muligheder for at lave en masse sjove ting med den. En af de ting jeg har prøvet er at installere en applikation kaldet “mythmote”, det er en applikation til at fjernstyre en mythtv frontend via telefonen og det er faktisk ret nemt at komme igang med.

Jeg har før set alle de smarte applikationer man kan få til diverse smartphones der kan bruges til at styre diverse ting med, og derfor tænkte jeg at der måtte da også være en til at styre mythtv med sin android telefon – og det var der sørme også 🙂

En hurtig søgning på google ledte mig frem til denne side: code.google.com/p/mythmote/ hvor man kan downloade den det føromtalte “mythmote”.

Den nemmeste måde at installere applikationer på er gennem androids “market” og mythmote burde også være der, men jeg kunne altså ikke finde den 🙁 måske pga. at jeg bor i DK.

Efter at have nørklet en del med at få installeret android SDK på min PC, for på den måde at kunne installere .apk applikationer på telefonen fandt jeg ud af at den nemmeste måde at installere på, var at gå til hjemmesiden via browseren i telefonen og installere direkte derfra.

Nu var mythmote installeret på min telefon, og jeg var klar til næste step. Nemlig, aktivering af fjernstyring i mythtv.

Det er klaret på ca. 2 minutter. Under “advanced” -> “Setup” -> “General” er det menu nummer 7 eller 8 og der sætter man et flueben i feltet “enable remote control”, lader den blive ved std. port nummer 6546 og trykker “next” et par gange samt “finish” og så er man klar.

Du kan teste at fjernstyring er aktiveret ved at telnette til maskinen på port 6546:

telnet ‘mythtv-frontend-adresse’ 6546

Hvis der er forbindelse skulle det gerne se sådan her ud:

telkasper@T43:~$ telnet office 6546
Trying 10.0.0.14…
Connected to office.home.local.
Escape character is ‘^]’.
MythFrontend Network Control
Type ‘help’ for usage information
———————————
#

Man kan nu sende kommandoer til boksen ved at skrive f.eks. “key left” nu vil menuen skifte til venstre, det er den måde mythmote kommunikerer med maskinen.

Programmet giver en del muligheder for at skifte rundt, og navigere i de forskellige menuer. Kommandoerne reagerer hurtigt, men jeg har dog oplevet at for mange kommandoer afsendt hurtigt efter hinanden (som f.eks. at skrue op eller ned for lyden) kan give udslag i hakkende afspilning.

Min telefon er crashet to gange ved brug af mythmote, men den virker ikke decideret ustabil. Men som tidligere nævt kører den kun android 1.6 (uden mulighed for at opgradere) så det kan også være det der påvirker.

Lidt mere om SSH tunneler

Jeg har tidligere skrevet lidt om hvoran man kan bruge SSH tunnel til at lave portforwarding, det kan være en løsning hvis man f.eks. ikke vil åbne sin webserver op mod internettet.

Netop denne situation stod jeg i da min bror havde brug for et regnskabsprogram og jeg tilbød ham at installere en webserver med det danske gratis regnskabsprogram Saldi.

Jeg kender ikke til sikkerheden i webapplikationen, og jeg er ikke sikker på hvor tit jeg lige får opdateret denne server (det skulle helst være en “install and forget”) Derfor ville jeg ikke åbne op for det store internet.

Jeg valgte istedet at installere tunnelier fra bitvise på min brors PC, og herefter konfigurere den til at oprette en tunnel og starte en browser op, der peger på den side han skal ind på.

Det er der jo i forhold til min tidligere post ikke noget nyt i, det nye kommer her:

For at sikre mig at min bror ikke laver rav i den fra den bash shell han som default får når jeg opretter ham på mit system, ændrede jeg hans shell fra /bin/bash til /bin/false i /etc/passwd filen. Nu har han ikke mulighed for at logge ind med en shell, men han kan stadig forwarde porte.

Husk derfor også, at /bin/false skal bruges med omtanke, da den altså giver visse muligheder udover bare at blokere for login. Brug istedet /bin/nologin hvis du vil spærre helt af for en brugers mulighed for at logge ind/bruge portforwarding.

Læs evt. mere om det her: http://www.semicomplete.com/articles/ssh-security/

Mvh.

do-release-upgrade på ubuntu 7.10.

Jeg havde et par ældre ubuntu 7.10 servere, der nu er EOL (End Of Life). Det opdager man ved at den ikke kan finde sit repository når man forsøger at lave en apt-get update, eller det var ihvertfald den måde jeg opdagede det på.

Heldigvis kan man (selvom distributionen er udløbet) få lov at køre en “do-release-upgrade”. Begge mine maskiner hvade dette program installeret i forvejen, jeg kan forestille mig at man ender ud i et godt gammeldags “dependency hell” hvis man skal til at installere manuelt, man kan jo ikke nå sit repository!

Nå, men den ene maskine kørte problemfrit igennem og alt var fryd og gammen. den opgraderer til 8.04LTS som først udløber i 2013 hvis man har server versionen  https://wiki.ubuntu.com/Releases så har man da lidt tid at løbe på 🙂

Men det var jo kun den ene, den anden var lidt mere genstridig. Når man kører kommandoen bliver man efter et stykke tid spurgt om man vil fortsætte, eller se detaljer for hvilke pakker der opgraderes, udskiftes og slettes, man skal trykke [yN] for yes eller no eller [d] for detaljer.

Jeg trykker selvfølgelig y da jeg vil fortsætte, men der sker intet, jeg trykker så “n” og den afbryder, jeg starter forfra og det samme gentager sig? Jeg prøver at trykke “d” den viser detaljerne? Hvad sker der, jeg banker hårdt i alle taster og får ramt “j”. Ahr den kører med dansk sprog og der skal trykkes “j” for ja selvom den skriver y. Nu kører den det hele igennem som det skal og begge mine systemer er opdaterede til 8.04 LTS.