Le 15 déc. 2015 4:46 PM, "Andrei Borzenkov" <arvidj...@gmail.com> a écrit :
> > 14.12.2015 18:22, Vladimir 'φ-coder/phcoder' Serbinenko пишет: > > On 04.12.2015 19:32, Alexander Couzens wrote: > >> The uuid generation is based on the time. > >> --- > >> util/grub-mkrescue.c | 16 +++++++++++++++- > >> 1 file changed, 15 insertions(+), 1 deletion(-) > >> > > This breaks uniqueness assumptions for UUID and we use UUID to find the > > right disk, as it's not possible to rely on passed boot disk on some > > platforms (I've just documented it in grub.texi and pushed it). Also for > > mkrescue we always use UUID. We need to find a way to reliably find boot > > disk without depending on current time. > > Well, UUID of isofs used by GRUB is not unique in any sense, so it is > not really much worse than it was before. > > Having reliable way to identify boot device imply some unique property > of boot device which automatically conflict with idea of identical images. > It's not mutually exclusive. We could e.g. feed all files with full names in ISO into sha512sum, then stuff it into the ISO somehow > But I am not sure we should stretch reproducible builds that far. ISO > image created by grub-mkrescue is not binary. It even does not have well > defined content, user is free to change modules list and other files > that are part of ISO. > > >> diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c > >> index 4511826..1af1da2 100644 > >> --- a/util/grub-mkrescue.c > >> +++ b/util/grub-mkrescue.c > >> @@ -52,6 +52,7 @@ static int xorriso_arg_alloc; > >> static char **xorriso_argv; > >> static char *iso_uuid; > >> static char *iso9660_dir; > >> +static time_t fixed_time; > >> > >> static void > >> xorriso_push (const char *val) > >> @@ -110,6 +111,7 @@ static struct argp_option options[] = { > >> {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2}, > >> {"sparc-boot", OPTION_SPARC_BOOT, 0, 0, N_("enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-pc"), 2}, > >> {"arcs-boot", OPTION_ARCS_BOOT, 0, 0, N_("enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, sparc64 and boot as disk image for i386-pc"), 2}, > >> + {"fixed-time", 0, N_("TIMEEPOCH"), 0, N_("use a fixed timestamp for uuid generation"), 2}, > >> {0, 0, 0, 0, 0, 0} > >> }; > >> > >> @@ -153,6 +155,8 @@ enum { > >> static error_t > >> argp_parser (int key, char *arg, struct argp_state *state) > >> { > >> + char *b; > >> + > >> if (grub_install_parse (key, arg)) > >> return 0; > >> switch (key) > >> @@ -212,6 +216,15 @@ argp_parser (int key, char *arg, struct argp_state *state) > >> xorriso = xstrdup (arg); > >> return 0; > >> > >> + case 't': > >> + fixed_time = strtoll (arg, &b, 10); > >> + if (*b !='\0') { > >> + printf (_("invalid fixed time number: %s\n"), arg); > >> + argp_usage (state); > >> + exit (1); > >> + } > >> + return 0; > >> + > >> default: > >> return ARGP_ERR_UNKNOWN; > >> } > >> @@ -431,6 +444,7 @@ main (int argc, char *argv[]) > >> > >> pkgdatadir = grub_util_get_pkgdatadir (); > >> > >> + fixed_time = -1; > >> product_name = xstrdup (PACKAGE_NAME); > >> product_version = xstrdup (PACKAGE_VERSION); > >> xorriso = xstrdup ("xorriso"); > >> @@ -541,7 +555,7 @@ main (int argc, char *argv[]) > >> { > >> time_t tim; > >> struct tm *tmm; > >> - tim = time (NULL); > >> + tim = fixed_time != -1 ? fixed_time : time (NULL); > >> tmm = gmtime (&tim); > >> iso_uuid = xmalloc (55); > >> grub_snprintf (iso_uuid, 50, > >> > > > > > > > > > > _______________________________________________ > > Grub-devel mailing list > > Grub-devel@gnu.org > > https://lists.gnu.org/mailman/listinfo/grub-devel > > > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel