45edee9f69
- 90btrfs: Install rescue utilities to initrd * Add: 0100-btrfs-add-initrd-rescue-utilities.patch - 40network: create /var/lib/wicked in ifup.sh (bnc#885141) * Add: 0089-40network-create-var-lib-wicked-in-ifup.sh.patch - dracut: caps: Remove whole caps module * Add: 0090-dracut-caps-Remove-whole-caps-module.patch - dracut: biosdevname: Only install if present * Add: 0091-dracut-biosdevname-In-SUSE-biosdevname-package-is-in.patch - dracut: nbd: Only complain of missing binary in hostonly mode if rootfs is on nbd * Add: 0092-dracut-nbd-Only-complain-of-missing-binary-in-hoston.patch - 95iscsi: generate commandline for software iscsi (bnc#880108) * Add: 0093-95iscsi-generate-commandline-for-software-iscsi.patch - Implement shortcut 'ip=<ifname>:static' for static configuration * Add: 0094-Implement-shortcut-ip-ifname-static-for-static-confi.patch - 95iscsi: use static configuration for software iscsi (bnc#884768) * Add: 0095-95iscsi-use-static-configuration-for-software-iscsi.patch - dracut: Fix error: local: can only be used in a function * Add: 0096-dracut-Fix-error-local-can-only-be-used-in-a-functio.patch - Implement 'rd.timeout' to modify the device timeout (bnc#878770) * Add: 0097-Implement-rd.timeout-to-modify-the-device-timeout.patch - Do not call 'lvm' for non-LVM device-mapper devices * Add: 0098-Do-not-call-lvm-for-non-LVM-device-mapper-devices.patch - 90multipath: Load device_handler modules early during boot (bnc#871617) * Add: 0099-90multipath-Load-device_handler-modules-early-during.patch OBS-URL: https://build.opensuse.org/request/show/239538 OBS-URL: https://build.opensuse.org/package/show/Base:System/dracut?expand=0&rev=168
124 lines
3.7 KiB
Diff
124 lines
3.7 KiB
Diff
From a7bac2f8271ff195fa0a5c021f40b7eeb48b3681 Mon Sep 17 00:00:00 2001
|
|
From: Hannes Reinecke <hare@suse.de>
|
|
Date: Wed, 2 Jul 2014 10:36:50 +0200
|
|
Subject: 95iscsi: generate commandline for software iscsi
|
|
|
|
When installing on an software iscsi root we need to generate
|
|
the correct commandline, otherwise the system cannot boot.
|
|
|
|
References: bnc#880108
|
|
|
|
Signed-off-by: Hannes Reinecke <hare@suse.de>
|
|
---
|
|
modules.d/95iscsi/module-setup.sh | 80 +++++++++++++++++++++++++++++++++++++--
|
|
1 file changed, 77 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
|
|
index cfa6f39..e9bed24 100755
|
|
--- a/modules.d/95iscsi/module-setup.sh
|
|
+++ b/modules.d/95iscsi/module-setup.sh
|
|
@@ -43,6 +43,75 @@ install_ibft() {
|
|
done
|
|
}
|
|
|
|
+install_iscsiroot() {
|
|
+ local devpath=$1
|
|
+ local scsi_path iscsi_lun session c d conn
|
|
+ local iscsi_session iscsi_address iscsi_port iscsi_targetname iscsi_tpgt
|
|
+
|
|
+ scsi_path=${devpath%%/block*}
|
|
+ [ "$scsi_path" = "$devpath" ] && return 1
|
|
+ iscsi_lun=${scsi_path##*:}
|
|
+ [ "$iscsi_lun" = "$scsi_path" ] && return 1
|
|
+ session=${devpath%%/target*}
|
|
+ [ "$session" = "$devpath" ] && return 1
|
|
+ iscsi_session=${session##*/}
|
|
+ [ "$iscsi_session" = "$session" ] && return 1
|
|
+
|
|
+ for d in ${session}/* ; do
|
|
+ case $d in
|
|
+ *connection*)
|
|
+ c=${d##*/}
|
|
+ conn=${d}/iscsi_connection/${c}
|
|
+ if [ -d ${conn} ] ; then
|
|
+ iscsi_address=$(cat ${conn}/persistent_address)
|
|
+ iscsi_port=$(cat ${conn}/persistent_port)
|
|
+ fi
|
|
+ ;;
|
|
+ *session)
|
|
+ if [ -d ${d}/${iscsi_session} ] ; then
|
|
+ iscsi_initiator=$(cat ${d}/${iscsi_session}/initiatorname)
|
|
+ iscsi_targetname=$(cat ${d}/${iscsi_session}/targetname)
|
|
+ fi
|
|
+ ;;
|
|
+ esac
|
|
+ done
|
|
+
|
|
+ local_address=$(ip -o route get to $iscsi_address | cut -f 1 -d ' ')
|
|
+ ifname=$(ip addr show to $local_address | head -1 | sed -n 's/[0-9]*: \(.*\): .*/\1/p')
|
|
+ if [ -d /sys/class/net/$ifname/address ] ; then
|
|
+ ifmac=$(cat /sys/class/net/$ifname/address)
|
|
+ printf 'ifname=%s:%s ' ${ifname} ${ifmac}
|
|
+ fi
|
|
+
|
|
+ if [ -n "$iscsi_address" -a -n "$iscsi_targetname" ] ; then
|
|
+ if [ -n "$iscsi_port" -a "$iscsi_port" -eq 3260 ] ; then
|
|
+ iscsi_port=
|
|
+ fi
|
|
+ if [ -n "$iscsi_lun" -a "$iscsi_lun" -eq 0 ] ; then
|
|
+ iscsi_lun=
|
|
+ fi
|
|
+ echo "rd.iscsi.initiator=${iscsi_initiator} netroot=iscsi:${iscsi_address}::${iscsi_port}:${iscsi_lun}:${iscsi_targetname}"
|
|
+ fi
|
|
+ return 0
|
|
+}
|
|
+
|
|
+
|
|
+install_softiscsi() {
|
|
+ [ -d /sys/firmware/ibft ] && return 0
|
|
+
|
|
+ is_softiscsi() {
|
|
+ local _dev=$1
|
|
+ local iscsi_dev
|
|
+
|
|
+ [[ -L "/sys/dev/block/$_dev" ]] || return
|
|
+ iscsi_dev=$(cd -P /sys/dev/block/$_dev; echo $PWD)
|
|
+ install_iscsiroot $iscsi_dev
|
|
+ }
|
|
+
|
|
+ for_each_host_dev_and_slaves is_softiscsi || return 255
|
|
+ return 0
|
|
+}
|
|
+
|
|
# called by dracut
|
|
check() {
|
|
local _rootdev
|
|
@@ -121,7 +190,12 @@ installkernel() {
|
|
|
|
# called by dracut
|
|
cmdline() {
|
|
- install_ibft
|
|
+ local _iscsiconf=$(install_ibft)
|
|
+ if [ "$_iscsiconf" ] ; then
|
|
+ echo ${_iscsiconf}
|
|
+ else
|
|
+ install_softiscsi
|
|
+ fi
|
|
}
|
|
|
|
# called by dracut
|
|
@@ -132,8 +206,8 @@ install() {
|
|
|
|
# Detect iBFT and perform mandatory steps
|
|
if [[ $hostonly_cmdline == "yes" ]] ; then
|
|
- local _ibftconf=$(install_ibft)
|
|
- [[ $_ibftconf ]] && printf "%s\n" "$_ibftconf" >> "${initdir}/etc/cmdline.d/95iscsi.conf"
|
|
+ local _iscsiconf=$(cmdline)
|
|
+ [[ $_iscsiconf ]] && printf "%s\n" "$_iscsiconf" >> "${initdir}/etc/cmdline.d/95iscsi.conf"
|
|
fi
|
|
|
|
inst_hook cmdline 90 "$moddir/parse-iscsiroot.sh"
|
|
--
|
|
1.8.4.5
|
|
|