我有两个相同的文件夹,具有相同的结构和内容,如下所示:
folder_1
hello.txt
subfolder
byebye.txt
folder_2
hello.txt
subfolder
byebye.txt
Run Code Online (Sandbox Code Playgroud)
如果我将它们压缩为 tar.xz 格式,我会得到两个具有两种不同文件大小的不同存档(只有几个字节,但它们并不相同)。
$ cd folder_1 && tar -Jcf archive.tar.xz *
$ cd folder_2 && tar -Jcf archive.tar.xz *
Run Code Online (Sandbox Code Playgroud)
我得到:
folder_1/archive.tar.xz != folder_2/archive.tar.xz
Run Code Online (Sandbox Code Playgroud)
当然,如果我md5sum或sha1sum他们我会得到两个不同的哈希值
这就是我的问题......我需要检查提供的档案是否与我存储中的档案相同。我不能使用散列,也不能只检查文件大小。
使用 zip 而不是 tar.xz 可以工作,因为 zip 总是从相同的文件产生相同的 achives。为什么会这样?有什么办法可以预防吗?
与如何将 makefile 中给出的依赖关系显示为树密切相关?但是那里给出的答案并不令人满意(即不起作用)。
是否有工具可以将标准 Makefile 中编码的有向无环图 (DAG) 可视化?例如,用于通过 Unix 管道进行后处理的 shell 脚本也是一个可接受的解决方案(也许有一个 pandoc 过滤器可以将 MakeFiles 转换为 graphviz 或 LaTeX)。
我并不严格需要直接排版此图形可视化的工具?只需将 makefile 的常见文件格式转换为图形可视化文件或类似文件就足够了。
我试图确定使用bzip2压缩需要 100% 可重现的文件是否存在任何潜在问题。具体做法是:罐的元数据(名称/索引节点,的lastmod日期等)或任何其他原因相同的文件内容,以产生不同的校验和对所得.bz2的存档?
例如,除非使用gzip,否则默认情况下不是确定性的-n。
到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等)的情况下,bzip2 确实始终如一地生成相同的文件,但如果有更多轶事证据就更好了。
有关 docker 的常见文档和注释提到了版本控制和共享 Dockerfile ,这应该让任何人都可以构建相同的映像。这听起来不错,但是,我们通常有这样的命令。
RUN apt-get update
pip install..
Run Code Online (Sandbox Code Playgroud)
这可能会根据运行时间安装不同的东西/版本/补丁,并使调试变得困难。
另一方面,共享 docker 镜像并不能给您带来诸如版本控制和查看两个镜像之间到底有什么不同之类的好处。
在自动化过程中,将使用 .iso 文件创建 ISO 文件mkisofs。甚至,由于原始数据完全相同,因此生成的 iso 文件也不相同(它们的md5sum更改)。因为我的rsync --checksum结果,我不喜欢每次都重新传输“相同的iso”。我预计时间戳是主要区别。
是否有一些内置开关可以通过确实相同的libfaketime方式生成 iso 。mkisofs
我不知道只有时间戳才重要吗?我将生成的 iso 文件与其xxd isofile输出进行了比较,如下所示:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
Run Code Online (Sandbox Code Playgroud)
在其他完全相同的文件中似乎只有 51 行代表 16 字节(大约有 800 字节的差异)。
用于生成该 iso 的命令大致如下:
genisoimage -o "file.iso" -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-J -R -v -T -V 'CDLABEL' "datadir/"
Run Code Online (Sandbox Code Playgroud)
BS:我是否缺少一个命令行参数开关,rsync它可以对大约 1MB 的大文件块进行校验和,以防止在我的情况下只有大约 800 字节不同时重新传输?
我在 The Register of the UK 上找到了一篇关于 Debian 中可复制构建的文章。我不能从中了解很多。任何人都可以为我简单地做这个吗?这是链接:可重现的构建
我希望我的 initramfs 具有相同的哈希值,无论我何时何地构建它,如果文件的内容相同(并且由 root 拥有并具有相同的权限)。我在 GNU cpio 中没有看到任何选项来删除或设置存档中文件的时间戳。是否有一种相对标准的方法来处理 cpio 和其他存档程序的输入,以便您可以获得可重现的产品?
除此之外,是否有一个传统的“我们没有给出日期”时间戳?大多数软件都不会注意到什么?例如 0 纪元秒?
例如,如果我对 initramfs 的输入目录进行查找并手动将所有时间戳设置为 0,我可以构建该存档,将其提取到另一个系统上,重复该过程,然后再次构建它并获得位相同文件?