fakeroot(1) Manuel de Debian fakeroot(1) NOM fakeroot - lance une commande dans un environnement simulant les privileges du superutilisateur pour la manipulation des fichiers. SYNOPSIS fakeroot [-l|--lib library] [--faked faked-binary] [-i load-file] [-s save-file] [-u|--unknown-is-real] [-b|--fd-base] [-h|--help] [-v|--version] [--] [command] DESCRIPTION fakeroot lance une commande dans un environnement dans lequel cette commande obtient les droits de l'administrateur pour manipuler des fichiers. C'est pratique pour permettre aux utilisateurs de creer des archives (tar, ar, .deb, etc.) qui contiennent des fichiers avec les privileges et appartenances du superutilisateur. Sans fakeroot, il faudrait posseder les droits du superutilisateur pour donner les droits et appartenances convenables aux fichiers constituant l'archive, puis de les assembler ; ou bien, il faudrait construire directement l'archive, sans utiliser le programme d'archivage. fakeroot works by replacing the file manipulation library functions (chmod(2), stat(2) etc.) by ones that simulate the effect the real library functions would have had, had the user really been root. These wrapper functions are in a shared library /usr/lib/*/libfakeroot-*.so or similar location on your platform. The shared object is loaded through the LD_PRELOAD mechanism of the dynamic loader. (See ld.so(8)) Si vous desirez construire des paquets avec fakeroot, veuillez essayer de construire d'abord le paquet fakeroot : l'etape << debian/rules build >> realise quelques tests (principalement pour les bogues des vieilles versions de fakeroot). Si ces tests echouent (si vous avez par exemple certains programmes en libc5 sur votre systeme), la construction d'autres paquets avec fakeroot echouera certainement aussi, mais de facon parfois plus subtile. Also, note that it's best not to do the building of the binaries themselves under fakeroot. Especially configure and friends don't like it when the system suddenly behaves differently from what they expect (or, they randomly unset some environment variables, some of which fakeroot needs). OPTIONS -l bibliotheque, --lib bibliotheque Specifie une autre bibliotheque de substitution (wrapper library). --faked binaire Specifie l'utilisation d'une autre bibliotheque que faked. [--] commande Any command you want to be run as fakeroot. Use `--' if in the command you have other options that may confuse fakeroot's option parsing. -s fichier-de-sauvegarde Enregistre l'environnement de fakeroot dans fichier-de-sauvegarde en quittant. Ce fichier pourra servir plus tard a restaurer cette configuration grace a l'option -i. Toutefois, cette option echouera et fakeroot se comportera bizarrement sauf si vous laissez les fichiers manipules par fakeroot intacts quand vous etes en dehors de cet environnement. Malgre cette restriction, cela peut etre utile. Par exemple, cela peut servir avec rsync(1) pour sauvegarder et restaurer toute une arborescence de repertoires avec les informations de proprietaire, groupe et peripherique sans avoir a etre superutilisateur. Voir /usr/share/doc/fakeroot/README.saving pour plus d'informations. -i fichier-de-chargement Recharge a partir de fichier-de-chargement un environnement fakeroot prealablement sauvegarde en utilisant l'option -s. Notez que cela ne sauvegardera pas automatiquement la configuration, vous devez repreciser -s dans ce but. L'utilisation du meme nom de fichier pour -i et -s dans une seule commande fakeroot ne pose pas de probleme. -u, --unknown-is-real Utilise le veritable proprietaire des fichiers auparavant inconnus de fakeroot, plutot que de considerer qu'ils appartiennent a root:root. -b fd Definit la valeur de base du descripteur de fichier (en mode TCP uniquement). Fd sera la plus petite valeur du descripteur de fichier utilise pour les connexions TCP. Ce reglage peut etre tres pratique pour gerer les descripteurs de fichiers utilises par les programmes qui fonctionnent sous fakeroot. -h Affiche l'aide. -v Affiche la version. EXEMPLES Voici un exemple d'utilisation de fakeroot. Notez bien qu'a l'interieur de l'environnement fakeroot, les manipulations de fichiers qui requierent les privileges du superutilisateur ont lieu, mais uniquement virtuellement. $ whoami joost $ fakeroot /bin/bash # whoami root # mknod hda3 b 3 1 # ls -ld hda3 brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3 # chown joost:root hda3 # ls -ld hda3 brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3 # ls -ld / drwxr-xr-x 20 root root 1024 Jun 17 21:50 / # chown joost:users / # chmod a+w / # ls -ld / drwxrwxrwx 20 joost users 1024 Jun 17 21:50 / # exit $ ls -ld / drwxr-xr-x 20 root root 1024 Jun 17 21:50 // $ ls -ld hda3 -rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3 Seule l'operation que l'utilisateur joost pouvait realiser a reellement aboutie. fakeroot was specifically written to enable users to create Debian GNU/Linux packages (in the deb(5) format) without giving them root privileges. This can be done by commands like dpkg-buildpackage -rfakeroot or debuild -rfakeroot (actually, -rfakeroot is default in debuild nowadays, so you don't need that argument). ASPECTS DE SECURITE fakeroot est un programme normal, sans privileges speciaux. Il n'augmente pas les privileges de l'utilisateur et n'altere pas la securite du systeme. FICHIERS /usr/lib/*/libfakeroot-*.so The shared library containing the wrapper functions. ENVIRONNEMENT FAKEROOTKEY The key used to communicate with the fakeroot daemon. Any program started with the right LD_PRELOAD and a FAKEROOTKEY of a running daemon will automatically connect to that daemon, and have the same "fake" view of the file system's permissions/ownerships (assuming the daemon and connecting program were started by the same user). LD_LIBRARY_PATH LD_PRELOAD fakeroot is implemented by wrapping system calls. This is accomplished by setting LD_LIBRARY_PATH=/usr/lib/fakeroot and LD_PRELOAD=libfakeroot.so.0. That library is loaded before the system's C library, and so most of the library functions are intercepted by it. If you need to set either LD_LIBRARY_PATH or LD_PRELOAD from within a fakeroot environment, it should be set relative to the given paths, as in LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/ LIMITES Versions des bibliotheques Toute commande executee sous fakeroot devra etre liee a la meme version de la bibliotheque C que fakeroot lui-meme. open()/create() fakeroot n'encapsule pas open(), create(), etc. Donc si l'utilisateur joost tape soit touch foo fakeroot ls -al foo soit fakeroot touch foo ls -al foo fakeroot has no way of knowing that in the first case, the owner of foo really should be joost while the second case it should have been root. For the Debian packaging, defaulting to giving all "unknown" files uid=gid=0, is always OK. The real way around this is to wrap open() and create(), but that creates other problems, as demonstrated by the libtricks package. This package wrapped many more functions, and tried to do a lot more than fakeroot . It turned out that a minor upgrade of libc (from one where the stat() function didn't use open() to one with a stat() function that did (in some cases) use open() ), would cause unexplainable segfaults (that is, the libc6 stat() called the wrapped open() , which would then call the libc6 stat() , etc). Fixing them wasn't all that easy, but once fixed, it was just a matter of time before another function started to use open(), never mind trying to port it to a different operating system. Thus I decided to keep the number of functions wrapped by fakeroot as small as possible, to limit the likelihood of `collisions'. GNU configure (and other such programs) En pratique, fakeroot modifie le comportement du systeme. Les programmes qui testent le systeme (tel que configure du GNU) peuvent etre troubles par cela (ou, s'ils ne le sont pas, ils risquent de solliciter fakeroot a un point tel que celui-ci risque lui-meme de s'y perdre). Il est donc preferable de ne pas lancer << configure >> dans un environnement fakeroot. Comme configure doit etre lance par la cible build de debian/rules, l'utilisation de << dpkg-buildpackage -rfakeroot >> gere correctement ce probleme. BOGUES open() n'est pas simule. Ce n'est pas si grave que cela, mais si un programme invoque open("file", O_WRONLY, 000), ecrit dans ce fichier << file >>, le ferme, puis reessaye ensuite de l'ouvrir en lecture, alors cette tentative echouera, car les droits du fichier seront 000. Le bogue, c'est que si root fait cette operation, alors open() fonctionne, puisque les droits des fichiers ne sont pas du tout verifies pour root. Il a ete choisi de ne pas simuler open(), car open() est utilise par nombre d'autres fonctions de la libc (dont certaines qui sont deja simulees par fakeroot), ce qui creerait des boucles (ou pourrait en creer quand l'implementation des diverses fonctions de la libc change). COPIES fakeroot est distribue sous la licence GNU General Public License. (GPL 2.0 ou superieure). AUTEURS Joost Witteveen Clint Adams Timo Savola TRADUCTION Sylvain Cherrier . PAGE DE MANUEL mostly by J.H.M. Dassen with rather a lot of modsifications and additions by joost and Clint. VOIR AUSSI debuild(1), dpkg-buildpackage(1), faked(1), /usr/share/doc/fakeroot/DEBUG Projet Debian 2024-12-19 fakeroot(1)