Machinectl Dev Setup

Machinectl Dev Setup

Ziel

Entwicklung eines leichtgewichtigen Container-Orchestrators namens Ronin, der auf systemd-nspawn basiert. Dieses Setup richtet sich an Entwickler, die auf einem modernen Linux-System (z. B. Ubuntu 25.04) direkt arbeiten möchten – ohne Docker, ohne VM.


Voraussetzungen

Ubuntu 25.04 (x86_64) Root-Zugriff


Notwendige Pakete installieren

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo apt update
sudo apt install -y \
  systemd-container \
  debootstrap \
  bridge-utils \
  uidmap \
  dbus-user-session \
  systemd-resolved \
  systemd-timesyncd \
  git build-essential

Container-Verzeichnisstruktur vorbereiten

Systemd erwartet Container unter:

1
/var/lib/machines/

Beispiel:

1
sudo debootstrap stable /var/lib/machines/debian http://deb.debian.org/debian

Container starten:

1
sudo systemd-nspawn -M debian

machinectl verwenden

1
2
3
sudo machinectl start debian
sudo machinectl shell debian
sudo machinectl poweroff debian

Logs anzeigen:

1
journalctl -M debian

Netzwerk konfigurieren (optional)

Bridge erstellen:

1
2
sudo ip link add br0 type bridge
sudo ip link set br0 up

Beispiel .nspawn-Datei:

1
2
3
4
5
6
7
# /etc/systemd/nspawn/debian.nspawn
[Exec]
Boot=yes

[Network]
VirtualEthernet=yes
Bridge=br0

Justfile (optional)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
default:
    just --summary

setup:
    sudo apt install -y systemd-container debootstrap bridge-utils

bootstrap name:
    sudo debootstrap stable /var/lib/machines/{{name}} http://deb.debian.org/debian

start name:
    sudo machinectl start {{name}}

stop name:
    sudo machinectl poweroff {{name}}

shell name:
    sudo machinectl shell {{name}}

rebuild name:
    sudo rm -rf /var/lib/machines/{{name}}
    just bootstrap {{name}}

Nützliche Befehle

BefehlZweck
machinectl listContainer anzeigen
machinectl shell nameIn Container einloggen
journalctl -M nameLogs anzeigen
networkctlNetzwerkgeräte anzeigen

Weiterführend

  • Konfiguration von systemd-Services im Container
  • SSHD oder API-Gateway innerhalb des Containers starten
  • Integration mit Ronin-eigenem CLI-Tool zur Container-Steuerung

Möchtest du das Setup automatisieren, die Container regelmäßig aktualisieren oder dynamisch aus YAML generieren, ist das der nächste Schritt.