114 votes

Incompatibilité tar Linux / OS X - les tarballs créés sous OS X donnent des erreurs lorsqu'ils sont dé-tarés sous Linux

Lorsque j'archive des fichiers sur mon Macbook et que je les désarchive sous Linux, je reçois régulièrement les avertissements/erreurs suivants :

 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

Heureusement, cela n'affecte PAS les fichiers stockés dans l'archive, qui sont parfaitement restaurés. Cependant, cela pose des problèmes dans un certain nombre de scénarios, en particulier lorsqu'il s'agit de processus de construction où le code d'échec non nul renvoyé par 'tar' provoque l'arrêt inutile des constructions et des installations.

Comment puis-je faire en sorte qu'OS X construise des fichiers tar qui soient compatibles avec le reste du monde Linux ?

De plus, pour les points bonus, il existe un fichier tar distribué publiquement avec ces problèmes. Y a-t-il un moyen de faire en sorte que Linux gère le fichier tar de manière efficace ? sans en changeant la façon dont il a été compressé à l'origine ?

73voto

holygeek Points 999

J'ai cherché le message d'erreur sur Google et il semble qu'il s'agisse d'un tar BSD par rapport à GNU. tar question.

Installer GNU tar si vous le pouvez sur Mac OS et l'utiliser pour créer la tar .

68voto

spuder Points 9635

Si vous utilisez Mavericks ou une version plus récente, gnutar n'est plus inclus par défaut.

La solution, si vous utilisez homebrew, est d'exécuter ce qui suit :

brew install gnu-tar

Vous pouvez alors utiliser la commande gtar pour la compatibilité avec linux.


Si vous voulez remplacer tar avec gtar il suffit de remplacer le lien symbolique

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

Pour restaurer le tar original fourni avec Mac Os X, exécutez les commandes ci-dessus mais remplacez which gtar avec which bsdtar

Fuente:
https://github.com/jordansissel/fpm/issues/576

32voto

Chris Points 421

GNU tar n'aime pas certaines des informations optionnelles que le tar OSX BSD par défaut inclut.

GNU tar vous permettra de supprimer ces avertissements avec l'option :

--warning=no-unknown-keyword

Voir : https://www.gnu.org/software/tar/manual/html_section/tar_27.html

Notez que le tar BSD ne supporte pas ce drapeau, donc si vous avez besoin d'exécuter le même code de déballage sur toutes les plateformes, vous pouvez utiliser quelque chose comme :

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

10voto

daka Points 237

Pour extraire le fichier tar correctement et sans erreur sur un système Linux, vous pouvez utiliser bsdtar.

sudo apt-get install bsdtar

Ensuite, utilisez-le comme d'habitude.

bsdtar -xvf file.tar donde file.tar est le fichier tar que vous voulez extraire.

Fuente: https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314

Vous pouvez également utiliser le rouleau de fichiers de GNOME.

6voto

Rowan Points 1133
COPYFILE_DISABLE=1 tar cf filename.tar

o

tar --disable-copyfile cf filename.tar

C'est la fonctionnalité de tar sous OS X la moins facile à découvrir que je connaisse personnellement.

Voir aussi Pourquoi j'obtiens des fichiers comme ._foo dans mon tarball sous OS X ?


Edit : il semblerait que cela n'arrête que la création de l'indésirable. ._foo cela n'arrête pas la création de l'en-tête (du moins sur Yosemite/10.10) ; merci aux commentateurs de l'avoir signalé. Cependant, (pour les points bonus :) vous pouvez gérer gracieusement de telles archives en les extrayant comme ceci :

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

Cela a fonctionné avec gnu tar 1.15.1, qui est assez vieux ! Alternativement, vous pouvez utiliser pax à la place, qui (pour moi) jette les informations supplémentaires dans un fichier PaxHeader mais au moins, il sort sans erreur :

pax -rf filename.tar

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X