Адаптацыя Debian для выкарыстання рэалізацыі coreutils на мове Rust

Сільвестр Ледру (Sylvestre Ledru), вядомы сваёй працай па зборцы Debian GNU/Linux з выкарыстаннем кампілятара Clang, паведаміў аб паспяховым правядзенні эксперыменту па задзейнічанні альтэрнатыўнага набору ўтыліт coreutils, перапісанага на мове Rust. У склад coreutils уваходзяць такія ўтыліты, як sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln і ls. Для першага этапу інтэграцыі ў Debian варыянты coreutils на мове Rust былі пастаўлены наступныя мэты:

  • Стварэнне пакета з альтэрнатыўным варыянтам coreutils на мове Rust для Debian і Ubuntu.
  • Загрузка Debian з працоўным сталом GNOME, выкарыстоўваючы rust-coreutils.
  • Ўстаноўка 1000 найбольш папулярных пакетаў з рэпазітара.
  • Зборка з зыходных тэкстаў Firefox, LLVM/Clang і ядры Linux у асяроддзі з rust-coreutils.

Пасля стварэння больш за 100 патчаў для Rust / coreutils атрымалася паспяхова рэалізаваць усе намечаныя мэты. З працягваецца працы адзначаецца рэалізацыя якія адсутнічаюць утыліт і опцый, паляпшэнне якасці і аднастайнасці кода, развіццё тэставага набору, ухіленне збояў, які ўзнікае пры запуску тэставага набору ад GNU Coreutils (пакуль паспяхова выконваецца 141 тэст з 613).

Пры стварэнні пакета rust-coreutils было вырашанае не замяняць пакет coreutils, а забяспечыць магчымасць іх раўналежнай працы. Варыянты ўтыліт на мове Rust усталёўваюцца ў /usr/lib/cargo/bin/ і актывуюцца праз даданне дадзенага каталога ў зменную асяроддзі PATH. Стварэнне пакета rust-coreutils ускладняла неабходнасць загрузкі ў рэпазітар усіх зборачных залежнасцяў, уключаючы Rust і розныя дробныя crate-пакеты.

Са стварэннем загрузнай выявы адмысловых праблем не ўзнікла, але адаптацыя пакетаў для асяроддзя з rust-coreutils запатрабавала вялікай працы, бо шматлікія скрыпты post-install выклікаюць утыліты з набору coreutils. Найбольшая колькасць праблем была выклікана адсутнасцю неабходных опцый, напрыклад, ва ўтыліце "cp" адсутнічалі опцыі "-archive" і "--no-dereference", у "ln" не было падтрымкі опцыі "-relative", у mktemp - "-t" , у sync "-fs", у install - "-owner" і "-group". Іншыя праблемы ўсплылі з-за адрозненняў у паводзінах, напрыклад, утыліта install не падтрымлівала ўказанне /dev/null у якасці ўваходнага файла, у mkdir замест «—parent» прысутнічала опцыя «—parents» і да т.п.

Пры тэсціраванні зборкі буйных кодавых баз вялікіх праблем не ўзнікла. Пры зборцы Firefox і LLVM/Clang ужываюцца python-скрыпты і cmake, таму замена coreutils на іх не паўплывала. Зборка ядра Linux мінула адносна гладка, усплылі толькі дзве праблемы: выснова памылкі пры выкарыстанні chown з сімвалічнай спасылкай і адсутнасць опцыі "-n" ва ўтыліце ln.

Крыніца: opennet.ru

Дадаць каментар