Distri – eine Distribution zum Testen schneller Paketverwaltungstechnologien

Michael Stapelberg, Autor des i3wm-Kachelfenstermanagers und ehemaliger aktiver Debian-Entwickler (verwaltete etwa 170 Pakete), entwickelt experimentelle Verteilung verteilen und ein gleichnamiger Paketmanager. Das Projekt ist als Untersuchung möglicher Wege zur Steigerung der Leistung von Paketverwaltungssystemen positioniert und verkörpert einige neue Ideen für den Aufbau von Distributionen. Der Paketmanagercode ist in Go und geschrieben vertrieben von unter der BSD-Lizenz.

Ein wesentliches Merkmal des Paketformats der Distribution besteht darin, dass das Paket in Form von SquashFS-Images und nicht in komprimierten TAR-Archiven bereitgestellt wird. Die Verwendung von SquashFS ermöglicht Ihnen, ähnlich wie bei den Formaten AppImage und Snap, das „Mounten“ eines Pakets, ohne es entpacken zu müssen. Das spart Speicherplatz, ermöglicht atomare Änderungen und macht den Inhalt des Pakets sofort zugänglich. Gleichzeitig enthalten Distri-Pakete, wie im klassischen „deb“-Format, nur einzelne Komponenten, die durch Abhängigkeiten mit anderen Paketen verknüpft sind (Bibliotheken werden nicht in Paketen dupliziert, sondern als Abhängigkeiten installiert). Mit anderen Worten: distri versucht, die granulare Paketstruktur klassischer Distributionen wie Debian mit den Methoden zur Bereitstellung von Anwendungen in Form von gemounteten Containern zu kombinieren.

Jedes Paket in distri wird im schreibgeschützten Modus in ein eigenes Verzeichnis gemountet (das Paket mit zsh ist beispielsweise als „/ro/zsh-amd64-5.6.2-3“ verfügbar), was sich positiv auf die Sicherheit auswirkt schützt vor versehentlichen oder böswilligen Änderungen. Um eine Hierarchie von Dienstverzeichnissen wie /usr/bin, /usr/share und /usr/lib zu bilden, wird ein spezielles FUSE-Modul verwendet, das die Inhalte aller installierten SquashFS-Images zu einem Ganzen zusammenfasst (zum Beispiel das / Das Verzeichnis „ro/share“ bietet Zugriff auf die Freigabe von Unterverzeichnissen aller Pakete.

Pakete in distri grundsätzlich geliefert von Handlern, die während der Installation aufgerufen werden (keine Hooks oder Trigger), und verschiedene Versionen eines Pakets können nebeneinander existieren, sodass eine parallele Installation von Paketen möglich wird. Das vorgeschlagene Design beschränkt die Leistung des Paketmanagers nur auf den Netzwerkdurchsatz, über den die Pakete heruntergeladen werden. Die eigentliche Installation oder Aktualisierung des Pakets erfolgt atomar und erfordert keine Duplizierung des Inhalts.

Konflikte bei der Installation von Paketen werden beseitigt, da jedes Paket einem eigenen Verzeichnis zugeordnet ist und das System das Vorhandensein verschiedener Versionen eines Pakets zulässt (der Inhalt des Verzeichnisses mit einer neueren Revision des Pakets ist in den Union-Verzeichnissen enthalten). Das Erstellen von Paketen ist außerdem sehr schnell und erfordert keine Installation von Paketen in einer separaten Build-Umgebung (Darstellungen der erforderlichen Abhängigkeiten aus dem Verzeichnis /ro werden in der Build-Umgebung erstellt).

Unterstützt Typische Paketverwaltungsbefehle wie „distri install“ und „distri update“ und anstelle von Informationsbefehlen können Sie das Standarddienstprogramm „ls“ verwenden (um beispielsweise installierte Pakete anzuzeigen, zeigen Sie einfach eine Liste der Verzeichnisse im „ /ro“-Hierarchie, und um herauszufinden, in welchem ​​Paket die Datei enthalten ist, schauen Sie, wohin der Link von dieser Datei führt).

Das zum Experimentieren vorgeschlagene Prototypen-Verteilungskit umfasst ca 1700 Beutel und fertig Installationsbilder mit einem Installer, geeignet sowohl für die Installation als Hauptbetriebssystem als auch für die Ausführung in QEMU, Docker, Google Cloud und VirtualBox. Es unterstützt das Booten von einer verschlüsselten Festplattenpartition und eine Reihe von Standardanwendungen zum Erstellen eines Desktops auf Basis des i3-Fenstermanagers (als Browser wird Google Chrome angeboten). Unter der Voraussetzung ein komplettes Toolkit zum Zusammenstellen einer Distribution, Vorbereiten und Generieren von Paketen, Verteilen von Paketen über Spiegel usw.

Source: opennet.ru

Kommentar hinzufügen