Entwickler des Betriebssystems , unter Verwendung der Programmiersprache Rust und dem Konzept des Mikrokernels, neuer Paketmanager . Im Rahmen des Projekts entwickelt sich ein neues Paketformat, eine Bibliothek mit Funktionen zur Paketverwaltung und ein Kommandozeilenwerkzeug zum Erstellen und Extrahieren einer kryptografisch geprüften Sammlung von Dateien. Der Code von pkgar ist in Rust geschrieben und unter der MIT-Lizenz.
Das pkgar-Format beansprucht keine Universalität und ist auf die Besonderheiten des Betriebssystems Redox OS optimiert. Der Paketmanager unterstützt die Verifizierung der Quelle durch digitale Signaturen und die Integritätskontrolle. Prüfziffern werden mit der Hashfunktion . Die mit der Verifizierung verbundene Funktionalität von pkgar kann auch ohne das tatsächliche Speichern des Paketarchivs verfügbar sein, indem nur der Header manipuliert wird. Insbesondere besteht ein Paket aus einer Header-Datei (.pkgar_head) und einer Datendatei (.pkgar_data). Ein korrekt signiertes vollständiges Paket (.pkgar) kann einfach durch das Anhängen der Header-Datei an die Datendatei erzeugt werden („cat example.pkgar_head example.pkgar_data > example.pkgar“).
Die Header-Datei enthält separate Prüfziffern für den Header und die Strukturen mit Parametern aus der Datendatei sowie eine digitale Signatur zur Paketüberprüfung. Die Datendatei umfasst eine aufeinanderfolgende Auflistung aller Dateien und Verzeichnisse, die im Paket enthalten sind. Vor jedem Datenelement wird eine Struktur mit Metadaten angegeben, die die Prüfziffer für die Daten selbst, die Größe, die Zugriffsrechte, den relativen Pfad der installierten Datei und die Verschiebung der Parameter des nächsten Datenelements enthält. Wenn bei der Aktualisierung einzelne Dateien unverändert bleiben und die Prüfziffer übereinstimmt, werden sie übersprungen und nicht heruntergeladen.
Die Integrität der Quelle kann überprüft werden, indem lediglich die Header-Datei abgerufen wird, während die Korrektheit der gewählten Datendatei überprüft werden kann, indem nur die Strukturen mit den Parametern dieser Datei heruntergeladen und sichergestellt wird, dass sie mit der im Header vermerkten Prüfziffer übereinstimmen. Die eigentlichen Daten können nach dem Herunterladen überprüft werden, indem die Prüfziffer aus der Struktur mit den Parametern verwendet wird, die vor den Daten steht.
Pakete sind von Anfang an auf die Möglichkeit der wiederholbaren Erstellung ausgelegt, was bedeutet, dass die Erstellung eines Pakets für ein bestimmtes Verzeichnis immer zu einem identischen Paket führt. Nach der Installation werden nur die Metadaten im System gespeichert, die ausreichen, um das Paket aus den installierten Daten wiederherzustellen (Inhalt des Pakets, Prüfziffern, Pfade und Zugriffsrechte sind in den Metadaten enthalten).
Die Hauptziele von pkgar:
- Atomarität — Updates werden nach Möglichkeit automatisch angewendet.
- Datenverkehrseinsparung — Daten werden nur über das Netzwerk übertragen, wenn sich der Hash ändert (bei einem Update werden nur geänderte Dateien heruntergeladen).
- Hohe Leistung, schnelle kryptografische Algorithmen kommen zum Einsatz (blake3 unterstützt die parallele Verarbeitung von Daten bei der Hash-Berechnung). Wenn die Daten aus dem Repository zuvor nicht zwischengespeichert wurden, kann der Hash für die herunterzuladenden Daten während des Downloads berechnet werden.
- Minimalismus — im Gegensatz zu anderen Formaten enthält pkgar nur die Metadaten, die für die Extraktion des Pakets erforderlich sind.
- Unabhängigkeit vom Installationsverzeichnis – das Paket kann in jedes Verzeichnis von jedem Benutzer installiert werden (der Benutzer muss Schreibberechtigungen im gewählten Verzeichnis haben).
- Sicherheit – Pakete werden immer kryptografisch verifiziert, wobei die Verifikation vor der Durchführung tatsächlicher Vorgänge mit dem Paket erfolgt (zuerst wird der Header heruntergeladen und wenn die digitale Signatur korrekt ist, werden die Daten in ein temporäres Verzeichnis heruntergeladen und nach der Verifizierung in das Zielverzeichnis verschoben).
Quelle: opennet.ru
