Literate Vagrant. Werkzeuge. Meik Teßmer* 2015 Bereich Computergestützte Methoden ( CoMet) Version: 0.1.1



Ähnliche Dokumente
Tutorial -

How to install freesshd

SFTP SCP - Synology Wiki

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

Installation und Aktualisierung der VMware-Tools

Workshop: Eigenes Image ohne VMware-Programme erstellen

Update Messerli MySQL auf Linux

HBF IT-Systeme. BBU-BSK Übung 2 Stand:

Windows 7 Winbuilder USB Stick

Step by Step Webserver unter Windows Server von Christian Bartl

Geschrieben von: Stefan Sonntag, den 26. Juni 2011 um 09:45 Uhr - Aktualisiert Sonntag, den 26. Juni 2011 um 10:12 Uhr

Anbindung des eibport an das Internet

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

B4 Viper Connector Service Installationsanleitung Stand:

Netbeans 6.1 mit SVN Server unter Debian etch mit Windows Clients

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Version 0.3. Installation von MinGW und Eclipse CDT

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

Installation Messerli MySQL auf Linux

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Adminer: Installationsanleitung

Anleitung: Webspace-Einrichtung

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Eine Einführung in die Installation und Nutzung von cygwin

Anleitung zur Webservice Entwicklung unter Eclipse

OP-LOG

Nun wählen Sie bei dem Installationsmenü den Punkt Interactively aus.

Migration NVC 5.x auf NEM/NPro (Migration eines bestehenden, produktiven NVC Verteilservers auf NEM/NPro)

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Mein eigener Homeserver mit Ubuntu LTS

AutoCAD Dienstprogramm zur Lizenzübertragung

Migration Howto. Inhaltsverzeichnis

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

-Bundle auf Ihrem virtuellen Server installieren.

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

SSH Authentifizierung über Public Key

Installation SQL- Server 2012 Single Node

GITS Steckbriefe Tutorial

KURZANLEITUNG DUPLICITY MIT CLOUD OBJECT STORAGE

0. VORBEMERKUNG VORBEREITUNG DES SYSTEMS INSTALLATION UND KONFIGURATION VON PD-ADMIN Installation...3

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Tutorial: Erstellen einer vollwertigen XP Home CD aus der EEE 901 Recover DVD

Print2CAD 2017, 8th Generation. Netzwerkversionen

Drupal 8 manuell installieren

Nutzung der VDI Umgebung

Datensicherung. Beschreibung der Datensicherung

Installationsanleitung unter Windows

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Task: Nmap Skripte ausführen

Wie halte ich Ordnung auf meiner Festplatte?

Lokale Installation von DotNetNuke 4 ohne IIS

Anleitung zur Erstellung einer Batchdatei. - für das automatisierte Verbinden mit Netzlaufwerken beim Systemstart -

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Installationsanleitung. Update ATOSS SES 2.40 für Windows ATOSS Server

Windows 98 / Windows NT mit NCP WAN Miniport-Treiber 23. Oktober 1998

Anleitung: DV4Mini auf einem Raspberry Pi

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Quickstep Server Update

Leitfaden für die Installation der Videoüberwachung C-MOR

1 Konto für HBCI/FinTS mit Chipkarte einrichten

Tips, Tricks und HOWTOs Virtualisierung für Profis und Einsteiger Serverkonsolidierung, Testumgebung, mobile Demo

How-to: Webserver NAT. Securepoint Security System Version 2007nx

WordPress lokal mit Xaamp installieren

Installation Messerli MySQL auf MAC OS X

PeDaS Personal Data Safe. - Bedienungsanleitung -

Anwenderdokumentation PersoSim

Anleitung zur Installation eines Clusters unter VMWare 4.0 (Built 4460)

OSx / MAC. MegaZine3 MZ3-Tool3. Server Upload. Video 2-4

Betriebssystem Windows - SSH Secure Shell Client

INSTALLATION. Voraussetzungen

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

AppCenter Handbuch August 2015, Copyright Webland AG 2015

Anleitungen zum Publizieren Ihrer Homepage

ab Redirector-Version 2.14

HAIKU Testen mit VitualBox

Für Windows 7 Stand:

INTERNET UND MMS MIT DEM QTEK2020 MARCO 28. MÄRZ 04

Lokaler KMS Server im Schulnetzwerk (Kurzanleitung)

Anleitung Grundsetup C3 Mail & SMS Gateway V

4,5 eink-display für den Raspberry Pi - Bedienungsanleitung

Dienste und Runlevel. September 2010 Oliver Werner Linux Systemmanagement 1

Virtualisierung mit Virtualbox

Anleitung Thunderbird Verschlu sselung

Der PC im PC: Virtualisierung

Aufbau einer Testumgebung mit VMware Server

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Elexis-BlueEvidence-Connector

Installationsanleitungen

Powermanager Server- Client- Installation

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

Anwendungsbeispiele Buchhaltung

DOKUMENTATION VOGELZUCHT 2015 PLUS

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Artikel Schnittstelle über CSV

Transkript:

Literate Programming Literate Vagrant Werkzeuge Meik Teßmer* 2015 Bereich Computergestützte Methoden ( CoMet) Version: 0.1.1 Bei der Entwicklung von So ware oder ür das Testen von Systemkonfigurationen kommen o virtuelle Maschinen zum Einsatz. Zuvor müssen sie aber z.t. sehr aufwändig eingerichtet werden. Vagrant erlaubt die geskriptete Erstellung virtueller Maschinen mit anschließer Provisionierung mi els Salt, Puppet etc. und reduziert damit den Zeitaufwand bei der Einrichtung. Für die Virtualisierung verwet Vagrant standardmäßig VirtualBoxVagrant, unterstützt aber auch andere Systeme wie Docker und VmWare. Hier werden erste Schri e mit Vagrant vorgestellt sowie der Au au einer eigenen Base Box und ein Skript, mit dessen Hilfe aus dieser Base Box eine virtuelle Maschinen zum Testen von Salt States aufgesetzt wird. Hinweis :Getestet wurde mit den Versionen Host: Linux Mint (jessie/sid) VirtualBox 4.2.16 VM: Debian 7.8 (wheezy) VirtualBox Guest Additions 4.1.8 Inhaltsverzeichnis 1 Erste Schri e 2 1.1 Installation...................................... 2 1.2 Eine erste virtuelle Maschine erstellen....................... 2 *mtessmer@wiwi.uni-bielefeld.de 1

2 Netzwerk: Port Forwarding 3 3 Provisionierung mit Shell-Skripten 4 4 Eigene Boxen 4 4.1 Einstellungen ür VirtualBox-Provider....................... 5 4.2 Systemeinstellungen................................ 5 4.3 Weitere Einstellungen................................ 5 4.3.1 Bootloader-Timeout vermeiden...................... 5 4.4 Salt installieren................................... 6 4.5 Packen der Box................................... 6 4.6 Testen der Box.................................... 7 5 Workflow-Beispiel: Testen von Salt States 7 6 Fazit 10 7 Code Chunks 10 1 Erste Schri e 1.1 Installation Die Installation von Vagrant kann über den Paketmanager erfolgen; ür Debian-basierte Systeme bspw. so: <test-setup.sh>= sudo aptitude install vagrant virtualbox Je nach Distribution kann es aber sein, dass die angebotene Version zu alt ist. Erst ab Vagrant v1.3.0 ist der Salt-Provisioner ver ügbar, weshalb eine manuelle Installation der aktuellen Version sinnvoll sein kann. 1.2 Eine erste virtuelle Maschine erstellen Zunächst wird Arbeitsverzeichnis erstellt <test-setup.sh 2>= mkdir ~/vagrant-tests && cd ~/vagrant-tests und anschließ initialisiert: <test-setup.sh 3>= vagrant init 2

Bevor eine VM erstellt werden kann, muss das zugehörige System - im Vagrant-Jargon auch Box genannt - dem Host-System bekannt gemacht werden. Diese Informationen werden im Verzeichnis ~/.vagrant.d verwaltet. Dort landen auch die aus dem Netz geladenen Boxen. <test-setup.sh 4>= vagrant box add ubuntu http://files.vagrantup.com/precise32.box Welche Boxen ver ügbar sind, zeigt vagrant box list. Bei der Initialisierung wird eine Datei namens Vagrantfile erzeugt, in der Details zu der zu erstellen virtuellen Maschine stehen. Der Eintrag config.vm.box beschreibt, welche Box die Grundlage ür die VM sein soll: <Vagrantfile-Beispiel>= Vagrant.configure( 2 ) do config config.vm.box = ubuntu Sobald dieser Eintrag gemacht wurde, lässt sich die VM schon erstellen und betreten: <test-setup.sh 5>= vagrant up vagrant ssh Jetzt befinden wir uns in einer normalen SSH-Session in der VM. Vagrant synchronisiert das Verzeichnis /vagrant mit dem oben erstellten Arbeitsverzeichnis, was einen bequemen Dateiaustausch ermöglicht. Zum Verlassen der VM wird wie bei jeder SSH-Session ein exit ausge ührt. Ob die VM nun gelöscht oder suspiert wird, obliegt dem Anwer. Löschen: vagrant destroy Suspieren: vagrant susp Stoppen: vagrant halt, entspricht einem halt in der der VM. Suspierte oder angehaltene VMs können jederzeit mit vagrant up neu gestartet werden, eine komple e Neueinrichtung ist nicht notwig. 2 Netzwerk: Port Forwarding Die VM laufen standardmäßig über ein NAT und sind von außen nicht erreichbar. Möchte man bspw. einen Webserver testen, kann mi els Port Forwarding ein Host-Port an einen Gast- Port weitergeleitet werden. Dazu muss die Konfigurationsdatei Vagrantfile folgermaßen angepasst werden: config.vm.network :forwarded_port, host: 8080, guest: 80 Damit wird der lokale Port 8080 auf den VM-Port 80 weitergeleitet. 3

3 Provisionierung mit Shell-Skripten Vagrant unterstützt die Provisionierung von VMs auf einfachste Art durch Shell-Skripte, aber auch Werkzeuge wie Puppet oder Salt können verwet werden. Ein Beispiel: In der VM soll ein Apache Webserver installiert werden. Zunächst wird dazu ein Installationsskript geschrieben: <bootstrap.sh>= #!/usr/bin/env bash apt-get update apt-get install -y apache2 if! [ -L /var/www ]; then fi rm -rf /var/www ln -fs /vagrant /var/www Dann muss in der Konfigurationsdatei Vagrantfile die Provisionierung eingerichtet werden: Vagrant.configure( 2 ) do config config.vm.box = ubuntu config.vm.network :forwarded_port, host: 8080, guest: 80 config.vm.provision :shell, path: bootstrap.sh Der Pfad zum Skript ist relativ zum Arbeitsverzeichnis zu sehen. Das Skript muss nicht aus- ührbar sein. Die Provisionierung wird automatisch beim ersten Start (vagrant up) ausge ührt. Läu die VM schon, kann mit vagrant reload --provision das Skript manuell erneut gestartet werden. 4 Eigene Boxen Eine Box ist eine fertig eingerichtete VM. Bevor ein konkretes Projekt aufgesetzt werden kann, muss die gewünschte Box mit vagrant box add <name> <url> import werden. Alternativ zu den auf HashiCorps Atlas ver ügbaren Boxen können auch eigene sog. Base Boxes aufgebaut werden. Diese müssen folge Anforderungen er üllen: Disk Space: abhängig vom zu installieren System, 8-10 GB sollten aber reichen Speicher: 512 Mb reichen aus, er kann in der Konfigurationsdatei der späteren VM geändert werden deaktivierte Audio- und USB-Peripherie (nicht notwig) Default User: vagrant mit sudo-rechten (s.u.) root-passwort: vagrant laufer SSH-Dienst 4

4.1 Einstellungen für VirtualBox-Provider Kommt VirtualBox als Provider zum Einsatz, muss bei der Konfiguration Folges beachtet werden: Netzwerkadapter 1: muss NAT sein MAC-Adresse muss im Vagrantfile stehen (geschieht aber beim Packen automatisch; s.u.) die VirtualBox Guest Additions müssen installiert sein, damit Ordner geteilt werden können: sudo apt-get install linux-headers-generic build-essential dkms CD via GUI einlegen und mounten: sudo mount /dev/cdrom /media/cdrom Shellskript aus ühren: /media/cdrom/vboxlinuxadditions.run Wird als Gast Debian GNU/Linux installiert, geschieht die Einrichtung der Guest Additions automatisch und muss nicht manuell erfolgen. U.U. kommt es dann aber zu Versionsunterschieden zwischen VirtualBox und den Guest Additions. 4.2 Systemeinstellungen Damit Vagrant via SSH arbeiten kann, wird ein unsicheres Schlüsselpaar verwet. In der VM muss dazu in /home/vagrant/.ssh/authorized_keys der öffentliche Schlüssel vagrant.pub liegen (s. auch Insecure Keypair). Die Rechte des Ordners müssen auf 0700 und die der Datei auf 0600 stehen. <vagrant.pub>= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I Um SSH zu beschleunigen, sollte in der VM die SSH-Serverkonfiguration die Option UseDNS auf no stehen (wenn diese Option in der jeweiligen Version ver ügbar ist). Weiterhin ist ein passwortloses sudo erforderlich. Dazu muss in der VM mi els visudo die Zeile vagrant ALL=(ALL) NOPASSWD: ALL einge ügt werden. 4.3 Weitere Einstellungen 4.3.1 Bootloader-Timeout vermeiden Damit das installierte System im Bootloader nicht unnötig auf eine potenzielle User-Eingabe wartet, sollte der GRUB-Timer auf 0 Sekunden stehen. Dazu muss in /etc/default/grub die Option GRUB_TIMEOUT=0 gesetzt und update-grub ausge ührt werden. 5

4.4 Salt installieren Da Salt in der aktuellen Fassung noch nicht in den Debian-Repositories vorliegt, ist zunächst der Import der Paketquelle samt zugehörigem Schlüssel erforderlich: ~/etc/apt/sources.list ( ür Debian 7.8 (wheezy)): deb http://debian.saltstack.com/debian wheezy-saltstack main Der Schlüssel wird importiert mit wget -q -O- http://debian.saltstack.com/debian-salt-team-joeh apt-key add -. Erst jetzt lässt sich der Salt Minion mit aptitude update install salt-minion installieren. Für Tests reicht es aus, wenn der Minion Masterless läu. Dazu muss in /etc/salt/minion die Option file_client: auf local stehen. Um in der später zu erstellen VM zu teste YAML-Skripte nicht umständlich kopieren zu müssen, kann man sich mit einer passen Verzeichnissynchronisierung behelfen. Die Skripte können auf dem Host bspw. im Verzeichnis roots liegen. Die Zeile config.vm.synced_folder roots/, /srv/ hängt dieses Verzeichnis dann in der VM unter /srv ein. Die nachfolge Konfigurationsdatei unterbindet zudem die Installation des Salt Minions durch Vagrant und löst zudem ein salt state.highstate aus. Vagrant.configure( 2 ) do config config.vm.box = precise64 ## For masterless, mount your salt file root config.vm.synced_folder roots/, /srv/ ## Use all the defaults: config.vm.provision :salt do salt salt.no_minion = true salt.run_highstate = true 4.5 Packen der Box Ist alles installiert, kann die Box gepackt werden: vagrant package --base my-virtual-machine my-virtual-machine ist hier der Name, der bei der Installation der Base Box in VirtualBox gewählt wurde. Es sollte jetzt eine.box-datei im aktuellen Verzeichnis liegen. Vagrant Boxdateien sind gzip-tar-archive und können bei Bedarf mit den üblichen Werkzeugen aus- und wieder verpackt werden. Die Datei Vagrantfile wird automatisch mit der korrekten MAC- Adresse generiert. 6

4.6 Testen der Box Bevor die eigene Base Box getestet werden kann, muss sie zunächst dem Host bekannt gemacht werden: vagrant box add debian./debian-base.box. Im anschließ erstellen Arbeitsverzeichnis erzeugt ein vagrant init die Konfigurationsdatei Vagrantfile, in der noch der Name der Box anzupassen ist: config.vm.box = debian. Möglicherweise kommt es zu einem Warnhinweis, wenn eine Differenz zwischen der Host- VirtualBox-Version und der Gast-Erweiterungsversion besteht. Host 4.2 und Gast 4.1.8 funktioniert aber bisher problemlos. Ab Vagrant 1.5 können Boxen intern versioniert werden. Bei älteren Versionen bietet sich ür Bbase-Boxen eine Versionsangabe im Dateinamen an: debian-base-7.8-1.box mit 7.8: Debian- Version (wheezy), -1: Box-Version. 5 Workflow-Beispiel: Testen von Salt States Zunächst ein Hinweis: vagrant init erzeugt bei der Initialisierung nur ein noch zu bearbeites Vagrantfile. Wenn diese Datei schon vorliegt, kann init übersprungen und eine schon vorbereitete Datei verwet werden. Ziel dieses Beispiels ist, Salt States auf Basis der eben eingerichteten Base Box zu testen. Dazu sind folge Schri e notwig: 1. Base Box importieren: vagrant box add debian /path/to/debian-base.box holen 2. Vagrantfile vorbereiten und ins Arbeitsverzeichns kopieren 3. Salt-Dateien erstellen (kann auch später erfolgen) und kopieren 4. VM starten und betreten Der Import sollte problemlos funktionieren. In der vorzubereiten Konfigurationsdatei muss der passe Box-Name stehen: <Vagrantfile.debian>= Vagrant.configure( 2 ) do config config.vm.box = debian # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing localhost:8080 will access port 80 on the guest machine. # config.vm.network :forwarded_port, guest: 80, host: 8080 # Create a private network, which allows host-only access to the machine # using a specific IP. # config.vm.network :private_network, ip: 192.168.33.10 # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on # your network. 7

# config.vm.network :public_network # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # # config.vm.provider :virtualbox do vb # # Don t boot with headless mode # vb.gui = true # # # Use VBoxManage to customize the VM. For example to change memory: # vb.customize [ modifyvm, :id, --memory, 1024 ] # # # View the documentation for the provider you re using for more # information on available options. Hilfreich ist auch das Mapping des roots-verzeichnisses: <Vagrantfile.debian 2>= # map folders config.vm.synced_folder roots/, /srv/ Für das Testen von Salt States bietet Vagrant mit config.vm.provision die Möglichkeit, direkt Einfluss Chef, Puppet, Salt etc. zu nehmen. Im Beispiel wird Vagrant angewiesen, keinen Salt Minion zu installieren (ist schon vorhanden) und beim ersten Start der VM ein salt state.highstate auszu ühren. <Vagrantfile.debian 3>= config.vm.provision :salt do salt #salt.minion_config = salt/minion salt.no_minion = true salt.run_highstate = true Die Salt States müssen nicht sofort vorliegen, es reichen auch die folgen leeren top.sls- Dateien (Salt wird dazu allerdings eine Fehlermeldung ausgeben): <roots/salt/top.sls>= # top.sls base: * : 8

<roots/pillar/top.sls>= # top.sls base: * : Der Start der VM erfolgt wie schon beschrieben mit vagrant up. Mit vagrant ssh kann die laufe VM betreten und mit Salt getestet werden. Da der Salt Minion Masterless (s.o.) arbeitet, muss beim Aufruf der States darauf geachtet werden, dass der Befel salt-call --local state.highstate lautet. Sämtliche Arbeitsschri e sind im Skript setup.sh zusammengefasst. Ggf. muss die Variable PATH_TO_BASE_BOX angepasst werden. <setup.sh>= #!/bin/bash PATH_TO_BASE_BOX= /mnt/data/mtessmer/debian-base-7.8-1.box BOX_NAME=debian [ -d ${BOX_NAME} ] mkdir ${BOX_NAME} cp -R roots ${BOX_NAME}/ cd ${BOX_NAME} BOX_FOUND=$(vagrant box list grep debian) [[ -z ${BOX_FOUND} ]] && vagrant box add ${BOX_NAME} ${PATH_TO_BASE_BOX} cp../vagrantfile.debian Vagrantfile vagrant up vagrant ssh Im Verzeichnis code befinden sich nach dem tangle-laufe nun folge Dateien und Verzeichnisse: code roots pillar top.sls salt top.sls setup.sh test-setup.sh 9

Vagrantfile.debian vagrant.pub Mit./setup.sh erhält man ein Unterverzeichnis debian mit einer komple eingerichteten und laufen VM, in der nach Belieben Salt States getestet werden können. 6 Fazit Mit den hier vorgestellten Skripten reduziert sich das Aufsetzen einer VM zum Testen auf einen einzigen Befehl, dessen Aus ührung auf einer Mi elklasse-maschine ca. 1 Minute in Anspruch nimmt. Ein weiterer Vorteil besteht in der Portabilität dieses Ansatzes: Die Entwicklungsumgebung kann jederzeit auf anderen Maschinen repliziert werden. <build-script>= #!/bin/sh if [ -z ${NOWEB_SOURCE} ]; then NOWEB_SOURCE=literate_vagrant.nw fi if [ -z ${NOWEB_CODE} ]; then NOWEB_CODE= pwd /code fi # check if we need to create target dirs [ -d ${NOWEB_CODE} ] mkdir -p ${NOWEB_CODE} [ -d ${NOWEB_CODE}/roots/salt ] mkdir -p ${NOWEB_CODE}/roots/salt [ -d ${NOWEB_CODE}/roots/pillar ] mkdir -p ${NOWEB_CODE}/roots/pillar FILES= test-setup.sh Vagrantfile.debian vagrant.pub setup.sh roots/salt/top.sls roots/pillar/top.sls for f in ${FILES}; do tangle -R $f ${NOWEB_SOURCE} > ${NOWEB_CODE}/$f done chmod u+x ${NOWEB_CODE}/setup.sh 7 Code Chunks Vagrantfile-Beispiel 10

Vagrantfile.debian Vagrantfile.debian Vagrantfile.debian 2 Vagrantfile.debian 3 bootstrap.sh build-script roots/pillar/top.sls roots/salt/top.sls setup.sh test-setup.sh test-setup.sh test-setup.sh 2 test-setup.sh 3 test-setup.sh 4 test-setup.sh 5 vagrant.pub 11