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:
Die folgenden Werte lassen wir auf default und klicken einfach weiter:
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:
Nun richten wir noch das Portforwarding für ssh (22) ein:
Ist das alles Abgeschlossen, können wir die Maschine das erste mal starten und kommen zum installieren des Systems:
Ich trage hier vagrant-debian-wheezy, theoretisch kann man sich aber hier fast frei austoben
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.
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:
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:
Als Benutzername, tada ... wird vagrant gesetzt:
Passwort des Benutzers festlegen, auch hier setzt man vagrant
Die Partitionierung der Festplatte lassen wir auf Default, genau wie alle folgenden Werte:
Damit ist das Grundsystem konfiguriert und wir können uns dem Teil der Softwareinstallation widmen:
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:
Jetzt melden wir uns erst einmal mit root an:
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:
die Zeilen beginnend mit "deb cdrom" durch ein führendes "#" auskommentieren
nun updaten wir die Sourcen und es sollte kein CD Rom erfragt werden
jetzt installieren wir einige Programme die im späteren Verlauf noch wichtig werden:
da die mitgelieferten GuestAdditions veraltet sind, müssen wir diese neu installieren.
nun installieren wir im VirtualBox menu GuestAdditions, wenn das geschehen ist, verbinden wir die box damit:
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:
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.
in der datei tragen wir unter dem in der regel existierenden eintrag für root:
den vagrant user ein:
nun speichern wir die datei mit ctrl+o und verlassen die datei mit ctrl+x.
mit
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:
nun kopiert man seinen Key vom lokalen Rechner auf die Box:
auf der Box fügt man diesen key jetzt den authorized_keys hinzu:
jetzt testen wir die verbindung:
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:
jetzt begeben wir uns auf Systemlevel 1 und schreiben den nicht benutzten Plattenspeicher mit 0 zu, um die kompression zu erleichtern:
root password eingeben, leeren plattenspeicher nullen:
damit sind wir bereit für das erstellen der Box:
mit
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:
mit einem
erstellen wir uns nun unsere eigene erste VagrantBox von unserem frischen Image!
Gestartet wird diese Box mit
da bei mir Probleme auftraten mit einer Endlosschleife von Meldungen alá
habe ich den automatisch erstellten Vagrantfile editiert und ihm den Ort meiner ssh-keys verraten:
und unter der Zeile
noch die Zeile
eingefügt.
Nun startet die Box auch Problemlos.
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:
Die folgenden Werte lassen wir auf default und klicken einfach weiter:
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:
Nun richten wir noch das Portforwarding für ssh (22) ein:
Ist das alles Abgeschlossen, können wir die Maschine das erste mal starten und kommen zum installieren des Systems:
Ich trage hier vagrant-debian-wheezy, theoretisch kann man sich aber hier fast frei austoben
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.
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:
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:
Als Benutzername, tada ... wird vagrant gesetzt:
Passwort des Benutzers festlegen, auch hier setzt man vagrant
Die Partitionierung der Festplatte lassen wir auf Default, genau wie alle folgenden Werte:
Damit ist das Grundsystem konfiguriert und wir können uns dem Teil der Softwareinstallation widmen:
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:
Jetzt melden wir uns erst einmal mit root an:
BASH code
vagrant@vagrant: su 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
root@vagrant: nano /etc/ 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
root@vagrant: apt-get update
jetzt installieren wir einige Programme die im späteren Verlauf noch wichtig werden:
BASH code
apt-get update apt-get upgrade apt-get install openssh-server zerofree ruby1.9
da die mitgelieferten GuestAdditions veraltet sind, müssen wir diese neu installieren.
BASH code
root@vagrant: apt-get update root@vagrant: apt-get upgrade root@vagrant: apt-get install build-essential module-assistant root@vagrant: m-a prepare
nun installieren wir im VirtualBox menu GuestAdditions, wenn das geschehen ist, verbinden wir die box damit:
BASH code
root@vagrant: mount /media/cdrom 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
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
root@vagrant: visudo
in der datei tragen wir unter dem in der regel existierenden eintrag für root:
BASH code
root ALL=(ALL) ALL
den vagrant user ein:
BASH code
vagrant ALL=(ALL) NOPASSWD: ALL
nun speichern wir die datei mit ctrl+o und verlassen die datei mit ctrl+x.
mit
BASH code
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
vagrant@vagrant:~$ mkdir .ssh vagrant@vagrant:~$ chmod 700 .ssh
nun kopiert man seinen Key vom lokalen Rechner auf die Box:
BASH code
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
vagrant@vagrant: less /tmp/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
jetzt testen wir die verbindung:
BASH code
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
rm -rf /usr/share/doc rm -rf /usr/src/vboxguest* rm -rf /usr/src/virtualbox-guest* rm -rf /usr/src/virtualbox-ose-guest* find /var/cache -type f -exec rm -rf {} ; 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 ,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, ko,kok,ku,ky, 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 ,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
init 1
root password eingeben, leeren plattenspeicher nullen:
BASH code
mount -o remount,ro /dev/sda1 zerofree /dev/sda1
damit sind wir bereit für das erstellen der Box:
BASH code
user@laptop: vagrant package --base Debian64_7_5
mit
BASH code
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
user@laptop: vagrant box add DevelopmentDebianBox package.box
mit einem
BASH code
user@laptop: vagrant init
erstellen wir uns nun unsere eigene erste VagrantBox von unserem frischen Image!
Gestartet wird diese Box mit
BASH code
user@laptop: vagrant up
da bei mir Probleme auftraten mit einer Endlosschleife von Meldungen alá
BASH code
default: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying...
habe ich den automatisch erstellten Vagrantfile editiert und ihm den Ort meiner ssh-keys verraten:
BASH code
user@vagrant: nano Vagrantfile
und unter der Zeile
BASH code
config.vm.box = "base"
noch die Zeile
BASH code
config.ssh.private_key_path = "~/.ssh/id_rsa"
eingefügt.
Nun startet die Box auch Problemlos.