BEZEICHNUNG
systemd-nspawn - Erzeugt einen Befehl oder ein Betriebssystem in einem leichtgewichtigen ContainerÜBERSICHT
systemd-nspawn
[OPTIONEN…] [ BEFEHL [ARG…]]
systemd-nspawn
--boot [OPTIONEN…] [ARG…]
BESCHREIBUNG
systemd-nspawn kann zur Ausführung eines Befehls oder Betriebssystems (OS) in einem leichtgewichtigen Namensraum-Container verwandt werden. In vielerlei Art ist es zu chroot(1) ähnlich, aber leistungsfähiger, da es die Dateisystemhierarchie sowie den Prozessbaum, die verschiedenen IPC-Untersysteme und den Rechner- und Domain-Namen komplett virtualisiert. systemd-nspawn kann in jedem Verzeichnisbaum, der einen Betriebssystembaum enthält, mittels der Befehlszeilenoption --directory= aufgerufen werden. Durch Verwendung der Option --machine= wird der OS-Baum automatisch nach einer Reihe von Orten durchsucht, am wichtigsten dabei ist /var/lib/machines/, das bevorzugte Verzeichnis, um auf dem System installierte OS-Container-Abbilder abzulegen. Im Gegensatz zu chroot(1) kann systemd-nspawn zum Starten kompletter, Linux-basierter Betriebssysteme in einem Container verwandt werden. systemd-nspawn begrenzt den Zugriff auf verschiedene Kernelschnittstellen, wie /sys/, /proc/sys/ oder /sys/fs/selinux/, im Container auf nur-lesbar. Die Netzwerkschnittstelle des Wirts und die Systemuhr können aus dem Container heraus nicht geändert werden. Geräteknoten können nicht erstellt werden. Das Wirtssystem kann nicht neu gestartet werden und Kernelmodule dürfen von innerhalb des Containers nicht geladen werden. Verwenden Sie Werkzeuge wie dnf(8), debootstrap(8) oder pacman(8), um eine geeignete OS-Verzeichnisbaumhierarchie für systemd-nspawn einzurichten. Lesen Sie den nachfolgenden Abschnitt »Beispiele« für geeignete Aufrufe dieser Befehle. Als Sicherheitsprüfung wird systemd-nspawn die Existenz von /usr/lib/os-release oder /etc/os-release im Container-Baum überprüfen, bevor der Systemstart des Containers durchgeführt wird (siehe os-release(5)). Es könnte notwendig sein, diese Datei manuell zum Container-Baum hinzuzufügen, falls das OS des Containers zu alt ist, um diese Datei bereits mitgeliefert zu haben. systemd-nspawn kann direkt von der interaktiven Befehlszeile aus oder als Systemdienst im Hintergrund aufgerufen werden. In diesem Modus betreibt jede Container-Instanz seine eigene Dienste-Instanz; eine Standard-Vorlagen-Unit-Datei [email protected] wird bereitgestellt, um dies leicht zu ermöglichen; sie akzeptiert den Container-Namen als Instanzen-Kennzeichner. Beachten Sie, dass andere Vorgabeoptionen gelten, wenn systemd-nspawn durch die Vorlagen-Unit-Datei als wenn es interaktiv auf der Befehlszeile aufgerufen wird. Der wichtigste Unterschied bei den Vorgaben ist, dass die Vorlagen-Unit-Datei die Option --boot verwendet, während dies beim Aufruf von systemd-nspawn auf der Befehlszeile nicht der Fall ist. Weitere Unterschiede in den Vorgaben sind zusammen mit den verschiedenen unterstützten Optionen weiter unten dokumentiert. Das Werkzeug machinectl(1) kann zur Ausführung einer Reihe von Aktionen an Containern verwandt werden. Es stellt insbesondere leicht zu benutzende Befehle bereit, um Container als Systemdienste mittels der Vorlagen-Unit-Datei [email protected] auszuführen. Neben jedem Container kann eine Einstellungsdatei mit der Endung .nspawn existieren, die zusätzliche, bei der Ausführung des Containers anzuwendende Einstellungen enthält. Siehe systemd.nspawn(5) für Details. Einstellungsdateien setzen die von der Vorlagen-Unit-Datei [email protected] verwandten Vorgabeoptionen außer Kraft, wodurch es im Allgemeinen unnötig wird, diese Vorlagendatei direkt zu ändern. Beachten Sie, dass systemd-nspawn Dateisysteme privat für den Container nach /dev/, /run/ und ähnlichem einhängen wird. Diese werden außerhalb des Containers nicht sichtbar sein und ihre Inhalte gehen verloren, wenn sich der Container beendet. Beachten Sie, dass die Ausführung von zwei systemd-nspawn-Containern aus dem gleichen Verzeichnis nicht dazu führt, dass sich die Prozesse in beiden gegenseitig sehen. Die PID-Namensraumtrennung der zwei Container ist vollständig und die Container nutzen sehr wenige Laufzeitobjekte gemeinsam, außer das unterliegende Dateisystem. Verwenden Sie eher die Befehle login oder shell von machinectl(1), um zusätzliche Anmeldesitzungen in einem laufenden Container zu erbitten. systemd-nspawn implementiert die Spezifikation Container-Schnittstelle[1]. Während des Betriebs werden mittels systemd-nspawn aufgerufene Container mit dem Dienst systemd-machined(8) registriert. Dieser verfolgt die laufenden Container nach und stellt Programmierschnittstellen bereit, um mit ihnen zu interagieren.OPTIONEN
Falls die Option -boot angegeben ist, werden die Argumente als Argumente für das Init-Programm verwandt. Andernfalls gibt BEFEHL das zu startende Programm in dem Container an und die verbleibenden Argumente werden als Argumente für dieses Programm benutzt. Falls --boot nicht verwandt wird und keine Argumente angegeben sind, wird eine Shell in dem Container gestartet. Die folgenden Optionen werden verstanden: -q, --quietSchaltet sämtliche Statusausgaben des
Werkzeuges selbst aus. Wird dieser Schalter verwandt, wird die einzige Ausgabe
von Nspawn die Ausgabe der Konsole des Container-Betriebssystems selbst
sein.
--settings=MODUS
Steuert, ob systemd-nspawn nach
Container-bezogenen Einstellungen aus .nspawn-Dateien suchen und diese
verwenden soll. Akzeptiert einen logischen oder die besonderen Werte
override oder trusted.
Falls aktiviert (die Vorgabe), wird eine Einstellungsdatei, die nach der
Maschine (wie mit der Einstellung --machine= angegeben oder aus dem
Verzeichnis oder Abbildnamen abgeleitet) mit der Endung.nspawn benannt ist, in
/etc/systemd/nspawn/ und /run/systemd/nspawn/ gesucht. Falls sie dort gefunden
wird, werden deren Einstellungen gelesen und verwandt. Falls sie dort nicht
gefunden wird, wird sie nachfolgend in dem gleichen Verzeichnis wie die
Abbilddatei oder in dem Verzeichnis direkt über dem Wurzelverzeichnis
des Containers gesucht. Falls die Datei in diesem Fall gefunden wird, werden
ihre Einstellungen auch gelesen und verwandt, aber möglicherweise
unsichere Einstellungen werden ignoriert. Beachten Sie, dass in beiden
Fällen die Einstellungen auf der Befehlszeile Vorrang gegenüber
den entsprechenden Einstellungen aus geladenen .nspawn-Dateien haben, falls
beide angegeben sind. Alle Einstellungen, die die Privilegien des Containers
erhöhen oder Zugriff auf zusätzliche Ressourcen wie Dateien oder
Verzeichnissen auf der Wirtsmaschine geben können, werden als unsichere
Einstellungen betrachtet. Für Details über das Format und die
Inhalte von .nspawn-Dateien lesen Sie bitte systemd.nspawn(5).
Falls diese Option auf override gesetzt ist, wird die Datei durchsucht,
gelesen und auf die gleiche Art verwandt, allerdings ist die
Vorrangreihenfolge umgedreht: Einstellungen aus den .nspawn-Dateien haben
Vorrang vor den entsprechenden Einstellungen der Befehlszeilenoptionen, falls
beide angegeben sind.
Falls diese Option auf trusted gesetzt ist, wird die Datei durchsucht,
gelesen und auf die gleiche Art verwandt, unabhängig davon, wo sie in
/etc/systemd/nspawn/, /run/systemd/nspawn/ oder neben der Abbild-Datei oder
dem Wurzelverzeichnis des Containers gefunden wurde, alle Einstellungen werden
wirksam, allerdings haben Befehlszeilenoptionen weiterhin Vorrang vor den
entsprechenden Einstellungen.
Falls deaktiviert, werden keine .nspawn-Dateien gelesen und keine Einstellungen
außer denen auf der Befehlszeile werden wirksam.
Abbild-Optionen
-D, --directory=Verzeichnis, das als Dateisystemwurzel
für den Container verwandt werden soll.
Falls weder --directory= noch --image= angegeben sind, wird das
Verzeichnis ermittelt, indem nach einem Verzeichnis, dessen Namen mit einem
mittels --machine= übergebenen Maschinennamen
übereinstimmt, gesucht wird. Siehe den Abschnitt »Dateien und
Verzeichnisse« in machinectl(1) für den genauen Suchpfad.
Falls weder --directory=, --image= noch --machine=
angegeben sind, wird das aktuelle Verzeichnis verwandt. Darf nicht zusammen
mit --image= angegeben werden.
--template=
Verzeichnis oder
»btrfs«-Teildatenträger, das/der als Vorlage für
das Wurzelverzeichnis des Containers verwandt werden soll. Falls dies
angegeben ist und das Wurzelverzeichnis des Containers (wie mit
--directory= konfiguriert) noch nicht existiert, wird es als
»btrfs«-Schnappschuss (falls unterstützt) oder als
einfaches Verzeichnis (andernfalls) erstellt und von diesem Vorlagenbaum
befüllt. Idealerweise bezieht sich der angegebene Vorlagenpfad auf das
Wurzelverzeichnis eines »btrfs«-Teildatenträgers, wodurch
in diesem Fall ein einfacher
»Kopieren-beim-Schreiben«-Schnappschuss gemacht wird und das
Befüllen des Wurzelverzeichnisses instantan erfolgt. Falls sich der
angegebene Vorlagenpfad nicht auf die Wurzel eines
»btrfs«-Teildatenträgers bezieht (oder noch nicht einmal
auf einem »btrfs«-Dateisystem liegt), wird der Verzeichnisbaum
kopiert (möglicherweise allerdings in einem
»reflink«-»Kopieren-beim-Schreiben«-Schema
— falls das Dateisystem dies unterstützt), was deutlich mehr
Zeit benötigen kann. Beachten Sie, dass der Schnappschuss von dem
angegebenen Verzeichnis oder Teildatenträger vorgenommen wird,
einschließlich aller Unterverzeichnisse und Teildatenträger,
aber ausschließlich aller Untereinhängungen. Darf nicht zusammen
mit --image= oder --ephemeral angegeben werden.
Beachten Sie, dass dieser Schalter den Rechnernamen, die Maschinenkennung und
alle anderen Einstellungen, die die Instanz identifizieren könnten,
unverändert lässt.
-x, --ephemeral
Führt den Container mit einem
temporären Schnappschuss seines Dateisystems aus, falls angegeben.
Dieser wird direkt nach Beenden des Containers entfernt. Darf nicht zusammen
mit --template= angegeben werden.
Beachten Sie, dass dieser Schalter den Rechnernamen, die Maschinenkennung und
alle anderen Einstellungen, die die Instanz identifizieren könnten,
unverändert lässt. Beachten Sie, dass wie bei --template=
das Vornehmen eines temporären Schnappschusses auf Dateisystemen, die
Teildatenträger oder nativ »reflinks« unterstützen
(»btrfs« oder neues »xfs«), effizienter als auf
traditionelleren Dateisystemen, die das nicht tun (»ext4«), ist.
Beachten Sie, dass der aufgenommene Schnappschuss das gesamte angegebene
Verzeichnis oder Teildatenträger umfasst, einschließlich aller
Unterverzeichnisse und Teildatenträger darunter, aber
ausschließlich aller Untereinhängungen.
Mit dieser Option werden keine Änderungen am Container-Abbild erhalten.
Verwenden Sie (das nachfolgend beschriebene) --volatile= als weiteren
Mechanismus, um die Dauerhaftigkeit von Container-Abbildern zur Laufzeit zu
begrenzen.
-i, --image=
Plattenabbild, aus dem das Wurzelverzeichnis
für den Container geladen werden soll. Akzeptiert einen Pfad zu einer
regulären Datei oder zu einem Blockgeräteknoten. Die Datei oder
das Blockgerät muss eines der Folgenden enthalten:
Falls eine EFI-Systempartition (ESP) auf GPT-Abbildern entdeckt wird, wird diese
automatisch nach /efi (oder /boot als Rückfall) eingehängt,
falls ein Verzeichnis dieses Namens existiert und leer ist.
Mit LUKS verschlüsselte Partitionen werden automatisch
entschlüsselt. Auf GPT-Abbildern prüft dm-verity auch, ob die
Datenintegritäts-Hash-Partitionen eingerichtet sind, falls der
Wurzel-Hash für sie mit der Option --root-hash= angegeben wurde.
Einzelne Dateisystemabbilder (d.h. Dateisysteme ohne eine umgebende
Partitionstabelle) können mittels Dm-verity geöffnet werden,
falls die Integritätsdaten mittels der Optionen --root-hash= und
--verity-data= (und optional --root-hash-sig=) übergeben
werden.
Alle anderen Partitionen, wie fremde Partitionen oder Auslagerungspartitionen,
werden nicht eingehängt. Darf nicht zusammen mit --directory=,
--template= angegeben werden.
--oci-bundle=
•Eine MBR-Partitionstabelle mit einer
einzelnen Partition vom Typ 0x83, der startfähig markiert ist.
•Eine GUID-Partitionstablle (GPT) mit
einer einzelnen Partition vom Typ 0fc63daf-8483-4772-8e79-3d69d8477de4.
•Eine GUID-Partitionstabelle (GPT) mit
einer markierten Wurzelpartition, die als Wurzelverzeichnis des Containers
eingehängt ist. Optional dürfen GPT-Abbilder auch eine Home-
oder Serverdatenpartition enthalten, die an den geeigneten Stellen im
Container eingehängt sind. Alle diese Partitionen müssen durch
die in Spezifikation auffindbarer Partitionen[2] definierten
Partitionstypen identifiziert werden.
•Keine Partitionstabelle und eine
einzelne Datei, die sich über das gesamte Abbild erstreckt.
Akzeptiert einen Pfad zu einem aufzurufenden
OCI-Laufzeitbündel, wie in der OCI-Laufzeit-Spezifikation[3]
spezifiziert ist. In diesem Fall wird keine .nspawn-Datei geladen und das
Wurzelverzeichnis und verschiedene Einstellungen werden aus den
OCI-Laufzeit-JSON-Daten eingelesen (allerdings haben auf der Befehlszeile
übergebene Daten Vorrang).
--read-only
Hängt das Wurzeldateisystem des
Containers (und alle anderen Dateisysteme-Container in dem Container-Abbild)
nur-lesbar ein. Dies hat für zusätzliche Einhängungen mit
--bind=, --tmpfs= und ähnlichen Optionen keine Wirkung.
Dieser Modus ist impliziert, falls das Container-Abbild oder Verzeichnis als
nur-lesbar markiert wurde. Beim Einsatz von --volatile= wird dies auch
impliziert. In diesem Fall ist das Container-Abbild auf Platte streng
nur-lesbar, wobei Änderungen erlaubt sind, aber nur nicht dauerhaft im
Arbeitsspeicher gehalten werden. Weitere Details finden Sie nachfolgend.
--volatile, --volatile=MODUS
Startet den Container im flüchtigen
Mouds. Wird kein Modusparameter übergeben oder der Modus als yes
angegeben, dann wird der vollständige flüchtige Modus aktiviert.
Dies bedeutet, dass das Wurzelverzeichnis eine größtenteils
leere »tmpfs«-Instanz ist und /usr/ aus dem Betriebssystembaum
dort nur-lesbar hineingehängt ist (das System startet daher mit einem
nur-lesbaren Betriebssystemabbild aber einem jungfräulichen Zustand und
jungfräulicher Konfiguration und sämtliche Änderungen an
Letzterem gehen beim Herunterfahren verloren). Falls der Modusparameter als
overlay angegeben ist, wird das nur-lesbare Wurzeldateisystem mit einer
schreibbaren Tmpfs-Instanz mittels »overlayfs« kombiniert, so
dass es sich wie normalerweise verhält, aber sämtliche
Änderungen nur an dem temporären Dateisystem vorgenommen werden
und daher bei der Beendigung des Containers verloren gehen. Falls der
Modusparameter als no angegeben ist (die Vorgabe), dann wird der
gesamte Betriebssystembaum schreibbar zur Verfügung gestellt
(außer --read-only ist angegeben, siehe oben).
Beachten Sie, dass bei der Auswahl einer der flüchtigen Modi die
Auswirkung auf das Wurzeldateisystem (oder im Falle von state /var/)
begrenzt wird und jede andere, in der Hierarchie angeordnete Einhängung
davon unbetroffen ist, unabhängig davon, ob sie automatisch (z.B. die
EFI-Systempartition, die nach /efi/ oder /boot/ eingehängt sein
könnte) oder explizit (z..B. durch eine zusätzliche
Befehlszeilenoption wie --bind=, siehe unten) etabliert wurden. Dies
bedeutet, dass Änderungen an /efi/ oder /boot/ verboten sind, selbst
falls --volatile=overlay verwandt wurde und eine solche Partition im
betroffenen Container-Abbild existiert und selbst falls
--volatile=state verwandt wird, wird eine hypothetische Datei
/etc/foobar möglicherweise schreibbar, falls --bind=/etc/foobar
zum Einhängen von außerhalb des nur lesbaren
Container-/etc/-Verzeichnisses verwnadt wird.
Die Option --ephemeral hat einen engen Bezug zu dieser Einstellung und
stellt ähnliches Verhalten bereit, bei dem eine temporäre und
vergängliche Kopie des gesamten Betriebssystemabbildes erfolgt und
diese dann ausgeführt wird. Weitere Details finden Sie weiter oben.
Die Option --tmpfs= und --overlay= stellen ähnliche
Funktionalität bereit, allerdings nur für bestimmte
Unterverzeichnisse des Betriebssystemabbildes. Details finden Sie nachfolgend.
Diese Option stellt ähnliche Funktionalität für Container
bereit, wie der Befehlszeilenschalter »systemd.volatile=« dies
für Rechner selbst darstellt. Siehe kernel-command-line(7)
für Details.
Beachten Sie, dass das Setzen dieser Option auf yes oder state nur
funktioniert, falls das Betriebssystem des Containers einen Systemstart mit
ausschließlich eingehängtem /usr/ durchführen und dann
selbständig /var/ bevölkern (und im Falle von
»--volatile=yes« auch /etc/) kann. Dies bedeutet insbesondere,
dass Betriebssysteme, die der historischen Aufteilung von /bin/ und /lib/ (und
zugehörigen Verzeichnissen) von /usr/ folgen (d.h. bei denen Erstere
keine Symlinks in Letztere sind), bei »--volatile=yes« nicht als
Container-Inhalt unterstützt werden. Die Option overlay verlangt
keine besonderen Vorbereitungen von dem Betriebssystem, aber beachten Sie,
dass sich das Verhalten von »overlayfs« von dem regulärer
Dateisysteme in einer Reihe von Punkten unterscheidet und somit die
Kompatibilität eingeschränkt ist.
--root-hash=
Akzeptiert einen hexadezimalen
Dateiintegritäts-Wurzel-Hash (dm-verity). Diese Option aktiviert
Datenintegritätsüberprüfungen mittels dm-verity, falls
das verwandte Abbild die notwendigen Integritätsdaten enthält
(siehe oben). Der angegebene Hash muss auf den Wurzel-Hash der
Integritätsdaten passen und ist normalerweise mindestens 256 Bit (und
damit 64 formatierte hexadezimale Zeichen) lang (im beispielhaften Fall von
SHA256). Falls diese Option nicht angegeben ist, aber das Abbild das
erweiterte Attribut »user.verity.roothash« trägt (siehe
xattr(7)), dann wird der Wurzel-Hash und auch die formatierten
hexadezimalen Zeichen daraus gelesen. Falls das erweiterte Dateiattribut nicht
gefunden wird (oder von dem zugrundeliegenden Dateisystem nicht
unterstützt wird), aber eine Datei mit der Endung .roothash neben dem
Abbild gefunden wird, das ansonsten den gleichen Namen trägt
(außer falls das Abbild die Endung .raw enthält, dann darf die
Root-Hash-Datei dies nicht in ihrem Namen enthalten), dann wird der
Wurzel-Hash und auch die formatierten hexadezimalen Zeichen daraus gelesen und
automatisch verwandt.
Beachten Sie, dass dies den Wurzel-Hash für das Wurzeldateisystem
konfiguriert. Plattenabbilder können auch separate Dateiystem
für die /usr/-Hierarchie enthalten, die auch Verity-geschützt
sein kann. Der Wurzel-Hash für diesen Schutz kann mit dem erweiterten
Dateiattribut »user.verity.usrhash« oder mittels einer
.usrhash-Datei neben dem Plattenabbild konfiguriert werden. Dies folgt dem
gleichen Format und der gleichen Logik wie für den hier beschriebenen
Wurzel-Hash für das Wurzeldateisystem. Beachten Sie, dass es derzeit
keinen Schalter gibt, um den Wurzel-Hash für /usr/ von der Befehlszeile
aus zu konfigurieren.
Siehe auch die Option RootHash= in systemd.exec(5).
--root-hash-sig=
Akzeptiert eine PKCS7-Signatur der Option
--root-hash=. Die Semantik ist zur Option RootHashSignature=
identisch, siehe systemd.exec(5).
--verity-data=
Akzeptiert einen Pfad zu einer
Datenintegritätsdatei (dm-verity). Diese Option aktiviert
Datenintegritätsüberprüfungen mittels Dm-verity, falls
ein Wurzel-Hash übergeben wird und falls das verwandte Abbild selbst
keine Integritätsdaten enthält. Die Integritätsdaten
müssen mit dem Wurzel-Hash übereinstimmen. Falls diese Option
nicht angegeben ist, aber eine Datei mit der Endung ».verity«
neben der Abbild-Datei gefunden wird, die ansonsten den gleichen Namen
trägt (außer falls das Abbild die Endung ».raw«
hat, in welchem Falle die Verity-Datendatei dies nicht in ihrem Namen haben
darf), dann werden die Verity-Daten daraus gelesen und automatisch
verwandt.
--pivot-root=
Schwenkt in das angegebene Verzeichnis als /
innerhalb des Containers um und hängt entweder die alte Wurzel des
Containers aus oder schwenkt sie auf ein anderes angegebenes Verzeichnis um.
Akzeptiert entweder ein Pfadargument (in diesem Fall wird der angegebene Pfad
zu / verschwenkt und die alte Wurzel ausgehängt) oder ein
Doppelpunkt-getrenntes Paar aus neuem Wurzelpfad und Schwenkziel für
die alte Wurzel. Der neue Wurzelpfad wird auf / verschwenkt und die alte /
wird auf das andere Verzeichnis verschwenkt. Beide Pfade müssen absolut
und im Dateisystemnamensraum des Containers auflösbar sein.
Dies ist für Container, die mehrere startfähige Verzeichnisse
enthalten, beispielweise mehrere OSTree[4]-Einsätze. Sie
emuliert das Verhalten eines Systemstartprogrammes und einer Initrd, die
normalerweise auswählt, welches Verzeichnis als Wurzel
eingehängt und darin PID 1 des Containers gestartet wird.
Ausführungsoptionen
-a, --as-pid2Ruft die Shell oder das angegebene Programm
als Prozesskennung (PID) 2 statt als PID 1 (Init) auf.
Standardmäßig wird das ausgewählte Programm als Prozess
mit PID 1 ausgeführt, falls weder diese noch die Option --boot
verwandt wird. Dieser Modus ist nur für Programme geeignet, die sich
der besonderen Semantik, die Prozesse mit der PID 1 unter UNIX haben, bewusst
sind. Beispielsweise muss er alle (Zombie-)Prozesse beseitigen, deren
Elternprozess er geworden ist, und sollte sysvinit-kompatible
Signalhandhabung implementieren (insbesondere muss sie bei SIGINT das System
neu starten, bei SIGTERM sich selbst neu ausführen, ihre Konfiguration
bei SIGHUP neu einlesen und so weiter). Mit --as-pid2 wird ein
minimaler Init-Prozess als PID 1 und das ausgewählte Programm wird als
PID 2 ausgeführt (und muss daher keine besonderen Semantiken
implementieren). Der minimale Init-Prozess wird (Zombie-)Prozesse wie
nötig beseitigen und geeignet auf Signale reagieren. Es wird empfohlen,
diesen Modus zum Aufruf von beliebigen Befehlen in Containern zu verwenden,
außer diese wurden zum Betrieb als PID 1 angepasst. Mit anderen Worten:
dieser Schalter sollte für so ziemlich alle Befehle verwendet werden,
außer der Befehl bezieht sich auf eine Init- oder
Shell-Implementierung, da diese im Allgemeinen in der Lage sind, korrekt als
PID 1 zu laufen. Diese Option darf nicht mit --boot kombiniert
werden.
-b, --boot
Sucht automatisch nach einem Init-Programm und
ruft es als PID 1 statt einer Shell oder eines benutzerdefinierten Programms
auf. Falls diese Option verwandt wird, werden auf der Befehlszeile
übergebene Argumente als Argumente für das Init-Programm
verwandt. Diese Option darf nicht mit --as-pid2 kombiniert werden.
Die nachfolgende Tabelle erklärt die verschiedenen Aufrufmodi und die
Beziehung zu --as-pid2 (siehe oben):
Tabelle 1. Aufrufmodus
Beachten Sie, dass --boot der Standardaktionsmodus ist, falls die
Vorlagen-Unit-Datei [email protected] verwandt wird.
--chdir=
Schalter | Erklärung |
Weder --as-pid2 noch --boot angegeben | Die übergebenen Parameter werden als Befehlszeile interpretiert, die als PID 1 im Container ausgeführt wird. |
--as-pid2 angegeben | Die übergebenen Parameter werden als Befehlszeile interpretiert, die als PID 2 im Container ausgeführt wird. Ein minimaler Init-Prozess wird als PID 1 ausgeführt. |
--boot angegeben | Im Container wird automatisch nach einem Init-Programm gesucht und dieses als PID 1 ausgeführt. Die übergebenen Parameter werden als Aufrufparameter für diesen Prozess verwandt. |
Wechselt vor Aufruf des Prozesses im Container
zu dem angegebenen Arbeitsverzeichnis. Erwartet einen absoluten Pfad in dem
Dateisystemnamensraum des Containers.
-E NAME[=WERT],
--setenv=NAME[=WERT]
Gibt die Umgebungsvariablen an, die an den
Init-Prozess im Container übergeben werden soll. Dies kann zum
Außerkraftsetzen der Vorgabenvariablen oder zum Setzen
zusätzlicher Variablen verwandt werden. Es kann mehr als einmal benutzt
werden, um mehrere Variablen zu setzen. Wenn »=« und WERT
nicht angegeben sind, dann wird der Wert der Variablen mit dem gleichen Namen
in der Programmumgebung verwandt.
-u, --user=
Wechselt nach Übergang in den Container
zu dem angegebenen Benutzer, wie er in der Benutzerdatenbank im Container
definiert ist. Wie alle anderen Systemd-nspawn-Funktionalitäten ist
dies keine Sicherheitsfunktionalität und stellt nur einen Schutz gegen
versehentliche zerstörerische Aktionen dar.
--kill-signal=
Gibt das an PID 1 des Containers zu sendende
Prozesssignal an, wenn Nspawn selbst SIGTERM empfängt, um ein
geordnetes Herunterfahren des Containers auszulösen.
Standardmäßig SIGRTMIN+3, falls --boot verwandt
wird (auf Systemd-kompatiblen Init-Systemen löst SIGRTMIN+3 ein
geordnetes Herunterfahren aus). Falls --boot nicht verwandt wird und
diese Option nicht angegeben ist, dann werden die Prozesse im Container abrupt
mit SIGKILL beendet. Siehe signal(7) für eine Liste
gültiger Signale.
--notify-ready=
Konfiguriert Unterstützung für
Benachrichtigungen von dem Init-Prozess des Containers. --notify-ready=
akzeptiert einen logischen Wert ( no und yes). Mit der Option
no benachrichtigt Systemd-nspawn Systemd mit einer
»READY=1«-Meldung, wenn der Init-Prozess erstellt wurde. Mit der
Option yes wartet Systemd-nspawn auf die Meldung
»READY=1« vom Init-Prozess im Container, bevor er seine eigene
an Systemd sendet. Weitere Details über Benachrichtigungen finden Sie
in sd_notify(3).
--suppress-sync=
Erwartet ein logisches Argument. Falls wahr,
wird für den Inhalt des Containers jegliche Form von plattengebundener
Dateisynchronisation ausgeschaltet. Das bedeutet, dass alle Dateisystemaufrufe
wie sync(2), fsync(), syncfs(), … nichts
ausführen werden und die Schalter O_SYNC/O_DSYNC von
open(2) und verwandten Aufrufen nicht verfügbar sein werden.
Dies ist möglicherweise gefährlich, da angenommene
Datenintegritätsgarantien für den Inhalt des Containers nicht
tatsächlich durchgesetzt werden (dh. Daten, von den Schreiben auf
Platte angenommen wurden, könnten verlorengehen, falls das System
ungewöhnlich heruntergefahren wird). Allerdings kann es die
Laufzeitleistung des Containers massiv erhöhen – solange diese
Garantien weder benötigt noch gewünscht werden, beispielsweise
da sämtliche vom Container geschriebenen Daten temporärer,
redundanter Art sind oder nur ein Zwischenartefakt, das weiterverarbeitet wird
und in einem späteren Schritt in dem Verarbeitungssystem finalisiert
wird. Standardmäßig falsch.
Systemidentitätsoptionen
-M, --machine=Setzt den Maschinennamen für diesen
Container. Dieser Name kann zur Identifizierung des Containers während
der Laufzeit verwandt werden (beispielsweise in Werkzeugen wie
machinectl(1) und ähnlichen). Er wird zur Initialisierung des
Rechnernamens des Containers verwandt (der im Container allerdings
außer Kraft gesetzt werden kann). Falls nicht angegeben, wird die
letzte Komponente des Wurzelverzeichnispfades des Containers verwandt, wobei
möglicherweise eine zufällige Kennzeichnung angehängt
wird, falls der Modus --ephemeral ausgewählt ist. Falls das
ausgewählte Wurzelverzeichnis mit dem Wurzelverzeichnis des Rechners
übereinstimmt, wird der eigene Rechnername stattdessen als Vorgabe im
Container verwandt.
--hostname=
Steuert den innerhalb des Containers zu
setzenden Rechnernamen, falls vom Maschinennamen verschieden. Erwartet einen
gültigen Rechnernamen als Argument. Falls diese Option verwandt wird,
wird der Kernel-Rechnername des Containers auf diesen Wert gesetzt,
andernfalls wird dieser auf den Maschinennamen, wie mit der oben beschrieben
Option --machine= gesteuert, gesetzt. Der Maschinenname wird für
verschiedene Identifikationsaspekte des Containers von außerhalb
verwandt, der mit dieser Option konfigurierbare Kernel-Rechnername ist
für die Identifikation des Containers von innen nützlich.
Normalerweise ist es eine gute Idee, beide Identifikationsformen
synchronisiert zu halten, um Verwirrung zu vermeiden. Es wird daher empfohlen,
die Verwendung dieser Option zu vermeiden und ausschließlich
--machine= zu verwenden. Beachten Sie, dass der Container später
seinen Kernel-Rechnernamen selbst frei außer Kraft setzen kann,
unabhängig davon, ob der Name mit der Option --hostname= oder
über die Option --machine= initialisiert wurde.
--uuid=
Setzt die angegebene UUID für den
Container. Das Init-System wird /etc/machine-id daraus initialisieren, falls
diese Datei noch nicht gesetzt ist. Beachten Sie, dass diese Option nur
wirksam wird, falls /etc/machine-id im Container noch leer ist.
Eigenschaftsoptionen
-S, --slice=Fügt den Container als Teil der
angegebenen Scheibe hinzu, statt der Vorgabe machine.slice. Dies gilt nur,
falls die Maschine in ihrer eigenen Bereichs-Unit ausgeführt wird, d.h.
falls --keep-unit nicht verwandt wird.
--property=
Setzt eine Unit-Eigenschaft der für
diese Maschine zu registrierenden Bereichs-Unit. Dies gilt nur, falls die
Maschine in ihrer eigenen Bereichs-Unit ausgeführt wird, d.h. falls
--keep-unit nicht verwandt wird. Akzeptiert eine
Unit-Eigenschaftszuweisung im gleichen Format wie systemctl
set-property. Dies ist zum Setzen von Speicherbeschränkungen und
Ähnlichem für den Container nützlich.
--register=
Steuert, ob der Container mit
systemd-machined(8) registriert wird. Akzeptiert ein logisches
Argument, standardmäßig »yes«. Diese Option sollte
aktiviert werden, wenn der Container ein vollständiges Betriebssystem
ausführt (genauer: ein System- und Diensteverwalter als PID 1). Sie ist
nützlich, um sicherzustellen, dass auf den Container mit
machinectl(1) zugegriffen und dieser durch Werkzeuge wie ps(1)
angezeigt werden kann. Falls der Container keinen Diensteverwalter
ausführt, wird empfohlen, diese Option auf »no« zu
setzen.
--keep-unit
Verwendet einfach die Dienste- oder
Bereichs-Unit, in der systemd-nspawn aufgerufen wurde, anstatt eine
flüchtige Bereichs-Unit, in der der Container ausgeführt wird,
zu erstellen. Falls --register=yes gesetzt ist, wird diese Unit mit
systemd-machined(8) registriert. Dieser Schalter sollte verwandt
werden, falls systemd-nspawn aus einer Dienste-Unit heraus aufgerufen
wurde und der einzige Zweck der Dienste-Unit die Ausführung eines
einzelnen systemd-nspawn-Containers ist. Diese Option ist bei der
Ausführung aus einer Benutzersitzung heraus nicht verfügbar.
Beachten Sie, dass die Verwendung von --keep-unit die Wirkung von
--slice= und --property= deaktiviert. Verwenden Sie
--keep-unit und --register=no in Kombination, um jegliche Art
von Unit-Zuweisung oder -Registrierung mit systemd-machined zu
deaktivieren.
Benutzernamensraum-Optionen
--private-users=Steuert Benutzernamensräume. Falls
aktiviert, wird der Container in seiner eigenen privaten Gruppe an
UNIX-Benutzer- und Gruppenkennungen (UIDs und GIDs) ausgeführt. Dazu
gehört die Abbildung der im Container verwandten privaten UIDs/GIDs
(beginnend mit dem Benutzer root mit 0 und höher) auf den Bereich von
UIDs/GIDs auf dem Rechner, die noch nicht für andere Zwecke verwandt
sind (normalerweise im Bereich höher als UID/GID 65536 auf dem
Rechner), abgebildet. Dieser Parameter kann wie folgt angegeben werden:
Es wird empfohlen, jedem Container mindestens 65536 UIDs/GIDs zuzuweisen, so
dass der verwendbare Bereich an UIDs/GIDs im Container 16 Bit
überdeckt. Für größtmögliche Sicherheit
sollten sich die UID/GID-Bereiche je zweier Container nicht überlappen.
Daher ist es eine gute Idee, die oberen 16 Bit der 32-Bit-UIDs/GIDs des
Rechners als Container-Kennzeichner und die unteren 16-Bit zur Kodierung der
im Container verwandten UID/GIDs zu verwenden. Dies ist tatsächlich das
Verhalten, das die Option --private-users=pick erzwingt.
Werden Benutzernamensräume verwandt, wird der jedem Container zugewiesene
GID-Bereich immer identisch zu dem UID-Bereich ausgewählt.
In den meisten Fällen ist --private-users=pick die empfohlene
Option, da sie die Container-Sicherheit massiv erhöht und in den
meisten Fällen vollautomatisch funktioniert.
Beachten Sie, dass der ausgewählte UID/GID-Bereich nicht in /etc/passwd
oder /etc/group geschrieben wird. Tatsächlich wird die Zuweisung des
Bereiches nicht irgendwo dauerhaft gespeichert, außer in den
Dateieigentümerschaften der Dateien und Verzeichnisse des Containers.
Beachten Sie, dass sich dies bei der Verwendung von Benutzernamensräumen
in den Dateieigentümerschaften auf der Platte widerspiegelt und alle
Dateien und Verzeichnisse des Containers den effektiven Benutzer- und
Gruppenkennungen des Containers gehören. Dies bedeutet, dass das
Kopieren von Dateien in und aus dem Container heraus die Anpassung der
numerischen UID/GID-Werte verlangt, je nach angewandter
UID/GID-Verschiebung.
--private-users-ownership=
1.Falls eine oder zwei Doppelpunkt-getrennte
Zahlen angegeben sind, werden Benutzernamensräume eingeschaltet. Der
erste Parameter gibt die erste UID/GID des Rechners an, die dem Container
zugewiesen werden soll, der zweite Parameter gibt die Anzahl an UIDs/GIDs an,
die dem Container zugewiesen werden soll. Falls der zweite Parameter fehlt,
werden 65536 UIDs/GIDs zugewiesen.
2.Falls der Parameter »yes«
ist, werden Benutzernamensräume eingeschaltet. Der zu verwendende
UID-/GID-Bereich wird automatisch aus der Dateieigentümerschaft des
Wurzelverzeichnisses des Verzeichnisbaums des Containers bestimmt. Um diese
Option zu verwenden, muss der Verzeichnisbaum vorher vorbereitet werden, um
sicherzustellen, dass alle Dateien und Verzeichnisse UIDs/GIDs in dem von
Ihnen gewünschten Bereich gehören. Auch müssen alle
Datei-ACLs ausschließlich UIDs/GIDs im gewünschten Bereich
referenzieren. In diesem Modus ist die Anzahl der dem Container zugewiesenen
UIDs/GIDS 65536, und die Eigentümer-UID/GID des Wurzelverzeichnisses
muss ein Vielfaches von 65536 sein.
3.Falls der Parameter »no« ist,
werden Benutzernamensräume ausgeschaltet. Dies ist die Vorgabe.
4.Falls dieser Parameter
»identity« ist, werden Benutzer-Namensräume mit einer
identischen Abbildung für die ersten 65536 UIDs/GIDs eingesetzt. Dies
ist größtenteils äquivalent zu
--private-users=0:65536. Während es keine UID/GID-Isolierung
bereitstellt, da alle Rechner- und Container-UIDs/GIDs identisch
ausgewählt werden, bietet es dennoch Isolation der Prozess-Capabilitys
und ist daher oft eine gute Wahl, falls ein ordentlicher Benutzernamensraum
mit unterschiedlichen UID-Abbildungen nicht angemessen ist.
5.Der besondere Wert »pick«
schaltet Benutzernamensräume ein. In diesem Fall wird der
UID/GID-Bereich automatisch ausgewählt. Im ersten Schritt wird die
Eigentümer-UID/GID des Wurzelverzeichnisses des Verzeichnisbaums des
Containers eingelesen und überprüft, dass ihn derzeit kein
anderer Container verwendet. Falls die Überprüfung erfolgreich
ist, wird der auf diesem Weg ermittelte UID/GID-Bereich verwandt,
ähnlich wie bei der Angabe von »yes«. Falls die
Überprüfung nicht erfolgreich ist (und daher der durch den
Eigentümer des Wurzelverzeichnis angezeigte UID/GID-Bereich bereits
woanders verwandt wird), wird ein neuer, derzeit nicht verwendeter,
UID/GID-Bereich von 65536 UIDs/GIDs aus dem Bereich 524288 bis 1878982656 auf
dem Rechner zufällig ausgewählt, wobei immer bei Vielfachen von
65536 begonnen und, falls möglich, konsistent vom Maschinennamen
gehasht wird. Diese Einstellung impliziert
--private-users-ownership=auto (siehe unten), was möglicherweise
bewirkt, dass die Dateien und Verzeichnisse im Verzeichnisbaum des Containers
den passenden Benutzern in dem ausgewählten Bereich gehören. Mit
dieser Option wird das Verhalten von Benutzernamensräumen
vollständig automatisiert. Beachten Sie, dass der erste Aufruf eines
bisher nicht verwandten Containers zur Auswahl eines neuen UID/GID-Bereichs
dafür führen könnte und daher eine (möglicherweise
aufwändige) Anpassungsaktion für Dateieigentümerschaften
erfolgen könnte. Der Aufwand für nachfolgende
Ausführungen des Containers wird allerdings gering sein (außer
natürlich der ausgewählte UID/GID-Bereich wird zu diesem
Zeitpunkt anders verwandt).
Steuert, wie die UIDs und GIDs des Containers
angepasst werden, um auf den mit --private-users= gewählten
UID/GID-Bereich zu passen, siehe oben. Akzeptiert entweder »off«
(um das Abbild unverändert zu lassen), »chown« (um den
Verzeichnisbaum des Containers nach Notwendigkeit rekursiv mit chown()
anzupassen), »map« (um Einhängungen mit transparenter
Abbildung der Kennungen zu verwenden) oder »auto«, um
automatisch »map« wo verfügbar zu verwenden und
»chown« wo nicht.
Passt, falls »chown« ausgewählt ist, alle Dateien und
Verzeichnisse im Verzeichnisbaum des Containers an, so dass sie den passenden,
für den Container ausgewählten UIDs/GIDs gehören (siehe
oben). Diese Aktion ist möglicherweise aufwändig, da sie den
vollen Durchlauf durch den Verzeichnisbaum des Containers verlangt. Neben der
eigentlichen Dateieigentümerschaft werden auch ACLs angepasst.
Normalerweise ist »map« die beste Wahl, da es transparent die
UIDs/GIDs im Speicher wie notwendig ohne Veränderung des Abbilds
abbildet und auch keine teure rekursive Anpassungsaktion benötigt.
Allerdings ist sie derzeit nicht für alle Dateisysteme
verfügbar.
Die Option --private-users-ownership=auto wird impliziert, falls
--private-users=pick verwandt wird. Diese Option hat nur eine
Auswirkung, falls Benutzernamensräume verwandt werden.
-U
Falls der Kernel die
Benutzernamensraumfunktionalität unterstützt, ist dies
äquivalent zu --private-users=pick
--private-users-ownership=auto, ansonsten zu --private-users=no.
Beachten Sie, dass -U die Vorgabe ist, falls die Vorlagendatei
[email protected] verwandt wird.
Hinweis: Das Ergebnis von --private-users-ownership=chown (oder
-U) auf das Dateisystem kann rückgängig gemacht werden,
indem die Aktion mit der ersten UID 0 erneut durchgeführt wird:
systemd-nspawn … --private-users=0 --private-users-ownership=chown
Vernetzungsoptionen
--private-networkTrennt die Vernetzung zwischen Containers und
Rechner. Damit werden alle Netzwerkschnittstellen im Container nicht mehr
verfügbar, Ausnahmen sind nur das Loopback-Gerät und die mit
--network-interface= angegebenen und mit --network-veth
konfigurierten Schnittstellen. Falls diese Option angegeben ist, wird die
Capability CAP_NET_ADMIN zu der Gruppe der Capabilities
hinzugefügt, die der Container behält. Letzteres kann mit
--drop-capability= deaktiviert werden. Falls diese Option nicht
angegeben (oder durch eine der nachfolgend aufgeführten Optionen
impliziert) ist, hat der Container vollen Zugriff auf das Netzwerk des
Rechners.
--network-interface=
Weist die angegebene Netzwerkschnittstelle dem
Container zu. Dies entfernt die angegebene Schnittstelle aus dem Namensraum
des Aufrufenden und legt sie in den Container. Wenn der Container sich
beendet, wird diese zum aufrufenden Namensraum zurückverschoben.
Beachten Sie, dass --network-interface= --private-network
impliziert. Diese Option kann mehr als einmal verwandt werden, um mehrere
Netzwerkschnittstellen in dem Container hinzuzufügen.
Beachten Sie, dass alle auf diese Art festgelegten Schnittstellen zum Zeitpunkt
des Startens des Containers bereits existieren müssen. Falls der
Container automatisch beim Systemstart mittels der Unit-Dateiinstanz
[email protected] gestartet werden soll, kann es daher sinnvoll sein,
eine Unit-Dateiergänzung für die Diensteinstanz
hinzuzufügen (z.B.
/etc/systemd/system/[email protected]/50-network.conf), die
Inhalte folgender Art enthält:
Dies stellt sicher, dass die Aktivierung des Container-Dienstes verzögert
wird, bis die Netzwerkschnittstelle »ens1« aufgetaucht ist. Dies
ist notwendig, da Hardwareermittlung vollständig asynchron erfolgt und
Netzwerkschnittstellen erst später während des
Systemstartprozesses erkannt werden könnten, nachdem der Container
normalerweise ohne diese expliziten Abhängigkeiten gestartet worden
wäre.
--network-macvlan=
[Unit] Wants=sys-subsystem-net-devices-ens1.device After=sys-subsystem-net-devices-ens1.device
Erstellt eine
»macvlan«-Schnittstelle auf der angegebenen
Ethernet-Netzwerkschnittstelle und fügt sie dem Container hinzu. Eine
»macvlan«-Schnittstelle ist eine virtuelle Schnittstelle, die
eine zweite MAC-Adresse zu einer bestehenden physischen Ethernet-Verbindung
hinzufügt. Die Adresse im Container wird nach der Schnittstelle auf dem
Rechner benannt, wobei »mv-« vorangestellt wird. Beachten Sie,
dass --network-ipvlan= --private-network impliziert. Diese
Option kann mehr als einmal verwandt werden, um mehrere Netzwerkschnittstellen
in dem Container hinzuzufügen.
Wie bei --network-interface= muss die zugrundeliegende
Ethernet-Netzwerkschnittstelle zum Zeitpunkt des Startens des Containers
bereits existieren und daher könnten ähnliche
Unit-Dateiergänzungen wie oben beschrieben nützlich sein.
--network-ipvlan=
Erstellt eine
»ipvlan«-Schnittstelle auf der angegebenen
Ethernet-Netzwerkschnittstelle und fügt sie dem Container hinzu. Eine
»ipvlan«-Schnittstelle ist eine virtuelle Schnittstelle,
ähnlich einer »macvlan«-Schnittstelle, die die gleiche
MAC-Adresse wie die zugrundeliegende Schnittstelle auf dem Rechner verwendet.
Die Adresse im Container wird nach der Schnittstelle auf dem Rechner benannt,
wobei »iv-« vorangestellt wird. Beachten Sie, dass
--network-ipvlan= --private-network impliziert. Diese Option
kann mehr als einmal verwandt werden, um mehrere Netzwerkschnittstellen in dem
Container hinzuzufügen.
Wie bei --network-interface= muss die zugrundeliegende
Ethernet-Netzwerkschnittstelle zum Zeitpunkt des Startens des Containers
bereits existieren und daher könnten ähnliche
Unit-Dateiergänzungen wie oben beschrieben nützlich sein.
-n, --network-veth
Erstellt eine virtuelle Ethernet-Verbindung
(»veth«) zwischen dem Rechner und dem Container. Die
Rechnerseite der Ethernet-Verbindung wird als Netzwerkschnittstelle
verfügbar sein, die nach dem Namen der Maschine (wie mit
--machine= angegeben) benannt ist, der »ve-«
vorangestellt ist. Die Container-Seite der Ethernetverbindung wird
»host0« heißen. Die Option --network-veth
impliziert --private-network.
Beachten Sie, dass systemd-networkd.service(8) eine Vorgabe-Netzwerkdatei
/lib/systemd/network/80-container-ve.network enthält, die auf die auf
diese Art erstellte Schnittstelle im Rechner passt und die Einstellungen
enthält, um die automatische Adressbereitstellung auf der erstellten
virtuellen Verbindung mittels DHCP sowie das automatische IP-Routen auf der
externen Netzwerkschnittstelle des Rechners aktiviert. Sie enthält auch
/lib/systemd/network/80-container-host0.network, die auf die auf diese Art
erstellte Schnittstelle im Container passt und die Einstellung zur Aktivierung
der Adresszuweisung mittels DHCP für den Client enthält. Wenn
Systemd-networkd sowohl im Rechner als auch im Container läuft, ist
daher automatische IP-Kommunikation vom Container zum Rechner
verfügbar, mit weiterer Verbindung zum externen Netz.
Beachten Sie, dass --network-veth die Vorgabe ist, falls die
Vorlagen-Unit-Datei [email protected] verwandt wird.
Beachten Sie, dass Netzwerkschnittstellennamen unter Linux eine maximale
Länge von 15 Zeichen haben dürfen, während
Container-Namen 64 Zeichen lang sein dürfen. Da diese Option den
Schnittstellennamen auf der Rechnerseite vom Container-Namen ableitet, ist der
Name möglicherweise abgeschnitten. Daher muss in diesem Falle
aufgepasst werden, dass die Schnittstellennamen eindeutig bleiben; besser
noch, Container-Namen sollten im Allgemeinen so ausgewählt werden, dass
sie nicht länger als 12 Zeichen sind, um das Abschneiden zu vermeiden.
Falls der Name abgeschnitten ist, wird systemd-nspawn automatisch einen
4-ziffrigen Hash-Wert an den Namen anhängen, um die Möglichkeit
von Kollisionen zu verringern. Allerdings ist der Hash-Algorithmus nicht
kollisionsfrei. (Siehe systemd.net-naming-scheme(7) für Details
über ältere Benennungsalgorithmen für diese
Schnittstelle). Alternativ kann die Option --network-veth-extra=
verwandt werden. Sie erlaubt die freie Konfiguration des Schnittstellennamens
auf der Rechnerseite unabhängig vom Container-Namen —
könnte aber ein bisschen mehr an Konfiguration benötigen, falls
Bridging im Stile von --network-bridge= erwünscht ist.
--network-veth-extra=
Fügt eine zusätzliche virtuelle
Ethernet-Vebindung zwischen dem Rechner und dem Container hinzu. Akzeptiert
ein Doppelpunkt-getrenntes Paar von Schnittstellennamen (auf dem Rechner und
in dem Container). Letzerer kann entfallen; dann wird auf Seiten des
Containers und des Rechners der gleiche Name zugewiesen. Dieser Schalter ist
unabhängig von --network-veth und kann im Gegensatz zu diesem
mehrfach verwandt werden und erlaubt die Konfiguration von
Netzwerkschnittstellennamen. Beachten Sie, dass --network-bridge= auf
mit --network-veth-extra= erstellten Schnittstellen keine Auswirkung
hat.
--network-bridge=
Fügt die Rechnerseite der mit
--network-veth erstellten Ethernet-Verbindung zu der angegebenen
Ethernet-Bridge-Schnittstelle hinzu. Erwartet als Argument einen
gültigen Netzwerkschnittstellennamen für das
Bridge-Gerät. Beachten Sie, dass --network-bridge=
--network-veth impliziert. Falls diese Option verwandt wird, verwendet
die Rechnerseite des Ethernet-Links das Präfix »vb-«
anstelle von »ve-«. Unabhängig vom verwandten
Benennungschema gelten die gleichen Längenbeschränkungen von
Linux für Netzwerkschnittstellennamen, zusammen mit den hierdurch
entstehenden Komplikationen (siehe oben für Details).
Wie bei --network-interface= muss die zugrundeliegende
Bridge-Netzwerkschnittstelle zum Zeitpunkt des Startens des Containers bereits
existieren und daher könnten ähnliche
Unit-Dateiergänzungen wie oben beschrieben nützlich sein.
--network-zone=
Erstellt eine virtuelle Ethernet-Verbindung
(»veth«) für den Container und fügt ihn zu den
automatisch verwalteten Ethernet-Bridge-Schnittstellen hinzu. Die
Bridge-Schnittstelle wird nach dem übergebenen Argument benannt, dem
»vz-« vorangestellt wird. Die Bridge-Schnittstelle wird
automatisch erstellt, wenn der erste für diesen Namen konfigurierte
Container gestartet wird und automatisch entfernt, wenn der letzte für
diesen Namen konfigurierte Container sich beendet. Daher existiert jede auf
diese Art erstellte Bridge-Schnittstelle nur so lange mindestens ein Container
läuft, der sie referenziert. Diese Option ist sehr ähnlich zu
--network-bridge=, abgesehen von der automatischen
Erstellung/Entfernung des Bridge-Gerätes.
Diese Einstellung macht es leicht, mehrere zusammengehörige Container in
eine gemeinsame, virtuelle, Ethernet-basierte Broadcast-Domäne zu
legen, die hier »Zone« genannt wird. Jeder Container darf nur
Teil einer Zone sein, aber jede Zone kann eine beliebige Anzahl an Containern
enthalten. Auf jede Zone kann mit ihrem Namen Bezug genommen werden. Namen
können frei ausgewählt werden (solange sie einen gültigen
Netzwerkschnittstellenamen bilden, denen »vz-« vorangestellt
ist) und es reicht aus, den gleichen Namen an den Schalter
--network-zone= für die verschiedenen, gleichzeitig laufenden
Container zu übergeben, um sie in eine Zone aufzunehmen.
Beachten Sie, dass systemd-networkd.service(8)
standardmäßig eine Netzwerkdatei
/lib/systemd/network/80-container-vz.network enthält, die auf die auf
diese Art erstellte Bridge-Schnittstelle passt und die Einstellungen
enthält, die die automatische Bereitstellung von Adressen mittels DHCP
im erstellten virtuellen Netzwerk sowie das automatische IP-Routen auf den
externen Netzwerkschnittstellen des Rechners aktivieren. Die Verwendung von
--network-zone= ist daher in den meisten Fällen vollautomatisch
und ausreichend, um mehrere lokale Container in einer vereinigten
Broadcast-Domain mit dem Rechner zu verbinden, einschließlich weiterer
Verbindung zum externen Netzwerk.
--network-namespace-path=
Akzeptiert einen Pfad zu einer Datei, die
einen Netzwerk-Namensraum darstellt, in dem der Container ausgeführt
werden soll. Der angegebene Pfad sollte sich auf eine (möglicherweise
»bind«-eingehängte) Netzwerk-Namensraum-Datei beziehen,
wie diese durch den Kernel unterhalb von /proc/$PID/ns/net offengelegt wird.
Dies führt dazu, dass der Container in den durch ip-netns(8)
unter /run/netns erstellten angegebenen Netzwerk-Namensraum eintritt.
Beispiel: --network-namespace-path=/run/netns/foo. Beachten Sie, dass
diese Option nicht zusammen mit anderen Netzwerk-bezogenen Optionen verwandt
werden kann, wie --private-network oder
--network-interface=.
-p, --port=
Bildet einen IP-Port auf dem Rechner auf einen
IP-Port im Container ab, falls private Netzwerke aktiviert sind. Akzeptiert
einen Protokollkennzeichner (entweder »tcp« oder
»udp«), getrennt durch einen Doppelpunkt von der Port-Nummer des
Rechners im Bereich 1 bis 65535, getrennt durch einen Doppelpunkt von der
Container-Port-Nummer im Bereich 1 bis 65535. Der Protokollkennzeichner und
sein trennender Doppelpunkt kann entfallen, wodurch »tcp«
angenommen wird. Die Container-Port-Nummer und ihr Doppelpunkt kann entfallen,
wodurch der gleiche Port wie auf dem Rechner impliziert wird. Diese Option
wird nur unterstützt, falls private Netzwerke verwandt werden, wie mit
--network-veth, --network-zone= --network-bridge=
ausgewählt.
Sicherheitsoptionen
--capability=Listet eine oder mehrere zusätzliche
Capabilities auf, die dem Container gewährt werden sollen. Akzeptiert
eine Kommata-getrennte Liste von Capability-Namen, siehe
capabilities(7) für weitere Informationen. Beachten Sie, dass
die folgenden Capabilities auf jeden Fall gewährt werden:
CAP_AUDIT_CONTROL, CAP_AUDIT_WRITE, CAP_CHOWN,
CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH, CAP_FOWNER,
CAP_FSETID, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE,
CAP_LINUX_IMMUTABLE, CAP_MKNOD, CAP_NET_BIND_SERVICE,
CAP_NET_BROADCAST, CAP_NET_RAW, CAP_SETFCAP,
CAP_SETGID, CAP_SETPCAP, CAP_SETUID,
CAP_SYS_ADMIN, CAP_SYS_BOOT, CAP_SYS_CHROOT,
CAP_SYS_NICE, CAP_SYS_PTRACE, CAP_SYS_RESOURCE,
CAP_SYS_TTY_CONFIG. Auch wird CAP_NET_ADMIN behalten, falls
--private-network angegeben ist. Falls der besondere Wert
»all« übergeben wird, werden alle Capabilities behalten.
Falls der besondere Wert »help« übergeben wird, wird das
Programm die bekannten Capability-Namen ausgeben und sich beenden.
Diese Option setzt die Begrenzungsmenge der Capabilities, die auch die
Umgebungs-Capabilities, wie sie mit --ambient-capability=
übergeben werden, begrenzt.
--drop-capability=
Gibt eine oder mehrere zusätzliche
Capabilities an, die für den Container entfernt werden sollen. Dies
erlaubt den Betrieb des Containers mit weniger als den Standard-Capabilities
(siehe oben).
Falls der besondere Wert »help« übergeben wird, wird das
Programm die bekannten Capability-Namen ausgeben und sich beenden.
Diese Option setzt die Begrenzungsmenge der Capabilities, die auch die
Umgebungs-Capabilities, wie sie mit --ambient-capability=
übergeben werden, begrenzt.
--ambient-capability=
Gibt eine oder mehrere zusätzliche
Capabilities an, die an die vererbare und Umgebungsmenge von Programmen, die
im Container gestartet werden, übergeben werden sollen. Der Wert
»all« wird für diese Einstellung nicht
unterstützt.
Alle hier angegebenen Capabilities müssen in der mit den Optionen
--capability= und --drop-capability= erlaubten Menge sein.
Andernfalls wird eine Fehlermeldung angezeigt.
Diese Option kann nicht mit dem Systemstartmodus des Containers (wie mit
--boot erbeten) kombiniert werden.
Falls der besondere Wert »help« übergeben wird, wird das
Programm die bekannten Capability-Namen ausgeben und sich beenden.
--no-new-privileges=
Akzeptiert ein logisches Argument. Gibt den
Wert des Schalters PR_SET_NO_NEW_PRIVS für den Container-Inhalt
an. Standardmäßig »off«. Wenn eingeschaltet, kann
der Inhaltscode des Containers keine neuen Privilegien erlangen, d.h. das
Datei-Bit »setuid« und Dateisystem-Capabilities haben keine
Wirkung mehr. Siehe prctl(2) für Details über diesen
Schalter.
--system-call-filter=
Ändert den auf Container angewandten
Systemaufruffilter. Akzeptiert eine Leerzeichen-getrennte Liste von
Systemaufrufnamen oder -gruppennamen (Letzteren wird »@«
vorangestellt, wie dies durch den Befehl syscall-filter von
systemd-analyze(1) aufgeführt wird). Der Liste kann optional
»~« vorangestellt werden, wodurch alle aufgeführten
Systemaufrufe verboten sind. Falls diese Befehlszeilenoption mehrfach verwandt
wird, werden die konfigurierten Listen kombiniert. Falls sowohl eine positive
als auch eine negative Liste (das bedeutet, eine Liste ohne und eine Liste mit
vorangestelltem »~«) konfiguriert werden, hat die negative Liste
Vorrang vor der positiven Liste. Beachten Sie, dass systemd-nspawn
immer eine Erlaubnisliste von Systemaufrufen implementiert (im Gegensatz zu
einer Ausschlussliste), und dieser Befehl daher Einträge zu dieser
Vorgabeerlaubnisliste hinzufügt oder aus ihr entfernt, abhängig,
ob »~« vorangestellt ist. Beachten Sie, dass der angewandte
Systemaufruffilter auch implizit geändert wird, falls mittels
--capabilities= zusätzliche Capabilities übergeben
werden.
-Z, --selinux-context=
Setzt den für die Markierung von
Prozessen in dem Container zu verwendenden Sicherheitskontext.
-L, --selinux-apifs-context=
Setzt den für die Markierung von
Dateien in dem virtuellen API-Dateisystem im Container zu verwendenden
Sicherheitskontext.
Ressourcenoptionen
--rlimit=Setzt die angegebene
POSIX-Ressourcenbeschränkung für den Container-Inhalt. Erwartet
eine Zuweisung der Form »
BESCHRÄNKUNG=WEICH:HART« oder »
BESCHRÄNKUNG= WERT«, wobei sich
BESCHRÄNKUNG auf einen Ressourcenbeschränkungstyp wie
RLIMIT_NOFILE oder RLIMIT_NICE beziehen sollte. Die Felder
WEICH und HART sollten sich auf die numerischen weichen und
harten Ressourcenbeschränkungswerte beziehen. Falls die zweite Form
verwandt wird, kann WERT einen Wert angeben, der sowohl als weiche als
auch als harte Beschränkung verwandt wird. Anstelle eines numerischen
Wertes kann die besondere Zeichenkette »infinity« verwandt
werden, die zum Abschalten der Beschränkung für den angegebenen
Ressourcentyp eingesetzt werden kann. Diese Befehlszeilenoption kann mehrfach
verwandt werden, um die Beschränkungen für mehrere
Beschränkungstypen zu steuern. Falls sie mehrfach für den
gleichen Beschränkungstyp verwandt wird, gewinnt die letzte Verwendung.
Für Details über Ressourcenbeschränkungen siehe
setrlimit(2). Standardmäßig werden
Ressourcenbeschränkungen für den Init-Prozess (PID 1) des
Containers auf die gleichen Werte gesetzt, die der Linux-Kernel
ursprünglich an das Init-System des Rechners übergeben hat.
Beachten Sie, dass einige Ressourcenbeschränkungen benutzerbezogen
erzwungen werden, insbesondere RLIMIT_NPROC. Dies bedeutet, dass
sämtliche Beschränkungen auf die Ressourcenverwendung des
gleichen Benutzers auf allen lokalen Containern sowie dem Rechner angewandt
werden, außer es werden Benutzer-Namensräume eingesetzt (d.h.
--private-users= verwandt wird, siehe oben). Dies bedeutet, dass
besondere Vorsicht mit diesen Beschränkungen walten gelassen werden
muss, da sie von möglicherweise weniger vertrauenswürdigem Code
ausgelöst werden könnten. Beispiel:
»--rlimit=RLIMIT_NOFILE=8192:16384«.
--oom-score-adjust=
Ändert den OOM
(»Speichererknappheits«)-Anpassungsbewertungswert für den
Container-Inhalt. Dies steuert /proc/self/oom_score_adj, das die Rangfolge
beeinflusst, mit dem einzelne Container beendet werden, wenn der Speicher rar
wird. Für Details siehe proc(5). Akzeptiert eine Ganzzahl im
Bereich -1000…1000.
--cpu-affinity=
Steuert die CPU-Affinität für
den Inhalt des Containers. Akzeptiert eine Kommata-getrennte Liste von
CPU-Nummern oder Nummern-Bereichen (bei diesen trennen Sie Start- und Endwert
durch Bindestriche). Siehe sched_setaffinity(2) für
Details.
--personality=
Steuert die durch uname(2) im Container
gemeldete Architektur (»Personalität«). Derzeit werden
nur »x86« und »x86-64« unterstützt. Dies
ist zum Betrieb von 32-Bit-Containern auf 64-Bit-Rechnern nützlich.
Falls diese Einstellung nicht verwandt wird, ist die im Container gemeldete
Personalität identisch zu der auf dem Rechner gemeldeten.
Integrationsoptionen
--resolv-conf=Konfiguriert, wie /etc/resolv.conf innerhalb
des Containers gehandhabt werden soll (d.h. die DNS-Synchronisierung vom
Rechner zum Container). Akzeptiert entweder »off«,
»copy-host«, »copy-static«,
»copy-uplink«, »copy-stub«,
»replace-host«, »replace-static«,
»replace-uplink«, »replace-stub«,
»bind-host«, »bind-static«,
»bind-uplink«, »bind-stub«, »delete«
oder »auto«.
Falls auf »off« gesetzt, dann wird die Datei /etc/resolv.conf im
Container so belassen, wie sie im Abbild enthalten ist und weder
verändert noch eine Bind-Einhängung darüber
durchgeführt.
Falls auf »copy-host« gesetzt, wird die Datei /etc/resolv.conf vom
Rechner in den Container kopiert, außer die Datei existiert bereits und
ist keine reguläre Datei (z.B. ein Symlink). Ähnlich wird beim
Einsatz von »replace-host« die Datei kopiert und jede
existierende Inode ersetzt, einschließlich Symlinks. Ähnlich
wird beim Einsatz von »bind-host« die Datei vom Rechner in den
Container Bind-eingehängt.
Falls auf »copy-static«, »replace-static« oder
»bind-static« gesetzt, wird die durch
systemd-resolved.service(8) bereitgestellte statische resolv.conf-Datei
(konkret: /usr/lib/systemd/resolv.conf) in den Container kopiert oder
Bind-eingehängt.
Falls auf »copy-uplink«, »replace-uplink« oder
»bind-uplink« gesetzt, wird die durch Systemd-resolved.service
verwaltete Uplink-resolv.conf-Datei (konkret:
/run/systemd/resolve/resolv.conf) in den Container kopiert oder
Bind-eingehängt.
Falls auf »copy-stub«, »replace-stub« oder
»bind-stub« gesetzt, wird die durch Systemd-resolved.service
verwaltete Rumpf-resolv.conf-Datei (konkret:
/run/systemd/resolve/stub-resolv.conf) in den Container kopiert oder
Bind-eingehängt.
Falls auf »delete« gesetzt, wird die Datei /etc/resolv.conf
gelöscht, falls sie existiert.
Falls schließlich auf »auto« gesetzt, wird die Datei so
belassen, wie sie ist, falls privates Netzwerken aktiviert ist (siehe
--private-network). Falls andernfalls Systemd-resolved.service
läuft, wird dessen Rumpf-resolv.conf-Datei verwandt und falls nicht,
die Datei /etc/resolv.conf des Rechners. In letzterem Fall wird die Datei
kopiert, falls das Abbild beschreibbar ist und andernfalls
Bind-eingehängt.
Es wird empfohlen, »copy-…« oder
»replace-…« zu verwenden, falls der Container in der Lage
sein soll, selbst an seiner DNS-Einstellung Änderungen vorzunehmen, die
sich von denen des Rechners unterscheiden. Andernfalls ist
»bind« zu bevorzugen, da dies bedeutet, dass direkte
Änderungen an /etc/resolv.conf im Container nicht erlaubt sind, da es
eine schreibgeschützte Bind-Einhängung ist (beachten Sie aber,
dass der Container einfach die Bind-Einhängung aushängen
könnte, falls er über genug Privilegien verfügt).
Beachten Sie, dass in beiden Fällen (Bind-Einhängen und Kopieren
der Datei) im Allgemeinen keine weitere Weitergabe der Konfiguration nach
dieser einmaligen Initialisierung erfolgt (dies kommt daher, da die Datei
normalerweise durch Kopieren und Umbenennen aktualisiert wird).
Standardmäßig »auto«.
--timezone=
Steuert, wie mit /etc/localtime innerhalb des
Containers (d.h. der Zeitsynchronisation vom Rechner zum Container) umgegangen
werden soll. Akzeptiert entweder »off«, »copy«,
»bind«, »symlink«, »delete« oder
»auto«. Falls auf »off« gesetzt, verbleibt die
Datei /etc/localtime im Container, wie sie im Abbild enthalten ist; sie wird
weder verändert noch erfolgt darüber eine
bind-Einhängung. Falls auf »copy« gesetzt, wird die Datei
/etc/localtime vom Rechner in den Container kopiert. Ähnlich wird bei
der Verwendung von »bind« die Datei vom Rechner in den Container
bind-eingehängt. Falls auf »symlink« gesetzt, wird ein
Symlink erstellt, der von /etc/localtime im Container auf die Zeitzonendatei
im Container, die auf die Zeitzoneneinstellung im Rechner passt, zeigt. Falls
auf »delete« gesetzt, wird die Datei im Container
gelöscht, falls sie existiert. Falls auf »auto« gesetzt
und die Datei /etc/localtime des Rechners ein Symlink ist, dann wird der
»symlink«-Modus verwandt, ansonsten »copy«, falls
das Abbild schreibbar ist und andernfalls »bind«.
Standardmäßig »auto«.
--link-journal=
Steuert, ob das Journal des Containers
für den Rechner sichtbar sein soll. Falls aktiviert, erlaubt dies das
Betrachten der Journal-Dateien des Containers vom Rechner aus (aber nicht
andersherum). Akzeptiert entweder »no«, »host«,
»try-host«, »guest«, »try-guest«
oder »auto«. Falls »no«, wird das Journal nicht
verlinkt. Falls »host«, werden die Journal-Dateien auf dem
Dateisystem des Rechners gespeichert (unterhalb von /var/log/journal/
Maschinenkennung) und das Unterverzeichnis wird im Container am
gleichen Ort bind-eingehängt. Falls »guest«, werden die
Journal-Dateien im Gast-Dateisystem (unterhalb von /var/log/journal/
Maschinenkennung) gespeichert und das Unterverzeichnis wird im Rechner
am gleichen Ort verlinkt. »try-host« und
»try-guest« machen das gleiche, schlagen aber nicht fehl, falls
der Rechner kein dauerhaftes Journal aktiviert hat. Falls »auto«
(die Vorgabe) und das richtige Unterverzeichnis von /var/log/journal
existiert, wird es in den Container bind-eingehängt. Falls das
Unterverzeichnis nicht existiert, erfolgt keine Verlinkung. Effektiv
führt einmaliges Starten eines Containers mit »guest«
oder »host« dazu, dass das Journal dauerhaft verlinkt wird,
falls zukünftig die Vorgabe »auto« verwandt wird.
Beachten Sie, dass --link-journal=try-guest die Vorgabe ist, falls die
Unit-Vorlagendatei [email protected] verwandt wird.
-j
Äquivalent zu
--link-journal=try-guest.
Einhängeoptionen
--bind=, --bind-ro=Hängt eine Datei oder ein Verzeichnis
vom Rechner in den Container mit bind ein. Akzeptiert entweder ein
Pfad-Argument (dann wird der angegebene Pfad vom Rechner zum gleichen Pfad im
Container eingehängt), ein durch Doppelpunkt getrenntes Paar von Pfaden
(dann wird der zuerst angegebene Pfad als Quelle auf dem Rechner und der
zweite Pfad als Ziel im Container verwandt) oder ein Doppelpunkt-getrenntes
Tripel von Quellpfad, Zielpfad und Einhängeoptionen. Dem Quellpfad darf
optional ein »+«-Zeichen vorangestellt werden. In diesem Fall
wird der Quellpfad relativ zum Wurzelverzeichnis des Containers betrachtet.
Damit wird die Einrichtung von bind-Einhängungen innerhalb des
Container-Abbildes ermöglicht. Der Quellpfad kann als leere
Zeichenkette angegeben werden. Dann wird ein temporäres Verzeichnis
unterhalb von /var/tmp/ im Rechner verwandt. Dieses wird beim Herunterfahren
des Containers automatisch entfernt. Falls der Quellpfad nicht absolut ist,
wird er relativ zum aktuellen Arbeitsverzeichnis aufgelöst. Die Option
--bind-ro= erstellt nur-lesbare Bind-Einhängungen. Maskierungen
durch Rückwärtsschrägstriche werden interpretiert, so
kann »\:« verwandt werden, um Doppelpunkte in Pfade einzubetten.
Diese Option kann mehrfach verwandt werden, um mehrere unabhängige
bind-Einhängepunkte zu erzeugen.
Einhängeoptionen werden durch Kommata getrennt. rbind und
norbind steuern, ob eine rekursive oder eine reguläre
Bind-Einhängung erstellt wird. Standardmäßig
»rbind«.
Die Verwendung von idmap oder rootidmap benötigt
Unterstützung durch das Quelldateisystem für die
Benutzer-/Gruppen-Abbildungs-Einhängungen. Standardmäßig
»noidmap«. Ist x der UID-Bereichsversatz des Containers,
y die Länge des UID-Bereichs des Containers und p die
Eigentümer-UID der Bind-Einhängungs-Inode auf dem Rechner:
Unabhängig von der gewählten Kennungs-Abbildungsfunktion wird die
gleiche Abbildung für Benutzer und Gruppen verwandt. Falls
rootidmap verwandt wird, hat die Gruppe, der das
Bind-Einhängungsverzeichnis gehört, keine Auswirkung.
Beachten Sie, dass die entstehenden Einhängepunkte dem Benutzer
nobody gehören werden, falls dies in Kombination mit
--private-users verwandt wird. Dies ist der Fall, da die
Einhängung und deren Dateien und Verzeichnisse weiterhin dem relevanten
Benutzer und der relevanten Gruppe des Rechners gehören, die im
Container nicht existieren, und daher unter der Joker-UID 65534 (nobody)
erscheinen. Falls solche bind-Einhängungen erstellt werden, wird
empfohlen, diese mit --bind-ro= nur-lesbar zu machen. Alternativ
können Sie die Einhängeoption »idmap« verwenden,
um die Dateisystemkennungen abzubilden.
--bind-user=
•Falls noidmap verwandt wird,
wird jeder Benutzer z im Bereich 0 … y (von innerhalb des
Containers betrachtet) auf x + z im Bereich x … x + y auf
dem Rechner abgebildet. Alle Benutzer im Rechner außerhalb dieses
Bereichs werden auf nobody innerhalb des Containers abgebildet.
•Falls idmap verwandt wird, wird
jeder Benutzer z im UID-Bereich 0 … y (von innerhalb des
Containers betrachtet) auf die gleiche z im gleichen Bereich 0
… y auf dem Rechner abgebildet. Alle Benutzer im Rechner
außerhalb dieses Bereichs werden auf nobody innerhalb des
Containers abgebildet.
•Falls rootidmap verwandt wird,
wird der Benutzer 0 (von innerhalb des Containers betrachtet) auf
p auf dem Rechner abgebildet. Alle Benutzer im Rechner außerhalb
dieses Bereichs werden auf nobody innerhalb des Containers
abgebildet.
Bindet das Home-Verzeichnis des angegebenen
Benutzers auf dem Rechner in den Container. Akzeptiert den Namen eines
bestehenden Benutzers auf dem Rechner als Argument. Kann mehrfach verwandt
werden, um mehrere Benutzer in den Container zu binden. Dies macht drei Dinge:
Die Kombination der obigen drei Aktionen stellt sicher, dass es möglich
ist, sich an dem Container mit den gleichen Konto-Informationen wie auf dem
Rechner anzumelden. Der Benutzer wird nur flüchtig während der
Container betrieben wird abgebildet und die Abbildung selbst führt
nicht zu dauerhaften Änderungen im Container (außer vielleicht
für erstellte Protokollmeldungen zum Anmeldezeitpunkt und
ähnlichem). Beachten Sie, dass insbesondere die UID/GID-Zuweisung im
Container nicht dauerhaft erfolgt. Falls der Benutzer flüchtig
abgebildet wird, ist es am besten, dem Benutzer keine Änderungen an dem
Container zu erlauben. Falls der Benutzer Dateien oder Verzeichnisse, die ihm
gehören, in dem Container zurücklässt und diese UIDs/GIDs
während späterer Container-Aufrufe erneut verwandt werden
(möglicherweise mit einer anderen --bind-user=-Abbildung), dann
kann der »neu« Benutzer nicht auf diese Dateien und
Verzeichnisse zugreifen.
Die Benutzer-/Gruppen-Datensatz-Zuordnung funktioniert nur, falls der Container
Systemd 249 oder neuer enthält und nss-systemd korrekt in
nsswitch.conf konfiguriert ist. Siehe nss-systemd(8) für
Details.
Beachten Sie, dass der vom Rechner in den Container ausgebreitete
Benutzerdatensatz den UNIX-Passwort-Hash des Benutzers enthalten wird, so dass
nahtlose Anmeldungen in dem Container möglich sind. Falls dem Container
weniger als dem Rechner vertraut wird, ist es daher wichtig, eine starke
UNIX-Passwort-Hash-Funktion zu verwenden (z.B. yescrypt oder ähnlich,
mit dem Hash vorangestelltem »$y$«).
Beim Anbinden eines Benutzers vom Rechner in den Container werden
Überprüfungen ausgeführt, um sicherzustellen, dass der
Benutzername im Container noch nicht bekannt ist. Desweiteren wird
überprüft, dass die zugewiesenen UID/GID derzeit in der
Benutzer-/Gruppendatenbank des Containers nicht definiert ist. Beide
Überprüfungen greifen direkt auf die /etc/passwd und /etc/group
im Container zu und könnten daher bestehende Konten in anderen
Datenbanken nicht erkennen.
Diese Aktion wird nur in Kombination mit --private-users=/-U
unterstützt.
--inaccessible=
1.Das Home-Verzeichnis des Benutzers wird vom
Rechner in /run/host/home/ bind-eingehängt.
2.Eine zusätzliche UID/GID-Abbildung
wird hinzugefügt, die die UID/GID des Benutzers des Rechners auf die
UID/GID des Containers abbildet, ausgewählt aus dem Bereich
60514…...60577.
3.Ein JSON-Benutzer- und -Gruppendatensatz
wird in /run/userdb/ erstellt, der die abgebildeten Benutzer beschreibt. Er
enthält eine minimale Darstellung des Benutzerdatensatzes des Rechners,
angepasst auf die UID/GID und den Home-Verzeichnispfad, der dem Benutzer in
dem Container zugeordnet ist. Das Glibc-NSS-Modul nss-systemd(8) wird
diese Datensätze dort aufnehmen und sie in den
Benutzer-/Gruppendatenbanken des Containers zur Verfügung
stellen.
Macht den angegebenen Pfad im Container nicht
zugreifbar. Damit wird über den angegebenen Pfad (der im Container
existieren muss) ein leerer Dateiknoten des gleichen Typs eingehängt,
der so restriktive Zugriffsmodi wie möglich hat. Dies ist eine wirksame
Methode, Dateien, Verzeichnisse und andere Dateisystemobjekte vom
Container-Inhalt zu maskieren. Diese Option kann mehr als einmal verwandt
werden, wodurch alle angegebenen Pfade maskiert werden.
--tmpfs=
Hängt ein Tmpfs-Dateisystem in den
Container ein. Akzeptiert ein einzelnes, absolutes Pfadargument, das angibt,
wohin die Tmpfs-Instanz eingehängt wird (in diesem Fall ist der
Verzeichniszugriffsmodus als 0755 und der Eigentümer root/root
ausgewählt) oder optional ein Doppelpunkt-getrenntes Paar von Pfad- und
Einhängeoptionszeichenkette, die zum Einhängen verwandt wird (in
diesem Fall werden die Kernelvorgaben für Zugriffsmodus und
Eigentümer ausgewählt, falls nicht anderweitig angegeben).
Maskierungen durch Rückwärtsschrägstriche werden im Pfad
interpretiert, so kann »\:« verwandt werden, um Doppelpunkte in
Pfade einzubetten.
Beachten Sie, dass diese Option nicht zur Ersetzung des Wurzeldateisystems des
Containers durch ein temporäres Dateisystem verwandt werden kann. Die
nachfolgend beschriebene Option --volatile= stellt allerdings eine
ähnliche Funktionalität bereit, wobei der Fokus auf
zustandslosen Betriebssystemabbildern liegt.
--overlay=, --overlay-ro=
Kombiniert mehrere Verzeichnisbäume in
ein Überlagerungsdateisystem und hängt es im Container ein.
Akzeptiert eine Liste von Doppelpunkt-getrennten Pfaden zu den zu
kombinierenden Verzeichnisbäumen und dem Zieleinhängepunkt.
Maskierungen durch Rückwärtsschrägstriche werden im Pfad
interpretiert; so kann »\:« verwandt werden, um Doppelpunkte in
Pfade einzubetten.
Falls drei oder mehr Pfade angegeben werden, dann ist der letzte angegebene Pfad
der Zieleinhängepunkt im Container; alle vorher angegebenen Pfade
beziehen sich auf Verzeichnisbäume im Rechner und werden in der
angegebenen Reihenfolge in das Überlagerungsdateisystem kombiniert. Der
am weitesten links stehende Pfad ist daher der niedrigste Verzeichnisbaum, der
vorletzte Pfad der höchste Verzeichnisbaum in der Stapelreihenfolge.
Falls --overlay-ro= anstelle von --overlay= verwandt wird, dann
wird ein nur-lesbares Überlagerungsdateisystem erstellt. Falls ein
schreibbares Überlagerungsdateisystem erstellt wird, werden alle an ihm
vorgenommenen Änderungen zum höchsten Verzeichnisbaum in der
Stapelreihenfolge geschrieben, d.h. im vorletzten angegebenen.
Falls nur zwei Pfade angegeben werden, dann wird der zweite angegebene Pfad
sowohl als oberstes Verzeichnis in der Stapelreihenfolge (wie vom Rechner
gesehen) betrachtet, sowie auch als Einhängepunkt für das
Überlagerungsdateisystem im Container. Es müssen mindestens zwei
Pfade angegeben werden.
Den Quellpfaden darf optional das Zeichen »+« vorangestellt
werden. In diesem Falle werden die Pfade relativ zum Wurzelverzeichnis des
Abbildes behandelt. Der oberste Quellpfad kann auch als eine leere
Zeichenkette angegeben werden, dann wird ein temporäres Verzeichnis
unterhalb von /var/tmp/ auf dem Rechner verwandt. Das Verzeichnis wird
automatisch entfernt, wenn der Container heruntergefahren wird. Dieses
Verhalten ist nützlich, um nur-lesbare Container-Verzeichnisse
schreibbar zu machen, während der Container läuft. Verwenden Sie
beispielweise »--overlay=+/var::/var«, um automatisch ein
temporäres schreibbares Verzeichnis über ein nur-lesbares
/var/-Verzeichnis zu legen. Falls ein Quellpfad nicht absolut ist, wird er
relativ zum aktuellen Arbeitsverzeichnis aufgelöst.
Für Details zu Überlagerungsdateisystemen, siehe
Überlagerungsdateisystem[5]. Beachten Sie, dass sich die
Semantiken eines Überlagerungsdateisystems deutlich von denen normaler
Dateisysteme unterscheiden, insbesondere im Hinblick auf die gemeldeten
Geräte- und Inode-Informationen. Geräte- und Inode-Informationen
einer Datei können sich während des Hineinschreibens
ändern und zeitweilig könnten Prozesse veraltete Versionen von
Dateien sehen. Beachten Sie, dass dieser Schalter automatisch die
Einhängeoption »workdir=« für das
Überlagerungsdateisystem vom obersten Verzeichnisbaum ableitet und
damit zum Geschwisterverzeichnis wird. Es ist damit wesentlich, dass das
Verzeichnis oberster Ebene selbst kein Einhängepunkt ist (da das
Arbeitsverzeichnis auf dem gleichen Dateisystem wie der oberste
Verzeichnisbaum sein muss). Beachten Sie auch, dass die Einhängeoption
»lowerdir=« die zu stapelnden Pfade in der umgekehrten
Reihenfolge wie bei diesem Schalter erhält.
Beachten Sie, dass diese Option nicht zur Ersetzung des Wurzeldateisystems eines
Containers durch ein Überlagerungsdateisystem verwandt werden kann.
Allerdings stellt die oben beschriebene Option --volatile= eine
ähnliche Funktionalität bereit, wobei der Fokus auf
zustandslosen Betriebssystemabbildern liegt.
Ein-/Ausgabeoptionen
--console=MODUSKonfiguriert, wie die Standardeingabe,
-ausgabe und die Fehlerausgabe für den Container-Inhalt konfiguriert
wird, sowie /dev/console-Geräte für den Container. Akzeptiert
entweder interactive, read-only, passive, pipe
oder autopipe. Falls interactive, wird ein Pseudo-TTY reserviert
und als /dev/console im Container verfügbar gemacht. Es wird dann
bidirektional mit der Standardeingabe verbunden; die Standardausgabe wird an
systemd-nspawn übergeben. read-only ist ähnlich,
aber nur die Ausgabe des Containers wird weitergeleitet und keine Eingaben vom
Aufrufenden werden gelesen. Falls passive, wird ein
Pseudo-TTY-Gerät reserviert, aber es wird mit nichts verbunden. Im
pipe-Modus wird kein Pseudo-TTY reserviert, aber die an
systemd-nspawn übergebenen Standardeingabedeskriptoren,
-ausgabedeskriptoren und die Fehlerausgabedeskriptoren werden — so wie
sie sind — an den Container-Inhalt weitergegeben, siehe dazu den
nächsten Absatz. autopipe agiert schießlich wie
interactive wenn systemd-nspawn auf einem Terminal gestartet
wird und andernfalls wie pipe. Standardmäßig
interactive, falls systemd-nspawn von einem Terminal aus
aufgerufen wird, und ansonsten read-only.
Im Modus pipe existiert /dev/console im Container nicht. Das bedeutet,
dass der Container-Inhalt im Allgemeinen kein vollständiges Init-System
sein kann, da Init-Systeme dazu neigen, /dev/console zu benötigen. Auf
der anderen Seite können in diesem Modus Container-Aufrufe innerhalb
von Shell-Weiterleitungen verwandt werden. Dies liegt daran, dass
zwischengeschaltete Pseudo-TTYs keine unabhängige, bidirektionale
Weiterleitung der Dateiendebedingung (EOF) erlauben, was allerdings für
den korrekten Betrieb von Shell-Weiterleitungen benötigt wird.
Beachten Sie, dass der Modus pipe vorsichtig verwandt werden
sollte, da die Übergabe beliebiger Dateideskriptoren an weniger
vertrauenswürdige Container-Inhalte unerwünschte Schnittstellen
für Zugriffe des Container-Inhaltes öffnen könnten. Falls
sich ein übergebener Dateideskriptor beispielsweise auf ein TTY in
irgendeiner Weise bezieht, können APIs wie TIOCSTI dazu verwandt
werden, Eingaben künstlich zu erzeugen, die zum Ausbruch aus dem
Container verwandt werden können. Daher sollte der Modus pipe
nur verwandt werden, wenn dem Inhalt hinreichend vertraut wird oder wenn die
Dateideskriptoren der Standardeingabe, -ausgabe und Fehlerausgabe
bekanntermaßen sicher sind, zum Beispiel Pipes.
--pipe, -P
Äquivalent zu
--console=pipe.
Zugangsdaten
--load-credential=KENNUNG:PFAD, --set-credential=KENNUNG: WERTEGibt ein Zugangsdatum an den Container weiter.
Diese zwei Optionen entsprechen den Einstellungen LoadCredential= und
SetCredential= in Unit-Dateien. Siehe systemd.exec(5) für
Details über diese Konzepte, sowie die Syntax der Argumente der Option.
Beachten Sie: Wenn systemd-nspawn als Systemd-Systemdienst
ausgeführt wird, kann es die mittels
LoadCredential=/SetCredential= empfangenen Zugangsdaten an den
Nutzinhalt des Containers weiterleiten. Ein Systemd-Diensteverwalter, der als
PID 1 im Container ausgeführt wird, kann sie noch weiter zu den
Diensten, die er selber startet, weiterleiten. Es ist daher möglich,
Zugangsdaten leicht vom übergeordneten Diensteverwalter zu einem
Container-Verwalterdienst und von dort in seine Nutzlast weiterzuleiten. Das
kann sogar rekursiv erfolgen.
Um Binärdaten in die Zugangsdaten für --set-credential=
einzubetten, verwenden Sie C-artige Maskierung (d.h. »\n«, um
einen Zeilenumbruch einzubetten oder »\x00«, um ein Nullbyte (
NUL) einzubetten. Beachten Sie, dass die aufrufende Shell die
Maskierung bereits einmal entfernt haben könnte, daher könnte
dieses doppelte Maskierung benötigen!).
Die Dienste systemd-sysusers.service(8) und systemd-firstboot(1)
lesen die auf diese Art konfigurierten Anmeldedaten zum Zweck der
Konfiguration des Passworts und der Shell des Benutzers root des Containers,
sowie der Locale, der Tastaturzuordnung und der Zeitzone des Systems
während des ersten Systemstartprozesses des Containers. Dies ist
insbesondere in Kombination mit --volatile=yes nützlich, wo
jeder einzelne Systemstart wie der erste Systemstart aussieht, da die in /etc/
angewandte Konfiguration verloren geht, wenn der Container einen Neustart
durchführt. Siehe die entsprechenden Handbuchseiten für Details.
Beispiel:
Der obige Befehl wird die angegebene Abbilddatei image.raw im flüchtigen
Modus aufrufen, d.h. mit leerem /etc/ und /var/. Die Nutzlast des Containers
wird dies als ersten Systemstart erkennen und den Dienst
systemd-firstboot.service startet, der dann die zwei übergebenen
Anmeldedaten einliest, um die anfängliche Locale und das Passwort von
Root des Systems zu konfigurieren.
# systemd-nspawn -i image.raw \ --volatile=yes \ --set-credential=firstboot.locale:de_DE.UTF-8 \ --set-credential=passwd.hashed-password.root:'$y$j9T$yAuRJu1o5HioZAGDYPU5d.$F64ni6J2y2nNQve90M/p0ZP0ECP/qqzipNyaY9fjGpC' \ -b
Weitere
--no-pagerLeitet die Ausgabe nicht an ein
Textanzeigeprogramm weiter.
-h, --help
Zeigt einen kurzen Hilfetext an und beendet
das Programm.
--version
Zeigt eine kurze Versionszeichenkette an und
beendet das Programm.
UMGEBUNGSVARIABLEN
$SYSTEMD_LOG_LEVELDie maximale Protokollierstufe ausgesandter
Nachrichten (Nachrichten mit einer höheren Protokollierstufe, d.h.
weniger wichtige, werden unterdrückt). Sie muss (in absteigender
Reihenfolge) entweder alert, crit, err, warning,
notice, info, debug oder eine Ganzzahl im Bereich
0…7 sein. Siehe syslog(3) für weitere
Informationen.
$SYSTEMD_LOG_COLOR
Ein logischer Wert. Falls wahr, werden auf das
TTY geschriebene Nachrichten gemäß ihrer Priorität
eingefärbt.
Diese Einstellung ist nur nützlich, falls die Nachrichten direkt auf das
Terminal geschrieben werden, da journalctl(1) und andere Werkzeuge, die
Protokolle anzeigen, selbständig Nachrichten gemäß ihrer
Protokollierungsstufe einfärben.
$SYSTEMD_LOG_TIME
Ein logischer Wert. Falls wahr, wird den
Protokollnachrichten der Konsole ein Zeitstempel vorangestellt.
Diese Einstellung ist nur nützlich, falls die Nachrichten direkt auf das
Terminal oder in eine Datei geschrieben werden, da journalctl(1) und
andere Werkzeuge, die Protokolle anzeigen, selbständig Zeitstempel
basierend auf ihren Metadaten den Nachrichten anhängen werden.
$SYSTEMD_LOG_LOCATION
Ein logischer Wert. Falls wahr, wird den
Protokollnachrichten ein Dateinamen und eine Zeilenummer in dem Quellcode, aus
dem die Nachrichten stammen, vorangestellt.
Beachten Sie, dass der Protokollierort sowieso oft als Metadaten zu den
Journal-Einträgen angehängt ist. Die Aufnahme in den
Nachrichtentext kann bei der Fehlersuche in Programmen dennoch praktisch
sein.
$SYSTEMD_LOG_TID
Ein logischer Wert. Falls wahr, wird den
Nachrichten die aktuelle numerische Thread-Kennung (TID) vorangestellt.
Beachten Sie, dass diese Informationen sowieso als Metadatan an
Journal-Einträge angehängt wird. Die Aufnahme direkt im
Nachrichtentext kann aber trotzdem bei der Fehlersuche in Programmen praktisch
sein.
$SYSTEMD_LOG_TARGET
Das Ziel für Protokolliernachrichten.
Entweder console (auf das angehängte TTY protokollieren),
console-prefixed (auf das angehängte TTY protokollieren, aber
die Protokollierstufe und »Einrichtung« voranstellen, siehe
syslog(3)), kmsg (in den zirkulären
Kernel-Protokollpuffer protokollieren), journal (in das Journal
protokollieren ( journal-or-kmsg (in das Journal protokollieren, falls
verfügbar, und andernfalls nach Kmsg), auto (das geeignete
Protokollierziel automatisch ermitteln, die Vorgabe) oder null (die
Protokollierung deaktivieren).
$SYSTEMD_PAGER
Zu verwendendes Textanzeigeprogramm, wenn
--no-pager nicht angegeben ist; setzt $PAGER außer Kraft.
Falls weder $SYSTEMD_PAGER noch $PAGER gesetzt sind, wird eine
Reihe wohlbekannter Textanzeigeprogrammimplementierungen der Reihe nach
ausprobiert, einschließlich less(1) und more(1), bis
eines gefunden wird. Falls keine Textanzeigeprogrammimplementierung gefunden
wird, wird keines aufgerufen. Setzen der Umgebungsvariablen auf die leere
Zeichenkette oder den Wert »cat« ist äquivalent zur
Übergabe von --no-pager.
Beachten Sie: Falls $SYSTEMD_PAGERSECURE nicht gesetzt ist, dann wird
$SYSTEMD_PAGER (sowie $PAGER) ohne Rückmeldung
ignoriert.
$SYSTEMD_LESS
Setzt die an less übergebenen
Optionen (standardmäßig »FRSXMK«) außer
Kraft.
Benutzer könnten insbesondere zwei Optionen ändern wollen:
K
Siehe less(1) für weitere Ausführungen.
$SYSTEMD_LESSCHARSET
Diese Option weist das Textanzeigeprogramm an,
sich sofort beim Druck von Strg-C zu beenden. Um less die Handhabung
von Strg-C selbst zum Umschalten auf die Eingabeaufforderung zu erlauben,
setzen Sie diese Option zurück.
Falls der Wert von $SYSTEMD_LESS kein »K« enthält
und less das aufgerufene Textanzeigeprogramm ist, wird Strg+C durch das
Programm ignoriert und muss durch das Textanzeigeprogramm selbst gehandhabt
werden.
X
Diese Option weist das Textanzeigeprogramm an,
keine Termcap-Initialisierungs- und -Deinitalisierungszeichenketten an das
Terminal zu senden. Dies ist standardmäßig gesetzt, damit die
Darstellung von Befehlen selbst nach dem Beenden des Textanzeigeprogramms
sichtbar bleibt. Allerdings stehen dadurch einige Funktionen des
Textanzeigeprogramms nicht zur Verfügung; insbesondere ist das Scrollen
in der Ausgabe mit der Maus nicht möglich.
Setzt den an less zu
übergebenden Zeichensatz (standardmäßig
»utf-8«, falls das aufrufende Terminal als UTF-8-kompatibel
erkannt wurde) außer Kraft.
$SYSTEMD_PAGERSECURE
Akzeptiert einen logischen Wert. Wenn wahr,
wird der »sichere« Modus des Seitenanzeigeprogramms verwandt,
falls falsch, wird dieser deaktiviert. Falls $SYSTEMD_PAGERSECURE
überhaupt nicht gesetzt ist, dann wird der sichere Modus aktiviert,
falls die effektive Kennung nicht identisch zu dem Eigentümer der
Anmeldesitzung ist, siehe geteuid(2) und
sd_pid_get_owner_uid(3). Im sicheren Modus wird LESSSECURE=1
beim Aufruf des Seitenanzeigeprogramms gesetzt und das Seitenanzeigeprogramm
muss Befehle deaktivieren, die neue Dateien öffnen oder erstellen oder
die einen neuen Unterprozess starten. Falls $SYSTEMD_PAGERSECURE
überhaupt nicht gesetzt ist, werden Seitenanzeigeprogramme, bei denen
unbekannt ist, ob sie einen sicheren Modus implementieren, nicht verwandt.
(Derzeit implementiert nur less(1) einen sicheren Modus.)
Hinweis: Wenn Befehle mit erhöhten Rechten ausgeführt werden,
beispielsweise mittels sudo(8) oder pkexec(1), muss Vorsicht
walten gelassen werden, um sicherzustellen, dass keine ungeplanten
interaktiven Funktionalitäten aktiviert werden. Der
»sichere« Modus für das Seitenanzeigeprogramm kann wie
oben beschrieben automatisch aktiviert werden. Durch Setzen von
SYSTEMD_PAGERSECURE=0 oder durch Nichtenfernen dieser Einstellung aus
der ererbten Umgebung wird es dem Benutzer ermöglicht, beliebige
Befehle auszuführen. Beachten Sie, dass auch
$SYSTEMD_PAGERSECURE gesetzt werden muss, falls die Variablen
$SYSTEMD_PAGER oder $PAGER berücksichtigt werden sollen.
Es kann sinnvoll sein, stattdessen den Seitenanzeiger komplett mit
--no-pager zu deaktivieren.
$SYSTEMD_COLORS
Akzeptiert ein logisches Argument. Wenn wahr,
werden systemd und verwandte Hilfswerkzeuge Farben in ihrer Ausgabe
verwenden, andernfalls wird die Ausgabe einfarbig sein. Zusätzlich kann
die Variable eine der folgenden besonderen Werte annehmen: »16«,
»256«, um die Verwendung von Farbe auf die grundlegenden 16 bzw.
256 ANSI-Farben zu beschränken. Dies kann festgelegt werden, um die auf
$TERM und der vorliegenden Verbindung der Konsole basierende
automatische Entscheidung außer Kraft zu setzen.
$SYSTEMD_URLIFY
Dies muss ein logischer Wert sein. Er steuert,
ob anklickbare Links für Terminal-Emulatoren, die dies
unterstützen, erstellt werden sollen. Dies kann angegeben werden, um
die Entscheidung, die systemd basierend auf $TERM und anderen
Bedingungen trifft, außer Kraft zu setzen.
BEISPIELE
Beispiel 1. Herunterladen eines Fedora-Abbildes und starten einer Shell darin# machinectl pull-raw --verify=no \ https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images/Fedora-Cloud-Base-36-1.5.x86_64.raw.xz \ Fedora-Cloud-Base-36-1.5.x86-64 # systemd-nspawn -M Fedora-Cloud-Base-36-1.5.x86-64
# dnf -y --releasever=36 --installroot=/var/lib/machines/f36 \ --repo=fedora --repo=updates --setopt=install_weak_deps=False install \ passwd dnf fedora-release vim-minimal systemd systemd-networkd # systemd-nspawn -bD /var/lib/machines/f36
# debootstrap unstable ~/debian-tree/ # systemd-nspawn -D ~/debian-tree/
# pacstrap -c ~/arch-tree/ base # systemd-nspawn -bD ~/arch-tree/
# zypper --root=/var/lib/machines/tumbleweed ar -c \ https://download.opensuse.org/tumbleweed/repo/oss tumbleweed # zypper --root=/var/lib/machines/tumbleweed refresh # zypper --root=/var/lib/machines/tumbleweed install --no-recommends \ systemd shadow zypper openSUSE-release vim # systemd-nspawn -M tumbleweed passwd root # systemd-nspawn -M tumbleweed -b
# systemd-nspawn -D / -xb
# chcon system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 -R /srv/container # systemd-nspawn -L system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 \ -Z system_u:system_r:svirt_lxc_net_t:s0:c0,c1 -D /srv/container /bin/sh
# systemd-nspawn -b -i ~/image.raw \ --pivot-root=/ostree/deploy/$OS/deploy/$CHECKSUM:/sysroot \ --bind=+/sysroot/ostree/deploy/$OS/var:/var
EXIT-STATUS
Es wird der Exit-Code des im Container ausgeführten Programms zurückgeliefert.SIEHE AUCH
systemd(1), systemd.nspawn(5), chroot(1), dnf(8), debootstrap(8), pacman(8), zypper(8), systemd.slice(5), machinectl(1), btrfs(8)ANMERKUNGEN
- 1.
- Container-Schnittstelle
- 2.
- Spezifikation für auffindbare Partitionen
- 3.
- OCI-Laufzeit-Spezifikation
- 4.
- OSTree
- 5.
- Überlagerungsdateisystem
- 6.
- Fedora
- 7.
- Debian
- 8.
- Ubuntu
- 9.
- Tanglu
- 10.
- Arch Linux
- 11.
- OpenSUSE Tumbleweed
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <[email protected]> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzersystemd 252 |