Systemd-portabled

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Exemplarische Vorgehensweise Portable Service

  • systemd v239 enthält eine große Anzahl neuer Funktionen.
  • Einer davon ist der erstklassige Support für Portable Services.

Was sind „Portable Services“?

  • Das „Portable Service“-Konzept lässt sich von klassischen chroot()-Umgebungen sowie dem Container-Management inspirieren
  • Es bringt zudemeine Reihe ihrer Funktionen in das regulärere Systemdienst-Management ein.
  • Das Konzept "Container" bietet hauptsächlich zwei Hauptmerkmale:

Ressourcenbündelung

  • Ein Container bringt im Allgemeinen seinen eigenen Dateisystembaum mit
  • Diese werden gebündelt alle gemeinsam genutzten Bibliotheken und andere Ressourcen, die er möglicherweise benötigt, zusammen mit den ausführbaren Hauptdienstdateien.

Isolation und Sandboxing

  • Ein Container arbeitet in einer Namespace-Umgebung, die relativ losgelöst vom Host ist.
  • Abgesehen davon, dass es in einem eigenen Dateisystem-Namensraum lebt, hat es normalerweise auch eine eigene Benutzerdatenbank, einen eigenen Prozessbaum und so weiter.
  • Der Zugriff vom Container auf den Host wird durch verschiedene Sicherheitstechnologien eingeschränkt.

Chroot

  • Von diesen beiden Konzepten ist das erste auch das, worum es bei traditionellen UNIX-chroot()-Umgebungen geht.
  • Sowohl Ressourcenbündelung als auch Isolierung/Sandboxing sind Konzepte, die systemd seit längerem in unterschiedlichem Maße implementiert.
  • Insbesondere RootDirectory= und RootImage= gibt es schon seit langer Zeit, ebenso wie die verschiedenen Sandboxing-Funktionen, die systemd bereitstellt.
  • Das Konzept der Portable Service baut darauf auf und kombiniert diese Funktionen auf eine neue, integrierte Weise, um sie zugänglicher und benutzerfreundlicher zu machen.

Was genau ist ein "Portable Service"?

  • Ähnlich wie ein Container-Image kann ein portabler Dienst auf der Festplatte nur ein Verzeichnisbaum sein,
  • Diese ausführbare Dienstdateien und alle ihre Abhängigkeiten in einer Hierarchie enthält, die der normalen Linux-Verzeichnishierarchie ähnelt.
  • Ein portabler Dienst kann auch ein Raw-Disk-Image sein, das ein Dateisystem enthält, das einen solchen Baum enthält (das über ein Loopback-Blockgerät gemountet werden kann),
  • Oder mehrere Dateisysteme (in diesem Fall müssen sie der Spezifikation für erkennbare Partitionen folgen und in einer GPT-Partitionstabelle befinden).
  • Unabhängig davon, ob der portable Dienst auf der Festplatte ein einfacher Verzeichnisbaum oder ein Raw-Disk-Image ist, nennen wir dieses Konzept das portable Service-Image.
  • Solche Images können mit jedem Tool generiert werden, das normalerweise zum Installieren von Betriebssystemen in einem bestimmten Verzeichnis verwendet wird,
  • beispielsweise dnf --installroot= oder debootstrap.
  • An diese Bäume werden nur sehr wenige Anforderungen gestellt, mit Ausnahme der folgenden beiden:
  • Der Baum sollte systemd-Unit-Dateien für relevante Dienste enthalten.
  • Der Baum sollte /usr/lib/os-release (oder /etc/os-release) OS-Versionsinformationen enthalten.
  • Natürlich, qualifizieren sich OS-Bäume, die von einer der heutigen großen Distributionen generiert wurden, im Allgemeinen für diese beiden Anforderungen ohne weitere Modifikationen,
  • Da so ziemlich alle von ihnen /usr/lib/os-release übernommen haben und dazu neigen, ihre Hauptdienste bereitzustellen mit systemd-Unit-Dateien.
  • Ein so generiertes portables Service-Image kann von einem Host „angehängt“ oder „getrennt“ werden:
  • Das „Anhängen“ eines Bildes an einen Host erfolgt über den neuen Befehl „portablectl attach“.
  • Dieser Befehl zerlegt das Image, liest die OS-Release-Informationen und sucht darin nach Unit-Dateien.
  • Es kopiert dann relevante Unit-Dateien aus den Images und in /etc/systemd/system/.
  • Danach werden alle kopierten Service-Unit-Dateien auf zwei Arten erweitert:
  • Ein Drop-In fügt eine RootDirectory=- oder RootImage=-Zeile hinzu, sodass die Unit-Dateien, obwohl sie jetzt auf dem Host verfügbar sind, beim Start die referenzierten Binärdateien von ausführen Bild. Es enthält auch symbolische Links in einem zweiten Drop-In, das als "Profil" bezeichnet wird und zusätzliche Sicherheitseinstellungen enthalten soll, um die angehängten Dienste durchzusetzen, um das richtige Maß an Sandboxing sicherzustellen.
  • Das „Trennen“ eines Bildes vom Host erfolgt durch portables Trennen.
  • Es kehrt die obigen Schritte um:
  • Die herauskopierten Unit-Dateien werden wieder entfernt, ebenso wie die beiden Drop-in-Dateien, die dafür generiert werden.
  • Während ein portabler Dienst angehängt wird, werden seine relevanten Unit-Dateien wie alle anderen auf dem Host verfügbar gemacht:
  • Sie erscheinen in systemctl list-unit-files,
  • Sie können sie aktivieren und deaktivieren,
  • Sie können sie starten und stoppen.
  • Sie können sie mit systemctl edit erweitern.
  • Sie können sie introspizieren.
  • Sie können die Ressourcenverwaltung auf sie wie auf jeden anderen Dienst anwenden, und Sie können ihre Protokolle wie jeden anderen Dienst verarbeiten und so weiter.
  • Das liegt daran, dass es sich wirklich um native systemd-Dienste handelt, außer dass sie, wenn Sie so wollen, einen „Twist“ haben: Sie haben standardmäßig eine strengere Sicherheit und speichern ihre Ressourcen in einem Stammverzeichnis oder Image.
  • Und das ist bereits die Essenz dessen, was Portable Services sind.

Ein paar interessante Punkte:

Auch wenn der Schwerpunkt auf dem Versand von Service-Unit-Dateien in portablen Service-Images liegt, können Sie tatsächlich Timer-Units, Socket-Units, targ


Links