diff mbox

[08/34] initramfs: Use KBUILD_BUILD_TIMESTAMP for generated entries

Message ID 1302015561-21047-9-git-send-email-mmarek@suse.cz (mailing list archive)
State New, archived
Headers show

Commit Message

Michal Marek April 5, 2011, 2:58 p.m. UTC
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(-)

Comments

Milton Miller April 5, 2011, 5:31 p.m. UTC | #1
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
Michal Marek April 5, 2011, 6:12 p.m. UTC | #2
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 mbox

Patch

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);