VirtualBox Headless

Hi zusammen,

nach mehreren verschwendeten Tagen Recherche, Trial-and-Error und Doku-Lesen muss ich doch Hilfe suchen :mad:

Ziel ist es, eine VirtualBox (Server für eine Ruby Webapp)auf meinem Server mit FreeBSD 8-RELEASE (headless) zum laufen zu bringen.

Ich habe die Virtuelle Maschine auf meinem Client (Linux) aufgesetzt und getestet.

Mein Plan war die VDI Datei auf den Server zu kopieren und dann eine neue VirtualBox VM anzulegen, welche von diesem Image bootet.

VirtualBox habe ich aus den Ports installiert:
Version 3.1.2_OSEr56127

Die VM habe ich dann auf folgende Weise erzeugt:
Code:
VBoxManage createvm --name VMname --register
VBoxManage modifyvm --nic1 bridged --bridgeadapter1 re0
VBoxManage storagectl VMname --name storagecontroller1 --add sata
VBoxManage storageattach VMname --port 1 --storagectl storagecontroller1 --device 1 --medium /pfad/zur/vdi/datei.vdi --type hdd

Nach einem
Code:
VBoxHeadless -s VMname
wird folgende Fehlermeldung ausgespuckt:
Code:
ERROR: The port and/or count parameter are out of range [30:1]
Details: code NS_ERROR_INVALID_ARG (0x80070057), component Machine, interface IMachine, callee nsISupports
Context: "AttachDevice(Bstr(pszCtl), port, device, DeviceType_HardDisk, uuid)" at line 537 of file VBoxManageStorageController.cpp
Zur SATA Port Option fand ich irgendwie in keiner Doku was Gescheites.

Wo mache ich hier einen Fehler? (klar, vermutlich beim Port - aber welchen)

Für jegliche Hinweise bin ich sehr dankbar
 
Teilerfolg:

Irgendwie funktionierte --port 0 und --device 0
Die VDI Datei konnte ich also zuordnen.

Das Problem ist jedoch scheinbar immernoch nicht gelöst.

Code:
$ VBoxHeadless -s tracks

ergibt zwar
Code:
VirtualBox Headless Interface 3.1.2_OSE
(C) 2008-2009 Sun Microsystems, Inc.
All rights reserved.

aber passieren tut nichts weiter...
 
Hehe, ich hab auch mal eine Headless Virtualbox für eine Ruby webapp aufgesetzt. Die bootete lokal wunderbar aber remote erst nachdem ich den ram auf 512mb aufgeblasen hab. Debuggen kannst du mit ssh -Y und Xvnc.
 
Denkt auch dran, dass man die Diskimages nicht blind kopieren darf! Das VDI-Dateiformat sind keine flachen Raw-Dateien, sie enthalten eine Menge Metadaten und setzen auf erweiterten Funktionen des zugrundeliegenden Dateisystems auf. Zum Beispiel machen sie sehr exzessiv Gebrauch von der Funktionalität zu "Sparse-Files". Kopiert man sie einfach, geht all dies kaputt. Man muss daher die ganze Geschichte sauber exportieren und auf dem Zielhost wieder importieren. Sonst funktioniert es nicht sauber!
 
Also die Vergrösserung des RAM der VM hat mich nicht weiter gebracht.
Wie kann ich verifizieren ob das Teil tatsächlich läuft? Die OSE hat ja keine remote desktop Unterstützung...


Man muss daher die ganze Geschichte sauber exportieren und auf dem Zielhost wieder importieren. Sonst funktioniert es nicht sauber!
Hab mich nicht näher mit dem Format auseinandergesetzt..
Was wäre hier das richtige Vorgehen?
 
VBoxManage import <ovf> [--dry-run|-n] [more options]
VBoxManage export <machines> --output|-o <ovf>
...

Habe die Optionen vornehmlich in der Gui gesehen. Obiger Output erschien mir auf der Konsole als das jeweilige pendant
 
Ich habe es nun mal mit Import/Export der VM versucht.

Das selbe Resultat.

Ich begreife nicht ganz was mir ssh -Y und Xvnc bei einem Headless System (sowohl host als auch guest sind headless) bringen soll, oder mache ich einen Überlegungsfehler?

Was ich mir auch noch vorstellen könnte, wäre dass die VM zwar läuft aber netzwerktechnisch nicht ansprechbar ist - sprich das bridging nicht funktioniert.
Wäre auf NAT umstellen und Portforwarding aktivieren eine sinnvolle Option um zu Testen?
 
Na irgendwo wirst du doch einen Head haben, oder von wo antwortest du hier im Forum? Und von da aus nimmst du z.B. ssh -Y.

Wenn ich mich nicht irre kann ich mittels ssh -Y auf den xserver connecten und die programme auf meinen x-client (wo ich ssh -Y ausführe) forwarden.

Auf den Zielsystemen ist aber kein X-Server installiert. (Sorry, mein Fehler - man kann ja auch headless Systeme mit X-Server betreiben ;-) )
 
Langsam komme ich mir ein wenig blöd vor... :-/

ssh -Y und damit müsste ich auf die virtuelle Maschine connecten? Auf die komme ich mit SSH aber ja auch nicht drauf. (wenn ich per ssh connecten könnte würde mir das auch schon reichen :) )
 
Code:
kiste_mit_Xserver_laufend% ssh -Y foo@headless_host
Password:
headless_host% VirtualBox

Tada, hier sollte jetzt die virtuelle Maschine auf deinem Bildschirm erscheinen.
 
Jetzt ist klar was du gemeint hast ::o

Das Problem ist jetzt dass ich das Paket ohne X11bzw QT-Support gebaut habe und darum kein VirtualBox executable habe.
Und jetzt schlägt der Compile fehl - ärgerlich!
 
Beim Headless kommt nicht mehr, als diese Copyright Meldung und dann laeuft er halt. Es gab auf emulation@ auch patches, dass der integrierte VNC-Server beim Headless mit installiert wird, scheinen aber noch nicht committed zu sein.

Was bei mir prima funktionierte: Image ganz normal unter X11 erstellen und installieren. COM-Port redirect auf Pipe einrichten, Bootloader des Systems auf Serielle Console umstellen. Dann rsync des Image auf den Server (gleicher Pfad). Auch mein .VirtualBox wird synchronisiert.

Code:
 VBoxHeadless -s NAMEOFVM & sleep 5; socat UNIX-CONNECT:console.fifo PTY,link=console.pty &
screen /full/path/to/console.pty

Damit hast du die serielle Console im Screen und kannst genau sehen was er macht. Beenden der VM mittels "pkill VBoxHeadless" oO
 
Also langsam bin ich am verzweifeln :)

Ich steig bei diesen Sockets und Pseudoterminals nicht ganz durch. Kannst du vielleicht ein Beispiel posten wie du es machst?
console.fifo
link=console.pty
und /full/path/to/console.pty
begreife ich irgendwie nicht - ich hab nur /dev/ptmx, muss ich ein pty erzeugen? wie?
 
VirtualBox -> Serial Port -> Enable Port, Mode: Host Pipe, Create Pipe + Path = /tmp/meinevm.fifo

dann starten: VBoxHeadless -s meinevm &
kurz warten, schauen ob der fifo da ist. Dann socat nehmen um daraus nen PTY zu machen: socat UNIX-CONNECT:/tmp/console.fifo PTY,link=/tmp/console.pty

Und screen darauf loslassen: screen /tmp/console.pty

Fertig. Natuerlich nicht /tmp/ verwenden ... ist nur als Beispiel
 
Zurück
Oben