По мотивам: https://reproducible-builds.org/docs/archives/С tar все понятно.
Как получить воспроизводимый: gz, bz2, xz, ... ?
Какие магические опции надо этим архиваторам добавить для воспроизводимость результата?
Неужели только ar, cpio, zip и jar воспроизводимы?
ДАВАЙ Я ЗА ТЕБЯ ПОГУГЛЮhttps://wiki.debian.org/ReproducibleBuilds/TimestampsInGzipH...
> ДАВАЙ Я ЗА ТЕБЯ ПОГУГЛЮ
> https://wiki.debian.org/ReproducibleBuilds/TimestampsInGzipH...угу, всё именно так
tar cf - 1 | gzip -n -3 | md5sum
35261b3df66a59882dc07c104b21f487 -
tar cf - 1 | gzip -n -3 | md5sum
35261b3df66a59882dc07c104b21f487 -
tar cf - 1 | gzip -n -3 | md5sum
35261b3df66a59882dc07c104b21f487 -
> По мотивам: https://reproducible-builds.org/docs/archives/
> С tar все понятно.
> Как получить воспроизводимый: gz, bz2, xz, ... ?
> Какие магические опции надо этим архиваторам добавить для воспроизводимость результата?
> Неужели только ar, cpio, zip и jar воспроизводимы?кто-то путает компановщики с архиваторами(компрессорами).
Но в целом, достаточно небольшой LD_PRELOAD, и все времена/владельцы будут такие, какие нужно. Останется решиь про сортировку внутри контейнера(cpio/tar/...) и усё.tar cf - 1 | gzip -3 | md5sum
b9211265d4a965a07679f0e7518e5707 -
tar cf - 1 | gzip -3 | md5sum
1c8e087077123f046cc15aa058aed1de -
tar cf - 1 | gzip -3 | md5sum
1ae2a8f2f34d676aa795de874bc125d1 -gzip чудит, но кому нужен gzip сейчас, если всё остальное много лучше
tar cf - 1 | bzip2 -3 | md5sum
58b33241737309015e9513ec9d10bca5 -
tar cf - 1 | bzip2 -3 | md5sum
58b33241737309015e9513ec9d10bca5 -
tar cf - 1 | bzip2 -3 | md5sum
58b33241737309015e9513ec9d10bca5 -bzip2 работает
tar cf - 1 | zstd -3 -c -| md5sum
fc5421dd2935ca0372f4fcd531ec15e0 -
tar cf - 1 | zstd -3 -c -| md5sum
fc5421dd2935ca0372f4fcd531ec15e0 -zstd работает
tar cf - 1 | xz | md5sum
55fa9d540192e70713157e75d233590d -
tar cf - 1 | xz | md5sum
55fa9d540192e70713157e75d233590d -
tar cf - 1 | xz | md5sum
55fa9d540192e70713157e75d233590d -
аналогично
Спасибо!У меня при создании контейнера, каждый раз создавался новый файл с контрольными сумами содержимого контейнера. Вот из-за его mtime и были расхождения которых сразу не заметил.
Почему опцию -3 дете, протестил с -9 и все сошлось.
У меня еще пакетный менеджер Gentoo заворачивает в архив собранного пакета:
BUILD_TIME
XDG_SESSION_ID
XDG_VTNR
Как их победить может кто идею даст?
Переменные окружения сборки можно определить в:
/etc/portage/make.conf
И некоторые переменные надо устанавливать командной строке (скрипте):
XDG_SESSION_ID
XDG_VTNRВот с установкой определенной BUILD_TIME в Gentoo похоже никак. Придется лезть и патчить руками portage, или кто подскажет легкое решение, чтобы я баги не добавлял.
Пропатчил в lib/portage/package/ebuild/duebuild.py BUILD_TIME теперь binpkg получаются bit to bit воспроизводимы.Еще бы mtime самого архива ставить заданный. Жаль bzip2 не имеет опции установки заданного mtime. Вариант с touch для правки mtime архива после создания?
Может лучше было взять libfaketime ?
А кто-то пробовал здесь воспроизводить сжатый образ ядра Linux?
https://www.kernel.org/doc/html/latest/kbuild/reproducible-b...
https://github.com/hardenedlinux/grsecurity-reproducible-build
Кто-то делал воспроизводимые файловые системы?Как сделать воспроизводимых загрузчик? Тестовая установка с grub в MBR и каждый раз, сначала диска, после eb6390, пару десятков байт изменяется. Как сделать grub-install воспроизводимым?