if [ "$bootif_mac" = "$current_mac" ]
then
- ETHDEVICE="${device##*/},$ETHDEVICE" # use ethdevice
+ DEVICE=${device##*/}
break
fi
fi
fi
}
-get_ipconfig_para()
-{
- if [ $# != 1 ] ; then
- echo "Missin parameter for $0"
- return
- fi
- devname=$1
- for ip in ${STATICIP} ; do
- case $ip in
- *:$devname:*)
- echo $ip
- return
- ;;
- esac
- done
- echo $devname
-}
-
do_netsetup ()
{
modprobe -q af_packet # For DHCP
[ -n "$ETHDEV_TIMEOUT" ] || ETHDEV_TIMEOUT=15
echo "Using timeout of $ETHDEV_TIMEOUT seconds for network configuration."
- # Our modus operandi for getting a working network setup is this:
- # * If ip=* is set, pass that to ipconfig and be done
- # * Else, try dhcp on all devices in this order:
- # ethdevice= bootif= <all interfaces>
-
- ALLDEVICES="$(cd /sys/class/net/ && ls -1 2>/dev/null | grep -v '^lo$' )"
-
- # Turn on all interfaces before doing anything, to avoid timing problems
- # during link negotiation.
- echo "Net: Turning on all device links..."
- for device in ${ALLDEVICES}; do
- ipconfig -c none -d $device -t 1 2>/dev/null >/dev/null
- done
-
+ if [ -z "${NETBOOT}" ] && [ -z "${FETCH}" ] && [ -z "${HTTPFS}" ] && [ -z "${FTPFS}" ]
+ then
# See if we can select the device from BOOTIF
Device_from_bootif
if [ -z "$ETHDEVICE" ]
then
echo "If you want to boot from a specific device use bootoption ethdevice=..."
- ETHDEVICE="$ALLDEVICES"
+ for device in /sys/class/net/*
+ do
+ dev=${device##*/}
+ if [ "$dev" != "lo" ]
+ then
+ ETHDEVICE="$ETHDEVICE $dev"
+ fi
+ done
fi
# split args of ethdevice=eth0,eth1 into "eth0 eth1"
- for device in $(echo $ETHDEVICE | sed 's/,/ /g')
+ for device in $(echo "$ETHDEVICE" | sed 's/,/ /g')
do
devlist="$devlist $device"
done
- for dev in $devlist ; do
- param="$(get_ipconfig_para $dev)"
- if [ -n "$NODHCP" ] && [ "$param" = "$dev" ] ; then
- echo "Ignoring network device $dev due to nodhcp." | tee -a /boot.log
- continue
- fi
- echo "Executing ipconfig -t $ETHDEV_TIMEOUT $param"
- ipconfig -t "$ETHDEV_TIMEOUT" "$param" | tee -a /netboot.config
+ for dev in $devlist
+ do
+ echo "Executing ipconfig -t $ETHDEV_TIMEOUT $dev"
+ ipconfig -t "$ETHDEV_TIMEOUT" "$dev" | tee -a /netboot.config
# if configuration of device worked we should have an assigned
# IP address, if so let's use the device as $DEVICE for later usage.
# simple and primitive approach which seems to work fine
-
- IPV4ADDR="0.0.0.0"
- if [ -e "/run/net-${device}.conf" ]; then
- . /run/net-${device}.conf
+ if ifconfig "$dev" | grep -q -E 'inet.*addr:|inet [0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*'
+ then
+ export DEVICE="$dev"
+ break
fi
- if [ "${IPV4ADDR}" != "0.0.0.0" ]; then
- export DEVICE="$dev $DEVICE"
- # break # exit loop as we just use the irst
+ done
+ else
+ for interface in ${DEVICE}; do
+ ipconfig -t "$ETHDEV_TIMEOUT" "${interface}" | tee "/netboot-${interface}.config"
+
+ [ -e "/run/net-${interface}.conf" ] && . "/run/net-${interface}.conf"
+
+ if [ "$IPV4ADDR" != "0.0.0.0" ]
+ then
+ break
fi
done
- unset devlist
+ fi
for interface in ${DEVICE}
do
# source relevant ipconfig output
OLDHOSTNAME=${HOSTNAME}
- [ -e /run/net-${interface}.conf ] && . /run/net-${interface}.conf
+ [ -e "/run/net-${interface}.conf" ] && . "/run/net-${interface}.conf"
- [ -z ${HOSTNAME} ] && HOSTNAME=${OLDHOSTNAME}
+ [ -z "${HOSTNAME}" ] && HOSTNAME="${OLDHOSTNAME}"
export HOSTNAME
if [ -n "${interface}" ]
then
- HWADDR="$(cat /sys/class/net/${interface}/address)"
+ # HWADDR used by do_iscsi from 9990-mount-iscsi.sh
+ # shellcheck disable=SC2034
+ HWADDR="$(cat "/sys/class/net/${interface}/address")"
+ fi
+
+ if [ ! -e "/etc/hostname" ] && [ -n "${HOSTNAME}" ]
+ then
+ echo "Creating /etc/hostname"
+ echo "${HOSTNAME}" > /etc/hostname
+ fi
+
+ # Only create /etc/hosts if FQDN is known (to let 'hostname -f' query
+ # this file). Otherwise DNS will be queried to determine the FQDN.
+ if [ ! -e "/etc/hosts" ] && [ -n "${DNSDOMAIN}" ]
+ then
+ echo "Creating /etc/hosts"
+ cat > /etc/hosts <<EOF
+127.0.0.1 localhost
+127.0.1.1 ${HOSTNAME}.${DNSDOMAIN} ${HOSTNAME}
+
+# The following lines are desirable for IPv6 capable hosts
+::1 localhost ip6-localhost ip6-loopback
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
+EOF
fi
if [ ! -e "/etc/resolv.conf" ]
if [ -n "${DNSDOMAIN}" ]
then
echo "domain ${DNSDOMAIN}" > /etc/resolv.conf
- echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
fi
- for i in ${IPV4DNS0} ${IPV4DNS1} ${IPV4DNS1} ${DNSSERVER1} ${DNSSERVER2}
+ for i in ${IPV4DNS0} ${IPV4DNS1} ${IPV4DNS1} ${DNSSERVERS}
do
if [ -n "$i" ] && [ "$i" != 0.0.0.0 ]
then
echo "nameserver $i" >> /etc/resolv.conf
fi
done
+
+ if [ -n "${DOMAINSEARCH}" ]
+ then
+ echo "search ${DOMAINSEARCH}" >> /etc/resolv.conf
+ elif [ -n "${DNSDOMAIN}" ]
+ then
+ echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
+ fi
fi
# Check if we have a network device at all