Automatisierte Vorbereitung einer Vagrant-Box mit Bash

Um eine saubere und schlanke Vagrant-Box für meine Entwicklungsprojekte zu erstellen, setze ich auf ein automatisiertes Bash-Skript. Das Skript installiert alle notwendigen Pakete, konfiguriert den vagrant-Benutzer und optimiert die Box für den Export. Hier teile ich das Skript Schritt für Schritt.

Das Skript im Überblick


#!/bin/bash

echo "🚀 Starte die Vorbereitung der Vagrant-Box..."

# 1. System aktualisieren
echo "📦 Aktualisiere Paketquellen..."
apt-get update && apt-get upgrade -y

# 2. Nötige Pakete installieren
echo "🔧 Installiere erforderliche Pakete..."
apt-get install -y \
    linux-headers-$(uname -r) \
    build-essential \
    dkms \
    nfs-common \
    openssh-server \
    sudo \
    curl \
    wget \
    git \
    vim

# 3. Vagrant-Benutzer erstellen
echo "👤 Erstelle den Vagrant-Benutzer..."
useradd -m -s /bin/bash vagrant
echo "vagrant:vagrant" | chpasswd
usermod -aG sudo vagrant

# 4. SSH-Keys einrichten
echo "🔑 Richte SSH für Vagrant ein..."
mkdir -p /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
curl -o /home/vagrant/.ssh/authorized_keys \
    https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh

# 5. Sudo ohne Passwort für Vagrant erlauben
echo "🔓 Konfiguriere Passwortloses Sudo..."
echo "vagrant ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/vagrant
chmod 0440 /etc/sudoers.d/vagrant

# 6. Bereinigen, um die Box zu verkleinern
echo "🧹 Bereinige das System..."
apt-get clean
rm -rf /tmp/*
rm -rf /var/tmp/*
rm -rf /var/lib/apt/lists/*
truncate -s 0 /var/log/*log
history -c

# 7. Null-Dateien füllen
echo "🧹 Fülle freien Speicher mit Nullen, um die Box zu optimieren..."
dd if=/dev/zero of=/EMPTY bs=1M || true
rm -f /EMPTY

echo "✅ Vorbereitung abgeschlossen! Die VM ist bereit für den Export."

Was macht das Skript?

System aktualisieren und benötigte Pakete installieren

Das Skript beginnt mit einem apt-get update und installiert alle essenziellen Pakete wie:

  • curl und wget für den Dateidownload,
  • git für die Versionskontrolle,
  • vim für schnelle Dateibearbeitungen.

Den vagrant-Benutzer erstellen

Ein neuer Benutzer vagrant wird angelegt und in die sudo-Gruppe hinzugefügt. Damit kann Vagrant später Befehle ohne Probleme ausführen.

SSH-Schlüssel einrichten

Der bekannte Vagrant-Public-Key wird eingerichtet, um die Verbindung zur VM später per SSH zu ermöglichen.

Sudo ohne Passwort konfigurieren

Damit Vagrant-Befehle ohne Passwortabfragen laufen, wird der Benutzer für „passwortloses sudo“ freigeschaltet.

System bereinigen und Speicher optimieren

Um die Größe der exportierten Box zu minimieren:

  • Temporäre Dateien und Logs werden gelöscht.
  • Freier Speicher wird mit Nullen gefüllt (dd), was die Komprimierung beim Export verbessert.

Warum dieses Skript?

Wenn du häufig neue Vagrant-Boxen erstellst, bringt dieses Skript enorme Vorteile:

  • Automatisierung: Manuelles Einrichten entfällt komplett.
  • Optimierung: Die Box ist klein, sauber und sofort bereit für den Einsatz.
  • Wiederholbarkeit: Du erhältst jedes Mal das gleiche, zuverlässige Ergebnis.

Fazit:

Mit diesem Skript spare ich mir viel Zeit und Nerven bei der Erstellung neuer Vagrant-Boxen. Die VM ist sofort bereit für den Export und den Einsatz in meinen Projekten. Falls ihr euer eigenes Skript noch optimieren möchtet, lasst es mich wissen oder teilt eure Vorschläge in den Kommentaren!