[О блоге] [наверх] [пред] [2024-06-27 19:47:22+03:00] [7687e77d7a77d0a14e4dd38c79886b942199ac9d]
Темы: [bass][go]

Сделал detpax -- детерминированный архиватор

http://www.git.cypherpunks.ru/?p=bass.git;a=blob_plain;f=build/contrib/detpax/README
https://reproducible-builds.org/docs/archives/
Для того, чтобы хоть как-то приближаться к reproducible build-ам, архивы
пакетов тоже должны быть "повторяемыми". bsdtar можно всякие опции
указывать для того, чтобы не хранить UID/GID. touch-ем можно выставить
фиксированное время. find-ом сортировать списки файлов. Но это всё
работает пока bsdtar по умолчанию делает ustar формат.

Но большого размера файлы в него не запихнуть. bsdtar автоматом начинает
использовать pax формат, что хорошо. Но при этом он начинает в него
пихать и точные временные штампы для файлов, что ломает детерминированность
создания архивов. С GNU tar-ом (bsdtar например даже на Astra SE стоит
из коробки), тоже какие-то загвоздки есть, но детали не помню.

Поэтому написал на Go, зная что в нём из коробки есть archive/tar
библиотека, поддерживающая pax-формат, архиватор который бы не сохранял
ничего лишнего. И добавил в него возможность указания более высокого
приоритета сортировки для каких-то директорий (чтобы они были в начале
архива). Сохраняет только права доступа, sticky/setuid/setgid флаги,
файлы, директории, символические и жёсткие ссылки.

    [оставить комментарий]