From 441d02dd402e632c3eba1062a55fc0d752e76003 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Wed, 29 Jan 2014 16:15:24 -0800 Subject: [PATCH] CLOUDSTACK-5986: Make dnsmasq handle dnsmasq.leases when dhcp_release is available The original issue has been exposed due to CloudStack VR would modify the dnsmasq.leases, thus make it unsync with dnsmasq's memory lease. Make the modification to let dnsmasq handle the lease file if dhcp_release is available. --- .../config/etc/init.d/cloud-early-config | 10 ++++ .../patches/debian/config/root/edithosts.sh | 53 +++++++++---------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-early-config b/systemvm/patches/debian/config/etc/init.d/cloud-early-config index d6dc8f02031..77e0f17361f 100755 --- a/systemvm/patches/debian/config/etc/init.d/cloud-early-config +++ b/systemvm/patches/debian/config/etc/init.d/cloud-early-config @@ -750,6 +750,16 @@ setup_dnsmasq() { sed -i -e "/^dhcp-client-update/d" /etc/dnsmasq.conf echo 'dhcp-client-update' >> /etc/dnsmasq.conf fi + + command -v dhcp_release > /dev/null 2>&1 + no_dhcp_release=$? + if [ $no_dhcp_release -eq 0 -a -z "$ETH0_IP6" ] + then + echo 1 > /var/cache/cloud/dnsmasq_managed_lease + sed -i -e "/^leasefile-ro/d" /etc/dnsmasq.conf + else + echo 0 > /var/cache/cloud/dnsmasq_managed_lease + fi } setup_sshd(){ diff --git a/systemvm/patches/debian/config/root/edithosts.sh b/systemvm/patches/debian/config/root/edithosts.sh index b82fb8e79be..8e7ddac8fd8 100755 --- a/systemvm/patches/debian/config/root/edithosts.sh +++ b/systemvm/patches/debian/config/root/edithosts.sh @@ -80,8 +80,7 @@ fi grep "redundant_router=1" /var/cache/cloud/cmdline > /dev/null no_redundant=$? -command -v dhcp_release > /dev/null 2>&1 -no_dhcp_release=$? +dnsmasq_managed_lease=`cat /var/cache/cloud/dnsmasq_managed_lease` wait_for_dnsmasq () { local _pid=$(pidof dnsmasq) @@ -96,12 +95,7 @@ wait_for_dnsmasq () { return 1 } -if [ $ipv6 ] -then - no_dhcp_release=1 -fi - -if [ $no_dhcp_release -eq 0 ] +if [ $dnsmasq_managed_lease ] then #release previous dhcp lease if present logger -t cloud "edithosts: releasing $ipv4" @@ -145,27 +139,30 @@ then fi fi -#delete leases to supplied mac and ip addresses -if [ $ipv4 ] +if [ $dnsmasq_managed_lease -eq 0 ] then - sed -i /$mac/d $DHCP_LEASES - sed -i /"$ipv4 "/d $DHCP_LEASES -fi -if [ $ipv6 ] -then - sed -i /$duid/d $DHCP_LEASES - sed -i /"$ipv6 "/d $DHCP_LEASES -fi -sed -i /"$host "/d $DHCP_LEASES + #delete leases to supplied mac and ip addresses + if [ $ipv4 ] + then + sed -i /$mac/d $DHCP_LEASES + sed -i /"$ipv4 "/d $DHCP_LEASES + fi + if [ $ipv6 ] + then + sed -i /$duid/d $DHCP_LEASES + sed -i /"$ipv6 "/d $DHCP_LEASES + fi + sed -i /"$host "/d $DHCP_LEASES -#put in the new entry -if [ $ipv4 ] -then - echo "0 $mac $ipv4 $host *" >> $DHCP_LEASES -fi -if [ $ipv6 ] -then - echo "0 $duid $ipv6 $host *" >> $DHCP_LEASES + #put in the new entry + if [ $ipv4 ] + then + echo "0 $mac $ipv4 $host *" >> $DHCP_LEASES + fi + if [ $ipv6 ] + then + echo "0 $duid $ipv6 $host *" >> $DHCP_LEASES + fi fi #edit hosts file as well @@ -215,7 +212,7 @@ pid=$(pidof dnsmasq) if [ "$pid" != "" ] then # use SIGHUP to avoid service outage if dhcp_release is available. - if [ $no_dhcp_release -eq 0 ] + if [ $dnsmasq_managed_lease ] then kill -HUP $pid else