Perché estrarre questo tgz genera un errore sul mio Mac ma non su Linux?

22

Sto vivendo un problema piuttosto strano, e non riesco a capire cosa sta succedendo. Ho un file tgz, scip-3.2.0.tgz , ovvero lanciare un errore quando tento di decomprimerlo. L'errore si verifica solo su OS X (I'm on 10.10.4). Posso estrarre il file senza errori su una macchina Linux con CentOS 6.6. L'errore si verifica quando entrambi utilizzano il comando di riga di comando tar e quando si utilizza l'utilità di archiviazione. Ho inviato una mail alla mailing list di SCIP e ho lo stesso hash SHA-1 come un altro utente ( e085a4a3591eddf945dcb365d97d2512c267e374 ), quindi non c'era un errore di download. Non sono sicuri di cosa sta succedendo.

Ecco l'errore che ottengo quando tento di decomprimere utilizzando l'utilità di archiviazione:

Nelcasoincuil'immaginesirompa,iltestonell'immaginedicequesto:

Unabletoexpand"scip-3.2.0.tgz" into "Desktop".
(Error 1 - Operation not permitted.)

E quando provo a decomprimere tramite la riga di comando, questo è l'output che ottengo . È l'ultima riga ( tar: Error exit delayed from previous errors. ) che mi riguarda. Non vedo cosa lo stia causando. L'archivio appare per estrarre senza problemi, ma non mi fido di questo errore che viene generato.

Qualcuno sa cosa sta causando questo?

[modifica]
Guardando un po 'più vicino all'output, la riga 1108 contiene l'errore:

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

4 risposte

27

Questo dovrebbe aiutare a identificare cosa sta succedendo nella risposta di Johnny , così come rispondere alla domanda sul perché questo funziona su Linux ma non su Mac.

Il problema sta nel fatto che Mac OS X usa bsdtar , mentre la maggior parte dei sistemi Linux usa gnutar .

Puoi installare gnutar su un Mac con Homebrew, usando brew install gnu-tar , che simulerà gnutar in /usr/local/bin come gtar .

Se installi gnutar , puoi riprodurre il problema utilizzando i passaggi in la risposta di 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
                                    
risposta data 29.07.2015 - 06:08
fonte
6

L'esistenza di un file duplicato nell'archivio non dovrebbe renderlo non valido o impossibile da estrarre su OSX, poiché per impostazione predefinita, il tar sovrascrive i duplicati.

Quindi, sono un po 'confuso dal comportamento nel tuo Gist - Il tar OSX consente di duplicare i file in un archivio (un ritorno al suo scopo originale come t ape ar utilità di erba cipollina, quindi consente di aggiungere file alla fine dell'archivio nastro e, quando l'archivio viene ripristinato, la versione più recente del file sovrascriverà la (e) versione (i) precedente (i))

È solo quando è presente l'opzione "-k" che tar dovrebbe avvertire sui file preesistenti.

Qui ho creato un archivio con un file duplicato e l'ho estratto senza problemi. Non è stato fino a quando ho aggiunto l'opzione -k che mi ha avvertito del file duplicato:

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

Anche un semplice problema di umask non sembra essere il colpevole, ho provato a cambiare la mia umask in 0777 e posso ancora estrarre l'archivio:

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

Pensavo di poter duplicare il problema aggiungendo deliberatamente una directory non scrivibile all'archivio, ma non funzionava, tar non aggiornava le autorizzazioni sulla directory quando estraeva l'archivio:

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> 

Ho anche provato a cambiare le autorizzazioni su test / a su 000, aggiungendolo all'archivio, quindi aggiungendo un altro test / a, ma anche quello funzionava bene:

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

Quindi mi piacerebbe davvero vedere l'archivio originale che ha causato il problema e vedere cosa avrebbe potuto essere in quell'archivio per causare questo problema.

Se un nome file e una directory hanno lo stesso nome, tar ha un problema di estrazione, ma ha un messaggio di errore abbastanza chiaro:

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.

(se il conflitto si verificava al contrario, cioè prima veniva un file, poi veniva una directory con lo stesso nome, tar lo rimuove e crea la directory:

Macbook> tar -xvf test.tar
x test/
x test/dir1
x test/
x test/dir1/
x test/dir1/a
    
risposta data 28.07.2015 - 19:46
fonte
6

Risulta che l'utility tar OS X è quella corretta! C'era davvero un errore nell'archivio. Questo thread di posta elettronica ne discute più dettagliatamente, ma il problema è che c'è un file duplicato nell'archivio . I ragazzi di SCIP stanno riparando l'archivio mentre scrivo questo.

[modifica]
Lo scip-3.2.0.tgz appena aggiornato sta ora estraendo bene! L'hash SHA-1 del nuovo tgz è 5b4e8283f4a5bf9e50f9a62d4320d6f5f50c8476 .

[modifica 2]
Non è che ci sia un errore nell'archivio. È semplicemente che bsdtar , fornito con OS X, gestisce i file duplicati in modo diverso da gnutar , fornito con Linux. La risposta di @Adam Liter qui fornisce una spiegazione esaustiva di ciò che sta accadendo.

    
risposta data 28.07.2015 - 18:38
fonte
1

C'è un software di archivio alternativo, gratuito e leggero che utilizzo per Mac OSX. Si chiama Keka e io lo uso per decomprimere 7zip in particolare. Inoltre, può decomprimere altri tipi come .rar, .tar, .gz ecc. Ha funzionato anche per il file tar specifico dell'OP, ma l'ho provato dopo che @Geoff ha detto che il team stava lavorando alla riparazione del file.

    
risposta data 29.07.2015 - 00:50
fonte

Leggi altre domande sui tag