Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:systemd-container

"Müllcontainer"

Container für Anwendung, die große Mengen schwer zu pflegende Abhängigkeiten mitbringt

Pakete

  • Rocky Linux (9):
    • erst epel-release installieren (fügt neues Repository hinzu)
    • debootstrap tmux systemd-container
  • Debian (12): debootstrap tmux systemd-container

Storage

systemd-nspawn kann die Snapshot Features von Btrfs nutzen:

mkfs.btrfs /dev/???

Btrfs nach /var/lib/machines/ mounten:

mount /srv/machines.btrfs.img /var/lib/machines/
tail -n1 /proc/mounts >> /etc/fstab
chmod 700 /var/lib/machines/

Bei RedHat basierten Distributionen gibt es keinen einfachen Weg, Btrfs zu nutzen. XFS oder Ext4 tun es auch, ist halt in manchen Szenarien langsamer.

Vorlagen-Image für Debian erstellen

cd /var/lib/machines/

Debian Image erzeugen

debootstrap --include=systemd,dbus stable /var/lib/machines/debian http://debian/debian
ln -sf ../../../etc/machine-id debian/var/lib/dbus/machine-id
> debian/etc/machine-id
mkdir /etc/systemd/nspawn
vim /etc/systemd/nspawn/debian.nspawn
/etc/systemd/nspawn/debian.nspawn
[Network]
VirtualEthernet=no
machinectl list-images

→ sollte debian anzeigen

Container für Anwendung erzeugen

machinectl clone debian etherpad
machinectl show-image etherpad

→ sollte Details zu dem neuen Image anzeigen

btrfs subvolume list /var/lib/machines

→ sollte subvolume „etherpad“ anzeigen

echo etherpad > etherpad/etc/hostname
machinectl start etherpad
machinectl status etherpad

→ container sollte laufen

machinectl shell etherpad /bin/bash

→ danach anwendungsspezifisch weiter, z.B. etherpad

Sonstiges

Passwort setzen:

systemd-nspawn -D stretch passwd

SSH-Schlüssel hinein kopieren:

install -d -m 700 stretch/root/.ssh
install -m 600 /home/nutzer24/.ssh/id_rsa.pub stretch/root/.ssh/authorized_keys

Netzwerk per DHCP:

cat <<EOF >> debian/etc/network/interfaces
auto host0
iface host0 inet dhcp
EOF

Container test1 starten:

tmux new -s test1 systemd-nspawn --template=debian --directory=test1 -M test1 --network-veth -b

DHCP-Server auf dem Host starten:

ip addr add 10.0.0.1/24 dev ve-test1 # per udev automatisieren? oder systemd.device?
ip link set up dev ve-test1
dnsmasq -d --bind-dynamic --listen-address 10.0.0.1 --dhcp-range 10.0.0.10,10.0.0.20
ssh -i /home/nutzer24/.ssh/id_rsa 10.0.0.15 uname -a

Container test1 stoppen:

machinectl status test1
machinectl terminate test1

Image test1 entfernen:

machinectl show-image test1
machinectl remove test1
admin_grundlagen/systemd-container.txt · Zuletzt geändert: 2024/02/23 08:44 von ingo_wichmann