Tar в Linux и BSD системах могут оказаться не совместимы друг с другом, это может привести к разного рода ошибкам. Один из самых частых случаев рассмотрим ниже в заметке.
При попытке распаковать созданный на FreeBSD архив в Linux, клиент получал вот такие сообщения:
tar: Ignoring unknown extended header keyword `SCHILY.dev' tar: Ignoring unknown extended header keyword `SCHILY.ino' tar: Ignoring unknown extended header keyword `SCHILY.nlink'
В данном случае есть несколько вариантов решения вопроса. Первый, самый простой — не делать ничего. Распаковать как есть, проверить всё ли в порядке, и если всё в порядке, продолжить работу. Порадоваться, если всё распаковалось хорошо.
Второй — добавить при распаковке на Linux машине специальные параметры, получив которые архиватор будет игнорировать некоторую информацию. Можно попробовать распаковать, например, так:
# tar --pax-option="delete=SCHILY.*" -xvfz file.tar.gz
Третий — пожалуй, самый верный, но не всегда доступный — использовать идентичные версии tar на Linux и BSD серверах. Для этого:
- Смотрим какая версия tar установлена на Linux сервере:
# tar --version tar (GNU tar) 1.26
- Идём на сервер с FreeBSD и ставим там аналогичную версию:
# mkdir /usr/local/src/ # cd /usr/local/src/ # wget http://ftp.gnu.org/gnu/tar/tar-1.26.tar.bz2 # tar -xjf tar-1.26.tar.bz2 # cd tar-1.26 # FORCE_UNSAFE_CONFIGURE=1 ./configure # make # make install # mv /bin/tar /bin/bsdtar # ln -s /usr/local/bin/tar /bin/tar
Последний симлинк создаётся на случай работы на сервере приложений и скриптов, которые tar ищут по конкретному пути.
Теперь остаётся заново запаковать архив, и можно переносить его на Linux сервер, где он распакуется без проблем и ошибок.