Advertisement
Guest User

Untitled

a guest
Apr 21st, 2020
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.72 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. ### BEGIN INIT INFO
  4. # Provides:          isc-dhcp-server
  5. # Required-Start:    $remote_fs $network $syslog
  6. # Required-Stop:     $remote_fs $network $syslog
  7. # Should-Start:      $local_fs slapd $named
  8. # Should-Stop:       $local_fs slapd
  9. # Default-Start:     2 3 4 5
  10. # Default-Stop:      0 1 6
  11. # Short-Description: DHCP server
  12. # Description:       Dynamic Host Configuration Protocol Server
  13. ### END INIT INFO
  14.  
  15. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  16.  
  17. test -f /usr/sbin/dhcpd || exit 0
  18.  
  19. DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp-server}"
  20.  
  21. # It is not safe to start if we don't have a default configuration...
  22. if [ ! -f "$DHCPD_DEFAULT" ]; then
  23.         echo "$DHCPD_DEFAULT does not exist! - Aborting..."
  24.         if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp-server" ]; then
  25.                 echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."
  26.         fi
  27.         exit 0
  28. fi
  29.  
  30. . /lib/lsb/init-functions
  31.  
  32. # Read init script configuration
  33. [ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"
  34.  
  35. NAME4=dhcpd
  36. NAME6=dhcpd6
  37.  
  38. DESC4="ISC DHCPv4 server"
  39. DESC6="ISC DHCPv6 server"
  40.  
  41. # use already specified config file or fallback to defaults
  42. DHCPDv4_CONF=${DHCPDv4_CONF:-/etc/dhcp/dhcpd.conf}
  43. DHCPDv6_CONF=${DHCPDv6_CONF:-/etc/dhcp/dhcpd6.conf}
  44.  
  45. # try to read pid file name from config file or fallback to defaults
  46. if [ -z "$DHCPDv4_PID" ]; then
  47.         DHCPDv4_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/\1/p' < "$DHCPDv4_CONF" 2>/dev/null | head -n 1)
  48. fi
  49. if [ -z "$DHCPDv6_PID" ]; then
  50.         DHCPDv6_PID=$(sed -n -e 's/^[ \t]*dhcpv6-pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/\1/p' < "$DHCPDv6_CONF" 2>/dev/null | head -n 1)
  51. fi
  52. DHCPDv4_PID="${DHCPDv4_PID:-/var/run/dhcpd.pid}"
  53. DHCPDv6_PID="${DHCPDv6_PID:-/var/run/dhcpd6.pid}"
  54.  
  55. test_config()
  56. {
  57.         VERSION="$1"
  58.         CONF="$2"
  59.  
  60.         if ! /usr/sbin/dhcpd -t $VERSION -q -cf "$CONF" > /dev/null 2>&1; then
  61.                 echo "dhcpd self-test failed. Please fix $CONF."
  62.                 echo "The error was: "
  63.                 /usr/sbin/dhcpd -t $VERSION -cf "$CONF"
  64.                 exit 1
  65.         fi
  66. }
  67.  
  68. check_status()
  69. {
  70.         OPTION="$1"
  71.         PIDFILE="$2"
  72.         NAME="$3"
  73.  
  74.         if [ ! -r "$PIDFILE" ]; then
  75.                 test "$OPTION" != -v || echo "$NAME is not running."
  76.                 return 3
  77.         fi
  78.  
  79.         if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
  80.                 test "$OPTION" != -v || echo "$NAME is running."
  81.                 return 0
  82.         else
  83.                 test "$OPTION" != -v || echo "$NAME is not running but $PIDFILE exists."
  84.                 return 1
  85.         fi
  86. }
  87.  
  88. start_daemon()
  89. {
  90.         VERSION="$1"
  91.         CONF="$2"
  92.         NAME="$3"
  93.         PIDFILE="$4"
  94.         DESC="$5"
  95.  
  96.         shift 5
  97.         INTERFACES="$*"
  98.  
  99.         test_config "$VERSION" "$CONF"
  100.         log_daemon_msg "Starting $DESC" "$NAME"
  101.  
  102.         if [ -e "$PIDFILE" ]; then
  103.                 log_failure_msg "dhcpd service already running (pid file $PIDFILE currenty exists)"
  104.                 exit 1
  105.         fi
  106.  
  107.         touch /var/lib/dhcp/$NAME.leases
  108.  
  109.         start-stop-daemon --start --quiet --pidfile $PIDFILE \
  110.                 --exec /usr/sbin/dhcpd -- $VERSION -q -cf $CONF $INTERFACES
  111.         sleep 2
  112.  
  113.         if check_status -q $PIDFILE $NAME; then
  114.                 log_end_msg 0
  115.         else
  116.                 log_failure_msg "check syslog for diagnostics."
  117.                 log_end_msg 1
  118.                 exit 1
  119.         fi
  120. }
  121.  
  122. stop_daemon()
  123. {
  124.         if check_status -q $DHCPDv4_PID $NAME4; then
  125.                 log_daemon_msg "Stopping $DESC4" "$NAME4"
  126.                 start-stop-daemon --stop --quiet --pidfile $DHCPDv4_PID
  127.                 log_end_msg $?
  128.                 rm -f "$DHCPDv4_PID"
  129.         fi
  130.  
  131.         if check_status -q $DHCPDv6_PID $NAME6; then
  132.                 log_daemon_msg "Stopping $DESC6" "$NAME6"
  133.                 start-stop-daemon --stop --quiet --pidfile $DHCPDv6_PID
  134.                 log_end_msg $?
  135.                 rm -f "$DHCPDv6_PID"
  136.         fi
  137. }
  138. wait_for_dhcpd()
  139. {
  140.         while [ ! -f "/var/run/dhcpcd.pid" ]; do
  141.                 echo "waiting for dhcpd to start"
  142.                 sleep 1
  143.         done
  144.         sleep 10
  145. }
  146.  
  147. case "$1" in
  148.         start)
  149.                 wait_for_dhcpd
  150.                 if test -n "$INTERFACES" -a -z "$INTERFACESv4"; then
  151.                         echo "DHCPv4 interfaces are no longer set by the INTERFACES variable in" >&2
  152.                         echo "/etc/default/isc-dhcp-server.  Please use INTERFACESv4 instead." >&2
  153.                         echo "Migrating automatically for now, but this will go away in the future." >&2
  154.                         INTERFACESv4="$INTERFACES"
  155.                 fi
  156.                 if test -n "$INTERFACESv4"; then
  157.                         echo "Launching IPv4 server only."
  158.                         start_daemon "-4" "$DHCPDv4_CONF" "$NAME4" \
  159.                                 "$DHCPDv4_PID" "$DESC4" "$INTERFACESv4"
  160.                 fi
  161.                 if test -n "$INTERFACESv6"; then
  162.                         echo "Launching IPv6 server only."
  163.                         start_daemon "-6" "$DHCPDv6_CONF" "$NAME6" \
  164.                                 "$DHCPDv6_PID" "$DESC6" "$INTERFACESv6"
  165.                 fi
  166.                 if test -z "$INTERFACESv4" -a -z "$INTERFACESv6"; then
  167.                         echo "Launching both IPv4 and IPv6 servers (please configure INTERFACES in /etc/default/isc-dhcp-server if you only want one or the other)."
  168.                         start_daemon "-4" "$DHCPDv4_CONF" "$NAME4" \
  169.                                 "$DHCPDv4_PID" "$DESC4" ""
  170.                         start_daemon "-6" "$DHCPDv6_CONF" "$NAME6" \
  171.                                 "$DHCPDv6_PID" "$DESC6" ""
  172.                 fi
  173.                 ;;
  174.         stop)
  175.                 stop_daemon
  176.                 ;;
  177.         restart | force-reload)
  178.                 $0 stop
  179.                 sleep 2
  180.                 $0 start
  181.                 if [ "$?" != "0" ]; then
  182.                         exit 1
  183.                 fi
  184.                ;;
  185.         status)
  186.                 if test -n "$INTERFACES" -a -z "$INTERFACESv4"; then
  187.                         INTERFACESv4="$INTERFACES"
  188.                 fi
  189.                 if test -n "$INTERFACESv4"; then
  190.                         echo -n "Status of $DESC4: "
  191.                         check_status -v $DHCPDv4_PID $NAME4 || exit $?
  192.                 fi
  193.                 if test -n "$INTERFACESv6"; then
  194.                         echo -n "Status of $DESC6: "
  195.                         check_status -v $DHCPDv6_PID $NAME6 || exit $?
  196.                 fi
  197.                 ;;
  198.         *)
  199.                 echo "Usage: $0 {start|stop|restart|force-reload|status}"
  200.                 exit 1
  201. esac
  202.  
  203. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement