50838ff661
Move content from stx-utils into stx-integ or stx-update Packages will be relocated to stx-update: enable-dev-patch extras stx-integ: config-files/ io-scheduler filesystem/ filesystem-scripts grub/ grubby logging/ logmgmt tools/ collector monitor-tools tools/engtools/ hostdata-collectors parsers utilities/ build-info branding (formerly wrs-branding) platform-util Change-Id: If77fdabde9ff43b5e4381837283bac1d39112c58 Story: 2002801 Task: 22687 Signed-off-by: Scott Little <scott.little@windriver.com>
264 lines
7.3 KiB
Diff
264 lines
7.3 KiB
Diff
From b2fc58bcd1f18cbc3e0b3d303e9f2132d0e36cd8 Mon Sep 17 00:00:00 2001
|
|
From: Bin Qian <bin.qian@windriver.com>
|
|
Date: Tue, 13 Feb 2018 22:48:54 -0500
|
|
Subject: [PATCH 1/1] Add support for updating grub.cfg with multiboot 2
|
|
|
|
---
|
|
Makefile | 5 +++
|
|
__init__.py | 8 ++++
|
|
grub-cfg-update | 17 ++++++++
|
|
grub_cfg_update.py | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
new-kernel-pkg | 33 ++++++++++----
|
|
5 files changed, 181 insertions(+), 8 deletions(-)
|
|
create mode 100644 __init__.py
|
|
create mode 100644 grub-cfg-update
|
|
create mode 100644 grub_cfg_update.py
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index e021f35..93fa41b 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -56,6 +56,11 @@ install: all
|
|
install -m 755 grubby $(DESTDIR)$(PREFIX)/sbin ; \
|
|
install -m 644 grubby.8 $(DESTDIR)/$(mandir)/man8 ; \
|
|
fi
|
|
+ mkdir -p $(DESTDIR)/usr/lib64/python2.7/site-packages/grubby
|
|
+ install -m 644 grub_cfg_update.py $(DESTDIR)/usr/lib64/python2.7/site-packages/grubby/grub_cfg_update.py
|
|
+ install -m 644 __init__.py $(DESTDIR)/usr/lib64/python2.7/site-packages/grubby/__init__.py
|
|
+ install -m 500 grub-cfg-update $(DESTDIR)$(PREFIX)/sbin/grub-cfg-update
|
|
+
|
|
|
|
grubby:: $(OBJECTS)
|
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(grubby_LIBS)
|
|
diff --git a/__init__.py b/__init__.py
|
|
new file mode 100644
|
|
index 0000000..5f30af6
|
|
--- /dev/null
|
|
+++ b/__init__.py
|
|
@@ -0,0 +1,8 @@
|
|
+#!/usr/bin/env python
|
|
+#
|
|
+# Copyright (c) 2018 Wind River Systems, Inc.
|
|
+# SPDX-License-Identifier: Apache-2.0
|
|
+#
|
|
+#
|
|
+#
|
|
+#
|
|
\ No newline at end of file
|
|
diff --git a/grub-cfg-update b/grub-cfg-update
|
|
new file mode 100644
|
|
index 0000000..5e457e9
|
|
--- /dev/null
|
|
+++ b/grub-cfg-update
|
|
@@ -0,0 +1,17 @@
|
|
+#!/usr/bin/env python
|
|
+
|
|
+"""
|
|
+Copyright (c) 2018 Wind River Systems, Inc.
|
|
+ SPDX-License-Identifier: Apache-2.0
|
|
+
|
|
+
|
|
+
|
|
+"""
|
|
+
|
|
+import sys
|
|
+
|
|
+from grubby.grub_cfg_update import main
|
|
+
|
|
+if __name__ == "__main__":
|
|
+ main()
|
|
+
|
|
diff --git a/grub_cfg_update.py b/grub_cfg_update.py
|
|
new file mode 100644
|
|
index 0000000..f5cd174
|
|
--- /dev/null
|
|
+++ b/grub_cfg_update.py
|
|
@@ -0,0 +1,126 @@
|
|
+#!/usr/bin/env python
|
|
+#
|
|
+# Copyright (c) 2018 Wind River Systems, Inc.
|
|
+# SPDX-License-Identifier: Apache-2.0
|
|
+#
|
|
+#
|
|
+#
|
|
+#
|
|
+import sys
|
|
+import argparse
|
|
+import os.path
|
|
+import re
|
|
+import ntpath
|
|
+
|
|
+
|
|
+LINUX_KERNEL_RE = "^[ \t]*module2[ \t]{1,}/vmlinuz-[^ \n\t]*"
|
|
+INITRD_RE = "^[ \t]*module2[ \t]{1,}/initramfs-[^ \n\t]*"
|
|
+
|
|
+
|
|
+def is_title(line):
|
|
+ m = re.search('^[ ]*menuentry ', line)
|
|
+ if m:
|
|
+ return True
|
|
+ return False
|
|
+
|
|
+
|
|
+def update_title(line, ver):
|
|
+ m = re.search("Linux [^ \n\t']*", line)
|
|
+ if not m:
|
|
+ print "Title pattern not understandable, not updated"
|
|
+ return line
|
|
+ new_line = re.sub("Linux [^ \n\t']*", "Linux %s" % ver, line)
|
|
+ return new_line
|
|
+
|
|
+
|
|
+def is_kernel(line):
|
|
+ m = re.search(LINUX_KERNEL_RE, line)
|
|
+ if m:
|
|
+ return True
|
|
+ return False
|
|
+
|
|
+
|
|
+def update_kernel(line, kernel):
|
|
+ kernel_name = ntpath.basename(kernel)
|
|
+ new_line = re.sub(LINUX_KERNEL_RE,
|
|
+ " module2 /%s" % kernel_name,
|
|
+ line)
|
|
+ return new_line
|
|
+
|
|
+
|
|
+def is_initrd(line):
|
|
+ m = re.search(INITRD_RE, line)
|
|
+ if m:
|
|
+ return True
|
|
+ return False
|
|
+
|
|
+
|
|
+def update_initrd(line, initrd):
|
|
+ initrd_name = ntpath.basename(initrd)
|
|
+ new_line = re.sub(INITRD_RE,
|
|
+ " module2 /%s" % initrd_name,
|
|
+ line)
|
|
+ return new_line
|
|
+
|
|
+
|
|
+def convert_line(line, version):
|
|
+ pattern = "^[ \t]*echo[ \t]*['\"]Loading Linux [^ \n\t]*"
|
|
+ m = re.search(pattern, line)
|
|
+ if not m:
|
|
+ return line
|
|
+
|
|
+ return " echo 'Loading Linux %s ...'\n" % version
|
|
+
|
|
+
|
|
+def update_cfg(cfg, kernel, initramfs, ver, cfg_out):
|
|
+ if not os.path.isfile(cfg):
|
|
+ print "grub config file %s not found\n" % cfg
|
|
+ sys.exit(-1)
|
|
+
|
|
+ if not os.path.isfile(kernel):
|
|
+ print "specified kernel file %s not found\n" % kernel
|
|
+ sys.exit(-1)
|
|
+
|
|
+ if not os.path.isfile(initramfs):
|
|
+ print "specified initrd file %s not found\n" % initramfs
|
|
+ sys.exit(-1)
|
|
+
|
|
+ new_file_content = []
|
|
+ with open(cfg) as f:
|
|
+ for line in f:
|
|
+ if is_title(line):
|
|
+ new_line = update_title(line, ver)
|
|
+ print new_line
|
|
+ elif is_kernel(line):
|
|
+ new_line = update_kernel(line, kernel)
|
|
+ print new_line
|
|
+ elif is_initrd(line):
|
|
+ new_line = update_initrd(line, initramfs)
|
|
+ print new_line
|
|
+ else:
|
|
+ new_line = convert_line(line, ver)
|
|
+ print new_line
|
|
+
|
|
+ new_file_content.append(new_line)
|
|
+ with open(cfg_out, 'w') as f:
|
|
+ for line in new_file_content:
|
|
+ f.write("%s" % line)
|
|
+
|
|
+
|
|
+def main():
|
|
+ try:
|
|
+ parser = argparse.ArgumentParser(description='Update tboot enabled grub config')
|
|
+ parser.add_argument('cfg', help='original grub.cfg file path')
|
|
+ parser.add_argument('kernel', help='kernel file path')
|
|
+ parser.add_argument('initramfs', help='initramfs file path')
|
|
+ parser.add_argument('version', help='new version of kernel')
|
|
+ parser.add_argument('--cfg-out', help='updated grub.cfg target file path')
|
|
+ args = parser.parse_args()
|
|
+ cfg_out = args.cfg_out
|
|
+ if cfg_out is None:
|
|
+ cfg_out = args.cfg
|
|
+
|
|
+ update_cfg(args.cfg, args.kernel, args.initramfs, args.version, cfg_out)
|
|
+ except Exception as e:
|
|
+ print e
|
|
+ sys.exit(-1)
|
|
diff --git a/new-kernel-pkg b/new-kernel-pkg
|
|
index 977ef2d..1bb0a64 100755
|
|
--- a/new-kernel-pkg
|
|
+++ b/new-kernel-pkg
|
|
@@ -185,6 +185,11 @@ install() {
|
|
return
|
|
fi
|
|
|
|
+ grep -q 'tboot=true' /proc/cmdline 2>/dev/null
|
|
+ if [ $? == 0 ] ; then
|
|
+ return
|
|
+ fi
|
|
+
|
|
INITRD=""
|
|
if [ -f $initrdfile ]; then
|
|
[ -n "$verbose" ] && echo "found $initrdfile and using it with grubby"
|
|
@@ -334,6 +339,11 @@ remove() {
|
|
return
|
|
fi
|
|
|
|
+ grep -q 'tboot=true' /proc/cmdline 2>/dev/null
|
|
+ if [ $? == 0 ] ; then
|
|
+ return
|
|
+ fi
|
|
+
|
|
local files
|
|
local f
|
|
files="/etc/kernel/prerm.d/*[^~] /etc/kernel/prerm.d/$version/*[^~]"
|
|
@@ -483,14 +493,21 @@ update() {
|
|
fi
|
|
|
|
if [ -n "$cfgGrub2Efi" ]; then
|
|
- [ -n "$verbose" ] && echo "updating $version from $grub2EfiConfig"
|
|
- ARGS="--grub2 -c $grub2EfiConfig --efi --update-kernel=$kernelImage \
|
|
- $INITRD ${kernargs:+--args=\"$kernargs\"} \
|
|
- ${removeargs:+--remove-args=\"$removeargs\"} \
|
|
- --title=\"$title\$debugtitle\""
|
|
-
|
|
- rungrubby ${ARGS}
|
|
- rungrubby --debug ${ARGS}
|
|
+ grep -q 'tboot=true' /proc/cmdline 2>/dev/null
|
|
+ if [ $? == 0 ] ; then
|
|
+ [ -n "$verbose" ] && echo "calling grub-cfg-update $grub2EfiConfig $kernelImage $initrdfile $version"
|
|
+ grub-cfg-update $grub2EfiConfig $kernelImage $initrdfile $version
|
|
+ return
|
|
+ else
|
|
+ [ -n "$verbose" ] && echo "updating $version from $grub2EfiConfig"
|
|
+ ARGS="--grub2 -c $grub2EfiConfig --efi --update-kernel=$kernelImage \
|
|
+ $INITRD ${kernargs:+--args=\"$kernargs\"} \
|
|
+ ${removeargs:+--remove-args=\"$removeargs\"} \
|
|
+ --title=\"$title\$debugtitle\""
|
|
+
|
|
+ rungrubby ${ARGS}
|
|
+ rungrubby --debug ${ARGS}
|
|
+ fi
|
|
else
|
|
[ -n "$verbose" ] && echo "$grub2EfiConfig does not exist, not running grubby"
|
|
fi
|
|
--
|
|
1.8.3.1
|
|
|