URL: https://linuxfr.org/news/care-et-la-reproductibilite-des-executions Title: CARE et la reproductibilité des exécutions Authors: Rémi Duraffort palm123, Benoît Sibaud, ZeroHeure, Florent Zara et Xavier Teyssier Date: 2014年02月04日T14:09:09+01:00 License: CC By-SA Tags: ptrace, bug, linux, chroot, cde, proot et paquet Score: 74 [CARE](http://reproducible.io) (Comprehensive Archiver for Reproducible Execution) vient de sortir en version 2.1. CARE est un outil permettant d'observer l'exécution d'une commande Linux (ls, gcc, vlc, ...) et de créer une archive contenant l'intégralité des fichiers utilisés lors de l'exécution de cette commande. Il est alors possible d'extraire cette archive sur une autre machine afin de relancer la commande dans le système de fichiers d'origine. Lors de la ré-exécution, la commande sera entièrement isolée dans l'archive et ne pourra accéder qu'aux fichiers et à l'environnement présent dans cette archive. Il est important de noter que les événements extérieurs (comme les entrées clavier, réseau, ...) ne sont pas archivés et doivent, si nécessaire, être recréés par l'utilisateur. ---- [CARE](http://reproducible.io) [PRoot](http://proot.me) [GitHub](https://github.com/cedric-vincent/PRoot) [Changelog v2.1](https://github.com/cedric-vincent/PRoot/blob/care-v2.1/doc/care-changelog.txt) ---- Cas d'usage =========== CARE peut être utile dans de nombreux cas : - reproduire chez vous un bug provenant d'un utilisateur ; - archiver les fichiers nécessaires à une démonstration technique ; - archiver les fichiers nécessaires à la construction d'une release ; - créer un système de fichiers minimal permettant d'exécuter une application ; - créer une application portable. Reproduire le bug d'un utilisateur ---------------------------------- Il est souvent difficile de reproduire les bugs reportés par les utilisateurs du fait de différences dans les versions des bibliothèques installées sur les deux machines. Grâce à CARE, il est possible pour l'utilisateur d'archiver l'ensemble des bibliothèques (et autre ressources du système de fichiers) utilisées par une application et d'envoyer cette archive au développeur. Celui-ci peut alors plus facilement reproduire l'environnement d'exécution de l'utilisateur. Usage ===== La documentation du projet contient [un exemple d'utilisation](http://reproducible.io/#example) et un [manuel](https://github.com/cedric-vincent/PRoot/blob/master/doc/care-manual.txt) assez complet que je vous invite à consulter. Prenons l'exemple d'un hypothétique problème avec un script Python 3.3 user# care python3.3 foo.py Hello world! care info - run `./care-140204124406.bin` or `care -x care-140204124406.bin` to extract the output archive. CARE a donc lancé le programme (_python3.3 foo.py_ dans notre exemple) et archivé l'ensemble de fichiers accédés dans l'archive auto-extractible _care-140204124406.bin_ Pour ré-exécuter le programme dans le même environnement mais sur une autre machine n'ayant pas cette version de Python, il suffit de télécharger l'archive sur cette machine et de l'extraire (l'archive est auto-extractible par défaut, mais CARE peut produire d'autres formats au besoin). user-bis# ./care-140204124406.bin info: archive found: offset = 1332056, size = 6510234 [...] info: extracted: care-140204124406/rootfs/usr/bin/python3.3 [...] user-bis#./care-140204124406/re-execute.sh Hello world! Technique ========= CARE est basé sur [PRoot](http://proot.me), un moteur d'instrumentation des processus au niveau des syscalls Linux. Vous trouverez un exemple du fonctionnement de PRoot et de ses cas d'usage sur le [site officiel](http://proot.me) et sur [mon blog](http://ivoire.dinauz.org/blog/post/2012/04/09/Born-to-be-PRoot). J'écrirai probablement une dépêche sur PRoot prochainement.