Адаптация на 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. За първия етап от интеграцията на Rust версията на coreutils в Debian бяха поставени следните цели:

  • Създаване на пакет с алтернативна версия на 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster