How To: Eine Vagrant Box aus einer VirtualBox erstellen

mastercad
15.06.2014 16:44:08
An dieser Stelle vielen Dank an meinen Kollegen Kai, der mich auf diese Möglichkeit aufmerksam gemacht hat, nachdem ich mich selbst maßlos geärgert habe, das man an jeder Ecke Images bekommt und die alle schon dermaßen mit Schrott versaut sind!

Wir starten mit dem aufsetzen eines Images in VirtualBox.

Zu erst laden wir uns das aktuellste Image der Distribution unserer Wahl herunter. In meinen Fall ist das die aktuelle Version von Debian Wheezy als Net-Installation, da wir nur ein rudimentäres System benötigen und den Rest später selbst von Hand installieren.

wir starten erst einmal VirtualBox und legen uns ein neues System an:

ich nenne meine Maschine Debian64_7_5:
Bild Virtuelle Maschine erzeugen_050.png nicht gefunden !



Die folgenden Werte lassen wir auf default und klicken einfach weiter:

Bild Virtuelle Festplatte_055.png nicht gefunden !



Bild Virtuelle Maschine erzeugen_052.png nicht gefunden !



Bild Virtuelle Festplatte_053.png nicht gefunden !



Bild Virtuelle Festplatte_054.png nicht gefunden !



Bild Virtuelle Festplatte_055.png nicht gefunden !



nachdem wir auf Erzeugen geklickt haben, laden wir das vorher heruntergeladene Image unserer Distribution, dazu :

Dazu klicken wir auf Ändern womit sich der darauf folgende Dialog öffnet:

Bild Oracle VM VirtualBox Manager_056.png nicht gefunden !



Bild Debian64_7_5 - Aendern_060.png nicht gefunden !



Bild virtualbox_image_auswaehlen.png nicht gefunden !




Nun richten wir noch das Portforwarding für ssh (22) ein:

Bild Debian64_7_5 - Aendern_002.png nicht gefunden !



Bild Debian64_7_5 - Aendern_003.png nicht gefunden !



Bild Regel fuer Port-Weiterleitung_004.png nicht gefunden !



Bild Regel fuer Port-Weiterleitung_005.png nicht gefunden !



Ist das alles Abgeschlossen, können wir die Maschine das erste mal starten und kommen zum installieren des Systems:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_006.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_008.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_009.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_010.png nicht gefunden !



Ich trage hier vagrant-debian-wheezy, theoretisch kann man sich aber hier fast frei austoben

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_011.png nicht gefunden !



Als Domain gebe ich CADLAND an, da der Rechner sich natlos in mein Netzwerk einfügen soll, es wird oft vorgeschlagen vagrantup.con zu benutzen, ich sehe da wenig seinn drin.


Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_012.png nicht gefunden !



Als Root-Passwort benutzen wir vagrant, damit der default user später keine Probleme macht. Der Default user vagrant hat später einen Passwortlosen sudo Zugang, es wird trotzdem empfohlen, dieses Passwort auf vagrant zu setzen:


Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_013.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_014.png nicht gefunden !



Nun werden wir nach dem vollständigen namen des Benutzers gefragt, ich habe mich hier für vagrant default user entschieden, auch hier hat man im Grunde die freie Wahl:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_015.png nicht gefunden !



Als Benutzername, tada ... wird vagrant gesetzt:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_016.png nicht gefunden !



Passwort des Benutzers festlegen, auch hier setzt man vagrant

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_017.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_018.png nicht gefunden !



Die Partitionierung der Festplatte lassen wir auf Default, genau wie alle folgenden Werte:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_019.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_020.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_021.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_022.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_023.png nicht gefunden !



Damit ist das Grundsystem konfiguriert und wir können uns dem Teil der Softwareinstallation widmen:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_024.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_025.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_026.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_029.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_032.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_029.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_034.png nicht gefunden !



Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_037.png nicht gefunden !



Nachdem die box fertig aufgesetzt ist, loggen wir uns das erste mal ein mit dem benutzer vagrant und dem Passwort vagrant und bereiten das system vor:

Bild Debian64_7_5 [wird ausgefuehrt] - Oracle VM VirtualBox_038.png nicht gefunden !




Jetzt melden wir uns erst einmal mit root an:

BASH code

  1. vagrant@vagrant: su
  2. passwort "vagrant" eingeben


Hinweis:
Falls man nicht mit der netinstallation sondern mit einem normalen Image installiert hat, muss man die Sourcen der CD Rom wieder entfernen sonst würde jedes mal, wenn man versucht etwas zu installieren die CD verlangt werden. Die Sourcen der CD Rom entfernt man wie folgt:

BASH code

  1. root@vagrant: nano /etc/
  2. apt/sources.list


die Zeilen beginnend mit "deb cdrom" durch ein führendes "#" auskommentieren

nun updaten wir die Sourcen und es sollte kein CD Rom erfragt werden

BASH code

  1. root@vagrant: apt-get update



jetzt installieren wir einige Programme die im späteren Verlauf noch wichtig werden:


BASH code

  1. apt-get update
  2. apt-get upgrade
  3. apt-get install openssh-server zerofree ruby1.9



da die mitgelieferten GuestAdditions veraltet sind, müssen wir diese neu installieren.


BASH code

  1. root@vagrant: apt-get update
  2. root@vagrant: apt-get upgrade
  3. root@vagrant: apt-get install build-essential module-assistant
  4. root@vagrant: m-a prepare



nun installieren wir im VirtualBox menu GuestAdditions, wenn das geschehen ist, verbinden wir die box damit:


BASH code

  1. root@vagrant: mount /media/cdrom
  2. root@vagrant: sh /media/cdrom/VBoxLinuxAdditions.run


falls hier die frage kommt, ob die alte installation entfernt werden soll, wird das mit yes bestätigt.

um uns das leben mit dem vagrant user etwas zu erleichtern installieren wir uns sudo:


BASH code

  1. root@vagrant: apt-get install sudo


nun machen wir erstmal den vagrant default user zu einem passwortfreien root, das machen wir aus erfahrungen heraus lieber mit visudo, wir editieren zwar nur die datei /etc/sudoers, aber dieses tool checkt im hintergrund noch diverse abhängigkeiten, die das system im fehlerfall kompromitieren könnten.


BASH code

  1. root@vagrant: visudo


in der datei tragen wir unter dem in der regel existierenden eintrag für root:


BASH code

  1. root ALL=(ALL) ALL


den vagrant user ein:


BASH code

  1. vagrant ALL=(ALL) NOPASSWD: ALL


nun speichern wir die datei mit ctrl+o und verlassen die datei mit ctrl+x.

mit


BASH code

  1. root@vagrant: /etc/init.d/sudo restart


aktualisieren wir die permissions und sind ab sofort einsatzbereit

nun kommen wir zur wichtigsten geschichte bei vagrant, dem einrichten des ssh zuganges:

es gibt zum einen die möglichkeit, das man seinen eigenen private key in der box hinterlegt, das kann spätestens dann zum problem werden, wenn man die box auch kollegen oder freunden zur verfügung stellen möchte.

des weiteren kann man auch einen neuen key genieren, den man extra für diesen zweck erstellt und auch den kollegen zur vefügung stellt.

als 3. möglichkeit hat man auch von vagrant bereit gestellte keys zur auswahl, ein so genanntes "insecure key pair".

Welche Methode man verwendet, muss jeder selbst wissen, die 3. ist die einfachste Möglichkeit. Ich habe mich für die komplizierteste entschieden und werde an hand eines vorhandenen keys zeigen, wie man das problem löst:

auf der Box legt man sich im home verzeichnis des vagrant users (/home/vagrant/) einen .ssh ordner an:


BASH code

  1. vagrant@vagrant:~$ mkdir .ssh
  2. vagrant@vagrant:~$ chmod 700 .ssh


nun kopiert man seinen Key vom lokalen Rechner auf die Box:


BASH code

  1. user@laptop:~$ scp -P 2222 ~/.ssh/id_rsa.pub vagrant@127.0.0.1:/tmp/


auf der Box fügt man diesen key jetzt den authorized_keys hinzu:


BASH code

  1. vagrant@vagrant: less /tmp/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys


jetzt testen wir die verbindung:


BASH code

  1. user@laptop:~$ ssh -p 2222 vagrant@127.0.0.1

Sollte jetzt reibungslos funktionieren.


Weil auch unser Grundsystem von Haus aus mit viel Ballast versehen ist, der die Box nur unnötig aufbläht, wird dieser entfernt:

BASH code

  1. rm -rf /usr/share/doc
  2. rm -rf /usr/src/vboxguest*
  3. rm -rf /usr/src/virtualbox-guest*
  4. rm -rf /usr/src/virtualbox-ose-guest*
  5. find /var/cache -type f -exec rm -rf {} ;
  6. rm -rf /usr/share/locale/{af,am,ar,as,ast,az,bal,be,bg,bn,bn_IN,br,bs,byn,ca,cr,cs,csb,cy,da,de,de_AT,dz,el,en_AU,en_CA,eo
  7. ,es,et,et_EE,eu,fa,fi,fo,fr,fur,ga,gez,gl,gu,haw,he,hi,hr,hu,hy,id,is,it,ja,ka,kk,km,kn,
  8. ko,kok,ku,ky,
  9. lg,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,nb,ne,nl,nn,no,nso,oc,or,pa,pl,ps,pt,pt_BR,qu,ro,ru,rw,si,sk,sl,so
  10. ,sq,sr,sr*latin,sv,sw,ta,te,th,ti,tig,tk,tl,tr,tt,ur,urd,ve,vi,wa,wal,wo,xh,zh,zh_HK,zh_CN,zh_TW,zu}


jetzt begeben wir uns auf Systemlevel 1 und schreiben den nicht benutzten Plattenspeicher mit 0 zu, um die kompression zu erleichtern:


BASH code

  1. init 1


root password eingeben, leeren plattenspeicher nullen:


BASH code

  1. mount -o remount,ro /dev/sda1
  2. zerofree /dev/sda1


damit sind wir bereit für das erstellen der Box:


BASH code

  1. user@laptop: vagrant package --base Debian64_7_5


mit

BASH code

  1. vagrant package --base Debian64_7_5 --output /media/daten/Projekte/vagrant/boxes/debian64.box

kann man auch einen eigenen Namen und ein Ziel für das Package angeben


jetzt können wir uns mit dem erstellten Package package.box eine Box anlegen:


BASH code

  1. user@laptop: vagrant box add DevelopmentDebianBox package.box


mit einem

BASH code

  1. user@laptop: vagrant init


erstellen wir uns nun unsere eigene erste VagrantBox von unserem frischen Image!


Gestartet wird diese Box mit


BASH code

  1. user@laptop: vagrant up


da bei mir Probleme auftraten mit einer Endlosschleife von Meldungen alá


BASH code

  1. default: Warning: Connection timeout. Retrying...
  2. default: Warning: Connection timeout. Retrying...
  3. default: Warning: Authentication failure. Retrying...
  4. default: Warning: Authentication failure. Retrying...
  5. default: Warning: Authentication failure. Retrying...
  6. default: Warning: Authentication failure. Retrying...


habe ich den automatisch erstellten Vagrantfile editiert und ihm den Ort meiner ssh-keys verraten:


BASH code

  1. user@vagrant: nano Vagrantfile


und unter der Zeile


BASH code

  1. config.vm.box = "base"


noch die Zeile


BASH code

  1. config.ssh.private_key_path = "~/.ssh/id_rsa"

eingefügt.

Nun startet die Box auch Problemlos.