Bug#787795: grub2: please build rescue ISO and floppy reproducibly
Vagrant Cascadian
vagrant at reproducible-builds.org
Mon Jun 1 21:34:04 BST 2026
On 2024-10-02, James Addison wrote:
> On Fri, 05 Jun 2015 02:37:38 -0400, Daniel wrote:
>> > However, it won't be completely reproducible until we get a newer
>> > version of xorriso in debian so that we can "-alter_date_r c" (see
>> > #787793, which blocks this bug).
>
> On Sun, 25 Jul 2021 16:19:46 -0700, Vagrant wrote:
>> Since newer versions of xorriso are now in Debian, I tried adding
>> "-alter_date_r c" to xorriso calls, but it would seem xorriso doesn't
>> support "-alter_date_r c" when used with "-as mkisofs". I'm not sure how
>> difficult it would be to convert away from using "-as mkisofs" so that
>> "-alter_date_r c" would be supportable...
>
> From inspecting the grub codebase and the commandline options to both xorriso
> and xorrisofs (aka "xorriso -as mkisofs").. although it may in theory be
> possible to convert to 'native' xorriso by migrating a lot of the command-line
> construction, I think that it might be fragile and unnecessary work, because:
>
> ...there is a '--set_all_file_dates' command-line option[1] in xorrisofs that
> seems to do what we want here.
>
> There's one other change required in grub-mkrescue alongside this in order to
> achieve reproducible builds: we need it to read from the SOURCE_DATE_EPOCH env
> var when set (currently grub-mkrescue always uses system clock time).
>
> Please find attached a patch that allows me to rebuild grub-rescue-cdrom.iso
> deterministically on my local machine when SOURCE_DATE_EPOCH is set. I'll also
> offer this as a merge request on the Salsa repository[2].
I can confirm that this still applies for grub2 2.14-2, still is needed,
and fixes the issue. Thanks!
So that is one more known fix for grub2 reproducibility...
live well,
vagrant
> From: James Addison <jay at jp-hosting.net>
> Date: Tue, 01 Oct 2024 22:36:39 +0100
> Subject: grub2: build rescue ISO reproducibly
>
> Extend the xorriso command-line invocation to configure a specific
> timestamp for all files during creation of Grub rescue ISO images.
>
> The timestamp to use is read from the SOURCE_DATE_EPOCH environment
> variable when it is set.
>
> Bug-Debian: https://bugs.debian.org/787795
> ---
> --- a/util/grub-mkrescue.c
> +++ b/util/grub-mkrescue.c
> @@ -576,7 +576,13 @@
> {
> time_t tim;
> struct tm *tmm;
> - tim = time (NULL);
> + /* https://reproducible-builds.org/docs/source-date-epoch/ */
> + char *source_date_epoch;
> + /* This assumes that the SOURCE_DATE_EPOCH environment variable will contain
> + a correct, positive integer in the time_t range */
> + if ((source_date_epoch = getenv("SOURCE_DATE_EPOCH")) == NULL ||
> + (tim = (time_t)strtoll(source_date_epoch, NULL, 10)) <= 0)
> + time(&tim);
> tmm = gmtime (&tim);
> iso_uuid = xmalloc (55);
> grub_snprintf (iso_uuid, 50,
> @@ -600,6 +606,19 @@
> xorriso_push (uuid_out);
> free (uuid_out);
> }
> + {
> + char *uuid_out = xmalloc (strlen (iso_uuid) + 1);
> + char *optr;
> + const char *iptr;
> + optr = grub_stpcpy (uuid_out, "");
> + for (iptr = iso_uuid; *iptr; iptr++)
> + if (*iptr != '-')
> + *optr++ = *iptr;
> + *optr = '\0';
> + xorriso_push ("--set_all_file_dates");
> + xorriso_push (uuid_out);
> + free (uuid_out);
> + }
>
> /* build BIOS core.img. */
> if (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC])
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 227 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-grub-devel/attachments/20260601/21c8fe1c/attachment.sig>
More information about the Pkg-grub-devel
mailing list