%3F.png)
Я хотел бы, чтобы мой initramfs имел тот же хэш, независимо от того, когда или где я его создаю, если содержимое файлов одинаковое (и принадлежит root и имеет те же разрешения). Я не вижу никаких опций в GNU cpio для удаления или установки временных меток файлов в архиве. Есть ли относительно стандартный способ обработки входных данных для cpio и других программ архивации, чтобы можно было получить воспроизводимые продукты?
В связи с этим, есть ли общепринятая временная метка "Мы не даем этому дату"? Что-то, что не смутит большинство программ? Например, 0 секунд эпохи?
Например, если я выполнил проход поиска по входному каталогу для initramfs и вручную установил все временные метки на 0, смогу ли я собрать этот архив, извлечь его на другой системе, повторить процесс, собрать его снова и получить идентичные побитно файлы?
решение1
В более новых версиях GNU cpio
есть --reproducible
флаг, который в какой-то степени соответствует вашим требованиям. Насколько я понимаю,инструмент полосового недетерминизмаобработает требование о временной метке постфактум. touch
Конечно, позволит вам установить время до упаковки.
решение2
Вы можете сделать это с помощью star
встроенного инструмента, find
основанного на libfind
.
Позвоните, например:
star -c H=cpio -find somedir -chmtime 2020-05-20T12:10:12 > archive.cpio
Конечно, вы можете использовать сложные find
правила для разных временных меток, если захотите.
Проверятьhttp://sourceforge.net/projects/schilytools/files/для получения актуального star
источника в последнем schilytools
tarball.
Кстати: Я полагаю, что следующее может выглядеть как реклама, но эта информация была запрошена, и она является OpenSource с самого начала. star
должна быть хорошо известна, UNIX
поскольку это старейшая свободная tar
реализация — она появилась в 1982 году, то есть в 2020 году ей исполнилось 38 лет.
star
является наиболее зрелой и наиболее полной tar
реализацией, о которой я знаю. Другие реализации обычно копируют концепции для улучшений формата архива из star
, который идентифицируется SCHILY.*
префиксом свойства, введенным star
и используемым также другими.
На протяжении 32 лет он разделяется на два процесса, которые совместно используют настраиваемый FIFO для максимальной скорости. star -copy
Это быстрее, чем любой другой известный метод копирования дерева UNIX.
Уже 30 лет он поддерживает и автоматически определяет различные форматы архивов.
Уже 17 лет это универсальный архиватор, который реализует совместимость командной строки с различными архиваторами UNIX, такими как tar
, cpio
pax
и даже несовместимыми GNU tar
.
С 16 лет он включает поддержку расширенного find
синтаксиса командной строки через libfind
. Это помогает избежать изучения ненужных новых концепций использования, поскольку каждый должен знать, как использовать find
.
За два года полностью сняты ограничения на длину имени пути.
Видетьhttp://cdrtools.sourceforge.net/private/star.htmlиhttp://schilytools.sourceforge.net/man/man1/star.1.htmlдля получения более подробной информации.