J'ai une archive tar contenant de nombreux fichiers avec root:root owner et/ou des inodes de périphériques spéciaux. cpio
accepte uniquement les chemins existant dans le système de fichiers lors de la création d'une archive cpio. Et je ne veux pas avoir à sudo
afin de transformer tar en cpio, alors que je souhaite conserver toutes les autorisations, les propriétaires et les inodes spéciaux.
Existe-t-il un moyen propre de gérer cela ?
EDIT1 :
Je crois que fakeroot
peut être considéré comme une manière quelque peu propre. Cependant, il ne s'adapte pas comme prévu - près de 1 000 fois la différence de vitesse :
[[email protected] root]$ ls -l ../fanbox.tar
-rw-rw-r-- 1 user user 56555520 May 22 03:33 ../fanbox.tar
[[email protected] root]$ time tar -x --delay-directory-restore -f ../fanbox.tar
tar: dev/null: Cannot mknod: Operation not permitted
tar: dev/random: Cannot mknod: Operation not permitted
tar: dev/urandom: Cannot mknod: Operation not permitted
tar: Exiting with failure status due to previous errors
real 0m0.255s
user 0m0.062s
sys 0m0.193s
[[email protected] root]$ rm -rf *
[[email protected] root]$ time fakeroot tar -x --delay-directory-restore -f ../fanbox.tar
real 3m49.381s
user 0m0.812s
sys 0m2.760s
[[email protected] root]$
Basé sur la sortie de time
commande je suppose que c'est à cause de la communication entre fakeroot
et faked
.
Pour référence, il n'y a pas beaucoup de différence entre un tarball 2M et un tarball 50M lorsque j'ai changé fakeroot
dans sudo bash
dans mon scénario. Et aussi je crois que le problème est le nombre de fichiers dans l'archive tar, pas la taille :j'ai utilisé le même script sur une archive tar d'environ 10 Mo avec deux binaires de 5 Mo, et le script n'est pas si lent.
Réponse acceptée :
Vous pouvez utiliser fakeroot
. Comme son nom l'indique, il simule l'utilisateur root en interceptant plusieurs appels système avec un LD_LIBRARY_PATH
/LD_PRELOAD
wrapper de la bibliothèque, pour faire croire au processus qu'il s'exécute en tant que root. Ceci a été créé dans le but de créer et de conditionner des applications sans avoir à être root, y compris en utilisant make install
qui serait généralement exécuté en tant que root. Il est particulièrement bien adapté pour créer des archives.
Pendant ce temps, un démon fork faked
s'exécutera afin de se souvenir de tous les droits de propriété de fichiers falsifiés ou d'informations sur des fichiers spéciaux que les processus enfants pensent avoir créés. Toutes les opérations doivent donc être effectuées dans la même "instance", ou faked
sortira et oubliera ce dont il se souvenait.
$ fakeroot
# tar xf ...
# find foo ... | cpio -o ...
# exit
$
Autre exemple montrant faked
l'interaction :
$ mknod /tmp/vaporware b 8 0
mknod: /tmp/vaporware: Operation not permitted
$ fakeroot
# mknod /tmp/vaporware b 8 0
# ls -l /tmp/vaporware
brw-r--r-- 1 root root 8, 0 May 18 08:33 /tmp/vaporware
# exit
$ ls -l /tmp/vaporware
-rw-r--r--. 1 user user 0 May 18 08:33 /tmp/vaporware