GNU/Linux >> Linux Esercitazione >  >> Linux

Trasformare Tar in Cpio senza eseguire il root?

Ho un tarball contenente molti file con root:root owner e/o inode speciali del dispositivo. cpio accetta solo percorsi esistenti nel file system durante la creazione di un archivio cpio. E non voglio dover sudo per trasformare tar in cpio, mentre voglio preservare tutti i permessi, i proprietari e gli inode speciali.

C'è un modo pulito per gestirlo?

EDIT1:

Credo che fakeroot può essere visto come un modo un po' pulito. Tuttavia non si ridimensiona come previsto:una differenza di velocità di quasi 1.000 volte:

[[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]$ 

Basato sull'output di time comando Immagino sia dovuto alla comunicazione tra fakeroot e faked .

Per riferimento, non c'è molta differenza tra un tarball da 2M e un tarball da 50M quando ho cambiato fakeroot in sudo bash nel mio copione. E credo anche che il problema sia il numero di file nel tarball, non la dimensione:ho usato lo stesso script su un tarball da ~10M con due binari da 5M e lo script non è così lento.

Risposta accettata:

Puoi usare fakeroot . Come dice il nome, falsifica l'utente root, intercettando le syscall del server con un LD_LIBRARY_PATH /LD_PRELOAD wrapper della libreria, per fare in modo che il processo creda che sia in esecuzione come root. Questo è stato creato allo scopo di creare e impacchettare applicazioni senza dover essere root, incluso l'uso di make install che in genere verrebbe eseguito come root. È particolarmente adatto per creare archivi.

Durante questo, un demone biforcato faked verrà eseguito per ricordare tutti i diritti di proprietà dei file falsi o le informazioni su file speciali che il bambino elabora crede di aver creato. Quindi tutte le operazioni devono essere eseguite nella stessa "istanza" o faked uscirà e dimenticherà cosa stava ricordando.

$ fakeroot
# tar xf ...
# find foo ... | cpio -o ...
# exit
$ 

Altro esempio che mostra faked interazione:

$ 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. Creare un archivio di catrame diviso in blocchi di dimensioni massime?

  2. Cambia la password di root con Sudo, senza Su?

  3. Come eseguire un comando senza proprietà di root?

  4. Come estrarre il pacchetto RPM senza installarlo

  5. Come posso tarare una directory senza mantenere la struttura della directory?

Come estendere la partizione radice XFS senza LVM in Linux

Come trasformare GIMP in Photoshop

Copia il contenuto del file negli Appunti senza visualizzarli

HOWTO:eseguire Linux su Android senza root

Creazione di socket raw in Python senza privilegi di root

Come convertire un file TAR in un file ISO