#! /bin/bash

exec >&2

PATH="/sbin:/bin:/usr/bin:/usr/sbin:/lbin"

# create these links udevd used to create (bsc#1176610)
ln -snf /proc/kcore /dev/core
ln -snf /proc/self/fd /dev/fd
ln -snf /proc/self/fd/0 /dev/stdin
ln -snf /proc/self/fd/1 /dev/stdout
ln -snf /proc/self/fd/2 /dev/stderr

# load some modules before udevd
for i in edd scsi_dh_alua scsi_dh_emc scsi_dh_rdac ; do
  [ -f /modules/$i.ko -o -f /modules/$i.ko.xz -o -f /modules/$i.ko.zst ] && modprobe $i
done

# disable hotplug helper, udevd listens to netlink
echo "" > /proc/sys/kernel/hotplug

# prevent MD/RAID auto-assembly (bsc#1132688)
# Note: rules in /run are not copied to the target system, unlike those in /etc.
if [ -n "$linuxrc_no_auto_assembly" ] ; then
  mkdir -p /run/udev/rules.d
  echo 'ENV{ANACONDA}="yes"' > /run/udev/rules.d/00-inhibit.rules
fi

# create NVMe config files before udevd is started (bsc#1184908)
if [ ! -f /etc/nvme/hostnqn -a -x /usr/sbin/nvme ] ; then
  { /usr/sbin/nvme-gen-hostnqn || /usr/sbin/nvme gen-hostnqn ; } > /etc/nvme/hostnqn
  cut -d : -f 3 /etc/nvme/hostnqn > /etc/nvme/hostid
fi

# start udevd
echo -n "Starting udevd "
if [ -n "$linuxrc_debug" ] ; then
  udev_opt=--debug
else
  udev_opt=
fi

echo "# boot with udev.log_level=debug or linuxrc.debug=1 to get udev debug output logged here" >/var/log/udev.log
udevd --daemon $udev_opt 2>>/var/log/udev.log

# create devices (cf. bsc#1084357)
/usr/bin/udevadm trigger --type=subsystems --action=add
/usr/bin/udevadm trigger --type=devices --action=add

# add fc nvme devices (bsc#1184908)
echo add > /sys/class/fc/fc_udev_device/nvme_discovery

# 10 min - just long enough
/usr/bin/udevadm settle --timeout=100

