Magellan Linux

Contents of /trunk/dracut/patches/dracut-043-network-support-udhcpc-dhcpcd.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2588 - (show annotations) (download)
Fri Jun 19 13:05:22 2015 UTC (8 years, 10 months ago) by niro
File size: 16384 byte(s)
-re-worked for 043
1 diff -Naur dracut-043/modules.d/40network/dhcpcd-script.sh dracut-043-udhcpc/modules.d/40network/dhcpcd-script.sh
2 --- dracut-043/modules.d/40network/dhcpcd-script.sh 1970-01-01 01:00:00.000000000 +0100
3 +++ dracut-043-udhcpc/modules.d/40network/dhcpcd-script.sh 2015-06-18 15:29:28.147842659 +0200
4 @@ -0,0 +1,161 @@
5 +#!/bin/sh
6 +
7 +PATH=/usr/sbin:/usr/bin:/sbin:/bin
8 +
9 +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
10 +type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
11 +
12 +# We already need a set netif here
13 +netif=$interface
14 +
15 +# Huh? Interface configured?
16 +[ -f "/tmp/net.$netif.up" ] && exit 0
17 +
18 +setup_interface() {
19 + ip=$new_ip_address
20 + mtu=$new_interface_mtu
21 + mask=$new_subnet_mask
22 + bcast=$new_broadcast_address
23 + gw=${new_routers%%,*}
24 + domain=$new_domain_name
25 + search=$(printf -- "$new_domain_search")
26 + namesrv=$new_domain_name_servers
27 + hostname=$new_host_name
28 + lease_time=$new_dhcp_lease_time
29 +
30 + [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
31 +
32 + # Taken from debian dhclient-script:
33 + # The 576 MTU is only used for X.25 and dialup connections
34 + # where the admin wants low latency. Such a low MTU can cause
35 + # problems with UDP traffic, among other things. As such,
36 + # disallow MTUs from 576 and below by default, so that broken
37 + # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc).
38 + if [ -n "$mtu" ] && [ $mtu -gt 576 ] ; then
39 + if ! ip link set $netif mtu $mtu ; then
40 + ip link set $netif down
41 + ip link set $netif mtu $mtu
42 + linkup $netif
43 + fi
44 + fi
45 +
46 + ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} \
47 + valid_lft ${lease_time} preferred_lft ${lease_time} \
48 + dev $netif
49 +
50 + if [ -n "$gw" ] ; then
51 + if [ "$mask" == "255.255.255.255" ] ; then
52 + # point-to-point connection => set explicit route to gateway
53 + echo ip route add $gw dev $netif > /tmp/net.$netif.gw
54 + fi
55 + echo ip route replace default via $gw dev $netif >> /tmp/net.$netif.gw
56 + fi
57 +
58 + [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
59 + if [ -n "$namesrv" ] ; then
60 + for s in $namesrv; do
61 + echo nameserver $s
62 + done
63 + fi >> /tmp/net.$netif.resolv.conf
64 +
65 + # Note: hostname can be fqdn OR short hostname, so chop off any
66 + # trailing domain name and explicity add any domain if set.
67 + [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
68 +}
69 +
70 +setup_interface6() {
71 + domain=$new_domain_name
72 + search=$(printf -- "$new_domain_search")
73 + namesrv=$new_domain_name_servers
74 + hostname=$new_host_name
75 + [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
76 + [ -n "$new_max_life" ] && lease_time=$new_max_life
77 + preferred_lft=$lease_time
78 + [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
79 +
80 + [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override
81 +
82 + ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \
83 + dev ${netif} scope global \
84 + ${lease_time:+valid_lft $lease_time} \
85 + ${preferred_lft:+preferred_lft ${preferred_lft}}
86 +
87 + [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf
88 + if [ -n "$namesrv" ] ; then
89 + for s in $namesrv; do
90 + echo nameserver $s
91 + done
92 + fi >> /tmp/net.$netif.resolv.conf
93 +
94 + # Note: hostname can be fqdn OR short hostname, so chop off any
95 + # trailing domain name and explicity add any domain if set.
96 + [ -n "$hostname" ] && echo "echo ${hostname%.$domain}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net.$netif.hostname
97 +}
98 +
99 +case $reason in
100 + PREINIT)
101 + echo "dhcp: PREINIT $netif up"
102 + linkup $netif
103 + ;;
104 +
105 + PREINIT6)
106 + echo "dhcp: PREINIT6 $netif up"
107 + linkup $netif
108 + wait_for_ipv6_dad $netif
109 + ;;
110 +
111 + BOUND)
112 + echo "dhcp: BOND setting $netif"
113 + unset layer2
114 + if [ -f /sys/class/net/$netif/device/layer2 ]; then
115 + read layer2 < /sys/class/net/$netif/device/layer2
116 + fi
117 + if [ "$layer2" != "0" ]; then
118 + if ! arping -q -D -c 2 -I $netif $new_ip_address ; then
119 + warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
120 + exit 1
121 + fi
122 + fi
123 + unset layer2
124 + setup_interface
125 + set | while read line || [ -n "$line" ]; do
126 + [ "${line#new_}" = "$line" ] && continue
127 + echo "$line"
128 + done >/tmp/dhcpcd.$netif.dhcpopts
129 +
130 + {
131 + echo '. /lib/net-lib.sh'
132 + echo "setup_net $netif"
133 + echo "source_hook initqueue/online $netif"
134 + [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
135 + echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
136 + } > $hookdir/initqueue/setup_net_$netif.sh
137 +
138 + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhcpcd-$netif.sh
139 + >/tmp/net.$netif.up
140 + ;;
141 +
142 + BOUND6)
143 + echo "dhcp: BOND6 setting $netif"
144 + setup_interface6
145 +
146 + set | while read line || [ -n "$line" ]; do
147 + [ "${line#new_}" = "$line" ] && continue
148 + echo "$line"
149 + done >/tmp/dhcpcd.$netif.dhcpopts
150 +
151 + {
152 + echo '. /lib/net-lib.sh'
153 + echo "setup_net $netif"
154 + echo "source_hook initqueue/online $netif"
155 + [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
156 + echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
157 + } > $hookdir/initqueue/setup_net_$netif.sh
158 +
159 + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhcpcd-$netif.sh
160 + >/tmp/net.$netif.up
161 + ;;
162 + *) echo "dhcp: $reason";;
163 +esac
164 +
165 +exit 0
166 diff -Naur dracut-043/modules.d/40network/ifup.sh dracut-043-udhcpc/modules.d/40network/ifup.sh
167 --- dracut-043/modules.d/40network/ifup.sh 2015-06-15 12:27:21.000000000 +0200
168 +++ dracut-043-udhcpc/modules.d/40network/ifup.sh 2015-06-18 15:33:15.498572679 +0200
169 @@ -10,6 +10,23 @@
170 type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
171 type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
172
173 +# load magellan settings
174 +[ -f /etc/conf.d/network ] && . /etc/conf.d/network
175 +# some sane defaults
176 +if [[ -n $DEFAULT_DHCP_PROG ]]
177 +then
178 + DHCP_PROG="$DEFAULT_DHCP_PROG"
179 +else
180 + DHCP_PROG="/sbin/dhcpcd"
181 +fi
182 +if [[ -n $DEFAULT_DHCP_START ]]
183 +then
184 + DHCP_START="$DEFAULT_DHCP_START"
185 +else
186 + DHCP_START="-t 10"
187 +fi
188 +DHCP_PROG_NAME="${DHCP_PROG##*/}"
189 +
190 # Huh? No $1?
191 [ -z "$1" ] && exit 1
192
193 @@ -88,6 +105,8 @@
194
195 # Run dhclient
196 do_dhcp() {
197 + local opts
198 +
199 # dhclient-script will mark the netif up and generate the online
200 # event for nfsroot
201 # XXX add -V vendor class and option parsing per kernel
202 @@ -98,9 +117,27 @@
203 echo "No carrier detected"
204 return 1
205 fi
206 - echo "Starting dhcp for interface $netif"
207 - dhclient "$@" -1 -q -cf /etc/dhclient.conf -pf /tmp/dhclient.$netif.pid -lf /tmp/dhclient.$netif.lease $netif \
208 - || echo "dhcp failed"
209 +
210 + case $DHCP_PROG_NAME in
211 + dhclient)
212 + opts="$@ -1 -q"
213 + opts+=" -cf /etc/dhclient.conf"
214 + opts+=" -pf /tmp/$DHCP_PROG_NAME.$netif.pid"
215 + opts+=" -lf /tmp/$DHCP_PROG_NAME.$netif.lease"
216 + ;;
217 +
218 + dhcpcd)
219 + opts="$@ -q"
220 + ;;
221 +
222 + udhcpc)
223 + opts="-q"
224 + opts+=" -p /tmp/$DHCP_PROG_NAME.$netif.pid"
225 + ;;
226 + esac
227 +
228 + echo "Starting dhcp ($DHCP_PROG_NAME) for interface $netif"
229 + $DHCP_PROG $opts $DHCP_START $netif || echo "dhcp failed"
230 }
231
232 load_ipv6() {
233 diff -Naur dracut-043/modules.d/40network/kill-dhcpcd.sh dracut-043-udhcpc/modules.d/40network/kill-dhcpcd.sh
234 --- dracut-043/modules.d/40network/kill-dhcpcd.sh 1970-01-01 01:00:00.000000000 +0100
235 +++ dracut-043-udhcpc/modules.d/40network/kill-dhcpcd.sh 2015-06-18 15:35:31.898205094 +0200
236 @@ -0,0 +1,15 @@
237 +#!/bin/sh
238 +
239 +for f in /run/dhcpcd.*.pid /run/dhcpcd.pid; do
240 + [ -e $f ] || continue
241 + read PID < $f;
242 + kill $PID >/dev/null 2>&1
243 +done
244 +
245 +sleep 0.1
246 +
247 +for f in /tmp/dhcpcd.*.pid /run/dhcpcd.pid; do
248 + [ -e $f ] || continue
249 + read PID < $f;
250 + kill -9 $PID >/dev/null 2>&1
251 +done
252 diff -Naur dracut-043/modules.d/40network/kill-udhcpc.sh dracut-043-udhcpc/modules.d/40network/kill-udhcpc.sh
253 --- dracut-043/modules.d/40network/kill-udhcpc.sh 1970-01-01 01:00:00.000000000 +0100
254 +++ dracut-043-udhcpc/modules.d/40network/kill-udhcpc.sh 2015-06-18 15:37:39.388924036 +0200
255 @@ -0,0 +1,15 @@
256 +#!/bin/sh
257 +
258 +for f in /tmp/udhcpc.*.pid; do
259 + [ -e $f ] || continue
260 + read PID < $f;
261 + kill $PID >/dev/null 2>&1
262 +done
263 +
264 +sleep 0.1
265 +
266 +for f in /tmp/udhcpc.*.pid; do
267 + [ -e $f ] || continue
268 + read PID < $f;
269 + kill -9 $PID >/dev/null 2>&1
270 +done
271 diff -Naur dracut-043/modules.d/40network/module-setup.sh dracut-043-udhcpc/modules.d/40network/module-setup.sh
272 --- dracut-043/modules.d/40network/module-setup.sh 2015-06-15 12:27:21.000000000 +0200
273 +++ dracut-043-udhcpc/modules.d/40network/module-setup.sh 2015-06-18 15:43:49.200197822 +0200
274 @@ -3,8 +3,9 @@
275 # called by dracut
276 check() {
277 local _program
278 + . /etc/conf.d/network
279
280 - require_binaries ip arping dhclient || return 1
281 + require_binaries ip ifconfig route arping $DEFAULT_DHCP_PROG || return 1
282
283 return 255
284 }
285 @@ -23,17 +24,20 @@
286 # called by dracut
287 install() {
288 local _arch _i _dir
289 - inst_multiple ip arping dhclient sed
290 + local _dhcp_prog_name
291 + local _file
292 + . /etc/conf.d/network
293 + _dhcp_prog_name="${DEFAULT_DHCP_PROG##*/}"
294 +
295 + inst_multiple ip arping $_dhcp_prog_name sed
296 + inst_multiple ifconfig route
297 inst_multiple -o ping ping6
298 inst_multiple -o brctl
299 inst_multiple -o teamd teamdctl teamnl
300 inst_simple /etc/libnl/classid
301 inst_script "$moddir/ifup.sh" "/sbin/ifup"
302 inst_script "$moddir/netroot.sh" "/sbin/netroot"
303 - inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
304 inst_simple "$moddir/net-lib.sh" "/lib/net-lib.sh"
305 - inst_simple -H "/etc/dhclient.conf"
306 - cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
307 inst_hook pre-udev 50 "$moddir/ifname-genrules.sh"
308 inst_hook pre-udev 60 "$moddir/net-genrules.sh"
309 inst_hook cmdline 91 "$moddir/dhcp-root.sh"
310 @@ -44,7 +48,30 @@
311 inst_hook cmdline 97 "$moddir/parse-bridge.sh"
312 inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
313 inst_hook cmdline 99 "$moddir/parse-ifname.sh"
314 - inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
315 + case $_dhcp_prog_name in
316 + dhclient)
317 + inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
318 + inst_simple -H "/etc/dhclient.conf"
319 + cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
320 + inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
321 + ;;
322 +
323 + udhcpc)
324 + inst_script "$moddir/udhcpc-script.sh" "/usr/share/udhcpc/default.script"
325 + inst_hook cleanup 10 "$moddir/kill-udhcpc.sh"
326 + ;;
327 +
328 + dhcpcd)
329 + inst_simple "/etc/dhcpcd.conf"
330 + inst_script -o /usr/lib/dhcpcd/dhcpcd-run-hooks
331 + for _file in $(find /usr/lib/dhcpcd/dhcpcd-hooks -type f); do
332 + inst_simple -o $_file
333 + done
334 + inst_simple "$moddir/dhcpcd-script.sh" "/usr/lib/dhcpcd/dhcpcd-hooks/90-netroot"
335 + inst_hook cleanup 10 "$moddir/kill-dhcpcd.sh"
336 + ;;
337 + esac
338 + inst_simple /etc/conf.d/network
339
340 _arch=$(uname -m)
341
342 diff -Naur dracut-043/modules.d/40network/net-lib.sh dracut-043-udhcpc/modules.d/40network/net-lib.sh
343 --- dracut-043/modules.d/40network/net-lib.sh 2015-06-15 12:27:21.000000000 +0200
344 +++ dracut-043-udhcpc/modules.d/40network/net-lib.sh 2015-06-18 15:46:26.655608268 +0200
345 @@ -97,6 +97,8 @@
346 [ -e /tmp/net.$netif.hostname ] && . /tmp/net.$netif.hostname
347 [ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override
348 [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
349 + [ -e /tmp/udhcpc.$netif.dhcpopts ] && . /tmp/udhcpc.$netif.dhcpopts
350 + [ -e /tmp/dhcpcd.$netif.dhcpopts ] && . /tmp/dhcpcd.$netif.dhcpopts
351 # set up resolv.conf
352 [ -e /tmp/net.$netif.resolv.conf ] && \
353 cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf
354 @@ -161,6 +163,12 @@
355 for f in /tmp/dhclient.$i.*; do
356 [ -f $f ] && cp -f $f /tmp/net.${f#/tmp/dhclient.}
357 done
358 + for f in /tmp/udhcpc.$i.*; do
359 + [ -f $f ] && cp -f $f /tmp/net.${f#/tmp/udhcpc.}
360 + done
361 + for f in /tmp/dhcpcd.$i.*; do
362 + [ -f $f ] && cp -f $f /tmp/net.${f#/tmp/dhcpcd.}
363 + done
364 done
365 echo $IFACES > /tmp/.net.ifaces.new
366 mv /tmp/.net.ifaces.new /tmp/net.ifaces
367 diff -Naur dracut-043/modules.d/40network/netroot.sh dracut-043-udhcpc/modules.d/40network/netroot.sh
368 --- dracut-043/modules.d/40network/netroot.sh 2015-06-15 12:27:21.000000000 +0200
369 +++ dracut-043-udhcpc/modules.d/40network/netroot.sh 2015-06-18 15:47:30.014968301 +0200
370 @@ -36,6 +36,8 @@
371 if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then
372 # Load dhcp options
373 [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
374 + [ -e /tmp/udhcpc.$netif.dhcpopts ] && . /tmp/udhcpc.$netif.dhcpopts
375 + [ -e /tmp/dhcpcd.$netif.dhcpopts ] && . /tmp/dhcpcd.$netif.dhcpopts
376
377 # If we have a specific bootdev with no dhcpoptions or empty root-path,
378 # we die. Otherwise we just warn
379 diff -Naur dracut-043/modules.d/40network/udhcpc-script.sh dracut-043-udhcpc/modules.d/40network/udhcpc-script.sh
380 --- dracut-043/modules.d/40network/udhcpc-script.sh 1970-01-01 01:00:00.000000000 +0100
381 +++ dracut-043-udhcpc/modules.d/40network/udhcpc-script.sh 2015-06-18 15:51:55.653283630 +0200
382 @@ -0,0 +1,102 @@
383 +#!/bin/sh
384 +
385 +# global options passed by udhcpc
386 +# what to run
387 +# $1 - which command to run, possible are: bound|deconfig|nak|renew
388 +# router - routers address
389 +# subnet - the subnet
390 +# dhcptype - type of dhcp
391 +# interface - which iface gets configured
392 +# serverid - ip of the dhcd server
393 +# dns - dns to use
394 +# ip - ip-address to use
395 +# lease - lease time of a dhcp configuration
396 +# mask - network mask to use
397 +
398 +PATH=/usr/sbin:/usr/bin:/sbin:/bin
399 +
400 +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
401 +type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh
402 +
403 +# We already need a set netif here
404 +netif="${interface}"
405 +
406 +# Huh? Interface configured?
407 +[ -f "/tmp/net.$netif.up" ] && exit 0
408 +
409 +# renew dhcp leases
410 +bound()
411 +{
412 + local RESOLV_CONF="/etc/resolv.conf"
413 + local BROADCAST
414 + local NETMASK
415 + local i
416 +
417 + [[ -n ${broadcast} ]] && BROADCAST="broadcast ${broadcast}"
418 + [[ -n ${subnet} ]] && NETMASK="netmask ${subnet}"
419 +
420 + /sbin/ifconfig ${interface} ${ip} ${BROADCAST} ${NETMASK}
421 +
422 + if [ -n "${router}" ]
423 + then
424 + echo "deleting routers"
425 + while /sbin/route del default gw 0.0.0.0 dev ${interface}
426 + do :
427 + done
428 +
429 + metric=0
430 + for i in ${router}
431 + do
432 + /sbin/route add default gw ${i} dev ${interface} metric $((metric++))
433 + done
434 + fi
435 +
436 + echo -n > ${RESOLV_CONF}
437 + [[ -n ${domain} ]] && echo "domain ${domain}" >> ${RESOLV_CONF}
438 + for i in ${dns}
439 + do
440 + echo adding dns ${i}
441 + echo "nameserver ${i}" >> ${RESOLV_CONF}
442 + done
443 +
444 + set | while read line; do
445 + [ "${line#new_}" = "$line" ] && continue
446 + echo "$line"
447 + done >/tmp/udhcpc.$netif.dhcpopts
448 +
449 + {
450 + echo '. /lib/net-lib.sh'
451 + echo "setup_net $netif"
452 + echo "source_hook initqueue/online $netif"
453 + [ -e /tmp/net.$netif.manualup ] || echo "/sbin/netroot $netif"
454 + echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
455 + } > $hookdir/initqueue/setup_net_$netif.sh
456 +
457 + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/udhcpc-$netif.sh
458 + >/tmp/net.$netif.up
459 +}
460 +
461 +renew()
462 +{
463 + # same as bound()
464 + bound
465 +}
466 +
467 +deconfig()
468 +{
469 + /sbin/ifconfig ${interface} 0.0.0.0
470 +}
471 +
472 +# what to do if a dhcp request failed
473 +nak()
474 +{
475 + echo "Received a NAK: ${message}"
476 +}
477 +
478 +
479 +case $1 in
480 + bound) bound ;;
481 + renew) renew ;;
482 + deconfig) deconfig ;;
483 + nak) nak ;;
484 +esac