тгТихая грань
ОПЕРАЦИЯ · АРХИВЫ

Создать воспроизводимый архив

Зафиксировать порядок, время, права и владельцев обычных файлов.

Инструмент: Python 3 · риск: creates-output · проверено: 2026-02-21

Предварительные условия

Python 3; каталог input содержит только обычные файлы и каталоги. Не меняйте его во время сборки.
Команда
python3 - <<'PY'
import tarfile
from pathlib import Path
root = Path("input")
with tarfile.open("reproducible.tar", "x", format=tarfile.USTAR_FORMAT) as t:
    for p in sorted(root.rglob("*")):
        if p.is_symlink() or not (p.is_file() or p.is_dir()): raise ValueError(str(p))
        if p.is_dir(): continue
        info = tarfile.TarInfo(p.relative_to(root).as_posix())
        info.size = p.stat().st_size
        info.mtime = 0; info.uid = info.gid = 0
        info.mode = 0o644; info.uname = info.gname = ""
        with p.open("rb") as f: t.addfile(info, f)
PY

Объяснение аргументов

USTAR ограничивает имена и размеры; пустые каталоги и executable bits намеренно не сохраняются.

Ожидаемый результат

Повторные сборки тем же Python с теми же файлами дают одинаковые байты.

Проверка

Сравните SHA-256 двух сборок под разными именами.

Распространённые ошибки

  • Менять дерево во время чтения; ожидать сохранения POSIX-метаданных.

Обратимость

Это нормализованный снимок содержимого, исходники не меняются.

Применимые форматы

tar gzip