Mittwoch, 29. Mai 2013

Packagemanager Statusreport

Ingo und Oliver haben jetzt ihre 160 bezahlte Stunden am Packagemanagement abgearbeitet - Oliver noch nicht ganz, weil er noch etwas durch sein vorheriges Projekt aufgehalten wurde und so nicht wie Ingo von Anfang an wirklich vollzeit bei der Sache war. Nach dem Eröffnungs-Blogpost und dem Zwischenstands-Report ist nun sozusagen der Schlussbericht zu ihrer Zwei-Monatsarbeit erschienen.

Ingo führt darin folgende Fortschritte seit dem Zwischenbericht auf:

  • Ästhetische Verbesserungen, Refactoring, um den Code einfacher unterhalten zu können.

  • Komfortablere Benutzung und neue Optionen, die insbesondere Portierungen mit haikuporter vereinfachen. So wird nun der Originalcode eines Ports in ein neues git Repository geschoben und die Haiku-spezifischen Patche hinzugefügt. So lassen sich Änderungen später einfach erkennen und anpassen. Viel bequemer als das alles immer von Hand zu machen.

  • Strengere Auswertung von Abhängigkeiten

  • Neue Features, insobesondere die Möglichkeit unterschiedliche Pakete eines Ports zu schnüren, beispielsweise ein Entwicklungs-Paket, ein Doku-Paket, ein Debug-Info-Packet etc.

Relativ viel Zeit wurde darauf verwendet die "Build-Rezepte" der von Haiku benötigten Softwareports zu erstellen. Obwohl oft bereits eine .bep Datei vorhanden war, musste viel angepasst werden, da Haikus Packagemanager flexibler ist was Dateipfade angeht. Auch wurde die Verzeichnis-Struktur geändert.

Nachdem nun fast alle Packages, die für das Herstellen eines Haiku-Images benötigt werden, erstellt wurden, konnte der PackageManagement-Branch zum ersten mal seit zwei Jahren auf den momentanen Haiku Main-Branch gezogen werden.

Desweiteren wurde das Package-Format verändert, so dass nun selbst der Bootloader als unkomprimiertes Package vorliegt, das direkt vom Stage-1-Bootloader angesprungen werden kann. Außerdem können Pakete nun Metainformationen enthalten, was globale Einstellungen oder Benutzereinstellungen angeht, "Unix" User- und Gruppeninformationen oder ob ein Skript nach der Installation ausgeführt werden soll.

Neben diesen neuen Features wurde das Format auch noch auf seine Komprimierbarkeit optimiert. Die Daten werden in 64kB Blöcke aufgeteilt und komprimiert. Anhand einer Art Inhaltsverzeichnis, kann das Package-Filesystem aber immer noch schnell auf die Inhalte zugreifen, ohne z.B. das komplette Paket dekomprimieren zu müssen. Das Package-Filesystem cached diese dekomprimierten Blöcke jetzt, was die Performance weiter verbessert.

Die Komprimierung ist dabei um einiges besser als bei zip, eher in der Liga von tar.gz. Theoretisch ließen sich für den Download bestimmte Packages weiter verkleinern, indem das Packet ohne Kompression erstellt und anschließend per xz zusammengepackt wird.

Während ihrer Arbeit tat sich ein Problem auf, mit dem die beiden nicht gerechnet hatten: Cross-compiling Pakete. Ganz früher enthielt das Haiku Repository den kompletten Code aller benötigten Programme. Nach und nach wurden diese Portierungen jedoch ausgegliedert und erst während dem Build geladen und im Image installiert. Das spart Zeit beim Kompilieren, die Programme können extern "maintained" werden und sie müssen nicht in Haikus jam-basiertes Buildsystem integriert werden.

Der Nachteil ist natürlich, dass Portierungen auf andere Plattformen schwieriger geworden ist, da erstmal Pakete der Portierungen der benötigten Programme vorhanden sein müssen. Schlimmer noch, einige Pakete werden gebraucht, um Haiku selbst überhaup kompilieren zu können (z.B. der Kompiler...).

Um dieses Problem zu lösen, müssen diese essentiellen Pakete erstmal auf einer anderen Platform erstellt werden, also braucht man eine Cross-Compile-Umgebung.

Ingo gibt folgende Anleitung, wie man Haiku so von Null aufbaut:

  • Man konfiguriert den Haiku Build wie gewohnt, inkl. die Erstellung eines Cross-Compilers.

  • Man baut "haiku_cross_devel.hpkg", das die Haiku Header, libroot und den Glue-Code enthält, also alles um Software für die Zielplattform Haiku erstellen zu können.

  • Jetzt schaut man in das haikuports.cross Repository. Hier befinden sich alle "Build-Rezepte" die man benötigt, um die Programme zu erstellen um Haiku zu bauen. Mit diesen Rezepten baut man mittels haikuporter jetzt die nötige Software, inkl. der haiku_cross_devel package.

  • Jetzt baut man ein minimales Haiku, inkl. der cross-built packages.

  • Dann bootet man dieses Mini-Haiku und baut alle Packages.

  • Jetzt sind alle benötigten Packages vorhanden und man kann ein komplettes Haiku wie gewoht bauen.

Zur Zeit muss man diese Cross-Building-Packages noch unter Haiku bauen, wegen dem benötigten Package-Dateisystem und den Features zum Lösen von Abhängikeits durch haikuporter.

Diese ganze Cross-Kompiliererei wird in Kürze nötig, da es bisher nur x86 gcc2 Pakete gibt, bald aber auch gcc4 und x86-64 Pakete benötigt werden.

Es ist also noch viel zu tun... Da trifft es sich gut, dass Ingo und Oliver ihre Verträge verlängern konnten. \o/

Keine Kommentare:

Kommentar veröffentlichen