GNU/Linux >> Tutoriales Linux >  >> Linux

¿Transformar Tar en Cpio sin rootear?

Tengo un tarball que contiene muchos archivos con raíz:propietario raíz y/o inodos de dispositivos especiales. cpio solo acepta rutas existentes en el sistema de archivos cuando está creando un archivo cpio. Y no quiero tener que sudo para transformar tar en cpio, mientras quiero conservar todos los permisos, propietarios e inodos especiales.

¿Hay alguna forma limpia de manejar esto?

EDITAR1:

Creo que fakeroot puede verse como una forma un tanto limpia. Sin embargo, no escala como se esperaba:casi 1000 veces la diferencia de velocidad:

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

Basado en la salida de time comando Supongo que es por la comunicación entre fakeroot y faked .

Como referencia, no hay mucha diferencia entre un tarball de 2M y un tarball de 50M cuando cambié fakeroot en sudo bash en mi guión. Y también creo que el problema es la cantidad de archivos en el tarball, no el tamaño:usé el mismo script en un tarball de ~10M con dos binarios de 5M, y el script no es tan lento.

Respuesta aceptada:

Puedes usar fakeroot . Como su nombre lo indica, falsifica al usuario raíz al interceptar varias llamadas al sistema con un LD_LIBRARY_PATH /LD_PRELOAD contenedor de la biblioteca, para que el proceso crea que se está ejecutando como root. Esto ha sido creado con el propósito de compilar y empaquetar aplicaciones sin tener que ser root, incluido el uso de make install que normalmente se ejecutaría como root. Es especialmente adecuado para crear archivos.

Durante esto, un demonio bifurcado faked se ejecutará para recordar todos los derechos de propiedad de archivos falsos o información sobre archivos especiales que los procesos secundarios creen que crearon. Por lo tanto, todas las operaciones deben realizarse en la misma "instancia" o faked saldrá y olvidará lo que estaba recordando.

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

Otro ejemplo que muestra faked Interacción de:

$ 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. Cómo extraer el paquete RPM sin instalarlo

  2. ¿Es posible instalar g ++ en CentOS sin root?

  3. ¿Instalar zsh sin acceso de root?

  4. Ejecutar ifconfig sin sudo

  5. Cómo convertir un archivo TAR en un archivo ISO

Cómo extender la partición raíz XFS sin LVM en Linux

Cómo transformar GIMP en Photoshop

Copie el contenido del archivo en el portapapeles sin mostrarlo

CÓMO:Ejecutar Linux en Android sin root

Crear base de datos PostgreSQL sin privilegios de root

¿Cómo puedo instalar un RPM sin ser root?