Существует ли практический способ создания воспроизводимых в двоичном виде архивов CPIO (initramfs)?

Существует ли практический способ создания воспроизводимых в двоичном виде архивов CPIO (initramfs)?

Я хотел бы, чтобы мой 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источника в последнем schilytoolstarball.

Кстати: Я полагаю, что следующее может выглядеть как реклама, но эта информация была запрошена, и она является 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для получения более подробной информации.

Связанный контент