Message ID | 1302015561-21047-9-git-send-email-mmarek@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 05 Apr 2011 about 14:58:55 -0000, Michal Marek wrote: > > gen_init_cpio uses the current time for symlinks, special files and > directories. gen_init_cpio gets the current time and uses it for each symlink, special file, and directory. Grab the current time once, and ... > Make it possible to override this with the (s/this/it/) > KBUILD_BUILD_TIMESTAMP variable for reproducible builds. > > Signed-off-by: Michal Marek <mmarek@suse.cz> > > --- > scripts/gen_initramfs_list.sh | 4 ++++ > usr/gen_init_cpio.c | 17 +++++++++++------ > 2 files changed, 15 insertions(+), 6 deletions(-) > > diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh snip > diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c > index 7f06884..11f604d 100644 > --- a/usr/gen_init_cpio.c > +++ b/usr/gen_init_cpio.c snip > @@ -529,6 +527,7 @@ int main (int argc, char *argv[]) > char *args, *type; > int ec = 0; > int line_nr = 0; > + const char *env; > > if (2 != argc) { > usage(argv[0]); > @@ -544,6 +543,12 @@ int main (int argc, char *argv[]) > exit(1); > } > > + env = getenv("CPIO_TIMESTAMP"); > + if (env) > + default_mtime = atol(env); > + if (!default_mtime) > + default_mtime = time(NULL); > + Please pass it via an explicit flag in argv instead of magic env variables. The other current use of the environment (the expansion of variables in the location name) is via explicit reference in the input file. Also, please use strol and check that the whole string is consumed. milton -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Dne 5.4.2011 19:31, Milton Miller napsal(a): > On Tue, 05 Apr 2011 about 14:58:55 -0000, Michal Marek wrote: >> >> gen_init_cpio uses the current time for symlinks, special files and >> directories. > > gen_init_cpio gets the current time and uses it for each symlink, > special file, and directory. > > Grab the current time once, and ... > >> Make it possible to override this with the > (s/this/it/) >> KBUILD_BUILD_TIMESTAMP variable for reproducible builds. >> ... >> + env = getenv("CPIO_TIMESTAMP"); >> + if (env) >> + default_mtime = atol(env); >> + if (!default_mtime) >> + default_mtime = time(NULL); >> + > > Please pass it via an explicit flag in argv instead of magic env variables. > > The other current use of the environment (the expansion of variables > in the location name) is via explicit reference in the input file. > > Also, please use strol and check that the whole string is consumed. Yeah, I was too lazy. I'll do it properly in v2. Thanks for the review. Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh index 4a43fe1..18cde32 100644 --- a/scripts/gen_initramfs_list.sh +++ b/scripts/gen_initramfs_list.sh @@ -283,6 +283,10 @@ while [ $# -gt 0 ]; do esac done +if test -n "$KBUILD_BUILD_TIMESTAMP"; then + export CPIO_TIMESTAMP=$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s) +fi + # If output_file is set we will generate cpio archive and compress it # we are carefull to delete tmp files if [ ! -z ${output_file} ]; then diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index 7f06884..11f604d 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -22,6 +22,7 @@ static unsigned int offset; static unsigned int ino = 721; +static time_t default_mtime; struct file_handler { const char *type; @@ -102,7 +103,6 @@ static int cpio_mkslink(const char *name, const char *target, unsigned int mode, uid_t uid, gid_t gid) { char s[256]; - time_t mtime = time(NULL); if (name[0] == '/') name++; @@ -114,7 +114,7 @@ static int cpio_mkslink(const char *name, const char *target, (long) uid, /* uid */ (long) gid, /* gid */ 1, /* nlink */ - (long) mtime, /* mtime */ + (long) default_mtime, /* mtime */ (unsigned)strlen(target)+1, /* filesize */ 3, /* major */ 1, /* minor */ @@ -152,7 +152,6 @@ static int cpio_mkgeneric(const char *name, unsigned int mode, uid_t uid, gid_t gid) { char s[256]; - time_t mtime = time(NULL); if (name[0] == '/') name++; @@ -164,7 +163,7 @@ static int cpio_mkgeneric(const char *name, unsigned int mode, (long) uid, /* uid */ (long) gid, /* gid */ 2, /* nlink */ - (long) mtime, /* mtime */ + (long) default_mtime, /* mtime */ 0, /* filesize */ 3, /* major */ 1, /* minor */ @@ -242,7 +241,6 @@ static int cpio_mknod(const char *name, unsigned int mode, unsigned int maj, unsigned int min) { char s[256]; - time_t mtime = time(NULL); if (dev_type == 'b') mode |= S_IFBLK; @@ -259,7 +257,7 @@ static int cpio_mknod(const char *name, unsigned int mode, (long) uid, /* uid */ (long) gid, /* gid */ 1, /* nlink */ - (long) mtime, /* mtime */ + (long) default_mtime, /* mtime */ 0, /* filesize */ 3, /* major */ 1, /* minor */ @@ -529,6 +527,7 @@ int main (int argc, char *argv[]) char *args, *type; int ec = 0; int line_nr = 0; + const char *env; if (2 != argc) { usage(argv[0]); @@ -544,6 +543,12 @@ int main (int argc, char *argv[]) exit(1); } + env = getenv("CPIO_TIMESTAMP"); + if (env) + default_mtime = atol(env); + if (!default_mtime) + default_mtime = time(NULL); + while (fgets(line, LINE_SIZE, cpio_list)) { int type_idx; size_t slen = strlen(line);
gen_init_cpio uses the current time for symlinks, special files and directories. Make it possible to override this with the KBUILD_BUILD_TIMESTAMP variable for reproducible builds. Signed-off-by: Michal Marek <mmarek@suse.cz> --- scripts/gen_initramfs_list.sh | 4 ++++ usr/gen_init_cpio.c | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-)