fra*_*one 5 rsync mkisofs reproducible-build
在自动化过程中,将使用 .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 字节不同时重新传输?
首先重要说明:请勿使用,genisoimage因为它是 2004 年 5 月的有缺陷的变体mkisofs。
截至 2007 年 5 月,大量 Debian 特有的 bug 被添加,从那时起它就消失了。
这里要知道的重要一点是genisoimage创建有缺陷的文件系统映像,这些映像有时可能不再被您的操作系统接受......
然而,官方mkisofs仍在积极维护并于 2006 年 8 月修复了大量非 Debian 特定的错误。目前没有已知的错误。
现在解决您的问题:您正在使用 -R (Rock Rigde),这会UNIX向文件元数据添加时间戳。这是问题 1....
另一个问题是 ISO-9660 文件系统超级块(正式称为primary_descriptor)包含创建日期和修改日期。后者可以通过选项进行控制-modification-date。
如果您认为这是真正需要的功能,我可以为创建日期添加类似的选项。然而,您仍然需要一个选项来告诉 Rock Ridge 格式化部分使用文件的修改日期而不是上次读取访问的时间。
经常更新的原始源版本是schilytoolstarball 的一部分,可以从以下位置检索:http ://sourceforge.net/projects/schilytools/files/
当前最新的 schilytools tarball 引入了对可复制 ISO-9660 文件系统映像的支持。请获取/编译/安装 schily-2020-03-27.tar.bz2。
有一些新选项:
-noatime告诉mkisofs将修改时间归档为atime。
-creation-date在 PVD 中设置创建日期
-expiration-date在 PVD 中设置到期日期
-effective-date在 PVD 中设置生效日期
-reproducible-date设置除-effective-date和-noatime另外之外的所有时间。
这适用于普通 ISO-9660 文件系统映像以及包含Rock Ridge和的映像UDF。请参阅最近的手册页:http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
您更新后的命令行将如下所示:
mkisofs -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-J -R -v -T -V 'CDLABEL' \
-reproducible-date=20200327 "datadir/" > file.iso
Run Code Online (Sandbox Code Playgroud)
小智 5
人们转向xorriso,因为人们可能想避免 mkisof,而 genisoimage 似乎不再进一步开发。
为了使 xorriso 输出可重现,请将名为 SOURCE_DATE_EPOCH 的环境变量设置为与 1970 年 1 月 1 日以来的秒数相同的值。
您可以直接使用 xorriso 或其名为 xorrisofs 的 mkisofs 兼容模式。
SOURCE_DATE_EPOCH=0 xorrisofs YOUR-MKISOFS-ARGS
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5575 次 |
| 最近记录: |