mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
initramfs: Use KBUILD_BUILD_TIMESTAMP for generated entries
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 it with the KBUILD_BUILD_TIMESTAMP variable for reproducible builds. Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
parent
53e6892c04
commit
a8b8017c34
3 changed files with 50 additions and 15 deletions
|
@ -205,7 +205,8 @@ gcc -W... options for more extensive build-time checking.
|
||||||
KBUILD_BUILD_TIMESTAMP
|
KBUILD_BUILD_TIMESTAMP
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
Setting this to a date string overrides the timestamp used in the
|
Setting this to a date string overrides the timestamp used in the
|
||||||
UTS_VERSION definition (uname -v in the running kernel). The default value
|
UTS_VERSION definition (uname -v in the running kernel). The value has to
|
||||||
|
be a string that can be passed to date -d. The default value
|
||||||
is the output of the date command at one point during build.
|
is the output of the date command at one point during build.
|
||||||
|
|
||||||
KBUILD_BUILD_USER, KBUILD_BUILD_HOST
|
KBUILD_BUILD_USER, KBUILD_BUILD_HOST
|
||||||
|
|
|
@ -287,8 +287,15 @@ done
|
||||||
# we are carefull to delete tmp files
|
# we are carefull to delete tmp files
|
||||||
if [ ! -z ${output_file} ]; then
|
if [ ! -z ${output_file} ]; then
|
||||||
if [ -z ${cpio_file} ]; then
|
if [ -z ${cpio_file} ]; then
|
||||||
|
timestamp=
|
||||||
|
if test -n "$KBUILD_BUILD_TIMESTAMP"; then
|
||||||
|
timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)"
|
||||||
|
if test -n "$timestamp"; then
|
||||||
|
timestamp="-t $timestamp"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)"
|
cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)"
|
||||||
usr/gen_init_cpio ${cpio_list} > ${cpio_tfile}
|
usr/gen_init_cpio $timestamp ${cpio_list} > ${cpio_tfile}
|
||||||
else
|
else
|
||||||
cpio_tfile=${cpio_file}
|
cpio_tfile=${cpio_file}
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
static unsigned int offset;
|
static unsigned int offset;
|
||||||
static unsigned int ino = 721;
|
static unsigned int ino = 721;
|
||||||
|
static time_t default_mtime;
|
||||||
|
|
||||||
struct file_handler {
|
struct file_handler {
|
||||||
const char *type;
|
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)
|
unsigned int mode, uid_t uid, gid_t gid)
|
||||||
{
|
{
|
||||||
char s[256];
|
char s[256];
|
||||||
time_t mtime = time(NULL);
|
|
||||||
|
|
||||||
if (name[0] == '/')
|
if (name[0] == '/')
|
||||||
name++;
|
name++;
|
||||||
|
@ -114,7 +114,7 @@ static int cpio_mkslink(const char *name, const char *target,
|
||||||
(long) uid, /* uid */
|
(long) uid, /* uid */
|
||||||
(long) gid, /* gid */
|
(long) gid, /* gid */
|
||||||
1, /* nlink */
|
1, /* nlink */
|
||||||
(long) mtime, /* mtime */
|
(long) default_mtime, /* mtime */
|
||||||
(unsigned)strlen(target)+1, /* filesize */
|
(unsigned)strlen(target)+1, /* filesize */
|
||||||
3, /* major */
|
3, /* major */
|
||||||
1, /* minor */
|
1, /* minor */
|
||||||
|
@ -152,7 +152,6 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,
|
||||||
uid_t uid, gid_t gid)
|
uid_t uid, gid_t gid)
|
||||||
{
|
{
|
||||||
char s[256];
|
char s[256];
|
||||||
time_t mtime = time(NULL);
|
|
||||||
|
|
||||||
if (name[0] == '/')
|
if (name[0] == '/')
|
||||||
name++;
|
name++;
|
||||||
|
@ -164,7 +163,7 @@ static int cpio_mkgeneric(const char *name, unsigned int mode,
|
||||||
(long) uid, /* uid */
|
(long) uid, /* uid */
|
||||||
(long) gid, /* gid */
|
(long) gid, /* gid */
|
||||||
2, /* nlink */
|
2, /* nlink */
|
||||||
(long) mtime, /* mtime */
|
(long) default_mtime, /* mtime */
|
||||||
0, /* filesize */
|
0, /* filesize */
|
||||||
3, /* major */
|
3, /* major */
|
||||||
1, /* minor */
|
1, /* minor */
|
||||||
|
@ -242,7 +241,6 @@ static int cpio_mknod(const char *name, unsigned int mode,
|
||||||
unsigned int maj, unsigned int min)
|
unsigned int maj, unsigned int min)
|
||||||
{
|
{
|
||||||
char s[256];
|
char s[256];
|
||||||
time_t mtime = time(NULL);
|
|
||||||
|
|
||||||
if (dev_type == 'b')
|
if (dev_type == 'b')
|
||||||
mode |= S_IFBLK;
|
mode |= S_IFBLK;
|
||||||
|
@ -259,7 +257,7 @@ static int cpio_mknod(const char *name, unsigned int mode,
|
||||||
(long) uid, /* uid */
|
(long) uid, /* uid */
|
||||||
(long) gid, /* gid */
|
(long) gid, /* gid */
|
||||||
1, /* nlink */
|
1, /* nlink */
|
||||||
(long) mtime, /* mtime */
|
(long) default_mtime, /* mtime */
|
||||||
0, /* filesize */
|
0, /* filesize */
|
||||||
3, /* major */
|
3, /* major */
|
||||||
1, /* minor */
|
1, /* minor */
|
||||||
|
@ -460,7 +458,7 @@ static int cpio_mkfile_line(const char *line)
|
||||||
static void usage(const char *prog)
|
static void usage(const char *prog)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage:\n"
|
fprintf(stderr, "Usage:\n"
|
||||||
"\t%s <cpio_list>\n"
|
"\t%s [-t <timestamp>] <cpio_list>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<cpio_list> is a file containing newline separated entries that\n"
|
"<cpio_list> is a file containing newline separated entries that\n"
|
||||||
"describe the files to be included in the initramfs archive:\n"
|
"describe the files to be included in the initramfs archive:\n"
|
||||||
|
@ -491,7 +489,11 @@ static void usage(const char *prog)
|
||||||
"nod /dev/console 0600 0 0 c 5 1\n"
|
"nod /dev/console 0600 0 0 c 5 1\n"
|
||||||
"dir /root 0700 0 0\n"
|
"dir /root 0700 0 0\n"
|
||||||
"dir /sbin 0755 0 0\n"
|
"dir /sbin 0755 0 0\n"
|
||||||
"file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n",
|
"file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n"
|
||||||
|
"\n"
|
||||||
|
"<timestamp> is time in seconds since Epoch that will be used\n"
|
||||||
|
"as mtime for symlinks, special files and directories. The default\n"
|
||||||
|
"is to use the current time for these entries.\n",
|
||||||
prog);
|
prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,17 +531,42 @@ int main (int argc, char *argv[])
|
||||||
char *args, *type;
|
char *args, *type;
|
||||||
int ec = 0;
|
int ec = 0;
|
||||||
int line_nr = 0;
|
int line_nr = 0;
|
||||||
|
const char *filename;
|
||||||
|
|
||||||
if (2 != argc) {
|
default_mtime = time(NULL);
|
||||||
|
while (1) {
|
||||||
|
int opt = getopt(argc, argv, "t:h");
|
||||||
|
char *invalid;
|
||||||
|
|
||||||
|
if (opt == -1)
|
||||||
|
break;
|
||||||
|
switch (opt) {
|
||||||
|
case 't':
|
||||||
|
default_mtime = strtol(optarg, &invalid, 10);
|
||||||
|
if (!*optarg || *invalid) {
|
||||||
|
fprintf(stderr, "Invalid timestamp: %s\n",
|
||||||
|
optarg);
|
||||||
|
usage(argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
case '?':
|
||||||
|
usage(argv[0]);
|
||||||
|
exit(opt == 'h' ? 0 : 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc - optind != 1) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
filename = argv[optind];
|
||||||
if (!strcmp(argv[1], "-"))
|
if (!strcmp(filename, "-"))
|
||||||
cpio_list = stdin;
|
cpio_list = stdin;
|
||||||
else if (! (cpio_list = fopen(argv[1], "r"))) {
|
else if (!(cpio_list = fopen(filename, "r"))) {
|
||||||
fprintf(stderr, "ERROR: unable to open '%s': %s\n\n",
|
fprintf(stderr, "ERROR: unable to open '%s': %s\n\n",
|
||||||
argv[1], strerror(errno));
|
filename, strerror(errno));
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue