Viele Hypervisor (VMware, Proxmox, OpenStack,…) unterstützen sogenannten „VM Templates“. Damit lässt sich eine VM mit einem Betriebssystem vorinstallieren und mittels Cloud-init kann dann bei der Erzeugung der VM aus einem Template noch die spezifische Konfiguration, wie Hostname, Netzwerk/IP und Passwort konfiguriert werden. Dies geschieht in den meisten Fällen mit Cloud-init.
Zuvor sollte die VM jedoch entsprechend „vorbereitet“ werden, so dass Hostname, IP Konfiguration, Logs, Passwörter usw. aus dem System entfernt werden, bevor es zum „Template“ umgewandelt wird.
Dieser Prozess wird in der Fachsprache „generalisiert“ (bzw. „generalize“) genannt.
Inhalt
Anforderungen
Linux Abhängigkeiten
Die VM, welche als Template verwendet wird, sollte die folgenden Pakete installiert haben:
- curl
- wget
- git
- net-tools
- unzip
- apparmor-parser
- ca-certificates
- cloud-init
- cloud-guest-utils
- cloud-image-utils
- growpart (part of cloud-guest-utils)
- cloud-initramfs-growroot
- open-iscsi
- openssh-server
- open-vm-tools (nur für VMware; für andere Hypervisors ist das nicht nötig)
Windows Abhängigkeiten
Auf Windows müssen die folgenden Softwarepakte installiert sein:
- Windows Container Feature
- cloudbase-init
Vorbereitungen der VM
Linux VM Vorbereitung
Die folgenden Kommandos setzen ein Linux quasi auf den „Ursprungszustand“ (reset) und entfernen auch Hostname und IP Konfiguration beim nächsten Neustart:
# Cleaning logs.
if [ -f /var/log/audit/audit.log ]; then
cat /dev/null > /var/log/audit/audit.log
fi
if [ -f /var/log/wtmp ]; then
cat /dev/null > /var/log/wtmp
fi
if [ -f /var/log/lastlog ]; then
cat /dev/null > /var/log/lastlog
fi
# Cleaning udev rules
if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then
rm /etc/udev/rules.d/70-persistent-net.rules
fi
# Cleaning the /tmp directories
rm -rf /tmp/*
rm -rf /var/tmp/*
# Cleaning the SSH host keys
rm -f /etc/ssh/ssh_host_*
# Cleaning the machine-id
truncate -s 0 /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id
# Cleaning the shell history
unset HISTFILE
history -cw
echo > ~/.bash_history
rm -fr /root/.bash_history
# Truncating hostname, hosts, resolv.conf and setting hostname to localhost
truncate -s 0 /etc/{hostname,hosts,resolv.conf}
hostnamectl set-hostname localhost
# Clean cloud-init
cloud-init clean -s -l
Windows Vorbereitungen
Windows verfügt über ein Dienstprogramm namens sysprep, mit dem ein Image generalisiert- und die gleichen Elemente wie oben für Linux aufgeführten zurückgesetzt werden können. Der Befehl lautet wie folgt:
sysprep.exe /generalize /shutdown /oobe
Das Template erstellen
Jetzt kann die VM heruntergefahren- und danach als Template umgewandelt werden.