Browse Source

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
Hannes Reinecke 11 years ago committed by Daniel Molkentin
parent
commit
ea7ffef13e
  1. 14
      dracut.cmdline.7.asc
  2. 33
      modules.d/91zipl/install_zipl_cmdline.sh
  3. 48
      modules.d/91zipl/module-setup.sh
  4. 41
      modules.d/91zipl/parse-zipl.sh

14
dracut.cmdline.7.asc

@ -1001,6 +1001,20 @@ be mounted read only through a higher level transient overlay directory, has @@ -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.


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.enable=0**::

33
modules.d/91zipl/install_zipl_cmdline.sh

@ -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

48
modules.d/91zipl/module-setup.sh

@ -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
}

41
modules.d/91zipl/parse-zipl.sh

@ -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…
Cancel
Save