diff --git a/linux/sysvinit/ckb-next-daemon.in b/linux/sysvinit/ckb-next-daemon.in new file mode 100755 index 00000000..139fd7e9 --- /dev/null +++ b/linux/sysvinit/ckb-next-daemon.in @@ -0,0 +1,36 @@ +#!/bin/sh +# Copyright 2017-2018 ckb-next Development Team +# Distributed under the terms of the GNU General Public License v2 + +NAME="ckb-next-daemon" +PID="/dev/input/ckb0/pid" +DAEMON="@CMAKE_INSTALL_PREFIX@/bin/ckb-next-daemon" + +. /lib/lsb/init-functions + +case "$1" in + start) + log_daemon_msg "Starting $NAME" "$NAME" + start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --background + log_end_msg $? + ;; + stop) + log_daemon_msg "Stopping $NAME" "$NAME" + start-stop-daemon --stop --quiet --retry="-QUIT/5/TERM/5/KILL/5" --pidfile $PID --name $NAME + log_end_msg $? + ;; + restart) + log_daemon_msg "Restarting $NAME" "$NAME" + start-stop-daemon --stop --quiet --retry="-QUIT/5/TERM/5/KILL/5" --pidfile $PID --name $NAME + start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --background + log_end_msg $? + ;; + reload) + log_daemon_msg "Reloading $NAME" "$NAME" + start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME + log_end_msg $? + ;; + *) + echo "Usage: $1 {start|stop|restart|reload}" + exit 1 +esac diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt index 37903acb..cc3fbe20 100644 --- a/src/daemon/CMakeLists.txt +++ b/src/daemon/CMakeLists.txt @@ -325,12 +325,6 @@ elseif (LINUX) @ONLY) if (SAFE_INSTALL) - execute_process( - COMMAND rc-status -a - COMMAND egrep "started" - COMMAND egrep -o "ckb-daemon|ckb-next-daemon" - OUTPUT_VARIABLE daemons - OUTPUT_STRIP_TRAILING_WHITESPACE) if (daemons) string(REPLACE "\n" ";" daemons_list "${daemons}") foreach (daemon IN LISTS daemons_list) @@ -356,6 +350,27 @@ elseif (LINUX) endif () + # A way to check for SysVinit + if (EXISTS "/etc/inittab") + message(STATUS "SysVinit detected") + set(CKB_NEXT_INIT_SYSTEM "SysVinit" CACHE INTERNAL "") + + # Generate and import service + message(STATUS "Generating and importing ckb-next-daemon (${CKB_NEXT_INIT_SYSTEM})") + configure_file( + "${ckb-next_SOURCE_DIR}/linux/sysvinit/ckb-next-daemon.in" + "${CMAKE_CURRENT_BINARY_DIR}/service/ckb-next-daemon.sh" + @ONLY) + + if (SAFE_INSTALL) + if (EXISTS "/dev/input/ckb0/pid") + message(STATUS "Running ckb-next-daemon detected") + install(CODE "message(STATUS \"${CKB_NEXT_INIT_SYSTEM}: stoppping ${daemon}\")") + install(CODE "execute_process(COMMAND sudo /etc/init.d/ckb-next-daemon.sh stop)") + endif () + endif () + endif () + endif () # Declare target's installation paths @@ -402,9 +417,17 @@ elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "OpenRC") OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "SysVinit") + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/service/ckb-next-daemon.sh" + DESTINATION "/etc/init.d" + PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "unknown") message(WARNING "No supported system service detected. - Supported services are: systemd, launchd, OpenRC, upstart.") + Supported services are: systemd, launchd, OpenRC, upstart, SysVinit.") endif () if (LINUX) @@ -442,5 +465,9 @@ if (SAFE_INSTALL) install(CODE "execute_process(COMMAND sudo rc-update add ckb-next-daemon default)") install(CODE "message(STATUS \"${CKB_NEXT_INIT_SYSTEM}: starting ckb-next-daemon\")") install(CODE "execute_process(COMMAND sudo rc-service ckb-next-daemon start)") + elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "SysVinit") + # Just running the script should be enough + install(CODE "message(STATUS \"${CKB_NEXT_INIT_SYSTEM}: starting ckb-next-daemon\")") + install(CODE "execute_process(COMMAND sudo /etc/init.d/ckb-next-daemon.sh start)") endif () endif ()