创建确定性zip文件的程序。
项目描述
deterministic_zip
生成一致zip文件的工具。
此工具专门构建,以防止zip文件更改在运行terraform apply
时触发AWS Lambda函数更新。在此更改之前,zip文件的每次重建都会导致不同的zip文件,即使其内容没有改变。
要求
此工具目前仅在python3.7上运行,以便使用deflate压缩级别9。
安装
pip install deterministic_zip
创建deterministic_zip
运行以下命令,并验证您的zip生成了相同的sha256哈希值
echo "The first file." > first
echo "The second file." > second
deterministic_zip archive.zip first second
sha256sum archive.zip
如果您有\n
行结束符,则结果应为
3afbd7c9b42bd5539ffd5c40499d3d1825157ed83791dce8d7ff2694189d28d6
如果您有\r\n
行结束符(Windows),则结果应为
40e16270d62f15e7a192e88b1b301fa6540c86e7e897036b56be513341d376ed
它是如何工作的?
这是个好问题!构建确定性zip有三个技巧。
-
文件必须按相同的顺序添加到zip中。目录迭代顺序可能因机器而异,导致不同的zip文件。
deterministic_zip
在将文件添加到zip存档之前对所有文件进行排序。 -
zip中的文件必须具有一致的时间戳。如果我将目录共享到另一台机器,单个文件的时间戳可能不同,尽管内容相同。为了实现时间戳一致性,
deterministic_zip
将所有添加的文件的时间戳设置为2019-01-01 00:00:00
。请注意,这不会影响源文件的时间戳。 -
ZIP文件中的文件必须具有一致的权限。文件权限类似于
-rw-r--r--
,表示所有用户均可读取文件,而只有文件所属用户可以写入。类似地,可执行文件的权限可能类似于:-rwxr-xr-x
或-rwx------
。deterministic_zip
将所有文件的权限设置为-r--r--r--
或-r-xr-xr-x
。后一种情况仅当运行deterministic_zip
的用户具有文件执行权限时使用。
项目详情
关闭
deterministic_zip-0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0095bafb65a7272ea9742c35d9fd3305dc5f1011b0f37addcf3fb95e7606100 |
|
MD5 | 8e3871b6c9705a683a40b9fb2e8fd4ff |
|
BLAKE2b-256 | 045a297b8b79061e9ac3b1c23cc238c78c89bca8b07379864d37ef172fa182de |
关闭
deterministic_zip-0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a16dc9fdfd130849e09adb5bc9c3e9ec8f3de109d405de04cb670cf73bb7c84a |
|
MD5 | 638d96bb56b527ec07f74bef82c317f7 |
|
BLAKE2b-256 | 7a297e6db311798cf302d28312673c8d0e79e4bfa3d1be7cc46b94a45589d564 |