From 26617b09c4f68ede03f044b5284f0ee3c54e55a4 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sun, 20 Dec 2009 18:10:11 +0100 Subject: [PATCH] Update dhcpcd. --- config/rootfiles/common/dhcpcd | 13 ++- config/rootfiles/core/34/filelists/dhcpcd | 1 + config/rootfiles/core/34/filelists/files | 2 + config/rootfiles/core/34/update.sh | 4 + doc/packages-list.txt | 2 +- lfs/dhcpcd | 14 ++-- src/initscripts/helper/getdnsfromdhcpc.pl | 2 +- src/initscripts/init.d/networking/dhcpcd.exe | 86 ++++++++++++++------ src/initscripts/init.d/networking/red | 45 ++++------ 9 files changed, 106 insertions(+), 63 deletions(-) create mode 120000 config/rootfiles/core/34/filelists/dhcpcd diff --git a/config/rootfiles/common/dhcpcd b/config/rootfiles/common/dhcpcd index 1471b8abf2..74a0f7acd6 100644 --- a/config/rootfiles/common/dhcpcd +++ b/config/rootfiles/common/dhcpcd @@ -1,4 +1,13 @@ -#var/ipfire/dhcpc -var/ipfire/dhcpc/dhcpcd.exe sbin/dhcpcd +#var/ipfire/dhcpc +var/ipfire/dhcpc/dhcpcd-hooks +#var/ipfire/dhcpc/dhcpcd-hooks/01-test +#var/ipfire/dhcpc/dhcpcd-hooks/10-mtu +#var/ipfire/dhcpc/dhcpcd-hooks/29-lookup-hostname +#var/ipfire/dhcpc/dhcpcd-hooks/30-hostname +#var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe +var/ipfire/dhcpc/dhcpcd-run-hooks +#usr/share/man/man5/dhcpcd.conf.5 +#usr/share/man/man8/dhcpcd-run-hooks.8 #usr/share/man/man8/dhcpcd.8 +var/ipfire/dhcpc/dhcpcd.conf diff --git a/config/rootfiles/core/34/filelists/dhcpcd b/config/rootfiles/core/34/filelists/dhcpcd new file mode 120000 index 0000000000..1e799dabb4 --- /dev/null +++ b/config/rootfiles/core/34/filelists/dhcpcd @@ -0,0 +1 @@ +../../../common/dhcpcd \ No newline at end of file diff --git a/config/rootfiles/core/34/filelists/files b/config/rootfiles/core/34/filelists/files index f26cef753d..ef7f6cc39c 100644 --- a/config/rootfiles/core/34/filelists/files +++ b/config/rootfiles/core/34/filelists/files @@ -1,5 +1,7 @@ etc/system-release etc/rc.d/init.d/networking/red +etc/rc.d/init.d/networking/dhcpcd.exe +etc/rc.d/helper/getdnsfromdhcpc.pl etc/rc.d/init.d/tmpfs boot/grub/grub.conf srv/web/ipfire/cgi-bin/index.cgi diff --git a/config/rootfiles/core/34/update.sh b/config/rootfiles/core/34/update.sh index 896e52db62..13bded866e 100644 --- a/config/rootfiles/core/34/update.sh +++ b/config/rootfiles/core/34/update.sh @@ -125,6 +125,10 @@ perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" # rm -rf /etc/sysconfig/lm_sensors # +# Delete old dhcpcd.exe... +# +rm -f /var/ipfire/dhcpc/dhcpcd.exe +# # This core-update need a reboot /usr/bin/logger -p syslog.emerg -t core-upgrade-34 "Upgrade finished. If you use a customized grub.cfg" /usr/bin/logger -p syslog.emerg -t core-upgrade-34 "Check it before reboot !!!" diff --git a/doc/packages-list.txt b/doc/packages-list.txt index f2c6bc5d38..99bb006056 100644 --- a/doc/packages-list.txt +++ b/doc/packages-list.txt @@ -86,7 +86,7 @@ * db-4.4.20 * dbus-1.0.3 * dhcp-3.1.0 -* dhcpcd-2.0.8 +* dhcpcd-5.1.3 * diffutils-2.8.1 * dnsmasq-2.45 * dosfstools-2.11 diff --git a/lfs/dhcpcd b/lfs/dhcpcd index 98d8080adc..840691381a 100644 --- a/lfs/dhcpcd +++ b/lfs/dhcpcd @@ -24,7 +24,7 @@ include Config -VER = 2.0.8 +VER = 5.1.3 THISAPP = dhcpcd-$(VER) DL_FILE = $(THISAPP).tar.bz2 @@ -40,7 +40,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = ec91c33b6d9cb46a42f9564e573fd249 +$(DL_FILE)_MD5 = f852090ad221b6331478f50fc1aa539e install : $(TARGET) @@ -70,10 +70,14 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && ./configure --prefix="" --sysconfdir=$(CONFIG_ROOT) \ - --mandir=/usr/share/man --disable-nls + cd $(DIR_APP) && ./configure --prefix="" --sysconfdir=/var/ipfire/dhcpc \ + --dbdir=/var/ipfire/dhcpc \ + --libexecdir=/var/ipfire/dhcpc \ + --mandir=/usr/share/man --disable-nls cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install - ln -sf /etc/rc.d/init.d/networking/dhcpcd.exe $(CONFIG_ROOT)/dhcpc/dhcpcd.exe + ln -sf /etc/rc.d/init.d/networking/dhcpcd.exe \ + $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks/70-dhcpcd.exe + rm -f $(CONFIG_ROOT)/dhcpc/dhcpcd-hooks/20-resolv.conf @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/initscripts/helper/getdnsfromdhcpc.pl b/src/initscripts/helper/getdnsfromdhcpc.pl index c1e59e265a..980d87a842 100644 --- a/src/initscripts/helper/getdnsfromdhcpc.pl +++ b/src/initscripts/helper/getdnsfromdhcpc.pl @@ -40,7 +40,7 @@ if (open(FILE, "${General::swroot}/red/iface")) { } -$dns = $dhcpc{'DNS'}; +$dns = $dhcpc{'domain_name_servers'}; @alldns = split(',', $dns); diff --git a/src/initscripts/init.d/networking/dhcpcd.exe b/src/initscripts/init.d/networking/dhcpcd.exe index f8331308c7..6c0807f778 100644 --- a/src/initscripts/init.d/networking/dhcpcd.exe +++ b/src/initscripts/init.d/networking/dhcpcd.exe @@ -1,38 +1,78 @@ -#!/bin/sh ######################################################################## # Begin # # Description : DHCP Client Script # -# Authors : Michael Tremer - mitch@ipfire.org +# Authors : Arne Fitzenreiter - arne_f@ipfire.org # -# Version : 01.00 +# Version : 02.00 # # Notes : # ######################################################################## -. /etc/sysconfig/rc -. ${rc_functions} +. /etc/sysconfig/rc +. $rc_functions -eval $(/usr/local/bin/readhash "$1") -case "$2" in - up) - logger -p local0.info -t dhcpcd.exe[$$] "${INTERFACE} has been configured with old IP=${IPADDR}" - touch /var/ipfire/red/active - run_subdir ${rc_base}/init.d/networking/red.up/ - ;; - new) - logger -p local0.info -t dhcpcd.exe[$$] "${INTERFACE} has been configured with new IP=${IPADDR}" +eval $(/usr/local/bin/readhash /var/ipfire/dns/settings) + +create_dhcpcd_info() +{ + set | grep "^new_" | sed "s|^new_||g" | \ + sort > /var/ipfire/dhcpc/dhcpcd-$interface.info + + # If interface is not red0.8 (vdsl-iptv) update /var/ipfire/red + if [ "$interface" != "red0.8" ]; then + + #Check if we have to restart the services at update + [ ! -e "/var/ipfire/red/active" ] update=1; + if [ "$old_domain_name_service" != "$new_domain_name_service" ]; then + update=1; + fi + if [ "$old_ip_address" != "$new_ip_address" ]; then + update=1; + fi + if [ "$old_routers" != "$new_routers" ]; then + update=1; + fi + + #Get DNS from dhcp + if [ -n "$DNS0" ] && [ -n "$DNS1" ]; then + logger -p local0.info -t dhcpcd.exe[$$] "Overwritting DNS-Server addresses with ${DNS0},${DNS1}" + echo -n ${DNS0} > /var/ipfire/red/dns1 + echo -n ${DNS1} > /var/ipfire/red/dns2 + else + echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 1` > /var/ipfire/red/dns1 + echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 2` > /var/ipfire/red/dns2 + fi + + #Get IP Address + echo "$new_ip_address" > /var/ipfire/red/local-ipaddress + + #Get default gateway + grep -v " gateway$" /etc/hosts > /tmp/hosts + echo "$new_routers gateway" >> /tmp/hosts + mv /tmp/hosts /etc/hosts + + fi + if [ $update ]; then [ -e "/var/ipfire/red/active" ] || touch /var/ipfire/red/active - run_subdir ${rc_base}/init.d/networking/red.down/ + echo "$new_routers" > /var/ipfire/red/remote-ipaddress + logger -p local0.info -t dhcpcd.exe[$$] "$interface has been (re)configured with IP=$new_ip_address" run_subdir ${rc_base}/init.d/networking/red.up/ - ;; - down) - logger -p local0.info -t dhcpcd.exe[$$] "${INTERFACE} has been brought down" - rm -f /var/ipfire/red/active - run_subdir ${rc_base}/init.d/networking/red.down/ - ;; -esac + touch /var/ipfire/red/active + fi +} + +remove_dhcpcd_info() +{ + rm -f /var/ipfire/dhcpc/dhcpcd-$interface.info + logger -p local0.info -t dhcpcd.exe[$$] "${interface} has been brought down" + rm -f /var/ipfire/red/active + run_subdir ${rc_base}/init.d/networking/red.down/ +} -# End +case "$reason" in +BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC) create_dhcpcd_info;; +PREINIT|EXPIRE|FAIL|IPV4LL|NAK|NOCARRIER|RELEASE|STOP) remove_dhcpcd_info;; +esac diff --git a/src/initscripts/init.d/networking/red b/src/initscripts/init.d/networking/red index 21952f475c..cadac7c490 100644 --- a/src/initscripts/init.d/networking/red +++ b/src/initscripts/init.d/networking/red @@ -80,8 +80,8 @@ fi PIDFILE="/var/run/dhcpcd-${DEVICE}.pid" LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.info" -DHCP_START="-N -R -L /var/ipfire/dhcpc -c /var/ipfire/dhcpc/dhcpcd.exe " -DHCP_STOP="-k -c /var/ipfire/dhcpc/dhcpcd.exe " +DHCP_START=" " +DHCP_STOP="-k " case "${1}" in start) @@ -142,7 +142,7 @@ case "${1}" in if [ -e $LEASEINFO ]; then boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." . $LEASEINFO - if [ "$LEASETIME" = "4294967295" ]; then + if [ "$dhcp_lease_time" = "4294967295" ]; then # do nothing, just echo ok echo "" echo_ok @@ -167,7 +167,7 @@ case "${1}" in fi fi - boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..." + boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..." echo -n "${DEVICE}" > /var/ipfire/red/iface ## Create & Enable vnstat @@ -201,35 +201,18 @@ case "${1}" in echo_ok boot_mesg " DHCP Assigned Settings for ${DEVICE}:" boot_mesg_flush - boot_mesg " IP Address: $IPADDR" + boot_mesg " IP Address: $ip_address" boot_mesg_flush if [ -n "${RED_DHCP_HOSTNAME}" ]; then boot_mesg " Hostname: $RED_DHCP_HOSTNAME" boot_mesg_flush fi - boot_mesg " Subnet Mask: $NETMASK" + boot_mesg " Subnet Mask: $subnet_mask" boot_mesg_flush - boot_mesg " Default Gateway: $GATEWAY" + boot_mesg " Default Gateway: $routers" boot_mesg_flush - boot_mesg " DNS Server: $DNS" + boot_mesg " DNS Server: $domain_name_servers" boot_mesg_flush - if [ -n "$DNS0" ] && [ -n "$DNS1" ]; then - boot_mesg "Overwritting DNS-Server addresses with ${DNS0},${DNS1}" - echo -n ${DNS0} > /var/ipfire/red/dns1 - echo -n ${DNS1} > /var/ipfire/red/dns2 - evaluate_retval - else - echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 1` > /var/ipfire/red/dns1 - echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 2` > /var/ipfire/red/dns2 - fi - - . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.info - echo "$IPADDR" > /var/ipfire/red/local-ipaddress - grep -v "gateway" /etc/hosts > /tmp/hosts - echo "$GATEWAY gateway" >> /tmp/hosts - mv /tmp/hosts /etc/hosts - echo "$GATEWAY" > /var/ipfire/red/remote-ipaddress - touch /var/ipfire/red/active else echo "" $(exit "$RET") @@ -266,7 +249,7 @@ case "${1}" in if [ "${RED_VDSL_IPTV_DISABLE}" == "0" ]; then PIDFILE="/var/run/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.pid" LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.info" - DHCP_START="-N -R -L /var/ipfire/dhcpc " + DHCP_START=" " DHCP_STOP="-k " # Test to see if there is a stale pid file if [ -f "$PIDFILE" ]; then @@ -294,15 +277,15 @@ case "${1}" in echo_ok boot_mesg " DHCP Assigned Settings for ${DEVICE}.${RED_VDSL_IPTV_VLAN}:" boot_mesg_flush - boot_mesg " IP Address: $IPADDR" + boot_mesg " IP Address: $ip_address" boot_mesg_flush boot_mesg " Hostname: $RED_DHCP_HOSTNAME" boot_mesg_flush - boot_mesg " Subnet Mask: $NETMASK" + boot_mesg " Subnet Mask: $subnet_mask" boot_mesg_flush - boot_mesg " Default Gateway: $GATEWAY" + boot_mesg " Default Gateway: $routers" boot_mesg_flush - boot_mesg " DNS Server: $DNS" + boot_mesg " DNS Server: $domain_name_servers" boot_mesg_flush else @@ -543,7 +526,7 @@ case "${1}" in if [ -e $LEASEINFO ]; then boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." . $LEASEINFO - if [ "$LEASETIME" = "4294967295" ]; then + if [ "$dchp_lease_time" = "4294967295" ]; then # do nothing, just echo ok echo "" echo_ok -- 2.39.2