networking_grml: DNS for systems without resolvconf
[live-boot-grml.git] / debian / patches / 15_networking_grml.dpatch
1 #! /bin/sh /usr/share/dpatch/dpatch-run
2 ## 15_networking_grml.dpatch by Christian Hofstaedtler <ch@grml.org>
3 ## Licensed under GPLv2+.
4 ##
5 ## All lines beginning with `## DP:' are a description of the patch.
6 ## DP: Ship our own networking script, which is compatible with the kernel's
7 ## DP: notion of ip= as well as resolvconf.
8
9 @DPATCH@
10
11 diff a/scripts/live-bottom/23networking_grml b/scripts/live-bottom/23networking_grml
12 --- /dev/null
13 +++ b/scripts/live-bottom/23networking_grml
14 @@ -0,0 +1,102 @@
15 +#!/bin/sh
16 +
17 +#set -e
18 +
19 +# initramfs-tools header
20 +
21 +PREREQ=""
22 +
23 +prereqs()
24 +{
25 +   echo "${PREREQ}"
26 +}
27 +
28 +case "${1}" in
29 +   prereqs)
30 +      prereqs
31 +      exit 0
32 +   ;;
33 +esac
34 +
35 +. /scripts/live-functions
36 +
37 +if [ -n "${NONETWORKING}" ]; then
38 +   exit 0
39 +fi
40 +
41 +modprobe af_packet # req'd for DHCP
42 +
43 +# initialize udev
44 +# (this /might/ be required for firmware loading to complete)
45 +if grep -q noudev /proc/cmdline; then
46 +   log_begin_msg "Networking: Skipping udev as requested via bootoption noudev."
47 +else
48 +   udevadm trigger
49 +   udevadm settle
50 +fi
51 +
52 +if [ -n "${IP}" ]; then
53 +   # call into initramfs-tools provided network setup functions, so basic
54 +   # networking is fine.
55 +   log_begin_msg "Networking: Waiting for basic network to come up..."
56 +   configure_networking
57 +fi
58 +
59 +# prepare a new /etc/network/interfaces file (and, possibly, a new /etc/resolv.conf)
60 +IFFILE="/root/etc/network/interfaces"
61 +RESOLVCONF="/root/etc/resolv.conf"
62 +
63 +# config for loopback networking
64 +cat > $IFFILE << EOF
65 +# Initially generated on boot by initramfs' 23networking.
66 +
67 +auto lo
68 +iface lo inet loopback
69 +
70 +EOF
71 +
72 +# generate config for each present network device
73 +for interface in /sys/class/net/eth* /sys/class/net/ath* /sys/class/net/wlan*; do
74 +    [ -e ${interface} ] || continue
75 +    interface=$(basename ${interface})
76 +    method="dhcp"
77 +
78 +    # NODHCP or a previously run ipconfig mean that ifupdown should never
79 +    # touch this interface (IP-stack wise).
80 +    netconfig=/tmp/net-${interface}.conf
81 +    if [ -n "$NODHCP" ] || [ -e "${netconfig}" ]; then
82 +        method="manual"
83 +    fi
84 +
85 +    cat >> $IFFILE << EOF
86 +allow-hotplug ${interface}
87 +iface ${interface} inet ${method}
88 +EOF
89 +
90 +    # DNS for resolvconf and /etc/resolv.conf
91 +    if [ -e "${netconfig}" ]; then
92 +        . "${netconfig}"
93 +        if [ -n "${DNSDOMAIN}" ]; then
94 +            echo "    dns-search ${DNSDOMAIN}" >> $IFFILE
95 +        fi
96 +        # make sure we don't have any 0.0.0.0 nameservers
97 +        IPV4DNSLIST=""
98 +        for IPV4DNS in ${IPV4DNS0} ${IPV4DNS1}; do
99 +            [ -n "${IPV4DNS}" ] || continue
100 +            [ "${IPV4DNS}" != "0.0.0.0" ] || continue
101 +            IPV4DNSLIST="${IPV4DNSLIST}${IPV4DNS} "
102 +        done
103 +        if [ -n "${IPV4DNSLIST}" ]; then
104 +            echo "    dns-nameservers ${IPV4DNSLIST}" >> $IFFILE
105 +            for IPV4DNS in ${IPV4DNSLIST}; do
106 +                echo "nameserver ${IPV4DNS}" >> $RESOLVCONF
107 +            done
108 +        fi
109 +    fi
110 +    unset DEVICE IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1 HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH filename
111 +    unset IPV4DNS IPV4DNSLIST
112 +
113 +    echo>> $IFFILE
114 +done
115 +
116 +