Lorsque je cible des fichiers sur mon Macbook et les décompresse sous Linux, je reçois à plusieurs reprises 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, notamment lorsqu'il s'agit de processus de génération pour lesquels le code d'échec non nul renvoyé par 'tar' provoque l'arrêt inutilement des générations et des installations.
Comment puis-je obliger OS X à créer des fichiers tar qui fonctionnent bien avec le reste du monde Linux?
De plus, pour les points bonus, il existe un fichier tar distribué publiquement avec ces problèmes. Existe-t-il un moyen de faire en sorte que Linux gère correctement le fichier tar sans modifier la façon dont il a été compressé à l'origine?
J'ai cherché sur Google pour le message d'erreur et cela ressemble à un problème BSD contre GNU tar
.
Installez GNU tar
si vous le pouvez sous Mac OS et utilisez-le pour créer la tar
.
Si vous utilisez Mavericks ou une version plus récente, gnutar n'est plus inclus par défaut.
Si vous utilisez homebrew, vous devez exécuter les tâches suivantes:
brew install gnu-tar
Vous pouvez ensuite utiliser la commande gtar
pour la compatibilité linux.
Si vous voulez remplacer tar
par gtar
, remplacez simplement 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 fichier tar d'origine fourni avec Mac Os X, exécutez les commandes ci-dessus en remplaçant which gtar
par which bsdtar
.
Les fichiers GNU tar n’aiment pas certaines des informations facultatives incluses dans les fichiers OSX BSD par défaut.
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 BSD tar ne prend pas en charge cet indicateur. Par conséquent, si vous devez exécuter le même code de décompression 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
Pour extraire le fichier tar correctement, sans erreur sur un système Linux, vous pouvez utiliser bsdtar.
Sudo apt-get install bsdtar
Ensuite, utilisez comme d'habitude.
bsdtar -xvf file.tar
où file.tar
est le fichier tar à extraire.
Source: https://bugs.launchpad.net/ubuntu/+source/tar/+bug/129314
Sinon, vous pouvez également utiliser le rouleau de fichiers GNOME.
COPYFILE_DISABLE=1 tar cf filename.tar
ou
tar --disable-copyfile cf filename.tar
C’est la fonctionnalité de tar la moins découverte sur OS X à ma connaissance.
Voir aussi Pourquoi ai-je des fichiers comme ._foo dans mon archive tar OS X?
Edit: il semble que cela puisse uniquement arrêter la création des fichiers non désirés de type ._foo
-, mais pas la création de l'en-tête (du moins sous Yosemite/10.10); merci aux commentateurs de l'avoir signalé. Cependant, (pour les points bonus :), vous pouvez gérer avec élégance 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, ce qui (pour moi) jette les informations supplémentaires dans un répertoire PaxHeader
, mais au moins se ferme sans erreur:
pax -rf filename.tar
MacOSX est déjà livré avec gnutar. Si vous voulez une solution rapide et sale, ajoutez ceci à ~/.bash_profile
alias tar='gnutar'
et lancez source ~/.bash_profile
pour mettre à jour
De plus, OSX est livré avec GNU et BSD tar. Ainsi, vous pouvez également dissocier l’arbitre de tar de bsd à gnu:
Sudo unlink /usr/bin/tar;
Sudo ln -s /usr/bin/gnutar /usr/bin/tar
Je vous remercie. Ce fil était très utile. Si vous utilisez MacPorts, voici un bref guide:
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
Ajoutez la ligne suivante à /Users/[votre_domaine//profile
alias tar='/opt/local/libexec/gnubin/tar'
Quittez et relancez la fenêtre de votre terminal.
Oui, le binaire tar intégré à Mac ajoute un tas de choses supplémentaires que CentOS n'aime pas. Pour résoudre ce problème, procédez comme suit:
Sudo mv /usr/bin/tar /usr/bin/darwintar
Sudo ln -s /usr/bin/gnutar /usr/bin/tar
ls -l /usr/bin/tar
J'espère que cela pourra aider!
D'accord, j'ai utilisé la recherche Google, mais les trois premiers liens ont confirmé ce que je soupçonnais
Edit: Vous êtes sur un système Mac, je pensais autrement. Vous devrez utiliser gnutar, il devrait déjà être installé, sinon installez-le. Bien sûr, vous pouvez regarder d'autres liens en cherchant vous-même.
Sous MAC OSX, installez gnu-tar
brew install gnu-tar
puis créez votre tar compatible linux avec:
gtar -c -f your_tar_file files
Ou vous pouvez créer vos archives avec le format pax
tar -c --format pax -f your_tar_file files