Release new version 1:20210208+grml.5
[live-boot-grml.git] / components / 9990-networking.sh
index dbdc913..92c66ee 100755 (executable)
@@ -84,30 +84,20 @@ do_netsetup ()
                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
 
-               # this is tricky (and ugly) because ipconfig sometimes just hangs/runs into
-               # an endless loop; if execution fails give it two further tries, that's
-               # why we use '$devlist $devlist $devlist' for the other for loop
-               for dev in $devlist $devlist $devlist
+               for dev in $devlist
                do
                        echo "Executing ipconfig -t $ETHDEV_TIMEOUT $dev"
-                       ipconfig -t "$ETHDEV_TIMEOUT" $dev | tee -a /netboot.config &
-                       jobid=$!
-                       sleep "$ETHDEV_TIMEOUT" ; sleep 1
-                       if [ -r /proc/"$jobid"/status ]
-                       then
-                               echo "Killing job $jobid for device $dev as ipconfig ran into recursion..."
-                               kill -9 $jobid
-                       fi
+                       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
-                       if ifconfig $dev | grep -q 'inet.*addr:'
+                       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
@@ -115,9 +105,9 @@ do_netsetup ()
                done
        else
                for interface in ${DEVICE}; do
-                       ipconfig -t "$ETHDEV_TIMEOUT" ${interface} | tee /netboot-${interface}.config
+                       ipconfig -t "$ETHDEV_TIMEOUT" "${interface}" | tee "/netboot-${interface}.config"
 
-                       [ -e /run/net-${interface}.conf ] && . /run/net-${interface}.conf
+                       [ -e "/run/net-${interface}.conf" ] && . "/run/net-${interface}.conf"
 
                        if [ "$IPV4ADDR" != "0.0.0.0" ]
                        then
@@ -131,14 +121,38 @@ do_netsetup ()
                # 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" ]
@@ -148,16 +162,23 @@ do_netsetup ()
                        if [ -n "${DNSDOMAIN}" ]
                        then
                                echo "domain ${DNSDOMAIN}" > /etc/resolv.conf
-                               echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
                        fi
 
-                       for i in ${IPV4DNS0} ${IPV4DNS1} ${IPV4DNS1}
+                       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