Vagrant ist eine freie- und Open-Source Ruby-Anwendung zum Erstellen und Verwalten von virtuellen Maschinen. Vagrant ermöglicht einfaches Deployment insbesondere in der Software- und Webentwicklung und dient als Wrapper zwischen Virtualisierungssoftware wie VirtualBox, VMware und Hyper-V und Software-Configuration-Management-Anwendungen beziehungsweise Systemkonfigurationswerkzeugen wie Chef, Saltstack und Puppet.
Wikipedia
Was ist das Ziel?
Es soll eine Windows 7 VM aus einer Vorlage erstellt werden, auf der in diesem Fall die Software LabVIEW (es geht auch jede andere Software) automatisch installiert werden soll.
Was benötigt man dazu?
Will man die Maschine längerfristig nutzen, braucht man selbstverständlich einen Lizenzschlüssel.
Erstellen der Vagrant Box
Der Erstellvorgang einer Box besteht aus 4 Schritten:
- Virtuelle Maschine erstellen
- Windows installieren
- Windows konfigurieren
- Box paketieren und exportieren mit Vagrant
1. Virtuelle Maschine erstellen
Man erstellt wie gewohnt eine VM. Werte wie Arbeitsspeicher und CPU sind frei wählbar, da sie später über die Vagrant Konfigurationsdatei angepasst werden kann. Am besten erstellt man die Base Box natürlich so schlank wie möglich, um viel Raum für Erweiterungen im späteren Verlauf zu lassen.
Diese Optionen in Virtual Box können durch die Konfigurationsdatei angepasst werden: Virtual Box Konfiguration
2. Windows installieren
Die VM wird gestartet und Windows installiert.
Vagrant wird sich später mit der Maschine verbinden müssen. Das passiert durch WinRM (Windows Remote Management). Dazu muss ein User existieren, über den der Zugriff realisiert wird. Standardmäßig nutz Vagrant den Benutzer “vagrant” mit dem Passwort “vagrant”. Sollte ein anderer Benutzer gewünscht sein, so muss er später in der Konfigurationsdatei angegeben werden. So oder so muss der Benutzer als Admin angelegt werden.
[fusion_tooltip title=”Info” class=”” id=”” placement=”top” trigger=”hover”]Man sollte bei der Netzwerkverbindung “privat” auswählen. Das öffentliche Profil bewirkt Probleme mit winrm in den nächsten Punkten.[/fusion_tooltip]
3. Windows konfigurieren
- Virtual Box Tools installieren
- UAC ausschalten in der Systemsteuerung oder via cmd:
reg add HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionPoliciesSystem /v EnableLUA /d 0 /t REG_DWORD /f /reg:64
- Konfigurieren und Einschalten des WinRM Dienstes durch eine cmd mit Adminrechten:
winrm quickconfig -q
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
winrm set winrm/config @{MaxTimeoutms="1800000"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
sc config WinRM start= auto
- Powershell Executionpolicy minimieren:
Set-ExecutionPolicy Unrestricted
- RDP einschalten und zulassen: Systemsteuerung – System – Erweiterte Systemeinstellungen – Remote
- Updates installieren
- Festplatte säubern, damit die Boxgröße etwas reduziert werden kann
C:WindowsSystem32cleanmgr.exe /d c:
Mit dem Sysinternals Sdelete Tool kann der freie Platz genullt werden
sdelete.exe -z c:
4. Box paketieren und exportieren mit Vagrant
Zunächst erstellt man ein neues Verzeichnis und initialisiert es:
vagrant init
Das erstellte Vagrantfile wird dann an die Ansprüche angepasst:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
#Was ist die Basebox?
config.vm.box = "w7box"
#Vagrant mitteilen, dass es eine Windows Box ist und WinRM als Kontrollinstrument genutzt wird
config.vm.guest = :windows
config.vm.communicator = "winrm"
config.vm.boot_timeout = 600
config.vm.graceful_halt_timeout = 600
#Skripte, die nach Erstellen ausgeführt werden sollen
config.vm.provision :shell, path: "scripts/labview.cmd"
#Alternativer Benutzer für WinRM, wenn "vagrant" nicht genutzt werden soll
config.winrm.username = "admin"
config.winrm.password = "123456"
# Verbindung zu WinRM über Port 7889 und RDP via 7888
config.vm.network :forwarded_port, guest: 3389, host: 7888
config.vm.network :forwarded_port, guest: 5985, host: 7889, id: "winrm", auto_correct: true
config.vm.provider "virtualbox" do |vb|
#Name der VM in VB
vb.name = "Win7Std2"
end
end
Als nächstes wird die Base Box exportiert:
vagrant package --base VirtualBoxVMName --output "PfadzurBoxwindows.box" --vagrantfile "PfadzurVagrantfile"
- VirtualBoxVMName: Wie heißt die VM in Virtual Box?
- PfadzurBoxwindows.box: Wo soll die Box abgelegt werden?
- PfadzurVagrantfile: Wo liegt die initiale Konfiguration von oben (kann auch weggelassen werden, dann wird die Konfiguration später angelegt)?
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: PfadzurBoxwindows.box
==> default: Packaging additional file: Vagrantfile
Box benutzen
Damit die Box genutzt werden kann, muss sie zur Umgebung hinzugefügt werden:
vagrant box add PfadzurBoxwindows.box --name NameDerBox
Dabei wird die Box komplett auf die lokale Festplatte kopiert.
Entweder hat man die Umgebung vorher initialisiert und das Vagrantfile angegeben, dann kann man via
vagrant up
die VM erstellen lassen.
Sollte man mehrere Boxen haben oder das Vagrantfile nicht angegeben haben, so muss man mit
vagrant init NameDerBox
das Verzeichnis erstellen und ggf. das Vagrantfile dort abändern. Mit
vagrant up
wird dann auch diese VM erstellt.
In diesem Fall wurde noch ein Skript aufgerufen, was eine Software nachinstalliert hat.