From: Sergey Matveev Date: Thu, 27 Jun 2024 16:47:22 +0000 (+0300) Subject: Сделал detpax -- детерминированный архиватор X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7687e77d7a77d0a14e4dd38c79886b942199ac9d;p=stargrave-blog.git Сделал 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 флаги, файлы, директории, символические и жёсткие ссылки. ---