diff options
Diffstat (limited to 'etc')
-rw-r--r-- | etc/Makefile | 33 | ||||
-rw-r--r-- | etc/systemd/ibft-rule-generator | 36 |
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 |