diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ae1e9c..7e94ab1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,6 +115,10 @@ find_package(OpenSSL REQUIRED) find_package(PAM REQUIRED) find_package(DL REQUIRED) +# we want to use systemd, if possible +set(SYSTEMD_SERVICES_INSTALL_DIR "" CACHE PATH "Directory for systemd service files") +INCLUDE(${CMAKE_MODULE_PATH}/systemdservice.cmake) + message(STATUS "Mars Nwe version: ${MARS_NWE_VERSION}") message(STATUS "bin: ${CMAKE_INSTALL_FULL_BINDIR}") message(STATUS "sbin: ${CMAKE_INSTALL_FULL_SBINDIR}") diff --git a/cmake/modules/systemdservice.cmake b/cmake/modules/systemdservice.cmake new file mode 100644 index 0000000..c67cabc --- /dev/null +++ b/cmake/modules/systemdservice.cmake @@ -0,0 +1,21 @@ +######## +# Find systemd service dir + +pkg_check_modules(SYSTEMD "systemd") +if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "") + execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} + --variable=systemdsystemunitdir systemd + OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR) + string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR + "${SYSTEMD_SERVICES_INSTALL_DIR}") +elseif (NOT SYSTEMD_FOUND AND SYSTEMD_SERVICES_INSTALL_DIR) + message (FATAL_ERROR "Variable SYSTEMD_SERVICES_INSTALL_DIR is\ + defined, but we can't find systemd using pkg-config") +endif() + +if (SYSTEMD_FOUND) + set(WITH_SYSTEMD "ON") + message(STATUS "systemd services install dir: ${SYSTEMD_SERVICES_INSTALL_DIR}") +else() + set(WITH_SYSTEMD "OFF") +endif (SYSTEMD_FOUND) diff --git a/opt/CMakeLists.txt b/opt/CMakeLists.txt index 292286b..ae72046 100644 --- a/opt/CMakeLists.txt +++ b/opt/CMakeLists.txt @@ -16,6 +16,12 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/nwserv.logrotate" IMMEDIATE @ONLY) +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/mars-nwe-serv.service.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/mars-nwe-serv.service" + @ONLY +) + ################################# # Compiler Switches ############## @@ -81,4 +87,10 @@ install(FILES prn DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR}) install(FILES prn-clr DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR}) install(FILES uptime DESTINATION ${MARS_NWE_INSTALL_FULL_LIBEXECDIR}) - +if(WITH_SYSTEMD) + install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/mars-nwe-serv.service" + DESTINATION "${SYSTEMD_SERVICES_INSTALL_DIR}" + ) +endif() diff --git a/opt/mars-nwe-serv.service.cmake b/opt/mars-nwe-serv.service.cmake new file mode 100644 index 0000000..aa512c0 --- /dev/null +++ b/opt/mars-nwe-serv.service.cmake @@ -0,0 +1,14 @@ +[Unit] +Description=Martin Stover Netware Emulator +After=network.target + +[Service] +Type=forking +RuntimeDirectory=mars_nwe +RuntimeDirectoryMode=0755 +PIDFile=@MARS_NWE_PID_DIR@/nwserv.pid +ExecStart=@CMAKE_INSTALL_FULL_SBINDIR@/nwserv +ExecStop=/bin/kill -TERM $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/opt/nwserv.logrotate.cmake b/opt/nwserv.logrotate.cmake index dfd51aa..7fef5a5 100644 --- a/opt/nwserv.logrotate.cmake +++ b/opt/nwserv.logrotate.cmake @@ -18,6 +18,6 @@ @MARS_NWE_LOG_DIR@/smart.log { postrotate - /bin/killall -HUP nwwebui + /bin/killall -HUP smart endrotate }