Anpassung von Debian zur Verwendung der Rust-Implementierung von coreutils

Sylvestre Ledru, bekannt für seine Arbeiten zum Aufbau von Debian GNU/Linux mithilfe des Clang-Compilers, berichtete von einem erfolgreichen Experiment mit einem alternativen Satz von Dienstprogrammen, coreutils, die in der Rust-Sprache neu geschrieben wurden. Coreutils umfasst Dienstprogramme wie sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln und ls. Für die erste Stufe der Integration der Rust-Version von coreutils in Debian wurden folgende Ziele festgelegt:

  • Packen Sie eine Rust-Alternative zu coreutils für Debian und Ubuntu.
  • Booten von Debian mit GNOME-Desktop mit Rust-Coreutils.
  • Installation der 1000 beliebtesten Pakete aus dem Repository.
  • Erstellen Sie aus Firefox-, LLVM/Clang- und Linux-Kernel-Quellen in einer Umgebung mit Rust-Coreutils.

Nachdem wir mehr als 100 Patches für Rust/coreutils erstellt hatten, konnten wir alle angestrebten Ziele erfolgreich erreichen. Die laufende Arbeit umfasst die Implementierung fehlender Dienstprogramme und Optionen, die Verbesserung der Qualität und Einheitlichkeit des Codes, die Entwicklung der Testsuite und die Beseitigung von Abstürzen, die beim Ausführen der Testsuite über GNU Coreutils auftreten (141 von 613 Tests werden bisher erfolgreich ausgeführt). ).

Bei der Erstellung des Rust-Coreutils-Pakets wurde beschlossen, das Coreutils-Paket nicht zu ersetzen, sondern ihnen die Möglichkeit zu geben, parallel zu arbeiten. Dienstprogrammoptionen in der Sprache Rust werden in /usr/lib/cargo/bin/ installiert und durch Hinzufügen dieses Verzeichnisses zur Umgebungsvariablen PATH aktiviert. Das Erstellen des Rust-Coreutils-Pakets wurde durch die Notwendigkeit erschwert, alle Build-Abhängigkeiten in das Repository herunterzuladen, einschließlich Rust und verschiedener kleiner Crate-Pakete.

Das Erstellen eines Boot-Images war kein Problem, aber die Anpassung der Pakete für eine Umgebung mit Rust-Coreutils erforderte viel Arbeit, da viele Post-Install-Skripte Dienstprogramme aus dem Coreutils-Set aufrufen. Die meisten Probleme wurden durch das Fehlen notwendiger Optionen verursacht, zum Beispiel verfügte das Dienstprogramm „cp“ nicht über die Optionen „--archive“ und „--no-deference“, „ln“ unterstützte nicht die Optionen „- relative“-Option, mktemp unterstützte „-t“ nicht, in der Synchronisierung „-fs“, in der Installation – „--owner“ und „-group“. Andere Probleme traten aufgrund von Verhaltensunterschieden auf, beispielsweise unterstützte das Installationsdienstprogramm die Angabe von /dev/null als Eingabedatei nicht, mkdir hatte die Option „--parents“ anstelle von „-parent“ usw.

Beim Testen der Zusammenstellung großer Codebasen traten keine größeren Probleme auf. Beim Erstellen von Firefox und LLVM/Clang werden Python-Skripte und cmake verwendet, sodass das Ersetzen von Coreutils keine Auswirkungen auf diese hatte. Der Aufbau des Linux-Kernels verlief relativ reibungslos, es traten lediglich zwei Probleme auf: eine Fehlerausgabe bei der Verwendung von chown mit einem symbolischen Link und das Fehlen einer „-n“-Option im ln-Dienstprogramm.

Source: opennet.ru

Kommentar hinzufügen