Как создать tar-файл gnu, который может быть извлечен с помощью соляристой смолы

Я поддерживаю устаревшую систему cygwin (с GNU tar v1.21) и устаревшую систему Solaris 9. Конфигурация системы Solaris 9 является фиксированной и не может быть обновлена ​​(т.е. я не могу установить gnu tar для Solaris).

Я пытаюсь создать tarball в системе cygwin, которая может быть извлечена из системы Solaris 9, но, к сожалению, структура каталогов (которая также исправлена ​​и не может быть переименована) плюс имена файлов превышают 100 символов, и я столкнулся с Великими Тарскими войнами прошлого тысячелетия. В системе Solaris существует большая (консервативная) база данных, поэтому предпочтительным является решение, использующее конфигурацию Solaris.

Вот ошибки, которые я испытываю.

Создание tar на cygwin:

$ tar -cf dir.tar dir 

или

 $ tar -c --posix -f dir.tar dir 

Дает следующее в Solaris:

 $ tar -xif dir.tar tar: directory checksum errors 

И имена файлов в каталоге усекаются. (т.е. игнорирование ошибок контрольной суммы не помогает)

Как создать tarball с длинными именами путей, используя GNU tar, которые могут быть извлечены с помощью Solaris tar?

Редактировать # 2: Невозможно использовать Шилли Тар (звезда)

Похоже, что Йорг Шиллинг смог подражать формату Solaris 7/8/9 tar и предлагает вариант suntar для создания suntar Solaris с использованием звезды .

К сожалению, star не доступна на cygwin. 🙁

Редактировать # 1: Использование –format = posix дает ошибки при извлечении

Ошибки при извлечении –format = posix gnu tarballs с использованием pax на Solaris 9

На cygwin:

 $ ls example/this_is_a_path_name_greater_than_one_hundred_characters/when_combined_with_this_file_name_which_is_also_rather_long.txt | wc -m 128 $ tar -c --format=posix -f example.tar example 

В Solaris:

 $ pax -r -f example.tar pax: ./PaxHeaders.4440/example : Unknown filetype pax: example/PaxHeaders.4440/this_is_a_path_name_greater_than_one_hundred_characters : Unknown filetype pax: example/this_is_a_path_name_greater_than_one_hundred_characters/PaxHeaders.4440/when_combined_with_t : Unknown filetype 

Аналогичные ошибки приводятся при извлечении с использованием Solaris tar.

  • tar: Удаление имени `/ 'из имен участников
  • Как извлечь файлы в каталог «/ usr» без переопределения других файлов?
  • Как хранить в переменной список файлов, который включает обратную косую черту, когда это необходимо?
  • Как файлы scp / tar, находящиеся между конкретными днями?
  • Автоматическое резервное копирование и исключение определенных папок
  • Tar - преобразование stdin без извлечения
  • «Tar (дочерний элемент): не удается подключиться к https: разрешить сбой» при установке Bitmask
  • Архив для корневой файловой системы с быстрым произвольным доступом
  • 2 Solutions collect form web for “Как создать tar-файл gnu, который может быть извлечен с помощью соляристой смолы”

    GNU tar tar предлагает tar -c --format=posix или tar -c --format=pax – единственный способ создать переносимый файл tar, содержащий имена путей длиной более 255 символов.

    На странице софта Solaris не упоминается поддержка этого формата, но страница руководства для пользователей Solaris .

    Поэтому сначала я попытаюсь создать архив в вашей системе Cygwin (или Linux) с помощью tar -c --format=posix -f dir.tar dir и извлечь его в вашей системе Solaris с помощью pax -r -x pax -f dir.tar или, вероятно, просто pax -r -f dir.tar .

    В качестве альтернативы, если у вас установлена cpio на обеих системах, похоже, что формат crc поддерживает 1 crc символьных пути в обеих системах. Это выглядело бы как find -L dir | cpio -o -H crc > dir.cpio find -L dir | cpio -o -H crc > dir.cpio для создания и cpio -i -d < dir.cpio чтобы извлечь его.

    Наконец, вы можете попробовать добавить флаг -i чтобы игнорировать ошибки контрольной суммы каталога при извлечении на Solaris, например tar -x -i -f dir.tar . Проблемы с контрольной суммой говорят, что это может потребоваться, если любое из имен файлов в архиве tar не является ASCII.

    Другое чтение:

    • Создание архивов tar более переносимо
    • Сравнение tar и cpio

    Solaris tar и GNU tar имеют разные интерпретации posix, но оба поддерживают ustar, который, в свою очередь, поддерживает длинные (ish) пути .

    Использование GNU tar на cygwin:

     $ tar -c --format=ustar -f dir.tar dir 

    Это создает tarball, который с радостью извлекается на Solaris 9 без ошибок. Возможно, это не универсальное решение, а решение, которое подходит для ограниченного пространства решений. Похоже, что 80-е годы были полезны!

    Interesting Posts

    Баш: декретирующая американская дата на 1 день mmddyyyy

    У меня есть диск с ошибкой в ​​RAID1 btrfs, который пишет iffy, но читает в основном работу. Как его заменить?

    От имени файла получите имена точек монтирования, устройства, LV, VG, PV

    см. использование фактических разделов

    kill -9 не может убить процесс с родительским PID = 1

    Есть ли какой-либо CLI-мультизагрузочный ISO-носитель USB в Linux?

    Каковы достоинства многозадачности с традиционным управлением заданиями и Tmux / Screen?

    Хранилище корневых файлов FreeBSD 10

    Получает ли этот диспетчер процесс зомби?

    Серверы имен OpenVPN игнорируются NetworkManager или другими

    перезагрузка с одноразовыми параметрами ядра

    Отбросить пакеты TCP и предотвратить повторную передачу TCP

    Как установить драйвер nvidia (gt 755m) на Fedora 20?

    Возвращаемые значения из функций

    Как я могу получить статистику о процессорах, похожих на процессор, из командной оболочки?

    Linux и Unix - лучшая ОС в мире.