summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
Diffstat (limited to 'etc')
-rw-r--r--etc/Makefile33
-rw-r--r--etc/systemd/ibft-rule-generator36
2 files changed, 58 insertions, 11 deletions
diff --git a/etc/Makefile b/etc/Makefile
index 84e0fa7..d065319 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -13,9 +13,9 @@ SBINDIR ?= /sbin
ISCSI_INAME ?= $(TOPDIR)/utils/iscsi-iname
-systemddir ?= $(DESTDIR)$(prefix)/lib/systemd
+systemddir ?= $(prefix)/lib/systemd
etcdir = /etc
-initddir ?= $(DESTDIR)$(etcdir)/init.d
+initddir ?= $(etcdir)/init.d
HOMEDIR ?= $(etcdir)/iscsi
@@ -29,9 +29,12 @@ SYSTEMD_TEMPLATE_FILES = iscsi-init.service.template \
iscsi.service.template \
iscsiuio.service.template
SYSTEMD_TEMPLATES = $(addprefix systemd/,$(SYSTEMD_TEMPLATE_FILES))
+SYSTEMD_RULES_FILES = ibft-rule-generator
+SYSTEMD_RULES_SOURCES = $(addprefix systemd/,$(SYSTEMD_RULES_FILES))
SYSTEMD_GENERATED_SERVICE_FILES = $(SYSTEMD_TEMPLATES:.template=)
-SYSTEMD_DEST_FILES = $(addprefix $(systemddir)/system/,$(SYSTEMD_SOURCE_FILES)) \
- $(addprefix $(systemddir)/system/,$(notdir $(SYSTEMD_GENERATED_SERVICE_FILES)))
+SYSTEMD_DEST_SVC_FILES = $(addprefix $(DESTDIR)$(systemddir)/system/,$(SYSTEMD_SOURCE_FILES)) \
+ $(addprefix $(DESTDIR)$(systemddir)/system/,$(notdir $(SYSTEMD_GENERATED_SERVICE_FILES)))
+SYSTEMD_DEST_GEN_FILES = $(addprefix $(DESTDIR)$(systemddir)/system-generators/,$(notdir $(SYSTEMD_RULES_SOURCES)))
IFACE_FILES = iface.example
IFACE_DEST_FILES = $(addprefix $(DESTDIR)$(DBROOT)/ifaces/,$(IFACE_FILES))
ETC_FILES = iscsid.conf
@@ -56,24 +59,31 @@ install_etc: $(DESTDIR)$(HOMEDIR) $(ETC_DEST_FILES)
$(ETC_DEST_FILES): $(DESTDIR)$(HOMEDIR)/%: %
$(INSTALL) -m 644 $? $@
-install_initd_distro = $(INSTALL) -m 755 $(1) $(initddir)/open-iscsi/
+install_initd_distro = $(INSTALL) -m 755 $(1) $(DESTDIR)$(initddir)/open-iscsi/
-install_initd: $(initddir)/open-iscsi
+install_initd: $(DESTDIR)$(initddir)/open-iscsi
@if [ -f /etc/debian_version ]; then \
$(call install_initd_distro,initd/initd.redhat) ; \
elif [ -f /etc/redhat-release ]; then \
$(call install_initd_distro,initd/initd.debian) ; \
fi
-install_initd_redhat: $(initddir)/open-iscsi
+install_initd_redhat: $(DESTDIR)$(initddir)/open-iscsi
$(call install_initd_distro,initd/initd.redhat)
-install_initd_debian: $(initddir)/open-iscsi
+install_initd_debian: $(DESTDIR)$(initddir)/open-iscsi
$(call install_initd_distro,initd/initd.debian)
-install_systemd: $(systemddir)/system $(SYSTEMD_DEST_FILES)
+install_systemd: install_systemd_service_files install_systemd_generator_files
-$(SYSTEMD_DEST_FILES): $(systemddir)/system/%: systemd/%
+install_systemd_service_files: $(DESTDIR)$(systemddir)/system $(SYSTEMD_DEST_SVC_FILES)
+
+install_systemd_generator_files: $(DESTDIR)$(systemddir)/system-generators $(SYSTEMD_DEST_GEN_FILES)
+
+$(SYSTEMD_DEST_SVC_FILES): $(DESTDIR)$(systemddir)/system/%: systemd/%
+ $(INSTALL) $? $@
+
+$(SYSTEMD_DEST_GEN_FILES): $(DESTDIR)$(systemddir)/system-generators/%: systemd/%
$(INSTALL) $? $@
install_iname: $(DESTDIR)$(HOMEDIR) $(ISCSI_INAME)
@@ -90,7 +100,8 @@ $(ISCSI_INAME):
$(MAKE) $(MFLAGS) -c $(TOPDIR)/utils $(notdir $@)
# make needed directories
-$(systemddir)/system $(DESTDIR)$(HOMEDIR) $(DESTDIR)$(DBROOT)/ifaces $(initddir)/open-iscsi:
+$(DESTDIR)$(systemddir)/system $(DESTDIR)$(systemddir)/system-generators $(DESTDIR)$(HOMEDIR) \
+ $(DESTDIR)$(DBROOT)/ifaces $(DESTDIR)$(initddir)/open-iscsi:
[ -d $@ ] || $(INSTALL) -d -m 775 $@
clean:
diff --git a/etc/systemd/ibft-rule-generator b/etc/systemd/ibft-rule-generator
new file mode 100644
index 0000000..038a4c2
--- /dev/null
+++ b/etc/systemd/ibft-rule-generator
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Systemd rule generator for ibft interfaces
+#
+# Copyright (c) 2022 Hannes Reinecke, SUSE Labs
+# This script is licensed under the GPL.
+#
+# When booted with 'ip=ibft' dracut will rename the
+# interface to 'ibft*'. After systemd has started
+# it'll try to rename the interface yet again with
+# a persistent name.
+# But as the ibft interface is already renamed _and_
+# in use, the second renaming will fail and udev
+# will complain.
+# So add a dummy rule which signals udev the correct name
+#
+# Interface renaming happes at 80-net-setup-link.rules,
+# so we need to hook in before that.
+#
+IBFT_RULE_DIR=/run/udev/rules.d
+IBFT_RULES=$(IBFT_RULE_DIR)/79-ibft.rules
+
+# ensure we have a rules directory and no rules file
+if [ -d ${IBFT_RULE_DIR} ] ; then
+ rm -f ${IBFT_RULES} 2> /dev/null
+else
+ mkdir -p ${IBFT_RULE_DIR}
+fi
+
+# create an iBFT udev rule for each iBFT NIC found
+for d in /sys/firmware/ibft/ethernet* ; do
+ [ -d "$d" ] || break
+ num="${d##*/ethernet}"
+ read mac < $d/mac
+ printf 'SUBSYSTEM=="net", KERNEL=="ibft*", ACTION=="add", DRIVERS=="?*", ATTR{address}=="%s", ATTR{type}=="1", NAME="ibft%s"\n' "$mac" "$num" >> $IBFT_RULES
+done