Debianin mukauttaminen käyttämään Coreutils Rust -toteutusta

Sylvestre Ledru, joka tunnetaan työstään Debian GNU/Linuxin rakentamisessa Clang-kääntäjällä, raportoi onnistuneesta kokeesta, jossa käytettiin vaihtoehtoisia apuohjelmia, coreutileja, jotka on kirjoitettu uudelleen Rust-kielellä. Coreutils sisältää apuohjelmia, kuten sort, cat, chmod, chown, chroot, cp, päivämäärä, dd, echo, isäntänimi, id, ln ja ls. Coreutilsin Rust-version Debianiin integroinnin ensimmäiselle vaiheelle asetettiin seuraavat tavoitteet:

  • Pakkaa Rust-vaihtoehto coreutileille Debianille ja Ubuntulle.
  • Debianin käynnistys GNOME-työpöydällä rust-coreutilsilla.
  • 1000 suosituimman paketin asentaminen arkistosta.
  • Rakenna Firefox-, LLVM/Clang- ja Linux-ydinlähteistä ympäristössä, jossa on rust-coreutils.

Luotuamme yli 100 korjaustiedostoa Rust/coreutilsille, onnistuimme saavuttamaan kaikki asetetut tavoitteet. Jatkuvaan työhön kuuluu puuttuvien apuohjelmien ja vaihtoehtojen käyttöönotto, koodin laadun ja yhtenäisyyden parantaminen, testiohjelmiston kehittäminen ja GNU Coreutils -testisarjan ajettaessa tapahtuvien kaatumisten eliminoiminen (141 testiä 613:sta on käynnissä tähän mennessä onnistuneesti ).

Rust-coreutils -pakettia luotaessa päätettiin olla korvaamatta coreutils-pakettia, vaan tarjota niille mahdollisuus toimia rinnakkain. Rust-kielen apuohjelmavaihtoehdot asennetaan hakemistoon /usr/lib/cargo/bin/ ja ne aktivoidaan lisäämällä tämä hakemisto PATH-ympäristömuuttujaan. Rust-coreutils-paketin luomista vaikeutti tarve ladata kaikki koontiriippuvuudet arkistoon, mukaan lukien Rust ja erilaiset pienet laatikkopaketit.

Käynnistyskuvan luominen ei ollut ongelma, mutta pakettien sovittaminen rust-coreutils-ympäristöön vaati paljon työtä, koska monet asennuksen jälkeiset skriptit kutsuvat apuohjelmia coreutils-joukosta. Eniten ongelmia aiheutti tarvittavien vaihtoehtojen puute, esimerkiksi "cp"-apuohjelmassa ei ollut "--archive" ja "--no-dereference" vaihtoehtoja, "ln" ei tukenut "- Suhteellinen vaihtoehto, mktemp ei tukenut "-t" synkronoituna "-fs", asennuksessa - "--owner" ja "-group". Muita ongelmia ilmeni käyttäytymiseroista, esimerkiksi asennusohjelma ei tukenut /dev/null määrittämistä syöttötiedostoksi, mkdirissä oli "--parents" vaihtoehto "-parent" sijaan jne.

Suurten koodikantojen kokoonpanoa testattaessa ei ilmennyt suuria ongelmia. Firefoxia ja LLVM/Clangia rakennettaessa käytetään python-skriptejä ja cmakea, joten coreutilien vaihtaminen ei vaikuttanut niihin. Linux-ytimen rakentaminen sujui suhteellisen sujuvasti, vain kaksi ongelmaa ilmeni: virhetulostus käytettäessä chownia symbolisen linkin kanssa ja "-n"-vaihtoehdon puuttuminen ln-apuohjelmasta.

Lähde: opennet.ru

Lisää kommentti