Browse Source
Add new module to update the dracut commandline values during booting with the values found in the file dracut-cmdline.conf on the device specified by rd.zipl. Signed-off-by: Hannes Reinecke <hare@suse.de> Contrary to the original patch, this one has been modified to check for /boot/zipl, the location of the first stage kernel in indirect boot, in order not to install on systems booting directly via zipl. Signed-off-by: Daniel Molkentin <daniel.molkentin@suse.com>master


4 changed files with 136 additions and 0 deletions
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash |
||||
|
||||
DEV=$1 |
||||
MNT=/boot/zipl |
||||
|
||||
if [ -z "$DEV" ] ; then |
||||
echo "No IPL device given" |
||||
> /tmp/install.zipl.cmdline-done |
||||
exit 1 |
||||
fi |
||||
|
||||
[ -d ${MNT} ] || mkdir -p ${MNT} |
||||
|
||||
mount -o ro ${DEV} ${MNT} |
||||
if [ "$?" != "0" ] ; then |
||||
echo "Failed to mount ${MNT}" |
||||
> /tmp/install.zipl.cmdline-done |
||||
exit 1 |
||||
fi |
||||
|
||||
if [ -f ${MNT}/dracut-cmdline.conf ] ; then |
||||
cp ${MNT}/dracut-cmdline.conf /etc/cmdline.d/99zipl.conf |
||||
fi |
||||
|
||||
umount ${MNT} |
||||
|
||||
if [ -f /etc/cmdline.d/99zipl.conf ] ; then |
||||
systemctl restart dracut-cmdline.service |
||||
systemctl restart systemd-udev-trigger.service |
||||
fi |
||||
> /tmp/install.zipl.cmdline-done |
||||
|
||||
exit 0 |
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash |
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- |
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh |
||||
|
||||
# called by dracut |
||||
check() { |
||||
local _arch=$(uname -m) |
||||
# Only for systems on s390 using indirect booting via userland grub |
||||
[ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1 |
||||
# /boot/zipl contains a first stage kernel used to launch grub in initrd |
||||
[ -d /boot/zipl ] || return 1 |
||||
return 0 |
||||
} |
||||
|
||||
# called by dracut |
||||
depends() { |
||||
echo grub2 |
||||
return 0 |
||||
} |
||||
|
||||
# called by dracut |
||||
installkernel() { |
||||
instmods ext2 |
||||
} |
||||
|
||||
# called by dracut |
||||
cmdline() { |
||||
local _boot_zipl |
||||
|
||||
_boot_zipl=$(sed -n 's/\(.*\)\w*\/boot\/zipl.*/\1/p' /etc/fstab) |
||||
if [ -n "$_boot_zipl" ] ; then |
||||
echo "rd.zipl=${_boot_zipl}" |
||||
fi |
||||
} |
||||
|
||||
# called by dracut |
||||
install() { |
||||
inst_multiple mount umount |
||||
|
||||
inst_hook cmdline 91 "$moddir/parse-zipl.sh" |
||||
inst "${moddir}/install_zipl_cmdline.sh" /sbin/install_zipl_cmdline.sh |
||||
if [[ $hostonly_cmdline == "yes" ]] ; then |
||||
local _zipl=$(cmdline) |
||||
|
||||
[[ $_zipl ]] && printf "%s\n" "$_zipl" |
||||
fi |
||||
dracut_need_initqueue |
||||
} |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh |
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- |
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh |
||||
|
||||
zipl_arg=$(getarg rd.zipl) |
||||
|
||||
if [ -n "$zipl_arg" ] ; then |
||||
case "$zipl_arg" in |
||||
LABEL=*) \ |
||||
zipl_env="ENV{ID_FS_LABEL}" |
||||
zipl_val=${zipl_arg#LABEL=} |
||||
zipl_arg="/dev/disk/by-label/${zipl_val}" |
||||
;; |
||||
UUID=*) \ |
||||
zipl_env="ENV{ID_FS_UUID}" |
||||
zipl_val=${zipl_arg#UUID=} |
||||
zipl_arg="/dev/disk/by-uuid/${zipl_val}" |
||||
;; |
||||
/dev/mapper/*) \ |
||||
zipl_env="ENV{DM_NAME}" |
||||
zipl_val=${zipl_arg#/dev/mapper/} |
||||
;; |
||||
/dev/disk/by-*) \ |
||||
zipl_env="SYMLINK" |
||||
zipl_val=${zipl_arg#/dev/} |
||||
;; |
||||
/dev/*) \ |
||||
zipl_env="KERNEL" |
||||
zipl_val=${zipl_arg} |
||||
;; |
||||
esac |
||||
if [ "$zipl_env" ] ; then |
||||
{ |
||||
printf 'ACTION=="add|change", SUBSYSTEM=="block", %s=="%s", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/install_zipl_cmdline.sh %s"\n' \ |
||||
${zipl_env} ${zipl_val} ${zipl_arg} |
||||
echo "[ -f /tmp/install.zipl.cmdline-done ]" >$hookdir/initqueue/finished/wait-zipl-conf.sh |
||||
} >> /etc/udev/rules.d/99zipl-conf.rules |
||||
cat /etc/udev/rules.d/99zipl-conf.rules |
||||
fi |
||||
wait_for_dev -n "$zipl_arg" |
||||
fi |
Loading…
Reference in new issue