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

Kate

Administrator
Команда форума
Сильвестр Ледрю (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 наиболее популярных пакетов из репозитория.
  • Cборка из исходных текстов 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.

Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=54728
 
Сверху