aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap/make-missing-conf.pl
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/make-missing-conf.pl')
-rwxr-xr-xbootstrap/make-missing-conf.pl125
1 files changed, 79 insertions, 46 deletions
diff --git a/bootstrap/make-missing-conf.pl b/bootstrap/make-missing-conf.pl
index 598964f..e45a473 100755
--- a/bootstrap/make-missing-conf.pl
+++ b/bootstrap/make-missing-conf.pl
@@ -1,5 +1,6 @@
#!/usr/bin/perl -I /root/tgmanage
use strict;
+use Net::IP;
BEGIN {
require "include/config.pm";
@@ -8,10 +9,6 @@ BEGIN {
};
}
-
-use Net::IP;
-use Net::IP qw(:PROC);
-
my $serial = strftime("%Y%m%d", localtime(time())) . "01";
unless ( (($#ARGV == 0 ) || ( $#ARGV == 1))
@@ -34,51 +31,88 @@ print STDERR "Base dir is " . $base . "\n";
my $bind_base = $base . "bind/";
my $dhcpd_base = $base . "dhcp/";
-my $dhcp_dynconf_dir = $dhcpd_base . "conf.d/";
my $bind_conf_master = $bind_base . "conf-master/";
my $bind_conf_slave = $bind_base . "conf-slave/";
-my $tgname = $nms::config::tgname;
-
-my $pri_hostname = $nms::config::pri_hostname;
-my $pri_v4 = $nms::config::pri_v4;
-my $pri_v6 = $nms::config::pri_v6;
-
-my $sec_hostname = $nms::config::sec_hostname;
-my $sec_v4 = $nms::config::sec_v4;
-my $sec_v6 = $nms::config::sec_v6;
-
-my $ddns_key = $nms::config::ddns_key;
-
-my $ddns_to = $nms::config::ddns_to;
-
-my $base_ipv4 = new Net::IP( $nms::config::base_ipv4net );
+my $base_ipv4 = Net::IP->new( $nms::config::base_ipv4net );
my ($cp_oct, $cs_oct, $ct_oct) = ($nms::config::base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
-while ( <STDIN> )
-{
+while ( <STDIN> ){
next if ( $_ =~ m/^#/);
my $line = $_;
chomp $line;
- die ("Invalid format on input") if not $line =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+)\s+(\d+)\s+([\w|-]+)\s*.*/;
- my ( $p_oct, $s_oct, $t_oct, $f_oct, $size, $name ) = ( $1, $2, $3, $4, $5, $6 );
+ # <v4 net> <v6 net> <network-name>
+ # 151.216.129.0/26 2a02:ed02:129a::/64 noc
+ # we assume not smaller than /64 on v6
+ die ("Invalid format on input") if not $line =~ m/^((\d+\.){3}\d+\/\d+)\s+(([a-fA-F0-9]+\:){1,4}\:\/\d+)\s+([\w|-]+).*/;
+ my ( $v4_net, $v6_net, $name ) = ( $1, $3, $5 );
-
- my $dhconfig = $dhcp_dynconf_dir . $name . ".conf";
my $master_config = $bind_conf_master . $name . ".conf";
my $slave_config = $bind_conf_slave . $name . ".conf";
- my $zone_file = $bind_base . "dynamic/$name.$tgname.gathering.org.zone";
+ my $zone_file = $bind_base . "dynamic/$name.$nms::config::tgname.gathering.org.zone";
+
+ my $v4_range = Net::IP->new( $v4_net ) or die ("v4_net fail");
+ my $v6_range = Net::IP->new( $v6_net ) or die ("v6_net fail");
+
+ # DHCP4
+ my $dhcp_dynconf_dir = $dhcpd_base . "conf-v4/";
+ my $dhconfig = $dhcp_dynconf_dir . $name . ".conf";
+
+ if ( not -f $dhconfig )
+ {
+ print STDERR "Creating file " . $dhconfig . "\n";
+ my $numhosts = $range->size();
+ my $mask = $range->mask();
+ my $router = $net_base . "." . ($f_oct+1);
+ my $first = $net_base . "." . ( $f_oct + 5 );
+
+ my $last = $first;
+ if ( $size < 24 )
+ {
+ # Net::IP iteration is crazyslow. So, we stopped using iterations.
+ my $last_ip = $range->last_ip();
+ $last_ip =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/;
+ $last = sprintf("%d.%d.%d.%d", $1, $2, $3, $4-2);
+ }
+ else { $last = $net_base . "." . ( $f_oct + $numhosts - 2 ); }
+
+ #print STDERR "Name : " . $name . "\n";
+ #print STDERR "Net : " . $net . "\n";
+ #print STDERR "Mask : " . $mask . "\n";
+ #print STDERR "Router : " . $router . "\n";
+ #print STDERR "Size : " . $size . "\n";
+ #print STDERR "Numhosts : " . $numhosts . "\n";
+ #print STDERR "First : " . $first . "\n";
+ #print STDERR "Last : " . $last . "\n";
+
+ open DFILE, ">" . $dhconfig or die ( $! . " " . $dhconfig);
+
+ print DFILE "zone $name.$nms::config::tgname.gathering.org {\n";
+ print DFILE " primary $nms::config::ddns_to;\n";
+ print DFILE " key DHCP_UPDATER;\n";
+ print DFILE "}\n\n";
+
+ print DFILE "subnet $net netmask $mask {\n";
+ print DFILE " authoritative;\n";
+ print DFILE " option routers $router;\n";
+ print DFILE " option domain-name \"$name.$nms::config::tgname.gathering.org\";\n";
+ print DFILE " ddns-domainname \"$name.$nms::config::tgname.gathering.org\";\n";
+ print DFILE " range $first $last;\n";
+ print DFILE " ignore client-updates;\n";
+ print DFILE "}\n\n";
+
+ close DFILE;
+ }
- my $net_base = $p_oct . "." . $s_oct . "." . $t_oct;
- my $net = $net_base . "." . $f_oct;
- my $range = new Net::IP( $net . "/" . $size ) or die ("oopxos");
+ # DHCP6
+ my $dhcp_dynconf_dir = $dhcpd_base . "conf-v6/";
+ my $dhconfig = $dhcp_dynconf_dir . $name . ".conf";
- # Create configuration files for DHCP on master/primary
- if ( ( not -f $dhconfig ) && ( $role eq "master" ) )
+ if ( not -f $dhconfig )
{
print STDERR "Creating file " . $dhconfig . "\n";
my $numhosts = $range->size();
- my $mask = $range->mask();
+ my $mask = $range->mask();
my $router = $net_base . "." . ($f_oct+1);
my $first = $net_base . "." . ( $f_oct + 5 );
@@ -103,16 +137,16 @@ while ( <STDIN> )
open DFILE, ">" . $dhconfig or die ( $! . " " . $dhconfig);
- print DFILE "zone $name.$tgname.gathering.org {\n";
- print DFILE " primary $ddns_to;\n";
+ print DFILE "zone $name.$nms::config::tgname.gathering.org {\n";
+ print DFILE " primary $nms::config::ddns_to;\n";
print DFILE " key DHCP_UPDATER;\n";
print DFILE "}\n\n";
print DFILE "subnet $net netmask $mask {\n";
print DFILE " authoritative;\n";
print DFILE " option routers $router;\n";
- print DFILE " option domain-name \"$name.$tgname.gathering.org\";\n";
- print DFILE " ddns-domainname \"$name.$tgname.gathering.org\";\n";
+ print DFILE " option domain-name \"$name.$nms::config::tgname.gathering.org\";\n";
+ print DFILE " ddns-domainname \"$name.$nms::config::tgname.gathering.org\";\n";
print DFILE " range $first $last;\n";
print DFILE " ignore client-updates;\n";
print DFILE "}\n\n";
@@ -128,21 +162,20 @@ while ( <STDIN> )
print ZFILE << "EOF";
; Base reverse zones are updated from dhcpd -- DO NOT TOUCH!
\$TTL 3600
-@ IN SOA $pri_hostname.$tgname.gathering.org. abuse.gathering.org. (
+@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
$serial ; serial
3600 ; refresh
1800 ; retry
608400 ; expire
3600 ) ; minimum and default TTL
- IN NS $pri_hostname.$tgname.gathering.org.
- IN NS $sec_hostname.$tgname.gathering.org.
-\$ORIGIN $name.$tgname.gathering.org.
+ IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
+ IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
+\$ORIGIN $name.$nms::config::tgname.gathering.org.
EOF
close ZFILE;
}
-
-
+
# Create bind9 configuration files for zones.
my $bind_file = "";
$bind_file = $master_config if ( $role eq "master");
@@ -154,19 +187,19 @@ EOF
print STDERR "Creating file " . $bind_file . "\n";
open NFILE, ">" . $bind_file or die ( $! . " " . $bind_file);
- print NFILE "zone \"$name.$tgname.gathering.org\" {\n";
+ print NFILE "zone \"$name.$nms::config::tgname.gathering.org\" {\n";
if ( $role eq "master" ) {
print NFILE " type master;\n";
print NFILE " notify yes;\n";
print NFILE " allow-update { key DHCP_UPDATER; };\n";
- print NFILE " file \"dynamic/$name.$tgname.gathering.org.zone\";\n";
+ print NFILE " file \"dynamic/$name.$nms::config::tgname.gathering.org.zone\";\n";
}
else
{
print NFILE " type slave;\n";
print NFILE " notify no;\n";
print NFILE " masters { bootstrap; };\n";
- print NFILE " file \"slave/$name.$tgname.gathering.org.zone\";\n";
+ print NFILE " file \"slave/$name.$nms::config::tgname.gathering.org.zone\";\n";
}
print NFILE " allow-transfer { ns-xfr; };\n";
print NFILE "};\n";