Существует ряд причин, по которым два архива одного и того же дерева каталогов могут различаться. Основными из них являются:
Метаданные, такие как право собственности, временные метки и т. Д., Могут отличаться. Чтобы получить воспроизводимый tar-архив, у вас должны быть те же права собственности, права доступа и временные метки. Убедитесь, что вы скопировали все метаданные (если у вас идентичное содержимое файла с разными метаданными, может помочь cp -a --attributes-only
). В GNU tar есть несколько опций, которые вы можете использовать для игнорирования определенных атрибутов:
- numeric-owner
хранит только числовые идентификаторы пользователей и групп, но не имена. - владелец
и - группа
принудительно записывают файлы под определенным пользователем и группой соответственно (например, - owner = 0 --group = 0
для записывать все файлы как принадлежащие корню). - set-mtime
позволяет сохранять все файлы с определенной меткой времени вместо реальной. Порядок, в котором хранятся файлы, может отличаться. Большинство файловых систем не дают никаких конкретных гарантий относительно порядка, в котором файлы перечислены в каталоге, и tar
перечисляет их по мере их поступления. (Вы можете увидеть порядок с помощью ls -U
.) В GNU tar 1.28 появилась новая опция - sort = name
. В более старых версиях или других реализациях вы можете получить воспроизводимый порядок файлов, построив отсортированный список имен файлов и передав его в tar:
find. -print0 | LC_ALL = C sort -z | tar --no-recursion -Jcf ../archive.tar.xz -T -
Возможно, вас заинтересует вики-страница Debian о воспроизводимых сборках .