91zipl: Add new module to update s390x configuration
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
parent
577f109243
commit
ea7ffef13e
|
@ -1001,6 +1001,20 @@ be mounted read only through a higher level transient overlay directory, has
|
||||||
been implemented through the multiple lower layers feature of OverlayFS.
|
been implemented through the multiple lower layers feature of OverlayFS.
|
||||||
|
|
||||||
|
|
||||||
|
ZIPL
|
||||||
|
~~~~
|
||||||
|
**rd.zipl=**__<path to blockdevice>__::
|
||||||
|
Update the dracut commandline with the values found in the
|
||||||
|
_dracut-cmdline.conf_ file on the given device.
|
||||||
|
The values are merged into the existing commandline values
|
||||||
|
and the udev events are regenerated.
|
||||||
|
+
|
||||||
|
[listing]
|
||||||
|
.Example
|
||||||
|
--
|
||||||
|
rd.zipl=UUID=0fb28157-99e3-4395-adef-da3f7d44835a
|
||||||
|
--
|
||||||
|
|
||||||
Plymouth Boot Splash
|
Plymouth Boot Splash
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
**plymouth.enable=0**::
|
**plymouth.enable=0**::
|
||||||
|
|
|
@ -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