Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ### BEGIN INIT INFO
- # Provides: isc-dhcp-server
- # Required-Start: $remote_fs $network $syslog
- # Required-Stop: $remote_fs $network $syslog
- # Should-Start: $local_fs slapd $named
- # Should-Stop: $local_fs slapd
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: DHCP server
- # Description: Dynamic Host Configuration Protocol Server
- ### END INIT INFO
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- test -f /usr/sbin/dhcpd || exit 0
- DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp-server}"
- # It is not safe to start if we don't have a default configuration...
- if [ ! -f "$DHCPD_DEFAULT" ]; then
- echo "$DHCPD_DEFAULT does not exist! - Aborting..."
- if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp-server" ]; then
- echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."
- fi
- exit 0
- fi
- . /lib/lsb/init-functions
- # Read init script configuration
- [ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"
- NAME4=dhcpd
- NAME6=dhcpd6
- DESC4="ISC DHCPv4 server"
- DESC6="ISC DHCPv6 server"
- # use already specified config file or fallback to defaults
- DHCPDv4_CONF=${DHCPDv4_CONF:-/etc/dhcp/dhcpd.conf}
- DHCPDv6_CONF=${DHCPDv6_CONF:-/etc/dhcp/dhcpd6.conf}
- # try to read pid file name from config file or fallback to defaults
- if [ -z "$DHCPDv4_PID" ]; then
- DHCPDv4_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/\1/p' < "$DHCPDv4_CONF" 2>/dev/null | head -n 1)
- fi
- if [ -z "$DHCPDv6_PID" ]; then
- DHCPDv6_PID=$(sed -n -e 's/^[ \t]*dhcpv6-pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/\1/p' < "$DHCPDv6_CONF" 2>/dev/null | head -n 1)
- fi
- DHCPDv4_PID="${DHCPDv4_PID:-/var/run/dhcpd.pid}"
- DHCPDv6_PID="${DHCPDv6_PID:-/var/run/dhcpd6.pid}"
- test_config()
- {
- VERSION="$1"
- CONF="$2"
- if ! /usr/sbin/dhcpd -t $VERSION -q -cf "$CONF" > /dev/null 2>&1; then
- echo "dhcpd self-test failed. Please fix $CONF."
- echo "The error was: "
- /usr/sbin/dhcpd -t $VERSION -cf "$CONF"
- exit 1
- fi
- }
- check_status()
- {
- OPTION="$1"
- PIDFILE="$2"
- NAME="$3"
- if [ ! -r "$PIDFILE" ]; then
- test "$OPTION" != -v || echo "$NAME is not running."
- return 3
- fi
- if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
- test "$OPTION" != -v || echo "$NAME is running."
- return 0
- else
- test "$OPTION" != -v || echo "$NAME is not running but $PIDFILE exists."
- return 1
- fi
- }
- start_daemon()
- {
- VERSION="$1"
- CONF="$2"
- NAME="$3"
- PIDFILE="$4"
- DESC="$5"
- shift 5
- INTERFACES="$*"
- test_config "$VERSION" "$CONF"
- log_daemon_msg "Starting $DESC" "$NAME"
- if [ -e "$PIDFILE" ]; then
- log_failure_msg "dhcpd service already running (pid file $PIDFILE currenty exists)"
- exit 1
- fi
- touch /var/lib/dhcp/$NAME.leases
- start-stop-daemon --start --quiet --pidfile $PIDFILE \
- --exec /usr/sbin/dhcpd -- $VERSION -q -cf $CONF $INTERFACES
- sleep 2
- if check_status -q $PIDFILE $NAME; then
- log_end_msg 0
- else
- log_failure_msg "check syslog for diagnostics."
- log_end_msg 1
- exit 1
- fi
- }
- stop_daemon()
- {
- if check_status -q $DHCPDv4_PID $NAME4; then
- log_daemon_msg "Stopping $DESC4" "$NAME4"
- start-stop-daemon --stop --quiet --pidfile $DHCPDv4_PID
- log_end_msg $?
- rm -f "$DHCPDv4_PID"
- fi
- if check_status -q $DHCPDv6_PID $NAME6; then
- log_daemon_msg "Stopping $DESC6" "$NAME6"
- start-stop-daemon --stop --quiet --pidfile $DHCPDv6_PID
- log_end_msg $?
- rm -f "$DHCPDv6_PID"
- fi
- }
- wait_for_dhcpd()
- {
- while [ ! -f "/var/run/dhcpcd.pid" ]; do
- echo "waiting for dhcpd to start"
- sleep 1
- done
- sleep 10
- }
- case "$1" in
- start)
- wait_for_dhcpd
- if test -n "$INTERFACES" -a -z "$INTERFACESv4"; then
- echo "DHCPv4 interfaces are no longer set by the INTERFACES variable in" >&2
- echo "/etc/default/isc-dhcp-server. Please use INTERFACESv4 instead." >&2
- echo "Migrating automatically for now, but this will go away in the future." >&2
- INTERFACESv4="$INTERFACES"
- fi
- if test -n "$INTERFACESv4"; then
- echo "Launching IPv4 server only."
- start_daemon "-4" "$DHCPDv4_CONF" "$NAME4" \
- "$DHCPDv4_PID" "$DESC4" "$INTERFACESv4"
- fi
- if test -n "$INTERFACESv6"; then
- echo "Launching IPv6 server only."
- start_daemon "-6" "$DHCPDv6_CONF" "$NAME6" \
- "$DHCPDv6_PID" "$DESC6" "$INTERFACESv6"
- fi
- if test -z "$INTERFACESv4" -a -z "$INTERFACESv6"; then
- echo "Launching both IPv4 and IPv6 servers (please configure INTERFACES in /etc/default/isc-dhcp-server if you only want one or the other)."
- start_daemon "-4" "$DHCPDv4_CONF" "$NAME4" \
- "$DHCPDv4_PID" "$DESC4" ""
- start_daemon "-6" "$DHCPDv6_CONF" "$NAME6" \
- "$DHCPDv6_PID" "$DESC6" ""
- fi
- ;;
- stop)
- stop_daemon
- ;;
- restart | force-reload)
- $0 stop
- sleep 2
- $0 start
- if [ "$?" != "0" ]; then
- exit 1
- fi
- ;;
- status)
- if test -n "$INTERFACES" -a -z "$INTERFACESv4"; then
- INTERFACESv4="$INTERFACES"
- fi
- if test -n "$INTERFACESv4"; then
- echo -n "Status of $DESC4: "
- check_status -v $DHCPDv4_PID $NAME4 || exit $?
- fi
- if test -n "$INTERFACESv6"; then
- echo -n "Status of $DESC6: "
- check_status -v $DHCPDv6_PID $NAME6 || exit $?
- fi
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|force-reload|status}"
- exit 1
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement