Adaptacja Debian aby użyć implementacji coreutils w języku Rust

Sylvestre Ledru, znany ze swojej pracy nad montażem Debian GNU ANTYLOPA/Linux Korzystając z kompilatora Clang, zgłoszono udany eksperyment z użyciem alternatywnego zestawu narzędzi coreutils, przepisanych w języku Rust. Coreutils zawiera takie narzędzia jak sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln i ls. W pierwszym etapie integracji: Debian Dla wersji coreutils w języku Rust ustalono następujące cele:

  • Tworzenie pakietu z alternatywnym coreutils w Rust dla Debian и Ubuntu.
  • Pobierz Debian z pulpitem GNOME przy użyciu rust-coreutils.
  • Instalacja 1000 najpopularniejszych pakietów z repozytorium.
  • Kompilacja z Firefoksa, LLVM/Clang i źródeł jądra 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.

Testowanie kompilacji dużych baz kodu nie wykazało żadnych poważnych problemów. Kompilacje Firefoksa i LLVM/Clang korzystają ze skryptów Pythona i CMake, więc zastąpienie coreutils nie miało na nie wpływu. Kompilacja jądra Linux Wszystko przebiegło stosunkowo sprawnie, pojawiły się tylko dwa problemy: komunikat o błędzie podczas używania polecenia chown z dowiązaniem symbolicznym i brak opcji „-n” w narzędziu ln.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster