build_scripts/scripts/shared_scripts/update_dhcp.sh
2025-03-23 06:12:34 -05:00

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'