¿Por qué la extracción de este tgz genera un error en mi Mac pero no en Linux?

22

Estoy experimentando un problema bastante extraño, y no puedo entender qué está pasando. Tengo un archivo tgz, scip-3.2.0.tgz , es decir arrojando un error cuando intento desempaquetarlo. El error solo está ocurriendo en OS X (estoy en 10.10.4). Puedo extraer el archivo sin error en un cuadro de Linux que ejecuta CentOS 6.6. El error se produce tanto al usar el comando de línea de comando tar como al usar la utilidad de archivo. Envié un correo electrónico a la lista de correo SCIP, y tengo el mismo hash SHA-1 que otro usuario ( e085a4a3591eddf945dcb365d97d2512c267e374 ), por lo que no hubo un error de descarga. No están seguros de lo que está pasando.

Aquí está el error que recibo cuando intento desempaquetar usando la utilidad de archivo:

Encasodequelaimagenserompa,eltextodelaimagendiceesto:

  

Nosepuedeexpandir"scip-3.2.0.tgz" a "Escritorio".
  (Error 1 - Operación no permitida).

Y cuando intento desempaquetar a través de la línea de comandos, esta es la salida que obtengo . Es la última línea ( tar: Error exit delayed from previous errors. ) que me preocupa. No veo lo que lo está causando. El archivo aparece para extraerlo sin problema, pero no confío en que se haya lanzado ese error.

¿Alguien sabe qué está causando esto?

[editar]
Mirando un poco más de cerca la salida, la línea 1108 contiene el error:

x scip-3.2.0/applications/Coloring/Makefile: Can't create 'scip-3.2.0/applications/Coloring/Makefile'
    
pregunta Geoff 28.07.2015 - 18:09

4 respuestas

27

Esto debería ayudar a identificar lo que está pasando en la respuesta de Johnny , así como responder la pregunta de por qué esto Funciona en Linux pero no en Mac.

El problema radica en el hecho de que Mac OS X utiliza bsdtar , mientras que la mayoría de los sistemas Linux usan gnutar .

Puedes instalar gnutar en una Mac con Homebrew, usando brew install gnu-tar , que vinculará a gnutar en /usr/local/bin como gtar .

Si instala gnutar , entonces puede reproducir el problema siguiendo los pasos en la respuesta de Johnny .

$ brew install gnu-tar
==> Downloading https://homebrew.bintray.com/bottles/gnu-tar-1.28.yosemite.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring gnu-tar-1.28.yosemite.bottle.2.tar.gz
==> Caveats
gnu-tar has been installed as "gtar".

If you really need to use it as "tar", you can add a "gnubin" directory
to your PATH from your bashrc like:

    PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
==> Summary
                                    
respondido por el Adam Liter 29.07.2015 - 06:08
6

La existencia de un archivo duplicado en el archivo no debería hacer que no sea válido o no se pueda extraer en OSX, ya que, de forma predeterminada, tar sobrescribe los duplicados.

Por lo tanto, estoy un poco confundido por el comportamiento de tu Gist: OSX tar permite la duplicación de archivos en un archivo (un retroceso a su propósito original como t ape ar , la utilidad de cebolleta, por lo que permite que los archivos se agreguen al final del archivo de cinta, y cuando el archivo se restaura, la versión más reciente del archivo sobrescribirá la versión (s) más antigua)

Solo cuando la opción "-k" está presente, tar debería advertir sobre archivos preexistentes.

Aquí creé un archivo con un archivo duplicado y luego lo extraje sin ningún problema. No fue hasta que agregué la opción -k que me advirtió sobre el archivo duplicado:

Macbook> tar --version
bsdtar 2.8.3 - libarchive 2.8.3
Macbook> mkdir test
Macbook> touch test/a test/b
Macbook> tar -zcvf test.tar.gz test test/a
a test
a test/a
a test/b
a test/a
Macbook> tar -ztvf test.tar.gz
drwxr-xr-x  0 user group       0 Jul 28 10:42 test/
-rw-r--r--  0 user group       0 Jul 28 10:42 test/a
-rw-r--r--  0 user group       0 Jul 28 10:42 test/b
-rw-r--r--  0 user group       0 Jul 28 10:42 test/a
Macbook> rm -r test
Macbook> tar -xvf test.tar.gz
x test/
x test/a
x test/b
x test/a
Macbook> echo $?
0
Macbook> rm -r test
Macbook> tar -k -xvf test.tar.gz
x test/
x test/a
x test/b
x test/a: Already exists
tar: Error exit delayed from previous errors.
Macbook> echo $?
1

Un simple problema de umask tampoco parece ser el culpable, intenté cambiar mi umask a 0777 y todavía puedo extraer el archivo:

Macbook> tar -xvf test.tar
x test/
x test/a
x test/b
x test/a
Macbook> ls -l test
ls: test: Permission denied
Macbook> sudo ls -l test
total 0
----------  1 someuser  wheel  0 Jul 28 13:48 a
----------  1 someuser  wheel  0 Jul 28 13:48 b

Pensé que podía duplicar el problema agregando deliberadamente un directorio no grabable al archivo, pero eso no funcionó, tar no actualizó los permisos en el directorio cuando extrajo el archivo:

Macbook> mkdir -p testdir1/test testdir2/test
Macbook> touch testdir1/test/{a,b} testdir2/test/a
Macbook> chmod -w testdir2/test
Macbook> touch testdir2/test/b
touch: testdir2/test/b: Permission denied
Macbook> find testdir* -ls  | awk '{print $3, $11}'
drwxrwx--- testdir1
drwxrwx--- testdir1/test
-rw-rw---- testdir1/test/a
-rw-rw---- testdir1/test/b
drwxrwx--- testdir2
dr-xr-x--- testdir2/test
-rw-rw---- testdir2/test/a
Macbook> cd testdir1
Macbook> tar -cvf ../test.tar test/*
a test/a
a test/b
Macbook> cd ../testdir2
Macbook> tar -rvf ../test.tar test
a test
a test/a
Macbook> cd ..
Macbook> tar -tvf ./test.tar
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/a
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/b
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/a
dr-xr-x---  0 username groupname       0 Jul 28 15:40 test/
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/a
Macbook> tar -xvf test.tar
x test/a
x test/b
x test/a
x test/
x test/a
Macbook> 

También intenté cambiar los permisos en la prueba / a a 000, agregarlo al archivo, luego agregar otra prueba / a, pero esa también funcionó bien:

drwxrwx---  0 username groupname       0 Jul 28 15:40 test/
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/a
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/b
dr-xr-x---  0 username groupname       0 Jul 28 15:40 test/
----------  0 username groupname       0 Jul 28 15:40 test/a
-rw-rw----  0 username groupname       0 Jul 28 15:40 test/a

Así que realmente me gustaría ver el archivo original que causó el problema y ver qué podría haber en ese archivo para causar este problema.

Si un nombre de archivo y un directorio comparten el mismo nombre, tar tiene un problema de extracción, pero tiene un mensaje de error bastante claro:

Macbook> tar -xvf test.tar
x test/
x test/dir1/
x test/dir1/a
x test/
x test/dir1: Can't remove already-existing dir
tar: Error exit delayed from previous errors.

(si el conflicto sucedió al revés, es decir, primero vino un archivo, luego apareció un directorio con el mismo nombre, tar simplemente lo elimina y crea el directorio:

Macbook> tar -xvf test.tar
x test/
x test/dir1
x test/
x test/dir1/
x test/dir1/a
    
respondido por el Johnny 28.07.2015 - 19:46
6

Resulta que la utilidad tar de OS X era la correcta! De hecho hubo un error en el archivo. Este hilo de correo electrónico lo analiza con más detalle, pero el problema es que hay un archivo duplicado en el archivo . Los chicos de la SCIP están arreglando el archivo mientras escribo esto.

[editar]
¡El scip-3.2.0.tgz recién actualizado ahora está extrayendo muy bien! El hash SHA-1 del nuevo tgz es 5b4e8283f4a5bf9e50f9a62d4320d6f5f50c8476 .

[editar 2]
No es que haya un error en el archivo. Es simplemente que bsdtar , que se envía con OS X, maneja los archivos duplicados de manera diferente que gnutar , que se envía con Linux. La respuesta de @Adam Liter aquí proporciona una explicación detallada de lo que está sucediendo.

    
respondido por el Geoff 28.07.2015 - 18:38
1

Hay un software de archivo ligero, gratuito y alternativo que utilizo para Mac OSX. Se llama Keka y lo uso para descomprimir 7zip más específicamente. Además, puede descomprimir otros tipos como .rar, .tar, .gz, etc. También funcionó para el archivo tar específico del OP, pero lo intenté después de que @Geoff mencionó que el equipo estaba trabajando para reparar el archivo.

    
respondido por el ThisClark 29.07.2015 - 00:50

Lea otras preguntas en las etiquetas