Du möchtest dich gerne für unsere Hilfe erkenntlich zeigen . Gerne. Wir bedanken uns bei dir für deine Spende! 🙏
Zum frei verfügbaren Apt-Repository
GITLAB:
Verwendete Systeme:
Cloud-Init übernimmt die frühzeitige Initialisierung einer virtuellen Maschine. Mit Cloud-Init ist die Konfiguration von Netzwerkgeräten und SSH-Schlüsseln auf Hypervisor-Seite möglich. Wenn die VM zum ersten Mal startet, wendet Cloud-Init innerhalb der VM die konfigurierten Einstellungen an.
Viele Linuxdistributionen sowie auch Ubuntu bringen bereits fertige Cloud-Init Images mit und können von den Herstellerseiten heruntergeladen werden [0]. Dies mag einfach erscheinen, aber diese Images haben meist nur sehr wenig an Board und vielleicht möchtest du ja nicht nur Software dazu installieren, sondern hinterher auch wissen was wirklich installiert wurde.
Aus diesem Grund empfehle ich in diesem Artikel dein Cloud-Init Image bzw. Template einfach selber, nach deinen Wünschen und Bedürfnissen zu erstellen.
Eine Installation von Cloud-Init selbst ist nicht erforderlich. Alles was benötigt wird, ist in Ubuntu-Server bereits vorhanden.
Für die Cloud-Init Konfiguration innerhalb der VM gibt es für unsere einfache Anwendung hier nur ein File das wirklich wichtig ist: „/etc/cloud/cloud.cfg“. In dieser Datei beschäftigen wir uns mit 2 Abschnitten.
Abschnitt 1:
Wird in der Proxmox VE WebUI ein User definiert, wird dieser neue User + der Default User (in Ubuntu-Server ist das „ubuntu“) auch angelegt. Möchtest du das zusätzliche Anlegen des Users „ubuntu“ durch Cloud-Init unterbinden, kommentiere die 3 Stellen in der Config einfach aus, und es wird ausschließlich der, in der Proxmox VE WebUI definierte neue User angelegt.
users:
- default
name: ubuntu
Eine anderer Möglichkeit wäre auch die User und Passwortkonfiguration in Proxmox überhaupt nicht zu verwenden. Dann wird kein zusätzlicher User angelegt. In dieser Fall möchtest du vielleicht bereits im Template einen bestimmten User mit einem Passwort vordefinieren.
Achtung, solltest du in diesem Zusammenhang den Configteil wie oben erwähnt nicht auskommentiert haben, wird trotzdem der Default Benutzer direkt von Ubuntu IMMER angelegt.
# A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below #users: # - default
system_info:
# This will affect which distro class gets used
distro: ubuntu
# Default user name + that default users groups (if added/used)
default_user:
# name: ubuntu
lock_passwd: True
gecos: Ubuntu
groups: [adm, cdrom, dip, lxd, sudo]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
Abschnitt 2:
Im Default wird Sudo für den neuen Benutzer so konfiguriert, das dieser Benutzer Root werden kann ohne das er sich nochmal authentifizieren muss. Möchtest du das sich der neue User beim Wechsel zu root oder beim Ausführen von sudo erneut authentifizieren muss, dann kommentiere die genannte Stelle sudo: [„ALL=(ALL) NOPASSWD:ALL“] in der Config aus.
system_info:
# This will affect which distro class gets used
distro: ubuntu
# Default user name + that default users groups (if added/used)
default_user:
# name: ubuntu
lock_passwd: True
gecos: Ubuntu
groups: [adm, cdrom, dip, lxd, sudo]
# sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
In diesem Abschnitt könntest du natürlich auch Dinge wie die Standard-Shell oder Gruppen wo der neue User Mitglied ist ändern.
Damit die Bedienung in der Proxmox VE WebUI überhaupt möglich wird, muss ein Cloud-Init CD-ROM der VM hinzugefügt werden. Hierzu gehe auf die Proxmox VE CLI und füge dieses Cloud-Init CD-ROM hinzu [7]. Unsere VMID in diesem Beispiel ist 175.
qm set 175 --ide2 local-lvm:cloudinit
update VM 175: -ide2 local-lvm:cloudinit ide2: successfully created disk 'local-lvm:vm-175-cloudinit,media=cdrom' generating cloud-init ISO
Danach ist ein Powercycle der VM notwendig um die neue Hardware verwenden zu können. Nach diesem Powercycle solltest du in der VM mit lsblk ein weiteres CD-ROM-Laufwerk mit 4 MB vorfinden. Dies ist das Cloud-Init Laufwerk.
Damit die VM nach dem Klonen einzigartig ist und auch ein paar Dinge aufgeräumt werden, darf man sich ein kleines Script im Template ablegen:
#!/bin/bash rm /var/log/* -f rm /root/.bash_history rm /root/.zsh_history fstrim -v / cloud-init clean --machine poweroff
Das Script wird ausgeführt bevor die VM heruntergefahren, und daraus ein Proxmox VM-Template generiert wird. Das bedeutet das dieses Script nur beim kompletten neu Erstellen eines Templates oder beim Updaten eines Templates benötigt wird. Ich persönlich arbeite so, das ich eine VM verwende um das zukünftige Template zu konfigurieren und zu aktualisieren. Diese VM klone ich, und erst aus dem Klon erstelle ich dann das echte VM-Template, welches dann auch Verwendung findet. Das hat den Vorteil das ein bereits bestehendes Template vor einem Update/Neuerstellung nicht erst neu geklont werden muss.
Werden verknüpfte Klone verwendet spart dies Speicherplatz, aber eine Entfernung/Austausch der verwendeten Templates ist nicht möglich ohne die betroffenen VMs zu löschen und aus dem Backup zu Recovern. Der Grund dafür ist, das diese VMs vom Template abhängig sind.
Nun erstelle aus deiner vorbereiteten VM ein VM-Template. Entweder über die Proxmox VE WebUI, Rechtsklick auf die VM und „Convert to template“, oder über die CMD mit qm template <vmid> [OPTIONS]. Dieses Templates klonst du jetzt (voller Klon oder verknüpfter Klon). Nach Fertigstellung deiner neuen VM kannst du ganz einfach deine noch gewünschten Daten in der Proxmox VE WebUI ausfüllen und die neue VM starten. Die gewünschten Aufgaben an Cloud-Init werden beim Start angewendet.
Die Konfiguration kann jederzeit geändert werden. Um die Änderungen anzuwenden ist ein Powercycle der VM notwendig.
Manche Dienste wie SSH legen auch eine extra Config für Cloud-Init an /etc/ssh/sshd_config.d/50-cloud-init.conf. Diese hat die höhere Priorität. Du kannst das File weiter verwenden, oder es auch löschen und stattdessen die Hauptkonfiguration /etc/ssh/sshd_config verwenden.