|
From: | Vladimir 'phcoder' Serbinenko |
Subject: | Re: [PATCH v3 2/3] mkrescue: add argument --fixed-time to get reproducible uuids |
Date: | Tue, 15 Dec 2015 17:02:36 +0100 |
Le 15 déc. 2015 4:46 PM, "Andrei Borzenkov" <address@hidden> 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
> > address@hidden
> > https://lists.gnu.org/mailman/listinfo/grub-devel
> >
>
>
>
> _______________________________________________
> Grub-devel mailing list
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
[Prev in Thread] | Current Thread | [Next in Thread] |