[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[RFC] Moving dhclient script from netcfg to dhcp3 (was: /etc/dhcp3/dhclient.conf)



Now that we're fiddling with netcfg and dhcp3 anyway...

We currently carry the dhclient-script in netcfg, while that script should 
logically belong in dhcp3-client-udeb. It's clear that we need a simplified 
script and that we want to use 'ip' instead of 'ifconfig', but it is not 
clear why that script shouldn't just be part of the dhcp3 source package.

Attached a patch for dhcp3 that adds "our" dhclient-script to dhcp3-udeb 
in /sbin and drops the symlink from there to the file from netcfg (which is 
in /etc). This means there is no file conflict and we can just drop the 
script in netcfg once a new dhcp3 reaches testing.

If there are no objections to this plan, I will submit the patch against 
dhcp3 in a few days.

Notes
- I thought about doing a whitespace cleanup, but it seemed better to keep
  the space indenting for easier comparison to the regular script.
- The dhcp3-client package has two separate versions of the script: one for
  linux and one for kfreebsd. As we currently don't have separate scripts
  in the udeb either, I have not bothered about this, but the script
  probably will need to be adapted for kfreebsd at some point.

Cheers,
FJP

diff -u dhcp3-3.0.6.dfsg/debian/rules dhcp3-3.0.6.dfsg/debian/rules
--- dhcp3-3.0.6.dfsg/debian/rules
+++ dhcp3-3.0.6.dfsg/debian/rules
@@ -101,9 +101,9 @@
 	$(INSTALL_PROGRAM) -m 755 $(DESTDIR)/sbin/dhclient \
 		`pwd`/debian/dhcp3-client-udeb/sbin/
 
-	# udeb needs the os-specific script too
-	#cp `pwd`/debian/tmp/sbin/dhclient-script \
-	#	`pwd`/debian/dhcp3-client-udeb/sbin
+	# udeb needs simplified dhclient script
+	$(INSTALL_FILE) -m 755 `pwd`/debian/dhclient-script.udeb \
+		`pwd`/debian/dhcp3-client-udeb/sbin/dhclient-script
 
 	# Rename binaries so they do not conflict with the binaries in the
 	#	v2 packages.
diff -u dhcp3-3.0.6.dfsg/debian/changelog dhcp3-3.0.6.dfsg/debian/changelog
--- dhcp3-3.0.6.dfsg/debian/changelog
+++ dhcp3-3.0.6.dfsg/debian/changelog
@@ -1,3 +1,9 @@
+dhcp3 (3.0.6.dfsg-2~fjp) UNRELEASED; urgency=low
+
+  * Add reduced dhclient-script for the udeb (previously included in netcfg)
+
+ -- Frans Pop <fjp@debian.org>  Mon, 14 Jan 2008 06:35:37 +0100
+
 dhcp3 (3.0.6.dfsg-1) unstable; urgency=low
 
   * Repacked upstream tarball to exclude RFCs (closes: #438326)
reverted:
--- dhcp3-3.0.6.dfsg/debian/dhcp3-client-udeb.links
+++ dhcp3-3.0.6.dfsg.orig/debian/dhcp3-client-udeb.links
@@ -1 +0,0 @@
-etc/dhclient-script sbin/dhclient-script
only in patch2:
unchanged:
--- dhcp3-3.0.6.dfsg.orig/debian/dhclient-script.udeb
+++ dhcp3-3.0.6.dfsg/debian/dhclient-script.udeb
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+set -e
+
+# reduced dhclient-script for the Debian installer
+# changes by Joshua Kwan <joshk@triplehelix.org>,
+# Bastian Blank <waldi@debian.org>
+
+# dhclient-script for Linux. Dan Halbert, March, 1997.
+# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
+# Modified for Debian.  Matt Zimmerman and Eloy Paris, December 2003
+
+make_resolv_conf() {
+    if [ -n "$new_domain_name" ] || [ -n "$new_domain_name_servers" ]; then
+        local new_resolv_conf=/etc/resolv.conf.dhclient-new
+        rm -f $new_resolv_conf
+        if [ -n "$new_domain_name" ]; then
+            echo "search $new_domain_name" >>$new_resolv_conf
+        fi
+        for nameserver in $new_domain_name_servers; do
+            echo "nameserver $nameserver" >>$new_resolv_conf
+        done
+        mv $new_resolv_conf /etc/resolv.conf
+    fi
+}
+
+set_hostname() {
+    local current_hostname=$(cat /proc/sys/kernel/hostname)
+    if [ -z "$current_hostname" ] || [ "$current_hostname" = "(none)" ]; then
+        echo "$new_host_name" > /proc/sys/kernel/hostname
+    fi
+}
+
+if [ -n "$new_subnet_mask" ]; then
+    new_mask="/$(ptom $new_subnet_mask)"
+fi
+if [ -n "$old_subnet_mask" ]; then
+    old_mask="/$(ptom $old_subnet_mask)"
+fi
+
+if [ -n "$new_broadcast_address" ]; then
+    new_broadcast_arg="broadcast $new_broadcast_address"
+fi
+if [ -n "$old_broadcast_address" ]; then
+    old_broadcast_arg="broadcast $old_broadcast_address"
+fi
+    
+# Execute the operation
+case "$reason" in
+    MEDIUM|ARPCHECK|ARPSEND)
+        # Do nothing
+        ;;
+    PREINIT)
+	ip link set $interface up
+
+        # We need to give the kernel some time to get the interface up.
+        sleep 1
+        ;;
+    BOUND|RENEW|REBIND|REBOOT)
+
+        set_hostname
+        
+        if [ -n "$old_ip_address" ] && \
+             [ "$old_ip_address" != "$new_ip_address" ]; then
+            # IP address changed. Bringing down the interface will delete all routes,
+            # and clear the ARP cache.
+            ip addr del $old_ip_address$old_mask $old_broadcast_arg dev $interface
+            ip link set $interface down
+        fi
+
+        if [ -n "$new_interface_mtu" ]; then
+            ip link set $interface mtu $new_interface_mtu || true
+        fi
+
+        if [ -z "$old_ip_address" ] || [ "$old_ip_address" != "$new_ip_address" ] || \
+            [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then
+
+            ip link set $interface up
+	    ip addr flush dev $interface
+            ip addr add $new_ip_address$new_mask $new_broadcast_arg dev $interface
+
+            for router in $new_routers; do
+                ip route add default via $router
+            done
+        fi
+
+        make_resolv_conf
+
+        # Get the domain name into a file suitable for netcfg to read.
+        printf "$new_domain_name" > /tmp/domain_name
+
+        if [ -n "$new_ntp_servers" ]; then
+            printf "$new_ntp_servers" > /tmp/dhcp-ntp-servers
+        fi
+
+        ;;
+
+    EXPIRE|FAIL|RELEASE|STOP)
+        if [ -n "$old_ip_address" ]; then
+            # Shut down interface, which will delete routes and clear arp cache.
+            ip addr flush dev $interface
+            ip link set $interface down
+        fi
+
+        ;;
+
+    TIMEOUT)
+        ip link set $interface down
+
+        ;;
+esac
+
+exit 0

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: