71 lines
2.1 KiB
Bash
Executable file
71 lines
2.1 KiB
Bash
Executable file
#!/bin/bash
|
|
cd "$(dirname "$(readlink -f "$0")")"
|
|
mac=52:54:00:`openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1`
|
|
subnet="172.16.99"
|
|
ip=generate
|
|
|
|
ssh_key_dir="../../identity_files/"
|
|
dhcp_dir="../../dhcp_files"
|
|
|
|
usage="$(basename "$0") [options] server_name
|
|
where:
|
|
-m mac_addr Specify mac address to use - if not specified, will use 52:54:00:*:*:*
|
|
-s subnet Subnet to place server on (default to 172.16.99.xx)
|
|
-i ip_address Specify IP address to assign (default to next available in subnet)"
|
|
|
|
# process flags
|
|
while getopts "h:m:s:i" flag
|
|
do
|
|
case "$flag" in
|
|
m) mac=${OPTARG};;
|
|
s) subnet=${OPTARG};;
|
|
i) ip=${OPTARG};;
|
|
h) ;&
|
|
*) echo "$usage";exit;;
|
|
esac
|
|
done
|
|
|
|
# get name
|
|
shift $(($OPTIND - 1))
|
|
if [ $# -eq 0 ];then echo "Server name undefined";echo "$usage";exit;else name=$1;fi
|
|
|
|
lname=`echo $name | tr '[:upper:]' '[:lower:]'`
|
|
|
|
# remove any existing entries for hostname
|
|
for f in $dhcp_dir/subnets/*
|
|
do
|
|
sed -i "/\t$lname\$/d" $f
|
|
done
|
|
|
|
# determine next available ip in subnet (if not provided)
|
|
if [[ "$ip" -eq "generate" ]];then
|
|
if [ -f "$dhcp_dir/subnets/$subnet" ]
|
|
then
|
|
array=(`awk 'match($0,/'$subnet'\.[0-9]+/){print substr($0, RSTART, RLENGTH)}' $dhcp_dir/subnets/$subnet | awk 'match($0,/[0-9]+$/){print substr($0, RSTART, RLENGTH)}' | sort -n`)
|
|
for (( i = 2;i < 255;i++));do
|
|
if [[ ! " ${array[*]} " =~ [[:space:]]${i}[[:space:]] ]]; then
|
|
break;
|
|
fi
|
|
done
|
|
ip="${subnet}.$i"
|
|
else
|
|
ip="${subnet}.2"
|
|
fi
|
|
else
|
|
subnet=`echo $ip | grep -Po "\d+\.\d+\.\d+"`
|
|
fi
|
|
touch $dhcp_dir/subnets/$subnet
|
|
|
|
# add dhcp info to file
|
|
echo "$ip $mac $name" | cat $dhcp_dir/subnets/$subnet - | sort -t . -k 3,3n -k 4,4n > /tmp/$subnet
|
|
cp /tmp/$subnet $dhcp_dir/subnets/$subnet
|
|
|
|
# build dhcp
|
|
./build_dhcp.sh > /tmp/dhcp
|
|
|
|
# copy dhcp file to router
|
|
scp -i $ssh_key_dir/id_router -O /tmp/dhcp r.actcur.com:/etc/config/dhcp
|
|
# remove active leases for ip
|
|
ssh -i $ssh_key_dir/id_router r.actcur.com "sed -i '/$ip/d' /tmp/dhcp.leases"
|
|
# restart dnsmasq
|
|
ssh -i $ssh_key_dir/id_router r.actcur.com 'service dnsmasq restart'
|