Adattare Debian per utilizzare l'implementazione Rust di coreutils

Sylvestre Ledru, noto per il suo lavoro sulla creazione di Debian GNU/Linux utilizzando il compilatore Clang, ha riportato di un esperimento riuscito utilizzando un insieme alternativo di utilità, coreutils, riscritti nel linguaggio Rust. Coreutils include utilità come sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. Per la prima fase di integrazione in Debian della versione Rust di coreutils, sono stati fissati i seguenti obiettivi:

  • Crea il pacchetto di un'alternativa Rust a coreutils per Debian e Ubuntu.
  • Avvio di Debian con il desktop GNOME utilizzando ruggine-coreutils.
  • Installazione dei 1000 pacchetti più popolari dal repository.
  • Crea da Firefox, LLVM/Clang e sorgenti del kernel Linux in un ambiente con ruggine-coreutils.

Dopo aver creato più di 100 patch per Rust/coreutils, siamo riusciti a raggiungere con successo tutti gli obiettivi prefissati. Il lavoro in corso include l'implementazione di utilità e opzioni mancanti, il miglioramento della qualità e dell'uniformità del codice, lo sviluppo della suite di test e l'eliminazione dei crash che si verificano quando si esegue la suite di test da GNU Coreutils (141 test su 613 vengono eseguiti con successo finora ).

Durante la creazione del pacchetto ruggine-coreutils, si è deciso di non sostituire il pacchetto coreutils, ma di fornire loro la possibilità di lavorare in parallelo. Le opzioni di utilità nel linguaggio Rust sono installate in /usr/lib/cargo/bin/ e vengono attivate aggiungendo questa directory alla variabile d'ambiente PATH. La creazione del pacchetto ruggine-coreutils è stata complicata dalla necessità di scaricare tutte le dipendenze di compilazione nel repository, inclusi Rust e vari piccoli pacchetti crate.

Creare un'immagine di avvio non è stato un problema, ma adattare i pacchetti per un ambiente con ruggine-coreutils ha richiesto molto lavoro, poiché molti script post-installazione richiamano utilità dal set coreutils. Il maggior numero di problemi è stato causato dalla mancanza delle opzioni necessarie, ad esempio l'utilità “cp” non aveva le opzioni “--archive” e “--no-dereference”, “ln” non supportava le opzioni “- relativa", mktemp non supportava "-t", in sincronizzazione "-fs", in installazione - "--owner" e "-group". Altri problemi sono sorti a causa delle differenze di comportamento, ad esempio l'utility di installazione non supportava la specifica di /dev/null come file di input, mkdir aveva l'opzione "--parents" invece di "-parent", ecc.

Durante il test dell'assemblaggio di basi di codice di grandi dimensioni non sono emersi grossi problemi. Durante la creazione di Firefox e LLVM/Clang, vengono utilizzati gli script Python e cmake, quindi la sostituzione di coreutils non li ha influenzati. La creazione del kernel Linux è andata relativamente bene, con solo due problemi che sono emersi: errore nell'output quando si utilizza chown con un collegamento simbolico e la mancanza di un'opzione "-n" nell'utilità ln.

Fonte: opennet.ru

Aggiungi un commento