A Debian adaptálása a coreutils Rust implementációjának használatára

Sylvestre Ledru, aki a Debian GNU/Linux Clang fordító segítségével végzett munkájáról ismert, sikeres kísérletről számolt be a Rust nyelvre átírt alternatív segédprogramok, a coreutils segítségével. A Coreutils olyan segédprogramokat tartalmaz, mint a sort, cat, chmod, chown, chroot, cp, dátum, dd, echo, hostname, id, ln és ls. A coreutils Rust verziójának Debianba való integrációjának első szakaszában a következő célokat tűzték ki:

  • Csomagoljon egy Rust alternatívát a coreutils helyett Debian és Ubuntu számára.
  • A Debian indítása GNOME asztali géppel a rust-coreutils használatával.
  • Az 1000 legnépszerűbb csomag telepítése a tárolóból.
  • Építsen Firefox, LLVM/Clang és Linux kernelforrásokból rust-coreutils környezetben.

Miután több mint 100 javítást készítettünk a Rust/coreutils számára, sikeresen elértük az összes kitűzött célt. A folyamatban lévő munka magában foglalja a hiányzó segédprogramok és opciók megvalósítását, a kód minőségének és egységességének javítását, a tesztcsomag fejlesztését, valamint a tesztcsomag GNU Coreutils-ból való futtatásakor előforduló összeomlások kiküszöbölését (141 tesztből 613 fut eddig sikeresen ).

A rust-coreutils csomag létrehozásakor úgy döntöttek, hogy nem cserélik le a coreutils csomagot, hanem lehetőséget biztosítanak számukra a párhuzamos működésre. A Rust nyelv segédprogram-beállításai a /usr/lib/cargo/bin/ könyvtárba vannak telepítve, és aktiválhatók, ha ezt a könyvtárat hozzáadják a PATH környezeti változóhoz. A rust-coreutils csomag létrehozását megnehezítette, hogy az összes összeállítási függőséget le kellett tölteni a tárolóba, beleértve a Rust-ot és a különféle kis ládacsomagokat is.

A rendszerindító lemezkép létrehozása nem okozott gondot, de a csomagok rust-coreutils környezethez való adaptálása sok munkát igényelt, mivel sok telepítés utáni szkript a coreutils készletből hívja meg a segédprogramokat. A legtöbb problémát a szükséges opciók hiánya okozta, például a „cp” segédprogramban nem voltak „--archive” és „--no-dereference” opciók, az „ln” nem támogatta a „- relatív” opció, az mktemp nem támogatja a „-t” , szinkronban „-fs”, telepítésben - „--owner” és „-group”. Más problémák is felmerültek a viselkedésbeli különbségek miatt, például a telepítő segédprogram nem támogatta a /dev/null megadását bemeneti fájlként, az mkdir-ben a „-parent” helyett a „--parents” opció volt, stb.

A nagy kódbázisok összeállításának tesztelésekor nem merült fel komolyabb probléma. A Firefox és az LLVM/Clang készítésekor python szkripteket és cmake-t használnak, így a coreutilok cseréje nem volt hatással rájuk. A Linux kernel felépítése viszonylag zökkenőmentesen ment, mindössze két probléma merült fel: hibakimenet a chown szimbolikus hivatkozással történő használatakor és az „-n” opció hiánya az ln segédprogramban.

Forrás: opennet.ru

Hozzászólás