GNU/Linux >> Tutoriels Linux >  >> Linux

Transformer Tar en Cpio sans enracinement ?

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

Linux
  1. Créer une archive Tar divisée en blocs d'une taille maximale ?

  2. Est-il possible d'installer g++ sur CentOS sans root ?

  3. Installer zsh sans accès root ?

  4. Vérifiez si le répertoire est le référentiel git (sans avoir à y accéder)

  5. Créer une base de données PostgreSQL sans privilège root

Comment étendre la partition racine XFS sans LVM sous Linux

Comment transformer GIMP en Photoshop

Copier le contenu du fichier dans le presse-papiers sans les afficher

HOWTO :Exécuter Linux sur Android sans racine

Exécutez ifconfig sans sudo

Comment convertir un fichier TAR en un fichier ISO