Zunächst mal besorgen wir uns Plattenplatz. Ich habe auf meinen beiden Rechnern je 10 GB beim Partitionieren frei gelassen. Ich denke das wird reichen. Wer das nicht getan hat: Es geht auch mit Dateisystem-Images, aber das kann auch in die Hose gehen. Ich weiß ad hoc, dass GRUB dazu in der Lage ist, von Image zu booten, während ich bei LILO unsicher bin.
Ist die Partition angelegt und formatiert, kommt auch schon der nächste Punkt: Das Build-System. Heutige Build-Systeme sind viel zu kompliziert, um sie als einfacher Programmierer durchschauen zu können (besonders bei der glibc hat mir das öfter die Füße weggezogen). Es wäre also gut, wenn wir so schnell wie möglich ein chroot errichten könnten.
Ich werde hierzu die Technik von LFS adaptieren, ein Verzeichnis /tools auf der Zielplatte anzulegen und es ins Wurzelverzeichnis zu linken. Außerdem wird ein neuer Nutzer angelegt, der spezielle Settings bekommt (z.B. /tools/bin ganz vorne im PATH, Hashing der Shell wird abgeschaltet). Dann bauen wir ein Basis-System nach /tools, das, sobald chroot-fähig, auch als solches benutzt wird, um das eigentliche System zu bauen. Grund für dieses Bootstraping ist, dass Build-Systeme für die Software in /tools Zeug gesehen haben könnten, dass es nachher im chroot nicht mehr gibt.
Noch was: Meine Architektur ist amd64. Die dietlibc hat von Haus aus nur eine libm für i386. Ich habe also selbst eine geschrieben, die Ergebnisse sind hier.
Jetzt müssen wir Quelltextpakete herunterladen. Besser, man hat alles gleich auf der Platte, dann geht es nachher ohne Probleme weiter. Was wollen wir denn alles kompilieren?
- Die dietlibc natürlich.
- Die libm für AMD64
- Die GNU binutils.
- Deren Abhängigkeit: zlib.
- Die GNU Compiler Collection. Konkreter:
- Die Abhängigkeiten GMP, MPFR und MPC
- Wir werden eine Shell benötigen. Ich nehme die zsh.
- Die Standard-Utilities übernehmen hier embutils, skaembutils und minutils.
- Wenn wir Zeug von skarnet kompilieren, brauchen wir die skalibs
- Um alles entpacken zu können, brauchen wir gzip (da nehme ich das minigzip aus der zlib), bzip2, xz und pax. Ja, ich nehme das Quellpaket von Debian, ich habe keine Homepage finden können.
- Der Kernel wäre auch relativ wichtig. Den brauchen wir auch frühzeitig.
Wenn mir noch was einfällt, verlängere ich die Liste noch. ;-)
Mein Plan bis jetzt:
- Milestone 1: Ich kompiliere den gcc nach /tools. Dann kompiliere ich damit die dietlibc und versuche anschließend, die binutils und den gcc erneut zu kompilieren, aber dabei gegen die dietlibc zu linken.
- Milestone 2: Ich kompiliere das ganze restliche Zeugs nach /tools.
- Milestone 3: Ich wechsle das Wurzelverzeichnis zur Zielplatte und kompiliere alles noch mal, jetzt aber nach /
- Milestone 4: Jetzt wird noch der Kernel dazu kompiliert.
- Milestone 5: Ein erfolgreicher Boot.
- Milestone 6: Ich kompiliere den X-Server.
Keine Kommentare:
Kommentar veröffentlichen