
После почти двухлетнего перерыва состоялся релиз GNU tar 1.29 — новой стабильной версии классического архиватора из экосистемы GNU. Анонс подготовил Сергей Позняков 16 мая 2016 года в рассылке info-gnu. Исходные коды утилиты доступны для загрузки в форматах tar.gz, tar.bz2, tar.xz и cpio.gz, снабженные GPG-подписями для проверки подлинности.
GNU tar остается фундаментальным инструментом в Unix-подобных системах и дистрибутивах Linux. Утилита предназначена для создания, обновления и распаковки архивов, объединяющих множество файлов. Обновление архиватора имеет принципиальное значение не только для конечных пользователей, но и для инструментов сборки ПО и систем, поддерживающих воспроизводимые сборки (reproducible builds).
Ключевые нововведения и улучшения
Главным функциональным дополнением стала опция --verbatim-files-from. Она меняет способ обработки списков файлов, переданных через аргументы --files-from или -T. Теперь пользователь может принудительно указать, что строки в списке должны интерпретироваться строго как имена файлов, даже если они начинаются с символа дефиса. Это критически важно для автоматизированных сценариев, где имена файлов могут совпадать с флагами командной строки (например, при передаче вывода команды find). Обратное поведение обеспечивается ключом --no-verbatim-files-from.
Также была исправлена работа режима --null: при чтении списков файлов, разделенных нулевым байтом, утилита вновь корректно воспринимает имена «как есть». Разработчики отмечают, что этим исправлением восстановили задокументированное поведение, которое было случайно нарушено в версии 1.27.
Управление правами и воспроизводимость
В версию 1.29 добавлены параметры --owner-map=FILE и --group-map=FILE. Они предоставляют возможность гибкого управления подстановкой идентификаторов и имен владельцев/групп при добавлении данных в архив. Внешний файл сопоставления определяет правила, по которым старые UID/GID или имена преобразуются в новые значения.
Для проектов, требующих гарантии воспроизводимости сборок, добавлена опция --clamp-mtime. В связке с параметром --mtime она позволяет обновлять метки времени только у тех файлов, которые новее указанной даты. Это помогает стабилизировать временные показатели архива, не затирая при этом актуальную метаинформацию.
Оптимизация работы с разреженными файлами
Разработчики существенно улучшили обработку разреженных (sparse) файлов. На ядрах ОС, поддерживающих интерфейсы SEEK_DATA и SEEK_HOLE, GNU tar теперь задействует системные возможности для более быстрого поиска «пустот». Управлять процессом можно с помощью опции --hole-detection:
- Режим
seekиспользует системные возможностиlseek(2). - Режим
rawвыполняет полное сканирование файла.
По умолчанию утилита отдает предпочтение seek, переключаясь на raw только при отсутствии поддержки в ядре.
Итоги релиза
Из кодовой базы была окончательно исключена устаревшая опция --preserve. Сборка пакета произведена с использованием актуальных на тот момент версий инструментов разработки: Autoconf 2.69, Automake 1.14, Makeinfo 5.9.93 и Gnulib v0.1-538-g1029a81.
Список основных изменений:
- Внедрены опции
--verbatim-files-fromи--no-verbatim-files-from. - Восстановлена корректная обработка имен файлов в режиме
--null. - Добавлены механизмы
--owner-mapи--group-mapдля управления атрибутами. - Появилась опция
--clamp-mtimeдля задач воспроизводимой сборки. - Удален устаревший ключ
--preserve. - Ускорено обнаружение разреженных файлов через
SEEK_DATA/SEEK_HOLE. - Реализован выбор алгоритма детекции через
--hole-detection.


