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 @@ |
|||||||
|
#!/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 @@ |
|||||||
|
#!/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 @@ |
|||||||
|
#!/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