<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Container</id>
	<title>Systemd Baustein Container - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Container"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Container&amp;action=history"/>
	<updated>2026-10-21T13:45:52Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Baustein_Container&amp;diff=73776&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: Baustein Container (nspawn, machinectl, portable)</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Container&amp;diff=73776&amp;oldid=prev"/>
		<updated>2026-10-17T15:47:30Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Baustein Container (nspawn, machinectl, portable)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! ab Stufe !! Lernpfad&lt;br /&gt;
|-&lt;br /&gt;
| '''Container''' || [[Systemd Stufe 2 Fortgeschritten|Stufe 2]] bis [[Systemd Stufe 3 Security|Stufe 3]] || [[Systemd Lernpfad|Übersicht]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*systemd bringt mit '''systemd-nspawn''' einen eigenen, einfachen Container mit.&lt;br /&gt;
*Ein nspawn-Container ist ein Verzeichnis mit einem kompletten Linux darin. Gestartet läuft es mit eigenem systemd, eigenen Prozessen und eigenem Hostnamen, aber mit dem '''Kernel des Hosts'''.&lt;br /&gt;
*Das ist wie ein sehr starkes chroot, ähnlich wie LXC, aber ohne zusätzliche Software.&lt;br /&gt;
*'''machinectl''' verwaltet die Container wie Dienste: starten, stoppen, anmelden, beim Booten mitstarten.&lt;br /&gt;
*'''Portable Services''' gehen einen Schritt weiter: Ein Dienst bringt sein eigenes Dateisystem mit und wird trotzdem wie ein normaler Dienst des Hosts gestartet.&lt;br /&gt;
&lt;br /&gt;
=Einordnung=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! systemd-nspawn !! LXC !! Docker !! VM (KVM)&lt;br /&gt;
|-&lt;br /&gt;
| Was läuft darin || ein ganzes System || ein ganzes System || meist ein einzelner Prozess || ein ganzes System&lt;br /&gt;
|-&lt;br /&gt;
| Kernel || der des Hosts || der des Hosts || der des Hosts || ein eigener&lt;br /&gt;
|-&lt;br /&gt;
| Verwaltung || machinectl, systemctl || lxc-*, Proxmox || docker || virsh, Proxmox&lt;br /&gt;
|-&lt;br /&gt;
| Typisch für || Tests, Build-Umgebungen, kleine Dienste || Systemcontainer in Proxmox || Anwendungen || alles mit eigenem Kernel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einen Container anlegen=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt install systemd-container debootstrap&lt;br /&gt;
debootstrap --include=systemd,dbus trixie /var/lib/machines/debian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Alle Container liegen unter '''/var/lib/machines/'''. Der Verzeichnisname ist der Name des Containers.&lt;br /&gt;
&lt;br /&gt;
==root-Passwort setzen==&lt;br /&gt;
*Einmal ohne Boot hineinwechseln, wie bei chroot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemd-nspawn -D /var/lib/machines/debian&lt;br /&gt;
passwd&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Booten==&lt;br /&gt;
*systemd-nspawn -b -D /var/lib/machines/debian&lt;br /&gt;
*'''-b''' startet systemd im Container. Man sieht den Start und bekommt ein Login.&lt;br /&gt;
*Beenden: im Container '''poweroff''', oder dreimal schnell '''Strg+]'''.&lt;br /&gt;
&lt;br /&gt;
=Verwalten mit machinectl=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| machinectl list-images || alle Container unter /var/lib/machines&lt;br /&gt;
|-&lt;br /&gt;
| machinectl start debian || im Hintergrund starten&lt;br /&gt;
|-&lt;br /&gt;
| machinectl list || laufende Container&lt;br /&gt;
|-&lt;br /&gt;
| machinectl login debian || an der Konsole des Containers anmelden&lt;br /&gt;
|-&lt;br /&gt;
| machinectl shell debian || direkt eine root-Shell, ohne Passwort&lt;br /&gt;
|-&lt;br /&gt;
| machinectl status debian || Prozesse, Adresse, Dienst&lt;br /&gt;
|-&lt;br /&gt;
| machinectl poweroff debian || sauber herunterfahren&lt;br /&gt;
|-&lt;br /&gt;
| machinectl enable debian || beim Start des Hosts mitstarten&lt;br /&gt;
|}&lt;br /&gt;
*Hinter machinectl start steckt ein normaler Dienst: '''systemd-nspawn@debian.service'''&lt;br /&gt;
*journalctl -M debian zeigt das Journal '''im''' Container.&lt;br /&gt;
&lt;br /&gt;
=Konfiguration pro Container=&lt;br /&gt;
*/etc/systemd/nspawn/debian.nspawn&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Exec]&lt;br /&gt;
PrivateUsers=pick&lt;br /&gt;
&lt;br /&gt;
[Network]&lt;br /&gt;
VirtualEthernet=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| PrivateUsers=pick || root im Container ist auf dem Host ein unprivilegierter Benutzer&lt;br /&gt;
|-&lt;br /&gt;
| VirtualEthernet=yes || eigene Netzwerkkarte host0 im Container, Gegenstück ve-debian auf dem Host&lt;br /&gt;
|-&lt;br /&gt;
| Bridge=br0 || die Karte des Containers an eine Bridge des Hosts hängen&lt;br /&gt;
|-&lt;br /&gt;
| Bind=/srv/daten || ein Verzeichnis des Hosts im Container einhängen&lt;br /&gt;
|-&lt;br /&gt;
| Bind-ReadOnly=/srv/daten || dasselbe, nur lesbar&lt;br /&gt;
|}&lt;br /&gt;
*Netzwerk im Container: Wenn systemd-networkd im Container und auf dem Host läuft, bekommt host0 die Adresse automatisch per DHCP und NAT vom Host. Siehe [[Systemd Baustein Netzwerk]].&lt;br /&gt;
&lt;br /&gt;
=Portable Services=&lt;br /&gt;
*Ein Image mit einem Dienst darin wird an den Host '''angehängt'''. Danach ist es ein ganz normaler Dienst, nur mit eigenem Dateisystem.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| portablectl list || angehängte und verfügbare Images&lt;br /&gt;
|-&lt;br /&gt;
| portablectl attach ./dienst.raw || Image anhängen, die Units werden sichtbar&lt;br /&gt;
|-&lt;br /&gt;
| systemctl start dienst || wie jeder andere Dienst&lt;br /&gt;
|-&lt;br /&gt;
| portablectl detach dienst || wieder entfernen&lt;br /&gt;
|}&lt;br /&gt;
*Die Images liegen meist unter /var/lib/portables/.&lt;br /&gt;
*Genauer: [[Systemd-portabled]]&lt;br /&gt;
&lt;br /&gt;
=Sicherheit=&lt;br /&gt;
*Container teilen sich den Kernel mit dem Host. Eine Lücke im Kernel kann aus dem Container herausführen. Siehe [https://labs.xinux.net/container-vs-vm.html Container vs. VM].&lt;br /&gt;
*Ohne '''PrivateUsers=''' ist root im Container auch root auf dem Host, wenn er ausbricht.&lt;br /&gt;
*'''machinectl shell''' braucht kein Passwort, nur root auf dem Host. Wer root auf dem Host ist, hat alle Container.&lt;br /&gt;
*Für Analysen: Ein verdächtiges System als Abbild in einen nspawn-Container legen und dort mit '''--read-only''' untersuchen, ohne es zu booten.&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''Kein Login möglich:''' root-Passwort vergessen. Ohne -b hineinwechseln und passwd setzen.&lt;br /&gt;
*'''Kein Netz im Container:''' networkd läuft nicht, im Container oder auf dem Host.&lt;br /&gt;
*'''Dateirechte seltsam:''' Mit PrivateUsers=pick gehören die Dateien auf dem Host hohen UIDs wie 1234567. Das ist so gewollt.&lt;br /&gt;
*'''Strg+C beendet nicht:''' Aus einem gebooteten Container kommt man mit poweroff oder dreimal Strg+].&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Legen Sie einen Debian-Container mit debootstrap an.&lt;br /&gt;
#Setzen Sie das root-Passwort und booten Sie den Container.&lt;br /&gt;
#Starten Sie ihn mit machinectl im Hintergrund und melden Sie sich mit machinectl login an.&lt;br /&gt;
#Lassen Sie sich mit machinectl status die Prozesse anzeigen. Wie sehen sie auf dem Host mit ps aus?&lt;br /&gt;
#Lassen Sie den Container beim Start des Hosts mitstarten.&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Geben Sie dem Container mit VirtualEthernet=yes eine eigene Netzwerkkarte und installieren Sie darin einen Webserver.&lt;br /&gt;
#Schalten Sie PrivateUsers=pick ein. Mit welcher UID läuft root aus dem Container auf dem Host?&lt;br /&gt;
#Hängen Sie ein Verzeichnis des Hosts nur lesbar in den Container.&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;br /&gt;
*Alte Seiten: [[Systemd-nspawnd]] · [[Systemd-nspawnd-beschreibung]] · [[Systemd-portabled]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>