Estoy trabajando como usuario, y me gustaría crear un archivo tar, que cuando se descomprime (por root) extraerá sus archivos con propiedad de root (de lo contrario, root debería cambiar la propiedad manualmente para cada archivo, después de que los archivos se hayan extraído a su destino).
He encontrado lo fakeroot
que parece hacer exactamente eso. Pero no puedo encontrar la sintaxis que necesito usar para crear mi archivo.
¿Cómo puedo crear un archivo tar.xz, de modo que los archivos tengan propiedad de root cuando sean desempaquetados por root?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
fuente
tar --owner=root --group=root cfpJ files.tar.xz files/
da un errortar: You must specify one of the
-Acdtrux 'o--test-label' options Try
tar --help' otar --usage' for more information.
-
antes de su cadena de opciones cortas:tar --owner=root --group=root -cfpJ ...
es decir-cfpJ
, nocfpJ
.tar --owner=root --group=root -cfpJ files.tar.xz files/
me da otro error:tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
y además, crea un archivo llamadopJ
.f
al final (porque tiene más sentido, intuitivamente) y bajo y he aquí, obtengo el mismo fallo con-cfpJ
PERO-cpJf
funciona.Fakeroot
La utilidad fakeroot , o la nueva utilidad fakeroot-ng (mismo propósito, técnica de implementación diferente) ejecuta un programa y finge al programa que se está ejecutando como root y que el sistema llama como
chown
exitoso. Solo el programa cree que estas llamadas tuvieron éxito, nada se refleja realmente en el sistema de archivos (no puede serlo ya quefakeroot
no tiene privilegios adicionales). Sin embargo, si el programa cambia la propiedad de un archivo y luego toma alguna acción basada en la propiedad de ese archivo, esto puede cambiar el comportamiento del programa.Una forma típica de obtener un trabajo útil de fakeroot ejecutando un entorno fakeroot donde ocurre lo siguiente:
Ejemplo:
Debe utilizar una sola invocación de
fakeroot
, ya que no hay memoria entre invocaciones.Espacios de nombres de Linux
Solo para completar, mencionaré que si tiene un kernel de Linux ≥3.8, los espacios de nombres son otra forma de crear un entorno de simulación de raíz. El soporte de userland todavía no está allí, así que no entraré en más detalles.
Monta el archivo
Una forma diferente de resolver su problema es montar el archivo como un directorio. Puede usar archivemount , que es capaz de modificar varios formatos de archivo a través de libarchive , incluido tar comprimido.
fuente
archivemount
, pero aún requiere elevación de privilegios, e incluso si el usuario está en un grupo de confianza al que se le permite montar y desmontar, el proceso fallachown
, por lofakeroot
que es necesario utilizar algún tipo de herramientas de terceros como espacios de nombres , también.