From 1ac862cc17a24e55f0703debe3043df6854f5f79 Mon Sep 17 00:00:00 2001 From: "Blake J. Harnden" Date: Thu, 22 Mar 2018 18:32:58 -0700 Subject: [PATCH] updates to init scripts and cleanup for unsupported scripts --- Makefile.am | 1 + configure.ac | 1 - scripts/Makefile.am | 19 +-- scripts/core-daemon-init.d | 144 ----------------- scripts/core-daemon-init.d-SUSE | 264 -------------------------------- scripts/core-daemon-rc.d | 50 ------ scripts/core-daemon.in | 112 ++++++++++++++ 7 files changed, 116 insertions(+), 475 deletions(-) delete mode 100755 scripts/core-daemon-init.d delete mode 100755 scripts/core-daemon-init.d-SUSE delete mode 100755 scripts/core-daemon-rc.d create mode 100644 scripts/core-daemon.in diff --git a/Makefile.am b/Makefile.am index afb7615c..f7b604d2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -167,6 +167,7 @@ all: change-files change-files: $(call change-files,gui/core-gui) $(call change-files,scripts/core-daemon.service) + $(call change-files,scripts/core-daemon) $(call change-files,daemon/core/constants.py) CORE_DOC_HTML = core-html-$(PACKAGE_VERSION) diff --git a/configure.ac b/configure.ac index 076dac23..d40bd31f 100644 --- a/configure.ac +++ b/configure.ac @@ -194,7 +194,6 @@ AM_CONDITIONAL(WANT_PYTHON, test x$want_python = xyes) AM_CONDITIONAL(WANT_NETNS, test x$want_linux_netns = xyes) AM_CONDITIONAL(WANT_INITD, test x$with_startup = xinitd) AM_CONDITIONAL(WANT_SYSTEMD, test x$with_startup = xsystemd) -AM_CONDITIONAL(WANT_SUSE, test x$with_startup = xsuse) if test $cross_compiling = no; then AM_MISSING_PROG(HELP2MAN, help2man) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 9c521923..b52f5f92 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -9,35 +9,22 @@ CLEANFILES = core-daemon -DISTCLEANFILES = Makefile.in core-daemon.service +DISTCLEANFILES = Makefile.in core-daemon.service core-daemon -EXTRA_DIST = core-daemon-init.d \ - core-daemon.service.in \ - core-daemon-rc.d \ - core-daemon-init.d-SUSE +EXTRA_DIST = core-daemon.in core-daemon.service.in SUBDIRS = perf # install startup scripts based on --with-startup=option configure option -# init.d (default), systemd, SUSE +# init.d (default), systemd if WANT_INITD startupdir = /etc/init.d startup_SCRIPTS = core-daemon - -core-daemon: core-daemon-init.d - cp $< $@ endif if WANT_SYSTEMD startupdir = /etc/systemd/system startup_SCRIPTS = core-daemon.service endif -if WANT_SUSE -startupdir = /etc/init.d -startup_SCRIPTS = core-daemon - -core-daemon: core-daemon-init.d-SUSE - cp $< $@ -endif # remove extra scripts and their directories if they are empty uninstall-hook: diff --git a/scripts/core-daemon-init.d b/scripts/core-daemon-init.d deleted file mode 100755 index 1c65c6f0..00000000 --- a/scripts/core-daemon-init.d +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/sh -### BEGIN INIT INFO -# Provides: core-daemon -# Required-Start: $network $remote_fs -# Required-Stop: $network $remote_fs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start the core-daemon CORE daemon at boot time -# Description: Starts and stops the core-daemon CORE daemon used to -# provide network emulation services for the CORE GUI -# or scripts. -### END INIT INFO -# -# chkconfig: 35 90 03 -# description: Starts and stops the CORE daemon \ -# used to provide network emulation services. -# -# pidfile: /var/run/core-daemon.pid -# config: /usr/local/etc/core/ - -DEB=no -# Source function library. -if [ -f /etc/init.d/functions ] ; then - . /etc/init.d/functions -elif [ -f /etc/rc.d/init.d/functions ] ; then - . /etc/rc.d/init.d/functions -elif [ -f /lib/lsb/init-functions ] ; then - . /lib/lsb/init-functions - DEB=yes -else - exit 1 -fi - -# search for core-daemon which may or may not be installed -cored= -for p in /usr/local/sbin \ - /usr/sbin \ - /sbin \ - /usr/local/bin \ - /usr/bin \ - /bin -do - if [ -e $p/core-daemon ] ; then - cored=$p/core-daemon - break - fi -done - -# this function comes from /etc/profile -pathmunge () { - if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then - if [ "$2" = "after" ] ; then - PATH=$PATH:$1 - else - PATH=$1:$PATH - fi - fi -} - -# these lines add to the PATH variable used by CORE and its containers -# you can add your own pathmunge statements to change the container's PATH -pathmunge "/usr/local/sbin" -pathmunge "/usr/local/bin" - -RETVAL=0 -PIDFILE=/var/run/core-daemon.pid - -# the /etc/init.d/functions (RedHat) differs from -# /usr/lib/init-functions (Debian) -if [ $DEB = yes ]; then - daemon="start-stop-daemon --start -p ${PIDFILE} --exec /usr/bin/python --" - #daemon=start_daemon - killproc="start-stop-daemon --stop --quiet --oknodo --retry 10" - status=status_of_proc - msg () { - log_daemon_msg "$@" - } - endmsg () { - log_end_msg "$@" - } -else - daemon="daemon /usr/bin/python" - killproc="killproc -d 10" - status=status - msg () { - echo -n $"$@" - } - endmsg () { - echo "" - } -fi - - -start() { - msg "Starting core-daemon" - $daemon $cored -d - RETVAL=$? - endmsg $RETVAL - return $RETVAL -} - -stop() { - msg "Shutting down core-daemon" - $killproc -p ${PIDFILE} $cored - RETVAL=$? - rm -f ${PIDFILE} - endmsg $RETVAL - return $RETVAL -} - -restart() { - stop - start -} - -corestatus() { - $status -p ${PIDFILE} core-daemon core-daemon - return $? -} - - -case "$1" in - start) - start - ;; - stop) - stop - ;; - restart) - restart - ;; - force-reload) - restart - ;; - status) - corestatus - ;; - *) - msg "Usage: $0 {start|stop|restart|status}" - endmsg - exit 2 -esac - -exit $? diff --git a/scripts/core-daemon-init.d-SUSE b/scripts/core-daemon-init.d-SUSE deleted file mode 100755 index b3a3d67a..00000000 --- a/scripts/core-daemon-init.d-SUSE +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/sh -# -# Template SUSE system startup script for example service/daemon core -# Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc. -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at -# your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, -# USA. -# -# /etc/init.d/FOO -# and its symbolic link -# /(usr/)sbin/rcFOO -# -# Template system startup script for some example service/daemon FOO -# -# LSB compatible service control script; see http://www.linuxbase.org/spec/ -# -# Note: This template uses functions rc_XXX defined in /etc/rc.status on -# UnitedLinux/SUSE/Novell based Linux distributions. If you want to base your -# script on this template and ensure that it works on non UL based LSB -# compliant Linux distributions, you either have to provide the rc.status -# functions from UL or change the script to work without them. -# See skeleton.compat for a template that works with other distros as well. -# -### BEGIN INIT INFO -# Provides: core-daemon -# Required-Start: $network $remote_fs -# Required-Stop: $network $remote_fs -# Default-Start: 3 5 -# Default-Stop: 0 1 2 6 -# Short-Description: core-daemon -# Description: Start core-daemon -# continued on second line by '#' -# should contain enough info for the runlevel editor -# to give admin some idea what this service does and -# what it's needed for ... -# (The Short-Description should already be a good hint.) -### END INIT INFO -# -# Any extensions to the keywords given above should be preceeded by -# X-VendorTag- (X-UnitedLinux- X-SuSE- for us) according to LSB. -# -# Notes on Required-Start/Should-Start: -# * There are two different issues that are solved by Required-Start -# and Should-Start -# (a) Hard dependencies: This is used by the runlevel editor to determine -# which services absolutely need to be started to make the start of -# this service make sense. Example: nfsserver should have -# Required-Start: $portmap -# Also, required services are started before the dependent ones. -# The runlevel editor will warn about such missing hard dependencies -# and suggest enabling. During system startup, you may expect an error, -# if the dependency is not fulfilled. -# (b) Specifying the init script ordering, not real (hard) dependencies. -# This is needed by insserv to determine which service should be -# started first (and at a later stage what services can be started -# in parallel). The tag Should-Start: is used for this. -# It tells, that if a service is available, it should be started -# before. If not, never mind. -# * When specifying hard dependencies or ordering requirements, you can -# use names of services (contents of their Provides: section) -# or pseudo names starting with a $. The following ones are available -# according to LSB (1.1): -# $local_fs all local file systems are mounted -# (most services should need this!) -# $remote_fs all remote file systems are mounted -# (note that /usr may be remote, so -# many services should Require this!) -# $syslog system logging facility up -# $network low level networking (eth card, ...) -# $named hostname resolution available -# $netdaemons all network daemons are running -# The $netdaemons pseudo service has been removed in LSB 1.2. -# For now, we still offer it for backward compatibility. -# These are new (LSB 1.2): -# $time the system time has been set correctly -# $portmap SunRPC portmapping service available -# UnitedLinux extensions: -# $ALL indicates that a script should be inserted -# at the end -# * The services specified in the stop tags -# (Required-Stop/Should-Stop) -# specify which services need to be still running when this service -# is shut down. Often the entries there are just copies or a subset -# from the respective start tag. -# * Should-Start/Stop are now part of LSB as of 2.0, -# formerly SUSE/Unitedlinux used X-UnitedLinux-Should-Start/-Stop. -# insserv does support both variants. -# * X-UnitedLinux-Default-Enabled: yes/no is used at installation time -# (%fillup_and_insserv macro in %post of many RPMs) to specify whether -# a startup script should default to be enabled after installation. -# It's not used by insserv. -# -# Note on runlevels: -# 0 - halt/poweroff 6 - reboot -# 1 - single user 2 - multiuser without network exported -# 3 - multiuser w/ network (text mode) 5 - multiuser w/ network and X11 (xdm) -# -# Note on script names: -# http://www.linuxbase.org/spec/refspecs/LSB_1.3.0/gLSB/gLSB/scrptnames.html -# A registry has been set up to manage the init script namespace. -# http://www.lanana.org/ -# Please use the names already registered or register one or use a -# vendor prefix. - - -# Check for missing binaries (stale symlinks should not happen) -# Note: Special treatment of stop for LSB conformance -CORE_BIN=/usr/local/bin/core-daemon -test -x $CORE_BIN || { echo "$CORE_BIN not installed"; - if [ "$1" = "stop" ]; then exit 0; - else exit 5; fi; } - -# Check for existence of needed config file and read it -CORE_CONFIG=/etc/core -test -r $CORE_CONFIG || { echo "$CORE_CONFIG not existing"; - if [ "$1" = "stop" ]; then exit 0; - else exit 6; fi; } - -# Source LSB init functions -# providing start_daemon, killproc, pidofproc, -# log_success_msg, log_failure_msg and log_warning_msg. -# This is currently not used by UnitedLinux based distributions and -# not needed for init scripts for UnitedLinux only. If it is used, -# the functions from rc.status should not be sourced or used. -#. /lib/lsb/init-functions - -# Shell functions sourced from /etc/rc.status: -# rc_check check and set local and overall rc status -# rc_status check and set local and overall rc status -# rc_status -v be verbose in local rc status and clear it afterwards -# rc_status -v -r ditto and clear both the local and overall rc status -# rc_status -s display "skipped" and exit with status 3 -# rc_status -u display "unused" and exit with status 3 -# rc_failed set local and overall rc status to failed -# rc_failed set local and overall rc status to -# rc_reset clear both the local and overall rc status -# rc_exit exit appropriate to overall rc status -# rc_active checks whether a service is activated by symlinks -. /etc/rc.status - -# Reset status of this service -rc_reset - -# Return values acc. to LSB for all commands but status: -# 0 - success -# 1 - generic or unspecified error -# 2 - invalid or excess argument(s) -# 3 - unimplemented feature (e.g. "reload") -# 4 - user had insufficient privileges -# 5 - program is not installed -# 6 - program is not configured -# 7 - program is not running -# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl) -# -# Note that starting an already running service, stopping -# or restarting a not-running service as well as the restart -# with force-reload (in case signaling is not supported) are -# considered a success. - -case "$1" in - start) - echo -n "Starting CORE " - ## Start daemon with startproc(8). If this fails - ## the return value is set appropriately by startproc. - /sbin/startproc $CORE_BIN -d - - # Remember status and be verbose - rc_status -v - ;; - stop) - echo -n "Shutting down CORE " - ## Stop daemon with killproc(8) and if this fails - ## killproc sets the return value according to LSB. - - if [ -r /var/run/core-daemon.pid ] ; then - /bin/kill -TERM `cat /var/run/core-daemon.pid` - /bin/rm -f /var/run/core-daemon.pid - fi - - # Remember status and be verbose - rc_status -v - ;; - try-restart|condrestart) - ## Do a restart only if the service was active before. - ## Note: try-restart is now part of LSB (as of 1.9). - ## RH has a similar command named condrestart. - if test "$1" = "condrestart"; then - echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" - fi - $0 status - if test $? = 0; then - $0 restart - else - rc_reset # Not running is not a failure. - fi - # Remember status and be quiet - rc_status - ;; - restart) - ## Stop the service and regardless of whether it was - ## running or not, start it again. - $0 stop - $0 start - - # Remember status and be quiet - rc_status - ;; - force-reload) - ## Signal the daemon to reload its config. Most daemons - ## do this on signal 1 (SIGHUP). - ## If it does not support it, restart the service if it - ## is running. - - echo -n "Reload service CORE " - $0 try-restart - rc_status - ;; - - reload) - ## Like force-reload, but if daemon does not support - ## signaling, do nothing (!) - - ## It does not support reload: - rc_failed 3 - rc_status -v - ;; - - status) - echo -n "Checking for service CORE " - ## Check status with checkproc(8), if process is running - ## checkproc will return with exit status 0. - - # Return value is slightly different for the status command: - # 0 - service up and running - # 1 - service dead, but /var/run/ pid file exists - # 2 - service dead, but /var/lock/ lock file exists - # 3 - service not running (unused) - # 4 - service status unknown :-( - # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.) - - # NOTE: checkproc returns LSB compliant status values. - /sbin/checkproc -p /var/run/core-daemon.pid python - # NOTE: rc_status knows that we called this init script with - # "status" option and adapts its messages accordingly. - rc_status -v - ;; - *) - echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}" - exit 1 - ;; -esac -rc_exit diff --git a/scripts/core-daemon-rc.d b/scripts/core-daemon-rc.d deleted file mode 100755 index 984f5e7b..00000000 --- a/scripts/core-daemon-rc.d +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh -# - -# PROVIDE: core -# REQUIRE: NETWORKING - -# To enable CORE services on startup, add the following line to /etc/rc.conf: -# core_enable="YES" -# - -. /etc/rc.subr - -name="core" -rcvar=`set_rcvar` - -stop_postcmd=stop_postcmd - -stop_postcmd() -{ - rm -f $pidfile -} - -# defaults -load_rc_config $name -: ${core_enable="NO"} -: ${core_flags="-d"} -: ${core_daemons="core-daemon"} - -core_cmd=$1 - -case "${core_cmd}" in - start) - ;; - stop|restart) - core_daemons=$(reverse_list ${core_daemons}) - ;; -esac - -for daemon in ${core_daemons}; do - command=/usr/local/sbin/${daemon} - pidname=`echo ${daemon} | sed 's/\.//g'` - pidfile=/var/run/${pidname}.pid - command_interpreter=python - if [ "${daemon}" = "core-daemon" ]; then - command_interpreter=python - fi - run_rc_command "$1" - _rc_restart_done=false -done - diff --git a/scripts/core-daemon.in b/scripts/core-daemon.in new file mode 100644 index 00000000..37a493c8 --- /dev/null +++ b/scripts/core-daemon.in @@ -0,0 +1,112 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: core-daemon +# Required-Start: $network $remote_fs +# Required-Stop: $network $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start the core-daemon CORE daemon at boot time +# Description: Starts and stops the core-daemon CORE daemon used to +# provide network emulation services for the CORE GUI +# or scripts. +### END INIT INFO +# +# chkconfig: 35 90 03 +# description: Starts and stops the CORE daemon \ +# used to provide network emulation services. +# +# config: /etc/core/ + +NAME=`basename $0` +PIDFILE="@CORE_STATE_DIR@/run/$NAME.pid" +LOG="@CORE_STATE_DIR@/log/$NAME.log" +CMD="@PYTHON@ @bindir@/$NAME" + +get_pid() { + cat "$PIDFILE" +} + +is_alive() { + [ -f "$PIDFILE" ] && ps -p `get_pid` > /dev/null 2>&1 +} + +corestart() { + if is_alive; then + echo "$NAME already started" + else + echo "starting $NAME" + sudo $CMD 2>&1 >> "$LOG" & + fi + + echo $! > "$PIDFILE" + if ! is_alive; then + echo "unable to start $NAME, see $LOG" + exit 1 + fi +} + +corestop() { + if is_alive; then + echo -n "stopping $NAME.." + kill `get_pid` + for i in 1 2 3 4 5; do + sleep 1 + if ! is_alive; then + break + fi + echo -n "." + done + echo + + if is_alive; then + echo "not stopped; may still be shutting down" + exit 1 + else + echo "stopped" + if [ -f "$PIDFILE" ]; then + rm -f "$PIDFILE" + fi + fi + else + echo "$NAME not running" + fi +} + +corerestart() { + corestop + corestart +} + +corestatus() { + if is_alive; then + echo "$NAME is running" + else + echo "$NAME is stopped" + exit 1 + fi +} + + +case "$1" in + start) + corestart + ;; + stop) + corestop + ;; + restart) + corerestart + ;; + force-reload) + corerestart + ;; + status) + corestatus + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 +esac + +exit $? +