--- zdev/dracut/96zdev-live/module-setup.sh | 32 +++++++++++++++++++++++++ zdev/dracut/96zdev-live/parse-zdev-live.sh | 36 +++++++++++++++++++++++++++++ zdev/dracut/96zdev-live/write-udev-live.sh | 11 ++++++++ zdev/dracut/Makefile | 15 ++++++++++-- 4 files changed, 92 insertions(+), 2 deletions(-) --- /dev/null +++ b/zdev/dracut/96zdev-live/module-setup.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# called by dracut +check() { + arch=${DRACUT_ARCH:-$(uname -m)} + [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1 + + require_binaries chzdev || return 1 + + [[ $hostonly ]] || return 0 + + # or on request + return 255 +} + +# called by dracut +depends() { + echo bash + return 0 +} + +# called by dracut +installkernel() { + instmods ctcm lcs qeth qeth_l2 qeth_l3 dasd_diag_mod dasd_eckd_mod dasd_fba_mod +} + +# called by dracut +install() { + inst_hook cmdline 41 "$moddir/parse-zdev-live.sh" + inst_hook cleanup 41 "$moddir/write-udev-live.sh" + inst_multiple chzdev +} --- /dev/null +++ b/zdev/dracut/96zdev-live/parse-zdev-live.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# 96zdev-live/parse-zdev-live.sh +# Parse the kernel command line for rd.zdev kernel parameters. These +# parameters are evaluated and used to configure z Systems specific devices +# with chzdev(8), especially for use on live/installation type media. +# Note: this is only active on no-hostonly initrds (by default). +# +# Format: +# rd.zdev=TYPE,DEVICE[,SETTINGS] +# +# where +# +# TYPE: all device types supported by chzdev(8), like qeth and dasd +# DEVICE: device specification as supported by chzdev(8) '--enable', +# with the exception of specifying multiple devices, which +# need to be separated by commas. Channel group members +# (or zFCP parameters) in turn are separated by colons. +# SETTINGS: Settings are positional arguments of chzdev in the form +# KEY=VALUE separated by commas. + +zdev_enable="--persistent --enable" +zdev_base_args="--yes --no-root-update --no-settle" + +for zdevs in $(getargs rd.zdev) ; do + IFS=',' read -r -a zdev <<< "$zdevs" + if [ -n "$zdev" ] && [ "$zdev" = "no-auto" -o "$zdev" = "auto" ] ; then + : # ignore, as it's handled by 95zdev + elif [ -z "$zdev" ] || [ -z "${zdev[1]}" ] ; then + warn "Unsupported usage of rd.zdev=$zdevs" + else + info "+ chzdev $zdev_enable [...] ${zdev[@]}" + chzdev $zdev_enable $zdev_base_args "${zdev[@]}" + fi +done + --- /dev/null +++ b/zdev/dracut/96zdev-live/write-udev-live.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# +# 96zdev-live/write-udev-live.sh +# Copy udeve rules generated by chzdev for device activation starting with 41 +# to a *writable* /sysroot -- this is primarily useful for live/installation- +# type media (and by default only active on no-hostonly initrds) +# + +if [ -w /sysroot/etc/udev/rules.d ]; then + cp -p /etc/udev/rules.d/41-* /sysroot/etc/udev/rules.d +fi --- a/zdev/dracut/Makefile +++ b/zdev/dracut/Makefile @@ -3,17 +3,23 @@ ZDEVDIR := 95zdev ZDEVKDUMPDIR := 95zdev-kdump +ZDEVLIVEDIR := 96zdev-live # HAVE_DRACUT # -# This install time parameter determines whether the zdev dracut module is -# installed (HAVE_DRACUT=1) or not (default). When installed, the module +# This install time parameter determines whether the zdev dracut modules are +# installed (HAVE_DRACUT=1) or not (default). When installed, the 95zdev module # performs the following functions when dracut is run: # # - copy the persistent root device configuration to the initial ram disk # - install a boot-time hook to apply firmware-provided configuration data # to the system # +# The 96zdev-live module performs the following functions when dracut is run: +# +# - install a boot-time hook to apply command-line-provided configuration data +# to a no-hostonly built initial ram disk for use in live/installation media +# ifeq ($(HAVE_DRACUT),1) install: $(INSTALL) -m 755 -d $(DESTDIR)$(DRACUTMODDIR)/ @@ -29,4 +35,9 @@ $(INSTALL) -m 755 -d $(DESTDIR)$(DRACUTMODDIR)/$(ZDEVKDUMPDIR) $(INSTALL) -m 755 $(ZDEVKDUMPDIR)/module-setup.sh \ $(DESTDIR)$(DRACUTMODDIR)/$(ZDEVKDUMPDIR)/ + $(INSTALL) -m 755 -d $(DESTDIR)$(DRACUTMODDIR)/$(ZDEVLIVEDIR) + $(INSTALL) -m 755 $(ZDEVLIVEDIR)/module-setup.sh \ + $(ZDEVLIVEDIR)/parse-zdev-live.sh \ + $(ZDEVLIVEDIR)/write-udev-live.sh \ + $(DESTDIR)$(DRACUTMODDIR)/$(ZDEVLIVEDIR)/ endif