Skip to contentSkip to conversation

SUSE S/390 integration

PATCH In review Hannes Reinecke 2 participants 15 messages Nov 29, 2013 – Jan 28, 2014 1 message not in the archive Kbuild

lore
Share & tools
lore
#0 lore raw

v2 cover SUSE S/390 integration

SUSE is keeping the S/390 device configuration in udev rules, on rule per device.
And it doesn't have the RH-specific configuration scripts (obviously). This patchset abstracts away the RH-specific configuration and adds modules to make dracut boot on SLES installations.

I've also added a new SUSE-specific mkinitrd compability script, as the SUSE mkinitrd is quite different.

And some minor fixes which came up during package build.

Please apply.

Hannes Reinecke (13):
95dasd: Install kernel modules only once
95dasd: Only install module if normalize_dasd_arg is present 95dasd_mod: make dasd_cio_free optional
95zfcp: Make installation optional
95znet: Make installation optional
Add DASD configuration for SuSE
Add zfcp scripts for SUSE
Make logfile configurable
mkinitrd-suse: Add SUSE compability wrapper for dracut mkinitrd-suse.8.asc: Add manpage for SUSE compat mkinitrd Fixup keymap setting for openSUSE
Fixup script permissions
Remove shebang from shell-completion files

 Makefile                                 |   1 +
 dracut-bash-completion.sh                |   2 +-
 dracut-functions.sh                      |  28 +++
 dracut.8.asc                             |   6 +
 dracut.sh                                |   4 +
 lsinitrd-bash-completion.sh              |   2 +-
 mkinitrd-suse.8.asc                      | 106 +++++++++
 mkinitrd-suse.sh                         | 354 +++++++++++++++++++++++++++++++
 modules.d/03modsign/load-modsign-keys.sh |   0
 modules.d/03modsign/module-setup.sh      |   0
 modules.d/10i18n/module-setup.sh         |   3 +
 modules.d/40network/net-lib.sh           |   0
 modules.d/40network/parse-vlan.sh        |   0
 modules.d/50drm/module-setup.sh          |   0
 modules.d/91crypt-loop/crypt-loop-lib.sh |   0
 modules.d/95dasd/module-setup.sh         |   7 +-
 modules.d/95dasd_mod/module-setup.sh     |   3 +-
 modules.d/95dasd_mod/parse-dasd-mod.sh   |   4 +-
 modules.d/95dasd_rules/module-setup.sh   |  27 +++
 modules.d/95dasd_rules/parse-dasd.sh     |  56 +++++
 modules.d/95zfcp/module-setup.sh         |   4 +-
 modules.d/95zfcp_rules/module-setup.sh   |  25 +++
 modules.d/95zfcp_rules/parse-zfcp.sh     |  65 ++++++
 modules.d/95znet/module-setup.sh         |   1 +
 modules.d/98pollcdrom/pollcdrom.sh       |   0
 25 files changed, 686 insertions(+), 12 deletions(-)
 create mode 100644 mkinitrd-suse.8.asc
 create mode 100755 mkinitrd-suse.sh
 mode change 100644 => 100755 modules.d/03modsign/load-modsign-keys.sh
 mode change 100644 => 100755 modules.d/03modsign/module-setup.sh
 mode change 100644 => 100755 modules.d/40network/net-lib.sh
 mode change 100644 => 100755 modules.d/40network/parse-vlan.sh
 mode change 100644 => 100755 modules.d/50drm/module-setup.sh
 mode change 100644 => 100755 modules.d/91crypt-loop/crypt-loop-lib.sh
 create mode 100755 modules.d/95dasd_rules/module-setup.sh
 create mode 100755 modules.d/95dasd_rules/parse-dasd.sh
 create mode 100755 modules.d/95zfcp_rules/module-setup.sh
 create mode 100755 modules.d/95zfcp_rules/parse-zfcp.sh
 mode change 100644 => 100755 modules.d/98pollcdrom/pollcdrom.sh
Signature · 1 line
1.8.1.4

A message that is not in the archive (sent off-list or not yet received): 1385727234-5001-1-git-send-email-hare-l3A5Bk7waGM@public.gmane.org

#2 lore raw

PATCH v2 1/13 95dasd: Install kernel modules only once

Move kernel module selection to 95dasd_mod and make 95dasd depend on that module.

---
 modules.d/95dasd/module-setup.sh | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
modules.d/95dasd/module-setup.sh +1 -5
index 861df29..16207bc 100755
@@ -11,15 +11,11 @@ check() {
 
 # called by dracut
 depends() {
+    echo "dasd_mod"
     return 0
 }
 
 # called by dracut
-installkernel() {
-    instmods dasd_mod dasd_eckd_mod dasd_fba_mod dasd_diag_mod
-}
-
-# called by dracut
 install() {
     inst_hook cmdline 30 "$moddir/parse-dasd.sh"
     inst_multiple dasdinfo dasdconf.sh normalize_dasd_arg
Signature · 1 line
1.8.1.4
#3 lore raw

PATCH v2 2/13 95dasd: Only install module if normalize_dasd_arg is present

In reply to a message not in the archive

normalize_dasd_arg is a RedHat specific script, so no point installing this module if the script isn't present.

---
 modules.d/95dasd/module-setup.sh | 1 +
 1 file changed, 1 insertion(+)
modules.d/95dasd/module-setup.sh +1 -0
index 16207bc..9c93d40 100755
@@ -5,6 +5,7 @@
 # called by dracut
 check() {
     local _arch=$(uname -m)
+    [ -x /sbin/normalize_dasd_arg ] || return 1
     [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
     return 0
 }
Signature · 1 line
1.8.1.4
#4 lore raw

PATCH v2 3/13 95dasd_mod: make dasd_cio_free optional

In reply to a message not in the archive

dasd_cio_free is a RedHat-specific tool, so make it optional.

---
 modules.d/95dasd_mod/module-setup.sh   | 3 ++-
 modules.d/95dasd_mod/parse-dasd-mod.sh | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)
modules.d/95dasd_mod/module-setup.sh +2 -1
index 011010d..8fde525 100755
@@ -23,6 +23,7 @@ installkernel() {
 # called by dracut
 install() {
     inst_hook cmdline 31 "$moddir/parse-dasd-mod.sh"
-    inst_multiple dasd_cio_free grep sed seq
+    inst_multiple grep sed seq
+    inst_multiple -o dasd_cio_free
 }
 
modules.d/95dasd_mod/parse-dasd-mod.sh +3 -1
index 87c88ed..0236d12 100755
@@ -15,4 +15,6 @@ if [ -n "$mod_args" ]; then
 fi
 
 unset dasd_arg
-dasd_cio_free
+if [ -x /sbin/dasd_cio_free ] ; then
+    dasd_cio_free
+fi
Signature · 1 line
1.8.1.4
#5 lore raw

PATCH v2 4/13 95zfcp: Make installation optional

In reply to a message not in the archive

zfcp_cio_free is a RedHat-specific tool, so do not install this module if the program isn't present.

---
 modules.d/95zfcp/module-setup.sh | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
modules.d/95zfcp/module-setup.sh +1 -3
index 5d9b506..dfbeed5 100755
@@ -5,6 +5,7 @@
 # called by dracut
 check() {
     arch=$(uname -m)
+    [ -x /sbin/zfcp_cio_free ] || return 1
     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
 
     return 0
@@ -12,9 +13,6 @@ check() {
 
 # called by dracut
 depends() {
-    arch=$(uname -m)
-    [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
-
     return 0
 }
 
Signature · 1 line
1.8.1.4
#6 lore raw

PATCH v2 5/13 95znet: Make installation optional

In reply to a message not in the archive

znet_cio_free is a RedHat-specific tool, so do not install this module on systems where the program is missing.

---
 modules.d/95znet/module-setup.sh | 1 +
 1 file changed, 1 insertion(+)
modules.d/95znet/module-setup.sh +1 -0
index 4c211a9..5012b77 100755
@@ -5,6 +5,7 @@
 # called by dracut
 check() {
     arch=$(uname -m)
+    [ -z /sbin/znet_cio_free ] || return 1
     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
 
     return 0
Signature · 1 line
1.8.1.4
#7 lore raw

PATCH v2 6/13 Add DASD configuration for SuSE

In reply to a message not in the archive

On SuSE the DASD configuration is kept in udev rules, one rule file per device. So add a new module for copying and creating these rules during boot.

---
 dracut-functions.sh                    | 28 +++++++++++++++++
 modules.d/95dasd_rules/module-setup.sh | 27 ++++++++++++++++
 modules.d/95dasd_rules/parse-dasd.sh   | 56 ++++++++++++++++++++++++++++++++++
 3 files changed, 111 insertions(+)
 create mode 100755 modules.d/95dasd_rules/module-setup.sh
 create mode 100755 modules.d/95dasd_rules/parse-dasd.sh
dracut-functions.sh +28 -0
index 2872516..0337c13 100755
@@ -899,6 +899,34 @@ inst_rules() {
     done
 }
 
+inst_rules_wildcard() {
+    local _target=/etc/udev/rules.d _rule _found
+
+    inst_dir "${udevdir}/rules.d"
+    inst_dir "$_target"
+    for _rule in ${udevdir}/rules.d/$1 ${dracutbasedir}/rules.d/$1 ; do
+        if [[ -e $_rule ]]; then
+            inst_rule_programs "$_rule"
+            inst_rule_group_owner "$_rule"
+            inst_rule_initqueue "$_rule"
+            inst_simple "$_rule"
+            _found=$_rule
+        fi
+    done
+    if [ -n ${hostonly} ] ; then
+        for _rule in ${_target}/$1 ; do
+            if [[ -f $_rule ]]; then
+                inst_rule_programs "$_rule"
+                inst_rule_group_owner "$_rule"
+                inst_rule_initqueue "$_rule"
+                inst_simple "$_rule"
+                _found=$_rule
+            fi
+        done
+    fi
+    [[ $_found ]] || dinfo "Skipping udev rule: $_rule"
+}
+
 prepare_udev_rules() {
     [ -z "$UDEVVERSION" ] && export UDEVVERSION=$(udevadm --version)
 
modules.d/95dasd_rules/module-setup.sh new file +27 -0
new file mode 100755
index 0000000..d313171
@@ -0,0 +1,27 @@
+#!/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)
+    [ -x /sbin/dasd_configure ] || return 1
+    [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
+    return 0
+}
+
+# called by dracut
+depends() {
+    echo 'dasd_mod'
+    return 0
+}
+
+# called by dracut
+install() {
+    inst_multiple /usr/lib/udev/collect
+    inst_hook cmdline 30 "$moddir/parse-dasd.sh"
+    if [[ $hostonly ]] ; then
+        inst_rules_wildcard 51-dasd-*.rules
+    fi
+    inst_rules 59-dasd.rules
+}
modules.d/95dasd_rules/parse-dasd.sh new file +56 -0

56 lines not on this page · raw message

Signature · 1 line
1.8.1.4
#8 lore raw

PATCH v2 7/13 Add zfcp scripts for SUSE

In reply to a message not in the archive

SuSE is storing the zfcp configuration in udev files, so we should be including these.

---
 modules.d/95zfcp_rules/module-setup.sh | 25 +++++++++++++
 modules.d/95zfcp_rules/parse-zfcp.sh   | 65 ++++++++++++++++++++++++++++++++++
 2 files changed, 90 insertions(+)
 create mode 100755 modules.d/95zfcp_rules/module-setup.sh
 create mode 100755 modules.d/95zfcp_rules/parse-zfcp.sh
modules.d/95zfcp_rules/module-setup.sh new file +25 -0
new file mode 100755
index 0000000..9a1ab20
@@ -0,0 +1,25 @@
+#!/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)
+    [ -x /sbin/zfcp_disk_configure ] || return 1
+    [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
+    return 0
+}
+
+# called by dracut
+depends() {
+    return 0
+}
+
+# called by dracut
+install() {
+    inst_multiple /usr/lib/udev/collect
+    inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
+    if [[ $hostonly ]] ; then
+        inst_rules_wildcard 51-zfcp-*.rules
+    fi
+}
modules.d/95zfcp_rules/parse-zfcp.sh new file +65 -0

65 lines not on this page · raw message

Signature · 1 line
1.8.1.4
#9 lore raw

PATCH v2 8/13 Make logfile configurable

In reply to a message not in the archive

Add '--logfile' option to make the log file configurable during runtime.

---
 dracut.8.asc | 6 ++++++
 dracut.sh    | 4 ++++
 2 files changed, 10 insertions(+)
dracut.8.asc +6 -0
index 2ea6744..d381dcf 100644
@@ -275,6 +275,12 @@ Default:
 
 **--sshkey** _<sshkey file>_:: ssh key file used with ssh-client module.
 
+**--logfile** _<logfile>_:: logfile to use; overrides any setting from
+    the configuration files.
++
+Default:
+    _/var/log/dracut.log_
+
 **-l, --local**::
     activates the local mode. dracut will use modules from the current working
     directory instead of the system-wide installed modules in
dracut.sh +4 -0
index bce2662..5f63d94 100755
@@ -183,6 +183,7 @@ Creates initial ramdisk images for preloading modules
   --keep                Keep the temporary initramfs for debugging purposes
   --printsize           Print out the module install size
   --sshkey [SSHKEY]     Add ssh key to initramfs (use with ssh-client module)
+  --logfile [FILE]      Logfile to use (overrides configuration setting)
 
 If [LIST] has multiple arguments, then you have to put these in quotes.
 
@@ -335,6 +336,7 @@ TEMP=$(unset POSIXLY_CORRECT; getopt \
     --long debug \
     --long profile \
     --long sshkey: \
+    --long logfile: \
     --long verbose \
     --long quiet \
     --long local \
@@ -418,6 +420,7 @@ while :; do
         --debug)       debug="yes";;
         --profile)     profile="yes";;
         --sshkey)      sshkey="$2"; shift;;
+        --logfile)     logfile_l="$2"; shift;;
         -v|--verbose)  ((verbosity_mod_l++));;
         -q|--quiet)    ((verbosity_mod_l--));;
         -l|--local)
@@ -690,6 +693,7 @@ stdloglvl=$((stdloglvl + verbosity_mod_l))
 [[ $ro_mnt_l ]] && ro_mnt="yes"
 [[ $early_microcode_l ]] && early_microcode=$early_microcode_l
 [[ $early_microcode ]] || early_microcode=no
+[[ $logfile_l ]] && logfile="$logfile_l"
 # eliminate IFS hackery when messing with fw_dir
 fw_dir=${fw_dir//:/ }
 
Signature · 1 line
1.8.1.4
#10 lore raw

PATCH v2 9/13 mkinitrd-suse: Add SUSE compability wrapper for dracut

In reply to a message not in the archive

SUSE has its own mkinitrd system. As the arguments clash with the dracut-provided mkinitrd script I've added a new mkinitrd-suse.sh wrapper.

---
 mkinitrd-suse.sh | 354 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 354 insertions(+)
 create mode 100755 mkinitrd-suse.sh
mkinitrd-suse.sh new file +354 -0
new file mode 100755
index 0000000..d20270a
@@ -0,0 +1,354 @@
+#!/bin/bash --norc
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+#
+# mkinitrd compability wrapper for SUSE.
+#
+# Copyright (c) 2013 SUSE Linux Products GmbH. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+boot_dir="/boot"
+quiet=0
+host_only=1
+force=0
+logfile=/var/log/YaST2/mkinitrd.log
+dracut_cmd=dracut
+
+error() { echo "$@" >&2; }
+
+usage () {
+    [[ $1 = '-n' ]] && cmd=echo || cmd=error
+
+    $cmd "usage: ${0##*/} [options]"
+    $cmd ""
+    $cmd "	Create initial ramdisk images that contain all kernel modules needed"
+    $cmd "	in the early boot process, before the root file system becomes"
+    $cmd "	available."
+    $cmd "	This usually includes SCSI and/or RAID modules, a file system module"
+    $cmd "	for the root file system, or a network interface driver module for dhcp."
+    $cmd ""
+    $cmd "	options:"
+    $cmd "	-f \"feature list\"	Features to be enabled when generating initrd."
+    $cmd "				Available features are:"
+    $cmd "					iscsi, md, multipath, lvm, lvm2,"
+    $cmd "					ifup, fcoe, dcbd"
+    $cmd "	-k \"kernel list\"	List of kernel images for which initrd files are"
+    $cmd "				created. Defaults to all kernels found in /boot."
+    $cmd "	-i \"initrd list\"	List of file names for the initrd; position have"
+    $cmd "				match to \"kernel list\". Defaults to all kernels"
+    $cmd "				found in /boot."
+    $cmd "	-b boot_dir		Boot directory. Defaults to /boot."
+    $cmd "	-t tmp_dir		Temporary directory. Defaults to /var/tmp."
+    $cmd "	-M map			System.map file to use."
+    $cmd "	-A			Create a so called \"monster initrd\" which"
+    $cmd "				includes all features and modules possible."
+    $cmd "	-B			Do not update bootloader configuration."
+    $cmd "	-v			Verbose mode."
+    $cmd "	-L			Disable logging."
+    $cmd "	-h			This help screen."
+    $cmd "	-m \"module list\"	Modules to include in initrd. Defaults to the"
+    $cmd "				INITRD_MODULES variable in /etc/sysconfig/kernel"
+    $cmd "	-u \"DomU module list\"	Modules to include in initrd. Defaults to the"
+    $cmd "				DOMU_INITRD_MODULES variable in"
+    $cmd "				/etc/sysconfig/kernel."
+    $cmd "	-d root_device		Root device. Defaults to the device from"
+    $cmd "				which / is mounted. Overrides the rootdev"
+    $cmd "				enviroment variable if set."
+    $cmd "	-j device		Journal device"
+    $cmd "	-D interface		Run dhcp on the specified interface."
+    $cmd "	-I interface		Configure the specified interface statically."
+    $cmd "	-a acpi_dsdt		Attach compiled ACPI DSDT (Differentiated"
+    $cmd "				System Description Table) to initrd. This"
+    $cmd "				replaces the DSDT of the BIOS. Defaults to"
+    $cmd "				the ACPI_DSDT variable in /etc/sysconfig/kernel."
+    $cmd "	-s size			Add splash animation and bootscreen to initrd."
+
+    [[ $1 = '-n' ]] && exit 0
+    exit 1
+}
+
+# Little helper function for reading args from the commandline.
+# it automatically handles -a b and -a=b variants, and returns 1 if
+# we need to shift $3.
+read_arg() {
+    # $1 = arg name
+    # $2 = arg value
+    # $3 = arg parameter
+    param="$1"
+    local rematch='^[^=]*=(.*)$' result
+    if [[ $2 =~ $rematch ]]; then
+        read "$param" <<< "${BASH_REMATCH[1]}"
+    else
+	for ((i=3; $i <= $#; i++)); do
+            # Only read next arg if it not an arg itself.
+            if [[ ${@:$i:1} = -* ]];then
+		break
+            fi
+            result="$result ${@:$i:1}"
+            # There is no way to shift our callers args, so
+            # return "no of args" to indicate they should do it instead.
+	done
+	read "$1" <<< "$result"
+        return $(($i - 3))
+    fi
+}
+
+# Helper functions to calculate ipconfig command line
+calc_netmask() {
+    local prefix=$1
+
+    [ -z "$prefix" ] && return
+    mask=$(echo "(2 ^ 32) - (2 ^ $prefix)" | bc -l)
+    byte1=$(( mask >> 24 ))
+    byte2=$(( mask >> 16 ))
+    byte3=$(( mask >> 8 ))
+    byte4=$(( mask & 0xff ))
+    netmask=$(printf "%d.%d.%d.%d" $(( byte1 & 0xff )) $(( byte2 & 0xff )) $(( byte3 & 0xff )) $byte4);
+
+    echo $netmask
+}
+
+ipconfig() {
+    local interface=$1
+    local iplink macaddr broadcast gateway ipaddr prefix netmask
+
+    iplink=$(ip addr show dev $interface | sed -n 's/ *inet \(.*\) brd.*/\1/p')
+    macaddr=$(ip addr show dev $interface | sed -n 's/.*ether \(.*\) brd.*/\1/p')
+    broadcast=$(ip addr show dev $interface | sed -n 's/.*brd \(.*\) scope.*/\1/p')
+    gateway=$(ip route show dev $interface | sed -n 's/default via \([0-9\.]*\).*/\1/p')
+
+    ipaddr=${iplink%%/*}
+    prefix=${iplink##*/}
+    netmask=$(calc_netmask $prefix)
+
+    echo "${ipaddr}:${serveraddr}:${gateway}:${netmask}:${hostname}:${interface}:none::${macaddr}"
+}
+
+is_xen_kernel() {
+    local kversion=$1
+    local root_dir=$2
+    local cfg
+
+    for cfg in ${root_dir}/boot/config-$kversion $root_dir/lib/modules/$kversion/build/.config
+    do
+        test -r $cfg || continue
+        grep -q "^CONFIG_XEN=y\$" $cfg
+        return
+    done
+    test $kversion != "${kversion%-xen*}"
+    return
+}
+
+
+# Taken over from SUSE mkinitrd
+default_kernel_images() {
+    local regex kernel_image kernel_version version_version initrd_image
+    local qf='%{NAME}-%{VERSION}-%{RELEASE}\n'
+
+    case "$(uname -m)" in
+        s390|s390x)
+            regex='image'
+            ;;
+        ppc|ppc64)
+            regex='vmlinux'
+            ;;
+        i386|x86_64)
+            regex='vmlinuz'
+            ;;
+        arm*)
+            regex='[uz]Image'
+            ;;
+        aarch64)
+            regex='Image'
+            ;;
+        *)  regex='vmlinu.'
+            ;;
+    esac
+
+    kernel_images=""
+    initrd_images=""
+    for kernel_image in $(ls $boot_dir \
+            | sed -ne "\|^$regex\(-[0-9.]\+-[0-9]\+-[a-z0-9]\+$\)\?|p" \
+            | grep -v kdump$ ) ; do
+
+        # Note that we cannot check the RPM database here -- this
+        # script is itself called from within the binary kernel
+        # packages, and rpm does not allow recursive calls.
+
+        [ -L "$boot_dir/$kernel_image" ] && continue
+        [ "${kernel_image%%.gz}" != "$kernel_image" ] && continue
+        kernel_version=$(/usr/bin/get_kernel_version \
+                         $boot_dir/$kernel_image 2> /dev/null)
+        initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|")
+        if [ "$kernel_image" != "$initrd_image" -a \
+             -n "$kernel_version" -a \
+             -d "/lib/modules/$kernel_version" ]; then
+                kernel_images="$kernel_images $boot_dir/$kernel_image"
+                initrd_images="$initrd_images $boot_dir/$initrd_image"
+        fi
+    done
+    for kernel_image in $kernel_images;do
+	kernels="$kernels ${kernel_image#*-}"
+    done
+    for initrd_image in $initrd_images;do
+	targets="$targets $initrd_image"
+    done
+    host_only=1
+    force=1
+}
+
+while (($# > 0)); do
+    case ${1%%=*} in
+	-f) read_arg feature_list "$@" || shift $?
+	    # Could be several features
+	    ;;
+	-k) # Would be nice to get a list of images here
+	    read_arg kernel_images "$@" || shift $?
+	    for kernel_image in $kernel_images;do
+		kernels="$kernels ${kernel_image#*-}"
+	    done
+	    host_only=1
+	    force=1
+	    ;;
+	-i) read_arg initrd_images "$@" || shift $?
+	    for initrd_image in $initrd_images;do
+		# Check if the initrd_image contains a path.
+		# if not, then add the default boot_dir
+		dname=`dirname $initrd_image`
+		if [ "$dname" == "." ]; then
+                    targets="$targets $boot_dir/$initrd_image";
+		else
+                    targets="$targets $initrd_image";
+		fi
+	    done
+	    ;;
+	-b) read_arg boot_dir "$@" || shift $?
+	    if [ ! -d $boot_dir ];then
+		error "Boot directory $boot_dir does not exist"
+		exit 1
+	    fi
+	    ;;
+	-t) read_arg tmp_dir "$@" || shift $?
+	    dracut_args="${dracut_args} --tmpdir $tmp_dir"
+	    ;;
+	-M) read_arg map_file "$@" || shift $?
+	    ;;
+	-A) host_only=0;;
+	-B) skip_update_bootloader=1;;
+        -v|--verbose) dracut_args="${dracut_args} -v";;
+	-L) logfile=;;
+        -h|--help) usage -n;;
+	-m) read_arg module_list "$@" || shift $? ;;
+	-u) read_arg domu_module_list "$@" || shift $?
+	    echo "mkinitrd: DomU modules not yet supported" ;;
+        -d) read_arg rootfs "$@" || shift $?
+            dracut_args="${dracut_args} --filesystems $rootfs" ;;
+	-D) read_arg dhcp_if "$@" || shift $?
+	    dracut_cmdline="${dracut_cmdline} ip=${dhcp_if}:dhcp"
+	    ;;
+	-I) read_arg static_if "$@" || shift $?
+	    dracut_cmdline="${dracut_cmdline} ip=$(ipconfig $static_if)":
+	    ;;
+	-a) read_arg acpi_dsdt "$@" || shift $?
+	    echo "mkinitrd: custom DSDT not yet supported"
+	    exit 1
+	    ;;
+	-s) read_arg boot_splash "$@" || shift $?
+	    echo "mkinitrd: boot splash not yet supported"
+	    exit 1
+	    ;;
+	-V) echo "mkinitrd: vendor scipts are no longer supported"
+	    exit 1;;
+	--dracut)
+	    read_arg dracut_cmd "$@" || shift $? ;;
+        --version|-R)
+            echo "mkinitrd: dracut compatibility wrapper"
+            exit 0;;
+        --force) force=1;;
+	--quiet|-q) quiet=1;;
+        *)  if [[ ! $targets ]]; then
+            targets=$1
+            elif [[ ! $kernels ]]; then
+            kernels=$1
+            else
+            usage
+            fi;;
+    esac
+    shift
+done
+
+[[ $targets && $kernels ]] || default_kernel_images
+[[ $targets && $kernels ]] || (error "No kernel found in $boot_dir" && usage)
+
+# We can have several targets/kernels, transform the list to an array
+targets=( $targets )
+[[ $kernels ]] && kernels=( $kernels )
+
+[[ $logfile ]]        && dracut_args="${dracut_args} --logfile $logfile"
+[[ $host_only == 1 ]] && dracut_args="${dracut_args} --hostonly"
+[[ $force == 1 ]]     && dracut_args="${dracut_args} --force"
+[[ $dracut_cmdline ]] && dracut_args="${dracut_args} --kernel-cmdline ${dracut_cmdline}"
+[ -z "$(type -p update-bootloader)" ] && skip_update_bootloader=1
+
+# Update defaults from /etc/sysconfig/kernel
+if [ -f /etc/sysconfig/kernel ] ; then
+    . /etc/sysconfig/kernel
+fi
+[[ $module_list ]] || module_list="${INITRD_MODULES}"
+basicmodules="$basicmodules ${module_list}"
+[[ $domu_module_list ]] || domu_module_list="${DOMU_INITRD_MODULES}"
+[[ $acpi_dsdt ]] || acpi_dsdt="${ACPI_DSDT}"
+
+echo "Creating: target|kernel|dracut args|basicmodules "
+for ((i=0 ; $i<${#targets[@]} ; i++)); do
+
+    if [[ $img_vers ]];then
+	target="${targets[$i]}-${kernels[$i]}"
+    else
+	target="${targets[$i]}"
+    fi
+    kernel="${kernels[$i]}"
+
+    # Duplicate code: No way found how to redirect output based on $quiet
+    if [[ $quiet == 1 ]];then
+	echo "$target|$kernel|$dracut_args|$basicmodules"
+	if is_xen_kernel $kernel $rootfs ; then
+	    basicmodules="$basicmodules ${domu_module_list}"
+	fi
+	if [[ $basicmodules ]]; then
+            $dracut_cmd $dracut_args --add-drivers "$basicmodules" "$target" \
+		"$kernel" &>/dev/null
+	else
+            $dracut_cmd $dracut_args "$target" "$kernel" &>/dev/null
+	fi
+    else
+	if is_xen_kernel $kernel $rootfs ; then
+	    basicmodules="$basicmodules ${domu_module_list}"
+	fi
+	if [[ $basicmodules ]]; then
+            $dracut_cmd $dracut_args --add-drivers "$basicmodules" "$target" \
+		"$kernel"
+	else
+            $dracut_cmd $dracut_args "$target" "$kernel"
+	fi
+    fi
+done
+
+if [ "$skip_update_bootloader" ] ; then
+    echo 2>&1 "Did not refresh the bootloader. You might need to refresh it manually."
+else
+    update-bootloader --refresh
+fi
Signature · 1 line
1.8.1.4
#11 lore raw

PATCH v2 10/13 mkinitrd-suse.8.asc: Add manpage for SUSE compat mkinitrd

In reply to a message not in the archive
---
 Makefile            |   1 +
 mkinitrd-suse.8.asc | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100644 mkinitrd-suse.8.asc
Makefile +1 -0
index e7da948..ba551cf 100644
@@ -27,6 +27,7 @@ man7pages = dracut.cmdline.7 \
 man8pages = dracut.8 \
             dracut-catimages.8 \
             mkinitrd.8 \
+            mkinitrd-suse.8 \
             modules.d/98systemd/dracut-cmdline.service.8 \
             modules.d/98systemd/dracut-initqueue.service.8 \
             modules.d/98systemd/dracut-mount.service.8 \
mkinitrd-suse.8.asc new file +106 -0

106 lines not on this page · raw message

Signature · 1 line
1.8.1.4
#12 lore raw

PATCH v2 11/13 Fixup keymap setting for openSUSE

In reply to a message not in the archive

openSUSE is using compressed keymaps.

---
 modules.d/10i18n/module-setup.sh | 3 +++
 1 file changed, 3 insertions(+)
modules.d/10i18n/module-setup.sh +3 -0
index 0741c64..f07b148 100755
@@ -161,6 +161,9 @@ install() {
         # Gentoo user may have KEYMAP set to something like "-u pl2",
         KEYMAP=${KEYMAP#-* }
 
+        # openSUSE user may have KEYMAP set to something like ".gz"
+        KEYMAP=${KEYMAP/.gz/}
+
         # KEYTABLE is a bit special - it defines base keymap name and UNICODE
         # determines whether non-UNICODE or UNICODE version is used
 
Signature · 1 line
1.8.1.4
#13 lore raw

PATCH v2 12/13 Fixup script permissions

In reply to a message not in the archive

Scripts with a shebang should be marked as executable.

---
 modules.d/03modsign/load-modsign-keys.sh | 0
 modules.d/03modsign/module-setup.sh      | 0
 modules.d/40network/net-lib.sh           | 0
 modules.d/40network/parse-vlan.sh        | 0
 modules.d/50drm/module-setup.sh          | 0
 modules.d/91crypt-loop/crypt-loop-lib.sh | 0
 modules.d/98pollcdrom/pollcdrom.sh       | 0
 7 files changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 modules.d/03modsign/load-modsign-keys.sh
 mode change 100644 => 100755 modules.d/03modsign/module-setup.sh
 mode change 100644 => 100755 modules.d/40network/net-lib.sh
 mode change 100644 => 100755 modules.d/40network/parse-vlan.sh
 mode change 100644 => 100755 modules.d/50drm/module-setup.sh
 mode change 100644 => 100755 modules.d/91crypt-loop/crypt-loop-lib.sh
 mode change 100644 => 100755 modules.d/98pollcdrom/pollcdrom.sh
modules.d/03modsign/load-modsign-keys.sh +0 -0
old mode 100644
new mode 100755
modules.d/03modsign/module-setup.sh +0 -0
old mode 100644
new mode 100755
modules.d/40network/net-lib.sh +0 -0
old mode 100644
new mode 100755
modules.d/40network/parse-vlan.sh +0 -0
old mode 100644
new mode 100755
modules.d/50drm/module-setup.sh +0 -0
old mode 100644
new mode 100755
modules.d/91crypt-loop/crypt-loop-lib.sh +0 -0
old mode 100644
new mode 100755
modules.d/98pollcdrom/pollcdrom.sh +0 -0
old mode 100644
new mode 100755
Signature · 1 line
1.8.1.4
#14 lore raw

PATCH v2 13/13 Remove shebang from shell-completion files

In reply to a message not in the archive

Shell-completion files are meant to be sourced, not executed. So they shouldn't have a shebang at the start.

---
 dracut-bash-completion.sh   | 2 +-
 lsinitrd-bash-completion.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
dracut-bash-completion.sh +1 -1
index d796c35..9f359c6 100644
@@ -1,4 +1,4 @@
-#!/bin/bash
+#
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 #
lsinitrd-bash-completion.sh +1 -1
index 78ab165..3df2965 100644
@@ -1,4 +1,4 @@
-#!/bin/bash
+#
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 #
Signature · 1 line
1.8.1.4
#15 lore raw
In reply to a message not in the archive
Quoted 59 lines · Hannes Reinecke

SUSE is keeping the S/390 device configuration in udev rules, on rule per device.
And it doesn't have the RH-specific configuration scripts (obviously). This patchset abstracts away the RH-specific configuration and adds modules to make dracut boot on SLES installations.

I've also added a new SUSE-specific mkinitrd compability script, as the SUSE mkinitrd is quite different.

And some minor fixes which came up during package build.

Please apply.

Hannes Reinecke (13):
95dasd: Install kernel modules only once
95dasd: Only install module if normalize_dasd_arg is present 95dasd_mod: make dasd_cio_free optional
95zfcp: Make installation optional
95znet: Make installation optional
Add DASD configuration for SuSE
Add zfcp scripts for SUSE
Make logfile configurable
mkinitrd-suse: Add SUSE compability wrapper for dracut mkinitrd-suse.8.asc: Add manpage for SUSE compat mkinitrd Fixup keymap setting for openSUSE
Fixup script permissions
Remove shebang from shell-completion files

 Makefile                                 |   1 +
 dracut-bash-completion.sh                |   2 +-
 dracut-functions.sh                      |  28 +++
 dracut.8.asc                             |   6 +
 dracut.sh                                |   4 +
 lsinitrd-bash-completion.sh              |   2 +-
 mkinitrd-suse.8.asc                      | 106 +++++++++
 mkinitrd-suse.sh                         | 354 +++++++++++++++++++++++++++++++
 modules.d/03modsign/load-modsign-keys.sh |   0
 modules.d/03modsign/module-setup.sh      |   0
 modules.d/10i18n/module-setup.sh         |   3 +
 modules.d/40network/net-lib.sh           |   0
 modules.d/40network/parse-vlan.sh        |   0
 modules.d/50drm/module-setup.sh          |   0
 modules.d/91crypt-loop/crypt-loop-lib.sh |   0
 modules.d/95dasd/module-setup.sh         |   7 +-
 modules.d/95dasd_mod/module-setup.sh     |   3 +-
 modules.d/95dasd_mod/parse-dasd-mod.sh   |   4 +-
 modules.d/95dasd_rules/module-setup.sh   |  27 +++
 modules.d/95dasd_rules/parse-dasd.sh     |  56 +++++
 modules.d/95zfcp/module-setup.sh         |   4 +-
 modules.d/95zfcp_rules/module-setup.sh   |  25 +++
 modules.d/95zfcp_rules/parse-zfcp.sh     |  65 ++++++
 modules.d/95znet/module-setup.sh         |   1 +
 modules.d/98pollcdrom/pollcdrom.sh       |   0
 25 files changed, 686 insertions(+), 12 deletions(-)
 create mode 100644 mkinitrd-suse.8.asc
 create mode 100755 mkinitrd-suse.sh
 mode change 100644 => 100755 modules.d/03modsign/load-modsign-keys.sh
 mode change 100644 => 100755 modules.d/03modsign/module-setup.sh
 mode change 100644 => 100755 modules.d/40network/net-lib.sh
Quoted 9 lines
 mode change 100644 => 100755 modules.d/40network/parse-vlan.sh
 mode change 100644 => 100755 modules.d/50drm/module-setup.sh
 mode change 100644 => 100755 modules.d/91crypt-loop/crypt-loop-lib.sh
 create mode 100755 modules.d/95dasd_rules/module-setup.sh
 create mode 100755 modules.d/95dasd_rules/parse-dasd.sh
 create mode 100755 modules.d/95zfcp_rules/module-setup.sh
 create mode 100755 modules.d/95zfcp_rules/parse-zfcp.sh
 mode change 100644 => 100755 modules.d/98pollcdrom/pollcdrom.sh

Thanks! Pushed.