X-Git-Url: http://git.grml.org/?p=live-boot-grml.git;a=blobdiff_plain;f=components%2F9990-networking.sh;fp=components%2F9990-networking.sh;h=9cc367442b91f31c2d1f384b73175266352efc20;hp=d5ed0fefda1ef3d1ea3666102abf7938250c8294;hb=f35e0cfae2a2c7b15ed6a38211264b7b26b80a43;hpb=2a8ce242c18e10dffe2b8e1887df0b4fb8982d3b diff --git a/components/9990-networking.sh b/components/9990-networking.sh index d5ed0fe..9cc3674 100755 --- a/components/9990-networking.sh +++ b/components/9990-networking.sh @@ -44,7 +44,7 @@ Device_from_bootif () if [ "$bootif_mac" = "$current_mac" ] then - ETHDEVICE="${device##*/},$ETHDEVICE" # use ethdevice + DEVICE=${device##*/} break fi fi @@ -52,24 +52,6 @@ Device_from_bootif () 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 @@ -80,20 +62,8 @@ do_netsetup () [ -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= - - 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 @@ -103,52 +73,78 @@ do_netsetup () 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="$(cat "/sys/class/net/${interface}/address")" + 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 <