[elbe-devel] [PATCH] hdimg: make sure that the correct partition ends up in menu.lst
Christian Teklenborg
chris at linutronix.de
Tue Apr 13 14:34:41 CEST 2021
The grub-legacy installer loops trough the fstab entries and uses the
last entry to modify menu.lst. This results in always booting from the
last partition. Ensure that the entry with mountpoint "/boot" ends up in
menu.lst.
This closes issue #296.
Signed-off-by: Christian Teklenborg <chris at linutronix.de>
---
elbepack/hdimg.py | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
index bfcbca69..f1a72c78 100644
--- a/elbepack/hdimg.py
+++ b/elbepack/hdimg.py
@@ -244,10 +244,19 @@ class grubinstaller97(grubinstaller_base):
do('cp -a %s %s' % (loopdev, poopdev))
do('kpartx -as %s' % poopdev)
+ bootentry = 0
+
for entry in self.fs.depthlist():
+ if entry.mountpoint.startswith("/boot"):
+ bootentry_label = entry.label
+ bootentry = int(entry.partnum)
do('mount /dev/mapper/poop%sp%d %s' %
(loopnum, entry.partnum, imagemntfs.fname(entry.mountpoint)))
+ if not bootentry:
+ bootentry_label = entry.label
+ bootentry = int(entry.partnum)
+
do("mount --bind /dev %s" % imagemntfs.fname("dev"))
do("mount --bind /proc %s" % imagemntfs.fname("proc"))
do("mount --bind /sys %s" % imagemntfs.fname("sys"))
@@ -267,9 +276,9 @@ class grubinstaller97(grubinstaller_base):
# variable 'entry' (undefined-loop-variable). entry is
# defined in the previous for-loop.
do(r'chroot %s sed -in "s/^# groot=.*$/# groot=\(hd0,%d\)/" %s' %
- (imagemnt, int(entry.partnum) - 1, "/boot/grub/menu.lst"))
+ (imagemnt, bootentry - 1, "/boot/grub/menu.lst"))
do(r'chroot %s sed -in "s/^# kopt=.*$/# kopt=root=LABEL=%s/" %s' %
- (imagemnt, entry.label, "/boot/grub/menu.lst"))
+ (imagemnt, bootentry_label, "/boot/grub/menu.lst"))
chroot(imagemnt, "update-grub")
--
2.20.1
More information about the elbe-devel
mailing list