Adaptation de Debian pour utiliser l'implémentation Rust de coreutils

Sylvestre Ledru, connu pour son travail sur la création de Debian GNU/Linux à l'aide du compilateur Clang, a rapporté une expérience réussie utilisant un ensemble alternatif d'utilitaires, coreutils, réécrit dans le langage Rust. Coreutils comprend des utilitaires tels que sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln et ls. Pour la première étape d'intégration dans Debian de la version Rust de coreutils, les objectifs suivants ont été fixés :

  • Packagez une alternative Rust aux coreutils pour Debian et Ubuntu.
  • Démarrage de Debian avec le bureau GNOME à l'aide de rust-coreutils.
  • Installation des 1000 packages les plus populaires du référentiel.
  • Construisez à partir des sources du noyau Firefox, LLVM/Clang et Linux dans un environnement avec rust-coreutils.

Après avoir créé plus de 100 correctifs pour Rust/coreutils, nous avons pu atteindre tous les objectifs visés. Le travail en cours comprend l'implémentation des utilitaires et options manquants, l'amélioration de la qualité et de l'uniformité du code, le développement de la suite de tests et l'élimination des plantages qui se produisent lors de l'exécution de la suite de tests à partir de GNU Coreutils (141 tests sur 613 s'exécutent avec succès jusqu'à présent). ).

Lors de la création du package rust-coreutils, il a été décidé de ne pas remplacer le package coreutils, mais de leur offrir la possibilité de fonctionner en parallèle. Les options utilitaires du langage Rust sont installées dans /usr/lib/cargo/bin/ et sont activées en ajoutant ce répertoire à la variable d'environnement PATH. La création du package rust-coreutils a été compliquée par la nécessité de télécharger toutes les dépendances de build dans le référentiel, y compris Rust et divers petits packages crate.

La création d'une image de démarrage n'a pas posé de problème, mais l'adaptation des packages à un environnement avec rust-coreutils a nécessité beaucoup de travail, car de nombreux scripts de post-installation appellent des utilitaires de l'ensemble coreutils. Le plus grand nombre de problèmes étaient causés par le manque d'options nécessaires, par exemple, l'utilitaire « cp » n'avait pas les options « --archive » et « --no-dereference », « ln » ne prenait pas en charge le « - relative", mktemp ne prenait pas en charge "-t", en synchronisation "-fs", dans l'installation - "--owner" et "-group". D'autres problèmes sont survenus en raison de différences de comportement, par exemple, l'utilitaire d'installation ne prenait pas en charge la spécification de /dev/null comme fichier d'entrée, mkdir avait l'option « --parents » au lieu de « -parent », etc.

Lors du test de l'assemblage de grandes bases de code, aucun problème majeur n'est survenu. Lors de la construction de Firefox et LLVM/Clang, des scripts python et cmake sont utilisés, donc le remplacement des coreutils ne les a pas affectés. La construction du noyau Linux s'est relativement bien déroulée, avec seulement deux problèmes survenus : une erreur de sortie lors de l'utilisation de chown avec un lien symbolique et l'absence d'option « -n » dans l'utilitaire ln.

Source: opennet.ru

Ajouter un commentaire