Prilagoditev Debiana za uporabo Rust implementacije coreutils

Sylvestre Ledru, znan po svojem delu pri gradnji Debian GNU/Linux z uporabo prevajalnika Clang, je poročal o uspešnem eksperimentu z uporabo alternativnega nabora pripomočkov, coreutils, prepisanih v jeziku Rust. Coreutils vključuje pripomočke, kot so sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln in ls. Za prvo stopnjo integracije različice coreutils Rust v Debian so bili zastavljeni naslednji cilji:

  • Pakirajte alternativo Rust za coreutils za Debian in Ubuntu.
  • Zagon Debiana z namizjem GNOME z uporabo rust-coreutils.
  • Namestitev 1000 najbolj priljubljenih paketov iz repozitorija.
  • Zgradite iz virov jedra Firefox, LLVM/Clang in Linux v okolju z rust-coreutils.

Po izdelavi več kot 100 popravkov za Rust/coreutils nam je uspelo uspešno doseči vse zastavljene cilje. Tekoče delo vključuje implementacijo manjkajočih pripomočkov in možnosti, izboljšanje kakovosti in enotnosti kode, razvoj testne zbirke in odpravo zrušitev, do katerih pride pri izvajanju testne zbirke iz GNU Coreutils (141 testov od 613 se do zdaj izvaja uspešno ).

Pri izdelavi paketa rust-coreutils je bilo odločeno, da paketa coreutils ne bomo nadomestili, temveč jim bomo omogočili vzporedno delo. Možnosti pripomočka v jeziku Rust so nameščene v /usr/lib/cargo/bin/ in se aktivirajo z dodajanjem tega imenika spremenljivki okolja PATH. Ustvarjanje paketa rust-coreutils je bilo zapleteno zaradi potrebe po prenosu vseh odvisnosti gradnje v repozitorij, vključno z Rustom in različnimi majhnimi paketi zabojev.

Ustvarjanje zagonske slike ni bila težava, vendar je prilagajanje paketov za okolje z rust-coreutils zahtevalo veliko dela, saj številni skripti po namestitvi kličejo pripomočke iz nabora coreutils. Največ težav je povzročilo pomanjkanje potrebnih možnosti, na primer pripomoček »cp« ni imel možnosti »--archive« in »--no-dereference«, »ln« ni podpiral »- relative«, mktemp ni podpiral »-t«, pri sinhronizaciji »-fs«, pri namestitvi - »--owner« in »-group«. Druge težave so se pojavile zaradi razlik v obnašanju, na primer namestitveni pripomoček ni podpiral podajanja /dev/null kot vhodne datoteke, mkdir je imel možnost »--parents« namesto »-parent« itd.

Pri testiranju sestavljanja velikih kodnih baz večjih težav ni bilo. Pri gradnji Firefoxa in LLVM/Clang se uporabljajo skripti python in cmake, tako da zamenjava coreutils ni vplivala nanje. Gradnja jedra Linuxa je potekala razmeroma gladko, pri čemer sta se pojavili le dve težavi: izpis napake pri uporabi chown s simbolično povezavo in pomanjkanje možnosti »-n« v pripomočku ln.

Vir: opennet.ru

Dodaj komentar