Entwickler des Betriebssystems , unter Verwendung der Programmiersprache Rust und dem Konzept des Mikrokernels, neuer Paketmanager . Im Rahmen des Projekts wird ein neues Paketformat, eine Bibliothek mit Funktionen zur Paketverwaltung und ein Kommandozeilenwerkzeug zur Erstellung und Extraktion einer kryptographisch geprüften Sammlung von Dateien entwickelt. Der Code von pkgar ist in Rust geschrieben und unterliegt der MIT-Lizenz.
Das pkgar-Format erhebt keinen Anspruch auf Universalität und ist unter Berücksichtigung der Besonderheiten des Betriebssystems Redox OS optimiert. Der Paketmanager unterstützt die Verifizierung der Quelle durch digitale Signaturen und die Integritätskontrolle. Die Prüfziffern werden mit Hilfe der Hash-Funktion . Die mit der Verifizierung verbundene Funktionalität von pkgar kann ohne tatsächliche Speicherung des Paketarchivs verfügbar sein, indem nur der Header bearbeitet wird. Insbesondere wird ein Paket durch eine Headerdatei (.pkgar_head) und eine Datendatei (.pkgar_data) gebildet. Ein korrekt signiertes vollständiges Zusammenfassungs-Paket (.pkgar) kann einfach durch die Zusammenführung der Headerdatei mit der Datendatei erhalten werden („cat example.pkgar_head example.pkgar_data > example.pkgar“).
Die Headerdatei enthält separate Prüfziffern für den Header und die Strukturen mit Parametern aus der Datendatei sowie eine digitale Signatur zur Überprüfung des Pakets. Die Datendatei enthält eine sequenzielle Auflistung aller Dateien und Verzeichnisse, die im Paket enthalten sind. Vor jedem Datenelement wird eine Struktur mit Metadaten bereitgestellt, die die Prüfziffer für die eigentlichen Daten, die Größe, die Berechtigungen, den relativen Pfad zur zu installierenden Datei und den Versatz der Parameter des nächsten Datenelements umfasst. Wenn bei der Aktualisierung einzelne Dateien nicht geändert wurden und die Prüfziffer übereinstimmt, werden sie übersprungen und nicht heruntergeladen.
Die Integrität der Quelle kann überprüft werden, indem lediglich die Headerdatei abgerufen wird, während die Korrektheit der gewählten Datendatei überprüft werden kann, indem nur die Strukturen mit den Parametern dieser Datei heruntergeladen werden und deren Übereinstimmung mit der im Header vermerkten Prüfziffer sichergestellt wird. 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 ursprünglich so konzipiert, dass sie eine Wiederverwendbarkeit ermöglichen, was bedeutet, dass die Erstellung eines Pakets für ein bestimmtes Verzeichnis immer zur Bildung eines identischen Pakets führt. Nach der Installation bleiben im System nur die Metadaten erhalten, die ausreichen, um das Paket aus den installierten Daten zu rekonstruieren (der Inhalt des Pakets, Prüfziffern, Pfade und Zugriffsrechte sind in den Metadaten enthalten).
Hauptziele von pkgar:
- Atomarität – Updates werden, wenn möglich, automatisch angewendet.
- Datenverbrauchseinsparung – Daten werden nur bei Änderungen des Hashes über das Netz übertragen (bei Updates werden nur die geänderten Dateien heruntergeladen).
- Hohe Leistung, schnelle kryptografische Algorithmen werden genutzt (blake3 unterstützt die parallele Verarbeitung von Daten bei der Berechnung des Hashes). Wenn die Daten aus dem Repository zuvor nicht im Cache waren, kann der Hash für die heruntergeladenen Daten während des Downloads berechnet werden.
- Minimalismus – im Gegensatz zu anderen Formaten enthält pkgar nur die Metadaten, die für die Entnahme des Pakets erforderlich sind.
- Unabhängigkeit vom Installationsverzeichnis – das Paket kann in jedes Verzeichnis von jedem Benutzer installiert werden (der Benutzer muss Schreibrechte für das ausgewählte Verzeichnis haben).
- Sicherheit – Pakete werden immer kryptografisch verifiziert, und die Verifizierung erfolgt bevor tatsächliche Operationen mit dem Paket durchgeführt werden (zuerst wird der Header heruntergeladen, und wenn die digitale Signatur korrekt ist, werden die Daten in ein temporäres Verzeichnis heruntergeladen, die nach der Verifizierung in das Zielverzeichnis verschoben werden).
Quelle: opennet.ru
