Przystosowanie Debiana do korzystania z implementacji coreutils w Rust

Sylvestre Ledru, znany ze swojej pracy nad budowaniem Debiana GNU/Linux przy użyciu kompilatora Clang, poinformował o udanym eksperymencie z użyciem alternatywnego zestawu narzędzi, coreutils, przepisanego w języku Rust. Coreutils zawiera narzędzia takie jak sort, cat, chmod, chown, chroot, cp, date, dd, echo, nazwa hosta, id, ln i ls. Dla pierwszego etapu integracji z Debianem wersji Rust coreutils postawiono następujące cele:

  • Spakuj alternatywę Rusta dla coreutils dla Debiana i Ubuntu.
  • Uruchamianie Debiana z pulpitu GNOME przy użyciu rust-coreutils.
  • Instalacja 1000 najpopularniejszych pakietów z repozytorium.
  • Kompiluj ze źródeł jądra Firefoksa, LLVM/Clang i Linux w środowisku z rust-coreutils.

Po stworzeniu ponad 100 łatek dla Rust/coreutils udało nam się z sukcesem osiągnąć wszystkie zamierzone cele. Bieżące prace obejmują wdrożenie brakujących narzędzi i opcji, poprawę jakości i jednolitości kodu, rozwój zestawu testów i wyeliminowanie awarii występujących podczas uruchamiania zestawu testów z GNU Coreutils (141 testów z 613 przebiega dotychczas pomyślnie ).

Tworząc pakiet rust-coreutils, zdecydowano się nie zastępować pakietu coreutils, ale zapewnić im możliwość równoległej pracy. Opcje narzędzi w języku Rust są instalowane w /usr/lib/cargo/bin/ i są aktywowane poprzez dodanie tego katalogu do zmiennej środowiskowej PATH. Tworzenie pakietu rust-coreutils było skomplikowane ze względu na konieczność pobrania wszystkich zależności kompilacji do repozytorium, w tym Rusta i różnych pakietów małych skrzynek.

Utworzenie obrazu startowego nie stanowiło problemu, ale przystosowanie pakietów do środowiska z rust-coreutils wymagało dużo pracy, ponieważ wiele skryptów poinstalacyjnych wywołuje narzędzia z zestawu coreutils. Najwięcej problemów powodował brak niezbędnych opcji, np. narzędzie „cp” nie posiadało opcji „--archive” i „--no-dereference”, „ln” nie obsługiwało opcji „- względna”, mktemp nie obsługiwał „-t”, w synchronizacji „-fs”, w instalacji - „--owner” i „-group”. Inne problemy wynikały z różnic w zachowaniu, na przykład narzędzie instalacyjne nie obsługiwało określenia /dev/null jako pliku wejściowego, mkdir miał opcję „--parents” zamiast „-parent” itp.

Podczas testowania zestawu dużych baz kodu nie pojawiły się żadne większe problemy. Podczas budowania Firefoksa i LLVM/Clang używane są skrypty Pythona i cmake, więc zastąpienie coreutils nie miało na nie wpływu. Budowanie jądra Linuksa przebiegło stosunkowo sprawnie, pojawiły się tylko dwa problemy: błąd podczas używania chown z dowiązaniem symbolicznym oraz brak opcji „-n” w narzędziu ln.

Źródło: opennet.ru

Dodaj komentarz