#!/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 ip="${subnet}.$ip" 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'