Sent from Hauptstadt!

ein Blog für den geneigten Leser

Ubuntu LAMP Server unter VirtualBox aufsetzen

Tags:

Kategorie Rest | 12 Kommentare »

Das Gute an Blogs ist, dass man da ja schreiben kann über was man will. Die Folge kann natürlich sein, dass man seine Leser verschreckt. Na ich hoffe mal, dass das jetzt nicht passiert und der Eintrag erfolgreich ignoriert wird :-) Worum wird es gehen? Ich wollte einen Webserver auf Linux Basis in einer virtuellen Maschine aufsetzen. Hier meine Notizen, damit ich beim nächsten Versuch nicht wieder so ewig suchen muss…

Als virtuelle Umgebung habe ich VMWare, VirtualBox und VirtualPC ausprobiert. VMWare ist ein Monster, dass auch extrem teuer ist. Es ist also gleich wieder rausgefallen. VirtualPC war mein erster Versuch. Allerdings hat VirtualPC Probleme mit Ubuntu. So kann man die Ubuntu CD nicht ohne extra Bootparameter booten. Auch ist VirtualPC spürbar langsamer als VirtualBox. Letztendlich fiel meine Wahl also auf das OpenSource Projekt VirtualBox, das von SUN unterstützt/gesponsert wird.

Die Installation von Ubuntu (Server Ausgabe, Version 8.04 LTS) in VirtualBox ist fast einfach. Man erstellt zunächst eine neue Maschine in Virtualbox. Ich habe eine statische Festplatte mit 1,6GB erstellt und der virtuellen Maschine mit 768MB RAM (512MB reichen sicher auch) zugeordnet. Als Typ der Netzwerkkarte „NAT“ auswählen (ist die Standardeinstellung). Als Name der virtuellen Maschine einen kurzen String ohne Leerzeichen verwenden, da wir später diesen String noch mehrmals eintippen müssen. Anschließend habe ich mir ein ISO Image von Ubuntu Server runtergeladen und als CDROM in die virtuelle Maschine eingebunden. Das geht beim VMWare Player schon mal nicht. Da kann man nur echte CDs einbinden und muss daher das Image vorher brennen oder wiederum ein virtuelles ISO-CD-ROM-Laufwerk-Treiber-Dingsda installieren.

Nachdem man die Ubuntu CD eingebunden hat, kann man die virtuelle Maschine starten. Es erscheint der Ubuntu Startbildschirm und man wählt den ersten Eintrag (Installation starten oder so). Anschließend muss wählt man seine Sprache und seine Zeitzone. Während der Installation gibt es einen kleinen Assistenten zur automatischen Ermittlung des Tastaturlayouts. Meine deutsche Tastenbelegung wurde automatisch erkannt. Beim Partitionierungsschritt wählt man dann die einzig existierende Festplatte und lässt diese vollständig und automatisch einrichten. Es werden 2 Partitionen angelegt: eine für die Auslagerungsdatei (Swap) und die andere für das eigentliche System. Da die Installations-CD eigentlich auf der Festplatte liegt, geht die Installation rasend schnell. Man muss bei der Paketauswahl die Pakete

  • LAMP Server
  • OpenSSH Server

auswählen. Ganz am Ende der Installation gibt es eine Erfolgsmeldung. Wenn man diese bestätigt, dann wird das System neu gestartet. Achtung: An dieser Stelle nicht neustarten, sonst kann man das frisch installierte System nicht mehr booten!!! Das Booten schlägt fehl, da die installierte Kernelversion nicht lauffähig auf VirtualBox ist. Das ist natürlich ein Ubuntu Bug, denn schließlich sollte der Installer eine Kernelversion installieren, die dann auch läuft. Da er aber dies nicht tut, müssen wir manuell einen passenden Kernel installieren. Deshalb bei der Erfolgsnachricht nicht neu starten, sondern den anderen Eintrag auswählen. Man gelangt dann in eine Auswahlliste mit allen bisher durchgeführten Installationsschritten. Wenn man etwas nach unten scrollt, dann findet man einen Eintrag um eine Shell (Eingabeaufforderung) zu starten. Genau das wollen wir, denn über die Shell können wir den richtigen Kernel installieren.

Auf der Shell landen wir natürlich erst mal im System, dass von der CD gebootet wurde. Dies ist nicht das System, was wir installiert haben. Das installierte System befindet sich im Verzeichnis /target. Deshalb wechseln wir zunächst in dieses Verzeichnis mit dem Befehl:

  • cd /target

Jetzt müssen wir dieses Verzeichnis zum aktuellen Wurzelverzeichnis des System machen. Dies gelingt uns über den chroot Befehl:

  • chroot .

Achtung, nicht den Punkt vergessen. Gut, jetzt haben wir das System halbwegs so vorliegen, wie wir es später booten wollen. Zunächst sollten wir alle Pakete auf den aktuellsten Stand bringen. Das funktioniert natürlich nur, wenn wir auch eine Internetverbindung haben. Man kann dies z.B. durch einen ping auf einen beliebigen Server testen. Wenn die Internetverbindung nicht funktioniert, dann wird diese Anleitung an dieser Stelle nicht weiterhelfen :-) Gut, wir wollten also alle installierten Pakete aktualisieren. Zunächst wechseln wir in eine Root Shell, damit wir nicht vor jedem Befehl sudo schreiben müssen. Dies geht mit:

  • sudo -s

Wir müssen dabei unser Kennwort eingeben, dass wir während der Installation festgelegt haben. Jetzt alle installierten Pakete aktualisieren:

  • apt-get update
  • apt-get upgrade

Dies kann durchaus etwas dauern, denn es werden einige Pakete aus dem Netz runtergeladen. Wenn das alles soweit geklappt hat, dann kann man jetzt das richtige Kernel Image runterladen und installieren:

  • apt-get install linux-generic

Dies wird wiederum seine Zeit dauern. Am Ende wird der Bootmanager grub aktualisiert. Vorsichtshalber kann man diese Aktualisierung dann nochmal manuell wiederholen mit dem Befehl:

  • update-grub

So, jetzt sollten wir also den linux-generic Kernel installiert haben. Es wird Zeit unsere Maschine neu zu starten. Für Vorsichtige kann es sinnvoll sein, an dieser Stelle den Zustand der virtuellen Maschine zu speichern, damit man evt. nochmal an diese Stelle zurückkehren kann, falls man doch was vergessen hat. Das ist einfacher als später mit einer Live CD wieder zu booten und das System zu reparieren. Um das System neu zu starten, müssen wir zunächst die Root Shell verlassen, dann die chroot Umgebung verlassen und dann die normale Shell schließen. Dies gelingt uns 3mal mit dem Befehl:

  • exit
  • exit
  • exit :-)

Am Ende sollten wir wieder in dem Installationsassistenten von Ubuntu sein. In diesem suchen wir uns den Eintrag zum erfolgreichen neustarten des Systems. Wenn das System neu gestartet wurde, halten wir die virtuelle Maschine an und entfernen die CD. Anschließend setzen wir die virtuelle Maschine zurück und starten neu. Beim Booten haben wir 3 Sekunden Zeit um Escape (ESC) zu drücken, ansonsten startet Grub das Standardimage. Also rechtzeitig Escape drücken und dann das Kernel Image auswählen, dass auf „-generic“ endet (aber nicht auf „-generic recovery mode“). Wenn alles gut geht, können wir uns nach kurzer Zeit in unser frisch installiertes System einloggen.

Als erste Amtshandlung sollten wir das alte defekte Kernel Image löschen. Dazu müssen wir zunächst wissen, wie dieses heisst. Wer das aus dem Kopf weiß, braucht den nächsten Schritt nicht machen. Zunächst wieder eine Root Shell öffnen und dann im /boot Verzeichnis nachschauen, welche Images es da gibt:

  • sudo -s
  • cd /boot
  • ls

Dort wird es dann eine Datei geben, die etwa folgenden Namen hat:

  • vmlinuz-2.6.24-19-server

Wie gesagt, die Versionsnummer kann sich leicht ändern, wichtig ist das „-server“. Wir merken uns die Versionsnummer und stoßen das Entfernen dieses Kernel Image jetzt an:

  • apt-get remove linux-image-2.6.24-29-server

Klar, die Versionsnummer richtig ersetzen! Es werden noch weitere Pakete wie linux-server und die Module entfernt. Einfach bestätigen und abwarten. Merkwürdigerweise führt dies bei meinen Versuchen immer erst mal dazu, dass Ubuntu die Pakete neu runterlädt und installiert. Der Grund scheint zu sein, dass es ein neueres Paket gibt, als das, was installiert wurde. Deshalb danach wiederum die aktuell installierte Versionsnummer heraussuchen und die Deinstallation mit der neuen Versionsnummer nochmal anstoßen. Dann ist das Paket auch wirklich weg und wir können vorsichtshalber nochmal die Konfiguration von Grub aktualisieren lassen:

  • update-grub

So, jetzt kümmern wir uns langsam mal um unseren LAMP Server. Zunächst wollen wir wissen, ob der überhaupt richtig läuft. Ich hab dazu kurzerhand den Textbrowser Lynx installiert. Das geht so:

  • cd
  • apt-get install lynx

Anschließend können wir mal die Startseite vom Apache aufrufen mit:

  • lynx localhost

Wenn alles klappt, dann erscheint eine ziemlich leere Seite, die einzig die Zeichenkette „It works!“ enthält. Wenn wir das sehen, dann hat es in der Tat geklappt. Lynx beendet man übrigens, indem man „q“ drückt. Gut, soweit also alles fein.

Jetzt ist noch das Problem, dass man den Webserver nicht von außen, also von außerhalb der virtuellen Maschine aus erreichen kann. Dafür gibt es prinzipiell mehrere Möglichkeiten. Ich habe mich nach sehr viel Rumprobieren für ein Portforwarding entschieden. Wenn wir bei der Erstellung der virtuellen Maschine nichts geändert haben, dann ist der Typ der virtuellen Netzwerkkarte auf „NAT“ gestellt. Ziel ist es nun, Anfragen an den Host auf Port 80 an die virtuelle Maschine auf Port 80 weiter zu leiten. Dazu müssen wir die virtuelle Maschine zunächst runterfahren:

  • shutdown -h now

Wurde die virtuelle Maschine beendet muss man das Portforwarding installieren. Dies geht nicht über eine grafische Oberfläche, sondern jetzt muss man auf dem Hostsystem auch die Kommandozeile benutzen. Das benötigte Programm namens VBoxManage liegt im Installationsverzeichnis von VirtualBox. Für dieses Verzeichnis mal eine Kommandozeile öffnen. Nun brauchen wir noch exakt 3 Befehle:

  • VBoxManage setextradata „NameDerVM“ „VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpguest/Protocol“ TCP
  • VBoxManage setextradata „NameDerVM“ „VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpguest/GuestPort“ 80
  • VBoxManage setextradata „NameDerVM“ „VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpguest/HostPort“80

Was passiert hier? Mit der Anweisung „setextradata“ kann man Eigenschaften der virtuellen Maschine „NameDerVM“ setzen. Man muss „NameDerVM“ natürlich durch den Bezeichner der Ubuntu VM ersetzen. Der Befehl „setextradata“ ist eine Zuweisung. Der Teil „VBoxInternal/Devices…“ erhält den Wert, der ganz am Ende der Eingabezeile steht. Wir setzen das Protocol auf TCP, den aufzurufenden Port auf dem Gastsystem (GuestPort) auf 80 (da horcht der Apache) und den Port auf dem Hostsystem (HostPort) ebenfalls auf 80. Übrigens, der Teilstring „httpguest“ ist frei wählbar, muss aber in allen 3 Fällen identisch sein. Nach dem obigen Schema könnte man noch weitere Portforwardings definieren, etwas um auch ein ssh Login zu ermöglichen. Für dieses Beispiel hier soll es aber reichen.

Nun müssen wir noch testen, ob das alles funktioniert hat. Dazu einfach die VM neu starten. Das können wir entweder über die grafische Oberfläche von VirtualBox tun oder direkt über das „VBoxManage“ Programm:

  • VBoxManage startvm „NameDerVM“

Nachdem die VM gestartet wurde, starten wir einen Browser auf dem Host (nicht in der VM) und rufen folgende Seite auf:

  • http://localhost/

Wenn alles geklappt hat, dann wird nach kurzer Zeit die „It works!“ Seite angezeigt. Der Webserver läuft natürlich in der VM, denn die Browseranfrage wurde durch das Portforwarding an die VM weitergeleitet. Spätestens jetzt sollte man sich nochmal eine Sicherung seiner VM anlegen, damit man immer wieder eine Ausgangsversion hat, falls man bei der weiteren Installation Fehler macht. Übrigens, nach der Installation sind noch knapp 700 MB frei auf der virtuellen Festplatte, aber man kann sicher noch einige unnütze Sachen deinstallieren.

12 Kommentare to “Ubuntu LAMP Server unter VirtualBox aufsetzen”

  1. bongo sagt:

    man kann sich den austausch des kernels sparen, wenn man in den allgemeinen einstellungen für die maschine ein häkchen an die option pae/nx setzt. müsste ab der virtualbox version 1.6 funktionieren.

  2. Sebastian sagt:

    Danke bongo für den Hinweis. Ich werde es mal bei Gelegenheit ausprobieren.

  3. Peter Rodyz sagt:

    JeOS-Installation ist wie beschrieben nach Reboot gescheitert. Bei mir läßt sich pae/nx nicht aktivieren, ist ausgegraut (VirtualBox 2.0.4). Bug oder fehlerhaftes Upgrade von 2.0.2 ? Tips willkommen

  4. Sebastian sagt:

    In diesem Fall muss man wirklich den Kernel beim ersten Booten austauschen. Ich hatte das mit pae/nx Aktivierung auch nicht gemacht, da es bei mir auch nicht verfügbar war. Du hast jetzt 2 Möglichkeiten: Entweder du startest nochmal von vorne und hälst dich an meine Anleitung oder du nutzt eine Live Distribution, bootest, machst ein chroot auf das Dateisystem und installierst einen neuen Kernel. Ich vermute, die erste Sache geht schneller.

  5. Oleg sagt:

    Ich hab das Ubuntu auf dem Virtual PC 2007 instaliert. War alles ohne problemme. Ich hab aber die beiden Packete nicht gefunden. LAMP Server und OpenSSH Server

  6. Siggi sagt:

    Die Installation hat jetzt funktioniert, das mit dem Portforwarding hat bei mir zu fehlermeldungen geführt, so hab ich dann das manual von VirtualBox konsultiert und es mit den Anweisungen dort hinbekommen.
    Localhost funktioniert also schon mal soweit. Wie krieg ichs jetzt aber hin dass das Gastsystem über SSH connectet werden kann?

  7. Sebastian sagt:

    @Siggi: Du müsstest wahrscheinlich zunächst erst mal schauen, dass dein Ubuntu Server überhaupt ssh connects akzeptiert (entsprechende Pakete per apt-get installieren). Danach musst du wieder port-forwarding für port 22 konfigurieren. Das sollte analog zum Forwarding für http funktionieren.

  8. René sagt:

    Hallo Sebastian,

    erst einmal ein dickes Lob an diese tolle Anleitung. Ich habe gestern mal versucht einen Apache-Server in der Box zu installieren. Nach Deiner Anleitung ging es sehr gut.
    Was allerdings nicht funktioniert ist die Portweitergabe. Von der Box aus komme ich raus „it works!“ :-) ABER leider komme ich vom Host nicht in die Box rein. Wenn ich bei beiden den Port 80 festlege, bekomme ich eine Fehlermeldung. Wenn ich den Host auf Port 8080 lege (in anderen Anleitungen wird das z.T. gemacht) gibt es keine Fehlermeldung mehr, nutzt aber leider auch nichts.
    Könntest Du das mit der Portweitergabe vielleicht noch ausführlich beschreiben? Eventuell auch mit etwas Hintergrundwissen, um z.B. auch noch SSH zu ermöglichen?

    Herzlichen Dank.

    Grüße,

    René.

  9. Sebastian sagt:

    @Rene: Nein, ein weiteres Dokument kann ich dazu erst mal nicht erstellen. Aber wahrscheinlich hast du etwas bei den Schritten um „VBoxManage setextradata “NameDerVM”…“ falsch gemacht oder bei dir gibt es an dieser Stelle irgendwelche besonderen Bedingungen.

  10. René sagt:

    Hallo Sebastian,

    also ich habe nun den Server noch einmal neu installiert, weil ich einiges herumgestellt habe und es schneller ging das System frisch zu machen. Beim Neuinstallieren habe ich eine Änderung im Vorfeld gemacht:

    Habe das Netzwerk auf Hostinterface umgestellt und die Verbindung nach draußen gewählt (eth0 bzw. ath0). Den Kernel habe ich nicht angepasst, sondern in der Virtualbox PAE/NX aktiviert. mit setextradata habe ich nichts eingestellt.
    Nun komme ich mit einer Netz-IP vom Host auf den Guest :-) Die IP kriege ich im Guest mit ifconfig.
    War mit diesem Weg sehr einfach und innerhalb kürzester Zeit eingerichtet.
    Sehr geholfen hat mir die Dokumentation von http://www.nwlab.net/tutorials/virtualbox/virtual-networking.html

    Grüße,

    René

  11. Sebastian sagt:

    @Rene: Na wunderbar! Freut mich, dass es geklappt hat!!!

  12. Steeven sagt:

    Man muss bei der Paketauswahl die Pakete

    LAMP Server
    OpenSSH Server

    Bei mir kommt keine Paketauswahl, installation ist so durchgelaufen. Was nun?

Schreiben sie ein Kommentar