Incompatibilidade do Linux / OS X tar - os tarballs criados no OS X geram erros quando são descompactados no Linux

93

Quando ligo arquivos no meu Macbook e os descompacta no Linux, recebo repetidamente os seguintes avisos / erros:


 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Ignoring unknown extended header keyword 'SCHILY.dev'
 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Ignoring unknown extended header keyword 'SCHILY.dev'
 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Ignoring unknown extended header keyword 'SCHILY.dev'
 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Ignoring unknown extended header keyword 'SCHILY.dev'
 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Ignoring unknown extended header keyword 'SCHILY.dev'
 tar: Ignoring unknown extended header keyword 'SCHILY.ino'
 tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
 tar: Error exit delayed from previous errors

Felizmente, isso NÃO afeta os arquivos armazenados no arquivo, que são restaurados perfeitamente. No entanto, isso causa problemas em vários cenários, especialmente ao lidar com processos de construção em que o código de falha diferente de zero retornado por 'tar' faz com que compilações e instalações parem desnecessariamente.

Como posso obter o OS X para construir arquivos tar que funcionem bem com o resto do mundo Linux?

Além disso, para pontos de bônus, existe um arquivo tar distribuído publicamente com esses problemas. Existe alguma maneira de obter o Linux para lidar com o arquivo tar graciosamente sem mudar a maneira como ele foi originalmente comprimido?

    
por Dave Dopson 03.08.2011 / 23:47

10 respostas

65

Eu pesquisei a mensagem de erro e parece um problema do BSD contra o% GNUtar.

Instale o GNU tar se você puder no Mac OS e use-o para criar o tar .

    
por 04.08.2011 / 00:00
55

Se você estiver usando o Mavericks ou mais recente, o gnutar não será mais incluído por padrão.

O trabalho em torno, se você usar o homebrew, é executar o seguinte:

brew install gnu-tar

Você pode então usar o comando gtar para compatibilidade do linux.

Se você quiser substituir tar por gtar , basta substituir o link simbólico

tar --version
ll 'which tar'
sudo unlink 'which tar'
sudo ln -s 'which gtar' /usr/bin/tar
tar --version

Para restaurar o tar original fornecido com o Mac Os X, execute os comandos acima, mas substitua which gtar por which bsdtar

Fonte: link

    
por 14.12.2013 / 03:31
21

O GNU tar não gosta de algumas das informações opcionais que o tar padrão do OSX BSD inclui.

O GNU tar permitirá que você suprima esses avisos com a opção:

--warning=no-unknown-keyword

Veja: link

Observe que o tar do BSD não suporta esse sinalizador, portanto, se você precisar executar o mesmo código de descompactação em todas as plataformas, poderá usar algo como:

isGnuTar=$(tar --version | grep -q 'gnu')
if [ $? -eq 0 ]
then
    echo "Detected GNU tar"
    tar --warning=no-unknown-keyword -zxf my.tar.gz
else
    tar -zxf my.tar.gz
fi
    
por 03.06.2015 / 16:30
9

Para extrair o arquivo tar corretamente sem erros em um sistema Linux, você pode usar o bsdtar.

sudo apt-get install bsdtar

Em seguida, use como normal.

bsdtar -xvf file.tar em que file.tar é o arquivo tar que você deseja extrair.

Fonte: link

Como alternativa, você também pode usar o compactador de arquivos do GNOME.

    
por 06.05.2016 / 19:36
5
COPYFILE_DISABLE=1 tar cf filename.tar

ou

tar --disable-copyfile cf filename.tar

Este é o recurso menos explorável do tar no OS X que eu estou pessoalmente ciente.

Veja também obtenho arquivos como ._foo no meu tarball no OS X?

Edit: parece que isso pode apenas parar a criação dos arquivos ._foo -type indesejados, isso não impede a criação do cabeçalho (pelo menos no Yosemite / 10.10); obrigado comentaristas por apontar isso. No entanto, (para os pontos de bônus :), você pode lidar com essas tarballs extraindo-as assim:

tar xf filename.tar --pax-option=delete=SCHILY.*,delete=LIBARCHIVE.*

Isso funcionou usando o gnu tar 1.15.1, que é bem antigo! Como alternativa, você pode usar o pax, que (para mim) gera as informações extras em um diretório PaxHeader , mas pelo menos sai sem erros:

pax -rf filename.tar
    
por 04.03.2015 / 21:30
3

MacOSX já vem com gnutar. Se você quiser uma solução rápida e suja, adicione isso a ~/.bash_profile

alias tar='gnutar'

e execute source ~/.bash_profile para atualizar

Além disso, o OSX vem com o tar GNU e BSD. Então você também pode desvincular a referência de tar do bsd para o gnu:

sudo unlink /usr/bin/tar;
sudo ln -s /usr/bin/gnutar /usr/bin/tar
    
por 21.02.2013 / 17:25
2

Obrigado. Este tópico foi muito útil. Se você estiver usando o MacPorts, aqui está um tutorial rápido:

sudo port install gnutar

sudo ln -s /usr/local/opt/gnu-tar/libexec/gnubin/tar /usr/bin/gnutar

sudo ln -s /opt/local/libexec/gnubin/tar /usr/bin/gnutar

Adicione a seguinte linha a / Users / [yourname] /. profile

alias tar='/opt/local/libexec/gnubin/tar'

Saia e reinicie sua janela do Terminal.

    
por 04.01.2016 / 16:08
1

Sim, o binário integrado do Mac adiciona um monte de coisas extras que o CentOS não gosta. Para corrigir isso, faça o seguinte:

sudo mv /usr/bin/tar /usr/bin/darwintar
sudo ln -s /usr/bin/gnutar /usr/bin/tar
ls -l /usr/bin/tar

Espero que ajude!

    
por 07.02.2013 / 19:28
0

Ok, usei a pesquisa do Google, mas os três principais links confirmaram o que eu suspeitava

  1. Bug no seu tar E / OU
  2. Incompatibilidade entre os dois utilitários tar <
    > Veja este link . Há alguém que relata que "Usando" bsdtar -xvf "funcionou."

Editar: Você está no sistema Mac, eu pensei de outra forma. Você precisará usar o gnutar, ele já deve estar instalado, se não for instalado. Claro, você pode procurar outros links pesquisando por si mesmo.

    
por 04.08.2011 / 00:04
0

No MAC OSX, instale o gnu-tar

brew install gnu-tar

crie seu tar compatível com o linux com:

gtar -c -f your_tar_file files

Ou você pode criar seu arquivo com o formato pax

tar -c --format pax -f your_tar_file files
    
por 06.08.2018 / 08:50