From 95da0c8dc0a041bdff8bd4b3f7cab68bc7145fa8 Mon Sep 17 00:00:00 2001 From: otubo Date: Mon, 15 Aug 2011 00:49:23 +0000 Subject: [PATCH] Fix for bug #3391659, by Renan Guerra git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10287 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/dhcp.pm | 53 +++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/dhcp.pm b/xCAT-server/lib/xcat/plugins/dhcp.pm index e0315bd22..12395f860 100644 --- a/xCAT-server/lib/xcat/plugins/dhcp.pm +++ b/xCAT-server/lib/xcat/plugins/dhcp.pm @@ -50,6 +50,7 @@ use Math::BigInt; my $dhcpconffile = $^O eq 'aix' ? '/etc/dhcpsd.cnf' : '/etc/dhcpd.conf'; my %dynamicranges; #track dynamic ranges defined to see if a host that resolves is actually a dynamic address my %netcfgs; +my $distro = xCAT::Utils->osver(); # dhcp 4.x will use /etc/dhcp/dhcpd.conf as the config file my $dhcp6conffile; @@ -59,6 +60,11 @@ if ( $^O ne 'aix' and -d "/etc/dhcp" ) { } my $usingipv6; +# is this ubuntu ? +if ( $distro =~ /ubuntu*/ ){ + $dhcpconffile = '/etc/dhcp3/dhcpd.conf'; +} + sub ipIsDynamic { #meant to be v4/v6 agnostic. DHCPv6 however takes some care to allow a dynamic range to overlap static reservations #xCAT will for now continue to advise people to keep their nodes out of the dynamic range @@ -1013,9 +1019,9 @@ sub process_request if ( $^O ne 'aix') { -#add the active nics to /etc/sysconfig/dhcpd +#add the active nics to /etc/sysconfig/dhcpd or /etc/default/dhcp3-server(ubuntu) my $dhcpver; - foreach $dhcpver ("dhcpd","dhcpd6") { + foreach $dhcpver ("dhcpd","dhcpd6","dhcp3-server") { if (-e "/etc/sysconfig/$dhcpver") { open DHCPD_FD, "/etc/sysconfig/$dhcpver"; my $syscfg_dhcpd = ""; @@ -1051,6 +1057,39 @@ sub process_request open DBG_FD, '>', "/etc/sysconfig/$dhcpver"; print DBG_FD $syscfg_dhcpd; close DBG_FD; + }elsif (-e "/etc/default/$dhcpver") { #ubuntu + open DHCPD_FD, "/etc/default/$dhcpver"; + my $syscfg_dhcpd = ""; + my $found = 0; + my $dhcpd_key = "INTERFACES"; + my $os = xCAT::Utils->osver(); + + my $ifarg = "$dhcpd_key=\""; + foreach (keys %activenics) { + if (/!remote!/) { next; } + $ifarg .= " $_"; + } + $ifarg =~ s/^ //; + $ifarg .= "\"\n"; + + while () { + if ($_ =~ m/^$dhcpd_key/) { + $found = 1; + $syscfg_dhcpd .= $ifarg; + }else { + $syscfg_dhcpd .= $_; + } + } + + if ( $found eq 0 ) { + $syscfg_dhcpd .= $ifarg; + } + close DHCPD_FD; + + open DBG_FD, '>', "/etc/default/$dhcpver"; + print DBG_FD $syscfg_dhcpd; + close DBG_FD; + } elsif ($_ eq "dhcpd" or $usingipv6) { $callback->({error=>"The file /etc/sysconfig/$_ doesn't exist, check the dhcp server"}); # return; @@ -1306,6 +1345,12 @@ sub process_request { restart_dhcpd_aix(); } + elsif ( $distro =~ /ubuntu*/) + { + #ubuntu config + system("chmod a+r /etc/dhcp3/dhcpd.conf"); + system("/etc/init.d/dhcp3-server restart"); + } else { system("/etc/init.d/dhcpd restart"); @@ -1971,7 +2016,7 @@ sub newconfig6 { push @dhcp6conf, "\n"; push @dhcp6conf, "ddns-update-style interim;\n"; push @dhcp6conf, "ignore client-updates;\n"; -# push @dhcp6conf, "update-static-leases on;\n"; + push @dhcp6conf, "update-static-leases on;\n"; push @dhcp6conf, "omapi-port 7912;\n"; #Enable omapi... push @dhcp6conf, "key xcat_key {\n"; push @dhcp6conf, " algorithm hmac-md5;\n"; @@ -2020,7 +2065,7 @@ sub newconfig push @dhcpconf, "option iscsi-initiator-iqn code 203 = string;\n"; #Only via gPXE, not a standard push @dhcpconf, "ddns-update-style interim;\n"; push @dhcpconf, "ignore client-updates;\n"; #Windows clients like to do all caps, very un xCAT-like -# push @dhcpconf, "update-static-leases on;\n"; #makedns rendered optional + push @dhcpconf, "update-static-leases on;\n"; #makedns rendered optional push @dhcpconf, "option client-architecture code 93 = unsigned integer 16;\n"; push @dhcpconf, "option gpxe.no-pxedhcp 1;\n";