
Ayer estuve haciendo algunos experimentosSlitaz. Utiliza múltiples initrd.img para almacenar archivos/cambios.
Quería extraer una de sus imágenes initrd.gz (que es un archivo cpio) a una carpeta, editarla/eliminarla y volver a empaquetarla.
Usé este código:
cat rootfs.img | cpio -idvm
Luego, todos los archivos se extraen a mi sistema de archivos raíz. Todo mi sistema operativo está dañado. (Qué situación tan vergonzosa...)
¿Qué debo hacer para realizar este tipo de operaciones de forma segura pero sencilla? ¿Chroot? ¿LXC? (VirtualBox es el último recurso)
Respuesta1
Archivado con rutas relativas
Yo desaconsejaría ejecutar ese tipo de comando en su nivel raíz /
. Eso es buscar problemas. Siempre ejecuto cpio -idvm
comandos relacionados en sus propios directorios y luego uso mv
o cp
para colocar los archivos donde deben estar manualmente.
También puedes usar el método que describí en esta otra sesión de preguntas y respuestas de U&L titulada:¿Cómo instalo TazPkg en SliTaz Linux?, que también hace uso de cpio
.
Archivado con rutas absolutas
Si el archivo se creó con rutas absolutas, puede indicarlo cpio
con el --no-absolute-filenames
interruptor para impedir que se extraiga en /
.
$ mkdir /tmp/cpio-root
$ cd /tmp/cpio-root
$ cat rootfs.img | cpio -idvm --no-absolute-filenames
Referencias
Respuesta2
Puede utilizar la unp
utilidad para esto.
unp
es una utilidad para descomprimir múltiples formatos. Una de sus características (el -U
argumento) es la capacidad de mirar en el archivo y ver si tiene múltiples elementos raíz. Si es así, los extrae en un directorio.
Por ejemplo:
$ echo $RANDOM > a
$ echo $RANDOM > b
$ tar -cf archive.tar a b
$ rm a b
$ unp -U archive.tar
$ ls -l a b archive
ls: cannot access a: No such file or directory
ls: cannot access b: No such file or directory
archive:
total 8
-rw-r--r-- 1 root root 5 Jun 15 03:16 a
-rw-r--r-- 1 root root 6 Jun 15 03:16 b
unp
funciona con muchos formatos diferentes (incluido cpio
). Simplemente llama a la utilidad adecuada para manejar el archivo:
# unp -s
Known archive formats and tools:
7z: p7zip or p7zip-full
ace: unace
ar,deb: binutils
arj: arj
bz2: bzip2
cab: cabextract
chm: libchm-bin or archmage
cpio,afio: cpio or afio
dat: tnef
dms: xdms
exe: maybe orange or unzip or unrar or unarj or lha
gz: gzip
hqx: macutils
lha,lzh: lha
lz: lzip
lzma: xz-utils or lzma
lzo: lzop
lzx: unlzx
mbox: formail and mpack
pmd: ppmd
rar: rar or unrar or unrar-free
rpm: rpm2cpio and cpio
sea,sea.bin: macutils
shar: sharutils
tar: tar
tar.bz2,tbz2: tar with bzip2
tar.lzip: tar with lzip
tar.lzop,tzo: tar with lzop
tar.xz,txz: tar with xz-utils
tar.z: tar with compress
tgz,tar.gz: tar with gzip
uu: sharutils
xz: xz-utils
zip,cbz,cbr,jar,war,ear,xpi,adf: unzip
zoo: zoo
El --help
resultado que muestra lo que puede hacer:
# unp --help
USAGE:
/usr/bin/unp [ options ] file [ files... ]
file: compressed file(s) to expand/extract
Use -- [ ARGUMENTS ] to pass arguments to external programs, eg. some tar options:
unp fastgl.tgz xmnt.tgz -- -C /tmp
Options:
-f Continue even if program availability checks fail or directory collision occurs
-u Special helper mode.
For most archive types:
- create directory <filename without suffix>/
- extract contents there
For Debian/Ubuntu packages:
- extract data.tar.gz after each operation in local directory
- extract control.tar.gz into control/<package_version_arch>/
-U Smart mode, acts like -u (see above) if archive contains multiple
elements but if there is only one file/directory element then it's stored
in the current directory.
-s Show the list of supported formats
-v More verbosity
-h Show this help