Proxmox VE - Angepasstes LXC Template Ich hatte heute den Fall, dass ich 33 gleich aussehende LXC Container erstellen musste. In jedem LXC Container sollten Basispakete wie vim, curl, htop, sysstat und so weiter installiert sein.

Zusätzlich wollte ich, dass direkt mein Apt-Cacher-ng verwendet wird, in allen Container die richtige .bashrc geladen ist und der Proxy-Server überall eingetragen ist.

Dies hätte man natürlich auch über ein Automatisierungstool wie Ansible oder Puppet lösen können. Allerdings ist der Aufwand in der Regel etwas größer, alle Regeln in Ansible und Co abzubilden. Ein Container-Template ist dagegen schnell gebaut.

Vorbereitungen

Ich habe meine LXC-Templates bisher immer direkt auf dem Proxmox VE Server angepasst.

Wichtig ist, ich werde kein komplett neues Template erstellen, sondern ein existierendes Template anpassen. Warum sollte man sich auch die Arbeit machen, die andere schon für einen getan haben?

Um Software inerhalb des Templates installieren zu könmnen, muss das Paket systemd-container auf dem System installiert sein, auf dem ihr das Template anpassen wollt.

apt-get install systemd-container

Template anpassen

Proxmox VE speichert die LXC Templates unter /var/lib/vz/template/cache/.

Proxmox VE - LXC Templates

Ich werde für mich das Template ubuntu-16.04-standard_16.04-1_amd64.tar.gz anpassen, da bei mir alles auf Ubuntu läuft.

Zuerst kopiere ich mir das originale Template, da ich dies natürlich nicht kaputt machen möchte.

mkdir /tmp/mein_template
cd /tmp/mein_template

cp /var/lib/vz/template/cache/ubuntu-16.04-standard_16.04-1_amd64.tar.gz .
tar xfv ubuntu-16.04-standard_16.04-1_amd64.tar.gz --numeric-owne
rm ubuntu-16.04-standard_16.04-1_amd64.tar.gz

LXC Container Dateisystem

Nach dem Entpacken hat man dann das Dateisystem des Containers vor sich.

Wenn man nur ein paar Dateien anpassen möchte, kann man dies direkt hier tun. Zum Beispiel Apt-Cacher-ng in der Datei etc/apt/sources.list oder einen Proxy-Server in etc/environment setzen.

Achtung: Der fehlende / am Anfang ist kein Tippfehler! Man befindet sich noch nicht "innerhalb" des Templates, sondern hat nur die Dateien auf der Festplatte liegen.

Programme im LXC Template installieren

Jezt wird es interessant.

Mit dem Befehl systemd-nspawn -D /tmp/mein_template springe ich nun in das LXC Template.

root@pve1:/tmp/mein_template# systemd-nspawn -D /tmp/mein_template
Spawning container mein_template on /tmp/mein_template.
Press ^] three times within 1s to kill container.
root@mein_template:~#

Ab jetzt befinde ich mich "innerhalb" des LXC Templates. Ich kann hier also über apt-get install alles installieren, was ich benötige oder nach belieben Dateien verändern.

Damit der Container DNS-Anfragen auflösen kann, müsst ihr zuerst euren DNS-Server setzen.

rm /etc/resolv.conf
echo "nameserver 192.168.1.1" > /etc/resolv.conf

Installation von Programmen innerhalb eines LXC Templates

Nachdem alles installiert und angepasst ist, könnt ihr den Container wieder verlassen.

Um die Größe des Templates zu reduzieren, sollte man noch alle heruntergeladenen Pakete von apt löschen.

apt-get clean

Den Container kann man mit STRG+D oder logout wieder verlassen.

root@mein_template:~# logout
Container mein_template exited successfully.
root@pve1:/tmp/mein_template#

Neues Template erstellen

Nun erstelle ich von dem angepassten Template ein neues tar.gz mit dem Namen ubuntu-xenial_modified_amd64.tar.gz.

tar -zcvf /tmp/ubuntu-xenial_modified_amd64.tar.gz . --numeric-owner

Danach kann man das Template einfach wieder zu den anderen kopieren

cp /tmp/ubuntu-xenial_modified_amd64.tar.gz /var/lib/vz/template/cache/

und sieht es sofort in der Proxmox VE Web-Oberfläche. Proxmox VE - Angepasstes LXC Template

Nun kann man LXC Container erstellen, welche das angepasste Template verwenden.

Damit man gleich sieht, dass dieser Container aus einem angepassten Template erstellt wurde, habe ich in die modt einfach einmal mein CrateDB ASCII Logo gepackt. Laufender LXC Container mit eigenem Template

Viele LXC Container auf einmal erstellen

Proxmox VE hat zum Glück gleich ein praktisches Tool, um LXC Container über die CLI zu erstellen. Wer mehr dazu wissen möchte, sollte einmal man pct lesen.

Hier ein kleines Beispiel was einen LXC Container mit 2 CPU Kernen, 4GB RAM und 12GB HDD erstellt:

pct create --password --arch amd64 --cmode tty --console 1 --cores 2 --memory 4096 --net0 bridge=vmbr0,name=eth0,ip=dhcp --rootfs local-zfs:12 --ostype ubuntu --hostname foobar 1337 local:vztmpl/ubuntu-xenial_modified_amd64.tar.gz