Debian aanpassen om de Rust-implementatie van coreutils te gebruiken

Sylvestre Ledru, bekend van zijn werk bij het bouwen van Debian GNU/Linux met behulp van de Clang-compiler, rapporteerde een succesvol experiment met behulp van een alternatieve reeks hulpprogramma's, coreutils, herschreven in de Rust-taal. Coreutils bevat hulpprogramma's zoals sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln en ls. Voor de eerste fase van de integratie in Debian van de Rust-versie van coreutils werden de volgende doelen gesteld:

  • Verpak een Rust-alternatief voor coreutils voor Debian en Ubuntu.
  • Debian opstarten met GNOME-desktop met behulp van rust-coreutils.
  • Het installeren van de 1000 populairste pakketten uit de repository.
  • Bouw vanuit Firefox-, LLVM/Clang- en Linux-kernelbronnen in een omgeving met rust-coreutils.

Nadat we meer dan 100 patches voor Rust/coreutils hadden gemaakt, konden we alle beoogde doelen met succes bereiken. Het lopende werk omvat de implementatie van ontbrekende hulpprogramma's en opties, het verbeteren van de kwaliteit en uniformiteit van de code, het ontwikkelen van de testsuite en het elimineren van crashes die optreden bij het uitvoeren van de testsuite vanuit GNU Coreutils (141 van de 613 tests zijn tot nu toe met succes uitgevoerd ).

Bij het maken van het rust-coreutils-pakket werd besloten om het coreutils-pakket niet te vervangen, maar om ze de mogelijkheid te bieden om parallel te werken. Hulpprogramma-opties in de Rust-taal worden geïnstalleerd in /usr/lib/cargo/bin/ en worden geactiveerd door deze map toe te voegen aan de omgevingsvariabele PATH. Het maken van het rust-coreutils-pakket werd bemoeilijkt door de noodzaak om alle build-afhankelijkheden naar de repository te downloaden, inclusief Rust en verschillende kleine kratpakketten.

Het maken van een opstartimage was geen probleem, maar het aanpassen van de pakketten aan een omgeving met rust-coreutils vergde veel werk, omdat veel scripts na de installatie hulpprogramma's uit de coreutils-set aanroepen. Het grootste aantal problemen werd veroorzaakt door het gebrek aan noodzakelijke opties. Het hulpprogramma “cp” had bijvoorbeeld niet de opties “--archive” en “--no-dereference”, terwijl “ln” de “- relatieve” optie ondersteunde mktemp geen “-t” , in sync "-fs", in install - "--owner" en "-group". Andere problemen ontstonden vanwege verschillen in gedrag, het installatiehulpprogramma ondersteunde bijvoorbeeld niet het opgeven van /dev/null als invoerbestand, mkdir had de optie “--parents” in plaats van “-parent”, enz.

Bij het testen van de assemblage van grote codebases deden zich geen grote problemen voor. Bij het bouwen van Firefox en LLVM/Clang worden Python-scripts en cmake gebruikt, dus het vervangen van coreutils had daar geen invloed op. Het bouwen van de Linux-kernel verliep relatief soepel, met slechts twee problemen die zich voordeden: foutuitvoer bij gebruik van chown met een symbolische link en het ontbreken van een “-n” optie in het ln-hulpprogramma.

Bron: opennet.ru

Voeg een reactie