diff options
| author | Arne Sund <arnels@stortinget.samfundet.no> | 2015-03-30 21:25:04 +0200 | 
|---|---|---|
| committer | Arne Sund <arnels@stortinget.samfundet.no> | 2015-03-30 21:25:04 +0200 | 
| commit | 98820e626686334dc24d29454bf0a9ca2965015d (patch) | |
| tree | 77ceea81c29a9ba4c86a149fcb281a08b840ef83 /bootstrap/make-dhcp6-init.sh | |
| parent | 9007d35be7bc922f9d2f858bd40e5b96529cc943 (diff) | |
| parent | 0713e9c8627abb20a701c16b74ef5f29d2231624 (diff) | |
Merge branch 'master' of https://github.com/tech-server/tgmanage
Diffstat (limited to 'bootstrap/make-dhcp6-init.sh')
| -rwxr-xr-x | bootstrap/make-dhcp6-init.sh | 426 | 
1 files changed, 295 insertions, 131 deletions
| diff --git a/bootstrap/make-dhcp6-init.sh b/bootstrap/make-dhcp6-init.sh index b022b03..9525cdc 100755 --- a/bootstrap/make-dhcp6-init.sh +++ b/bootstrap/make-dhcp6-init.sh @@ -1,40 +1,69 @@  #!/bin/bash -DHCP_DEFAULT="/etc/default/isc-dhcp-server" -DHCP_INIT="/etc/init.d/isc-dhcp-server" +DHCP4_DEFAULT="/etc/default/isc-dhcp-server" +DHCP4_INIT="/etc/init.d/isc-dhcp-server" +DHCP6_DEFAULT="/etc/default/isc-dhcp6-server" +DHCP6_INIT="/etc/init.d/isc-dhcp6-server" -if [ -e "${DHCP_DEFAULT}" ];  +if [ -e "${DHCP4_DEFAULT}" ];   then -	echo "${DHCP_DEFAULT} exists! Overwriting." +	echo "${DHCP4_DEFAULT} exists! Overwriting." +fi +if [ -e "${DHCP6_DEFAULT}" ];  +then +	echo "${DHCP6_DEFAULT} exists! Overwriting."  fi  set -e -cat > ${DHCP_DEFAULT}<<'_EOF' +cat > ${DHCP4_DEFAULT}<<'_EOF' +# Defaults for isc-dhcp-server initscript +# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). +DHCPD_CONF=/etc/dhcp/dhcpd.conf + +# Path to dhcpd's PID file (default: /var/run/dhcpd.pid). +DHCPD_PID=/var/run/dhcpd.pid + +# Additional options to start dhcpd with. +#	Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead +OPTIONS="-4" + +# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? +#	Separate multiple interfaces with spaces, e.g. "eth0 eth1". +INTERFACES="eth0" +_EOF + +cat > ${DHCP6_DEFAULT}<<'_EOF' +# Defaults for isc-dhcp-server initscript +# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). +DHCPD_CONF=/etc/dhcp/dhcpd6.conf -# Defaults for dhcp initscript +# Path to dhcpd's PID file (default: /var/run/dhcpd.pid). +DHCPD_PID=/var/run/dhcpd6.pid -# you can enable v4 and/or v6 protocols -V4_ENABLED="yes" -V6_ENABLED="yes" +# Additional options to start dhcpd with. +#	Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead +OPTIONS="-6"  # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? -#       Separate multiple interfaces with spaces, e.g. "eth0 eth1". -INTERFACES_V4="eth0" -INTERFACES_V6="eth0" +#	Separate multiple interfaces with spaces, e.g. "eth0 eth1". +INTERFACES="eth0"  _EOF  set +e -if [ -e "${DHCP_INIT}" ];  +if [ -e "${DHCP4_INIT}" ];   then -	echo "${DHCP_INIT} exists! Overwriting." +	echo "${DHCP4_INIT} exists! Overwriting." +fi +if [ -e "${DHCP6_INIT}" ];  +then +	echo "${DHCP6_INIT} exists! Overwriting."  fi  set -e -cat > ${DHCP_INIT}<<'_EOF' - +cat > ${DHCP4_INIT}<<'_EOF'  #!/bin/sh  #  # @@ -55,154 +84,289 @@ 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 /etc/default/isc-dhcp-server ]; then -        echo "/etc/default/isc-dhcp-server does not exist! - Aborting..." -        echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem." -        exit 0 +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 (so far only interfaces the daemon -# should listen on.) -[ -f /etc/default/isc-dhcp-server ] && . /etc/default/isc-dhcp-server +# Read init script configuration +[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"  NAME=dhcpd -DESC="DHCPv4" -DHCPDPID=/var/run/dhcpd.pid - -NAME6=dhcpd6 -DESC6="DHCPv6" -DHCPDPID6=/var/run/dhcpd6.pid - +DESC="ISC DHCP server" +# fallback to default config file +DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd.conf} +# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid +if [ -z "$DHCPD_PID" ]; then +	DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1) +fi +DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd.pid}" -# $1 -> version (-4 or -6) -# $2 -> config file (usually /etc/dhcp/dhcpd.conf or /etc/dhcp/dhcpd6.conf)  test_config()  { -        if ! /usr/sbin/dhcpd -t $1 -cf $2 -q > /dev/null 2>&1; then -                echo "dhcpd self-test failed. Please fix the config file." -                echo "The error was: " -                /usr/sbin/dhcpd -t -6 -cf $2 -                exit 1 -        fi +	if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then +		echo "dhcpd self-test failed. Please fix $DHCPD_CONF." +		echo "The error was: " +		/usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF" +		exit 1 +	fi +	touch /var/lib/dhcp/dhcpd.leases  } -# $1 -> -v for messages, -q for none -# $2 -> PID file -# $3 -> NAME +# single arg is -v for messages, -q for none  check_status()  { -    if [ ! -r $2 ]; then -        test "$1" != -v || echo "$3 is not running." -        return 3 +    if [ ! -r "$DHCPD_PID" ]; then +	test "$1" != -v || echo "$NAME is not running." +	return 3      fi -    if read pid < "$2" && ps -p "$pid" > /dev/null 2>&1; then -        test "$1" != -v || echo "$3 is running." -        return 0 +    if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then +	test "$1" != -v || echo "$NAME is running." +	return 0      else -        test "$1" != -v || echo "$3 is not running but $2 exists." -        return 1 +	test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists." +	return 1      fi  } +case "$1" in +	start) +		test_config +		log_daemon_msg "Starting $DESC" "$NAME" +		start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \ +			--exec /usr/sbin/dhcpd -- \ +			-q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES +		sleep 2 + +		if check_status -q; then +			log_end_msg 0 +		else +			log_failure_msg "check syslog for diagnostics." +			log_end_msg 1 +			exit 1 +		fi +		;; +	stop) +		log_daemon_msg "Stopping $DESC" "$NAME" +		start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID" +		log_end_msg $? +		rm -f "$DHCPD_PID" +		;; +	restart | force-reload) +		test_config +		$0 stop +		sleep 2 +		$0 start +		if [ "$?" != "0" ]; then +			exit 1 +		fi +		;; +	status) +		echo -n "Status of $DESC: " +		check_status -v +		exit "$?" +		;; +	*) +		echo "Usage: $0 {start|stop|restart|force-reload|status}" +		exit 1  +esac + +exit 0 + +_EOF + +cat > ${DHCP6_INIT}<<'_EOF' +#!/bin/sh +# +# -start_daemon() +### BEGIN INIT INFO +# Provides:          isc-dhcp6-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 v6 +# Description:       Dynamic Host Configuration Protocol Server v6 +### END INIT INFO + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +test -f /usr/sbin/dhcpd || exit 0 + +DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp6-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-dhcp6-server" ]; then +		echo "Run 'dpkg-reconfigure isc-dhcp6-server' to fix the problem." +	fi +	exit 0 +fi + +. /lib/lsb/init-functions + +# Read init script configuration +[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT" + +NAME=dhcpd +DESC="ISC DHCP server" +# fallback to default config file +DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd6.conf} +# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid +if [ -z "$DHCPD_PID" ]; then +	DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1) +fi +DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd6.pid}" + +test_config()  { -        VERSION=$1 -        CONF_FILE=$2 -        PROCESS=$3 -        PIDFILE=$4 -        DESCRIPTION=$5 - -        shift 5 -        INTERFACES=$* - -        test_config "$VERSION" "$CONF_FILE"; -        log_daemon_msg "Starting ISC $DESCRIPTION server" "$PROCESS"; -        start-stop-daemon --start --quiet --pidfile $PIDFILE \ -            --exec /usr/sbin/dhcpd -- $VERSION -q -cf $CONF_FILE \ -            $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 +	if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then +		echo "dhcpd self-test failed. Please fix $DHCPD_CONF." +		echo "The error was: " +		/usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF" +		exit 1 +	fi +	touch /var/lib/dhcp/dhcpd.leases  } -stop_daemon() +# single arg is -v for messages, -q for none +check_status()  { -        # Is DHCPv6 enabled? or daemon is runing ? -        if test "$V6_ENABLED" = "yes" || check_status -q $DHCPDPID6 $NAME; then -                log_daemon_msg "Stopping ISC DHCPv6 server" "$NAME6" -                start-stop-daemon --stop --quiet --pidfile $DHCPDPID6 -                log_end_msg $? -                rm -f "$DHCPDPID6" -        fi - -        # Is DHCPv4 enabled or daemon is runing? -        if test "$V4_ENABLED" = "yes" || check_status -q $DHCPDPID $NAME; then -                log_daemon_msg "Stopping ISC DHCPv4 server" "$NAME" -                start-stop-daemon --stop --quiet --pidfile $DHCPDPID -                log_end_msg $? -                rm -f "$DHCPDPID" -        fi +    if [ ! -r "$DHCPD_PID" ]; then +	test "$1" != -v || echo "$NAME is not running." +	return 3 +    fi +    if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then +	test "$1" != -v || echo "$NAME is running." +	return 0 +    else +	test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists." +	return 1 +    fi  } -  case "$1" in -        start) -                # Is DHCPv6 enabled? -                case "$V6_ENABLED" in -                  yes) -                start_daemon "-6" "/etc/dhcp/dhcpd6.conf" \ -                        $NAME6 $DHCPDPID6 $DESC6 $INTERFACES_V6 -                ;; -                esac - -                # Is DHCPv4 enabled? -                case "$V4_ENABLED" in -                  yes) -                start_daemon "-4" "/etc/dhcp/dhcpd.conf"  \ -                        $NAME $DHCPDPID $DESC $INTERFACES_V4 -                ;; -                esac - -                ;; -        stop) -                stop_daemon -                ;; -        restart | force-reload) -               #test_config -                $0 stop -                sleep 2 -                $0 start -                if [ "$?" != "0" ]; then -                        exit 1 -                fi -                ;; -        status) -                echo -n "Status of $DESC: " -                check_status -v $DHCPDPID $NAME -                echo -n "Status of $DESC6: " -                check_status -v $DHCPDPID6 $NAME6 - -                exit "$?" -                ;; -        *) -                echo "Usage: $0 {start|stop|restart|force-reload|status}" -                exit 1 +	start) +		test_config +		log_daemon_msg "Starting $DESC" "$NAME" +		start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \ +			--exec /usr/sbin/dhcpd -- \ +			-q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES +		sleep 2 + +		if check_status -q; then +			log_end_msg 0 +		else +			log_failure_msg "check syslog for diagnostics." +			log_end_msg 1 +			exit 1 +		fi +		;; +	stop) +		log_daemon_msg "Stopping $DESC" "$NAME" +		start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID" +		log_end_msg $? +		rm -f "$DHCPD_PID" +		;; +	restart | force-reload) +		test_config +		$0 stop +		sleep 2 +		$0 start +		if [ "$?" != "0" ]; then +			exit 1 +		fi +		;; +	status) +		echo -n "Status of $DESC: " +		check_status -v +		exit "$?" +		;; +	*) +		echo "Usage: $0 {start|stop|restart|force-reload|status}" +		exit 1   esac  exit 0  _EOF + +# Very Debian specific +# Hacked together at TG15 +# FIXME :-D + +DHCP4_SYSTEMD="/run/systemd/generator.late/isc-dhcp-server.service" +DHCP6_SYSTEMD="/run/systemd/generator.late/isc-dhcp6-server.service" + +cat > ${DHCP4_SYSTEMD}<<'_EOF' +# Automatically generated by bootstrap + +[Unit] +SourcePath=/etc/init.d/isc-dhcp-server +Description=LSB: DHCP server +Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target +After=remote-fs.target network-online.target systemd-journald-dev-log.socket local-fs.target slapd.service nss-lookup.target +Wants=network-online.target +Conflicts=shutdown.target + +[Service] +Type=forking +Restart=no +TimeoutSec=5min +IgnoreSIGPIPE=no +KillMode=process +GuessMainPID=no +RemainAfterExit=yes +SysVStartPriority=3 +ExecStart=/etc/init.d/isc-dhcp-server start +ExecStop=/etc/init.d/isc-dhcp-server stop + +_EOF + +cat > ${DHCP6_SYSTEMD}<<'_EOF' +# Automatically generated by bootstrap + +[Unit] +SourcePath=/etc/init.d/isc-dhcp6-server +Description=LSB: DHCP server v6 +Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target +After=remote-fs.target network-online.target systemd-journald-dev-log.socket local-fs.target slapd.service nss-lookup.target +Wants=network-online.target +Conflicts=shutdown.target + +[Service] +Type=forking +Restart=no +TimeoutSec=5min +IgnoreSIGPIPE=no +KillMode=process +GuessMainPID=no +RemainAfterExit=yes +SysVStartPriority=3 +ExecStart=/etc/init.d/isc-dhcp6-server start +ExecStop=/etc/init.d/isc-dhcp6-server stop + +_EOF + +  set +e -chmod 755 ${DHCP_INIT}  +chmod 755 ${DHCP4_INIT} +chmod 755 ${DHCP6_INIT} +touch /var/lib/dhcp/dhcpd.leases +touch /var/lib/dhcp/dhcpd6.leases + | 
