aboutsummaryrefslogtreecommitdiffstats
path: root/systemd
diff options
context:
space:
mode:
authorDavid Kaspar [Dee'Kej] <dkaspar@redhat.com>2018-05-14 14:52:55 +0200
committerDee'Kej <deekej@linuxmail.org>2018-05-25 12:14:28 +0200
commited219f6483192cb7101e5c17f1c5db7be714b187 (patch)
tree1a153e324ed7465960e785fc93891f61c5fca162 /systemd
parentc29fbec03a13d7cfaac46af72aafc44f78902cc4 (diff)
downloadinitscripts-ed219f6483192cb7101e5c17f1c5db7be714b187.tar
initscripts-ed219f6483192cb7101e5c17f1c5db7be714b187.tar.gz
initscripts-ed219f6483192cb7101e5c17f1c5db7be714b187.tar.bz2
initscripts-ed219f6483192cb7101e5c17f1c5db7be714b187.tar.xz
initscripts-ed219f6483192cb7101e5c17f1c5db7be714b187.zip
rhel-autorelabel: set UEFI boot order (BootNext) same as BootCurrent
This can be useful when user has this UEFI boot order e.g.: Windows | grub | Linux And decides to boot into grub/Linux. In case the autorelabel service is being run after the boot into grub, then the reboot after the autorelabel is done will cause user to boot into Windows again... This change should make the behaviour more intuitive for the user.
Diffstat (limited to 'systemd')
-rwxr-xr-xsystemd/rhel-autorelabel26
1 files changed, 26 insertions, 0 deletions
diff --git a/systemd/rhel-autorelabel b/systemd/rhel-autorelabel
index 2c2099f2..d06f869c 100755
--- a/systemd/rhel-autorelabel
+++ b/systemd/rhel-autorelabel
@@ -5,6 +5,30 @@
. /etc/init.d/functions
+# If the user has this (or similar) UEFI boot order:
+#
+# Windows | grub | Linux
+#
+# And decides to boot into grub/Linux, then the reboot at the end of autorelabel
+# would cause the system to boot into Windows again, if the autorelabel was run.
+#
+# This function restores the UEFI boot order, so the user will boot into the
+# previously set (and expected) partition.
+efi_set_boot_next() {
+ # NOTE: The [ -x /usr/sbin/efibootmgr ] test is not sufficent -- it could
+ # succeed even on system which is not EFI-enabled...
+ if ! efibootmgr > /dev/null 2>&1; then
+ return
+ fi
+
+ # NOTE: It it possible that some other services might be setting the
+ # 'BootNext' item for any reasons, and we shouldn't override it if so.
+ if ! efibootmgr | grep --quiet -e 'BootNext'; then
+ CURRENT_BOOT="$(efibootmgr | grep -e 'BootCurrent' | sed -re 's/(^.+:[[:space:]]*)([[:xdigit:]]+)/\2/')"
+ efibootmgr -n "${CURRENT_BOOT}" > /dev/null 2>&1
+ fi
+}
+
relabel_selinux() {
# if /sbin/init is not labeled correctly this process is running in the
# wrong context, so a reboot will be required after relabel
@@ -31,8 +55,10 @@ relabel_selinux() {
[ -x "/usr/sbin/quotaoff" ] && /usr/sbin/quotaoff -aug
/sbin/fixfiles $FORCE restore > /dev/null 2>&1
fi
+
rm -f /.autorelabel
/usr/lib/dracut/dracut-initramfs-restore
+ efi_set_boot_next
sync
systemctl --force reboot
}