mirror of
https://github.com/aljazceru/addons.git
synced 2025-12-17 21:24:20 +01:00
48
dhcp_server/run.sh
Normal file
48
dhcp_server/run.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
CONFIG_PATH=/data/options.json
|
||||
|
||||
DOMAIN=$(jq --raw-output '.domain' $CONFIG_PATH)
|
||||
DNS=$(jq --raw-output '.dns | join(", ")' $CONFIG_PATH)
|
||||
NETWORKS=$(jq --raw-output '.networks | length' $CONFIG_PATH)
|
||||
HOSTS=$(jq --raw-output '.hosts | length' $CONFIG_PATH)
|
||||
|
||||
sed -i "s/%%DOMAIN%%/$DOMAIN/g" /etc/dhcpd.conf
|
||||
sed -i "s/%%DNS_SERVERS%%/$DNS/g" /etc/dhcpd.conf
|
||||
|
||||
# Create networks
|
||||
for (( i=0; i < "$NETWORKS"; i++ )); do
|
||||
SUBNET=$(jq --raw-output ".networks[$i].subnet" $CONFIG_PATH)
|
||||
NETMASK=$(jq --raw-output ".networks[$i].netmask" $CONFIG_PATH)
|
||||
RANGE_START=$(jq --raw-output ".networks[$i].range_start" $CONFIG_PATH)
|
||||
RANGE_END=$(jq --raw-output ".networks[$i].range_end" $CONFIG_PATH)
|
||||
BROADCAST=$(jq --raw-output ".networks[$i].broadcast" $CONFIG_PATH)
|
||||
ROUTERS=$(jq --raw-output ".networks[$i].routers | joint(\", \")" $CONFIG_PATH)
|
||||
|
||||
{
|
||||
echo "subnet $SUBNET netmask $NETMASK {"
|
||||
echo " range $RANGE_START $RANGE_END;"
|
||||
echo " option routers $ROUTERS;"
|
||||
echo " option broadcast-address $BROADCAST;"
|
||||
echo "}"
|
||||
} >> /etc/dhcpd.conf
|
||||
done
|
||||
|
||||
# Create hosts
|
||||
for (( i=0; i < "$HOSTS"; i++ )); do
|
||||
MAC=$(jq --raw-output ".hosts[$i].mac" $CONFIG_PATH)
|
||||
NAME=$(jq --raw-output ".hosts[$i].name" $CONFIG_PATH)
|
||||
IP=$(jq --raw-output ".hosts[$i].ip" $CONFIG_PATH)
|
||||
|
||||
{
|
||||
echo "host $NAME {"
|
||||
echo " hardware ethernet $MAC;"
|
||||
echo " fixed-address $IP;"
|
||||
echo " option host-name \"$NAME\";"
|
||||
echo "}"
|
||||
} >> /etc/dhcpd.conf
|
||||
done
|
||||
|
||||
# run dhcp server
|
||||
exec /usr/sbin/dhcpd -4 -f -d --no-pid -lf /data/dhcpd.lease -cf /etc/dhcpd.conf < /dev/null
|
||||
Reference in New Issue
Block a user