GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Tar in Cpio umwandeln, ohne zu rooten?

Ich habe einen Tarball, der viele Dateien mit Root:Root-Besitzer und/oder speziellen Geräte-Inodes enthält. cpio akzeptiert nur Pfade, die im Dateisystem vorhanden sind, wenn es ein cpio-Archiv erstellt. Und ich möchte nicht sudo müssen um tar in cpio umzuwandeln, während ich alle Berechtigungen, Eigentümer und speziellen Inodes beibehalten möchte.

Gibt es einen sauberen Weg, damit umzugehen?

EDIT1:

Ich glaube, dass fakeroot kann als einigermaßen sauberer Weg angesehen werden. Es skaliert jedoch nicht wie erwartet – fast 1.000-facher Geschwindigkeitsunterschied:

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

Basierend auf der Ausgabe von time Befehl Ich denke, es liegt an der Kommunikation zwischen fakeroot und faked .

Als Referenz, es gibt keinen großen Unterschied zwischen einem 2M-Tarball und einem 50M-Tarball, als ich fakeroot geändert habe in sudo bash in meinem Skript. Und ich glaube auch, dass das Problem die Anzahl der Dateien im Tarball ist, nicht die Größe:Ich habe das gleiche Skript auf einem ~10M-Tarball mit zwei 5M-Binärdateien verwendet, und das Skript ist nicht so langsam.

Akzeptierte Antwort:

Sie können fakeroot verwenden . Wie der Name schon sagt, täuscht es den Root-Benutzer vor, indem es mehrere Syscalls mit einem LD_LIBRARY_PATH abfängt /LD_PRELOAD Bibliotheks-Wrapper, um den Prozess glauben zu lassen, dass er als Root ausgeführt wird. Dies wurde zum Erstellen und Packen von Anwendungen erstellt, ohne Root sein zu müssen, einschließlich der Verwendung von make install was normalerweise als root ausgeführt wird. Es eignet sich besonders gut zum Erstellen von Archiven.

Dabei wird ein Fork-Daemon faked wird ausgeführt, um sich an alle gefälschten Dateieigentumsrechte oder Informationen zu speziellen Dateien zu erinnern, von denen die untergeordneten Prozesse glauben, dass sie sie gemacht haben. Also müssen alle Operationen in der gleichen „Instanz“ durchgeführt werden, oder faked verlässt und vergisst, woran es sich erinnert.

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

Anderes Beispiel, das faked zeigt Interaktion:

$ 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. Erstellen Sie ein Tar-Archiv, das in Blöcke mit maximaler Größe aufgeteilt ist?

  2. Wie führe ich einen Befehl ohne Root-Eigenschaften aus?

  3. So extrahieren Sie das RPM-Paket, ohne es zu installieren

  4. Wie tariere ich ein Verzeichnis, ohne die Verzeichnisstruktur beizubehalten?

  5. cd in das Verzeichnis ohne Erlaubnis

So erweitern Sie die XFS-Root-Partition ohne LVM in Linux

So verwandeln Sie GIMP in Photoshop

Kopieren Sie Dateiinhalte in die Zwischenablage, ohne sie anzuzeigen

HOWTO:Führen Sie Linux auf Android ohne Root aus

zsh ohne root-Zugriff installieren?

Wie kann ich ein RPM installieren, ohne root zu sein?