<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/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://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Container"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Systemd_Baustein_Container&amp;action=history"/>
	<updated>2026-11-03T00:09:50Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.ixheim.de/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://wiki.ixheim.de/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;
| &amp;#039;&amp;#039;&amp;#039;Container&amp;#039;&amp;#039;&amp;#039; || [[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 &amp;#039;&amp;#039;&amp;#039;systemd-nspawn&amp;#039;&amp;#039;&amp;#039; 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 &amp;#039;&amp;#039;&amp;#039;Kernel des Hosts&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Das ist wie ein sehr starkes chroot, ähnlich wie LXC, aber ohne zusätzliche Software.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;machinectl&amp;#039;&amp;#039;&amp;#039; verwaltet die Container wie Dienste: starten, stoppen, anmelden, beim Booten mitstarten.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Portable Services&amp;#039;&amp;#039;&amp;#039; 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 &amp;#039;&amp;#039;&amp;#039;/var/lib/machines/&amp;#039;&amp;#039;&amp;#039;. 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;
*&amp;#039;&amp;#039;&amp;#039;-b&amp;#039;&amp;#039;&amp;#039; startet systemd im Container. Man sieht den Start und bekommt ein Login.&lt;br /&gt;
*Beenden: im Container &amp;#039;&amp;#039;&amp;#039;poweroff&amp;#039;&amp;#039;&amp;#039;, oder dreimal schnell &amp;#039;&amp;#039;&amp;#039;Strg+]&amp;#039;&amp;#039;&amp;#039;.&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: &amp;#039;&amp;#039;&amp;#039;systemd-nspawn@debian.service&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*journalctl -M debian zeigt das Journal &amp;#039;&amp;#039;&amp;#039;im&amp;#039;&amp;#039;&amp;#039; 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 &amp;#039;&amp;#039;&amp;#039;angehängt&amp;#039;&amp;#039;&amp;#039;. 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 &amp;#039;&amp;#039;&amp;#039;PrivateUsers=&amp;#039;&amp;#039;&amp;#039; ist root im Container auch root auf dem Host, wenn er ausbricht.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;machinectl shell&amp;#039;&amp;#039;&amp;#039; 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 &amp;#039;&amp;#039;&amp;#039;--read-only&amp;#039;&amp;#039;&amp;#039; untersuchen, ohne es zu booten.&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Kein Login möglich:&amp;#039;&amp;#039;&amp;#039; root-Passwort vergessen. Ohne -b hineinwechseln und passwd setzen.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Kein Netz im Container:&amp;#039;&amp;#039;&amp;#039; networkd läuft nicht, im Container oder auf dem Host.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dateirechte seltsam:&amp;#039;&amp;#039;&amp;#039; Mit PrivateUsers=pick gehören die Dateien auf dem Host hohen UIDs wie 1234567. Das ist so gewollt.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Strg+C beendet nicht:&amp;#039;&amp;#039;&amp;#039; 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>