diff --git a/CMakeLists.txt b/CMakeLists.txt index 43cbcdd..efcaba8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,53 +509,80 @@ if(NOT WIN32) install(FILES scripts/add3proxyuser.sh DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() -# Install service files (systemd or init.d) +# Install service files (systemd, init.d, or rc.d) if(NOT WIN32) - # Check for systemd - find_package(PkgConfig QUIET) - if(PkgConfig_FOUND) - pkg_check_modules(SYSTEMD QUIET systemd) - endif() + if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD|Darwin|OpenBSD|NetBSD") + # BSD/macOS - install rc.d script + set(RCD_DIR "/usr/local/etc/rc.d") - if(SYSTEMD_FOUND) - # systemd is available - install systemd service - # Get systemd unit directory - pkg_get_variable(SYSTEMD_UNIT_DIR systemd systemdsystemunitdir) - if(NOT SYSTEMD_UNIT_DIR) - # Fallback to common location - set(SYSTEMD_UNIT_DIR "/lib/systemd/system") + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/scripts/rc.d/3proxy.in + ${CMAKE_CURRENT_BINARY_DIR}/3proxy.rc + @ONLY + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.rc + DESTINATION ${RCD_DIR} + RENAME 3proxy + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) + + message(STATUS " rc.d: YES (${RCD_DIR})") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # Linux - check for systemd + find_package(PkgConfig QUIET) + if(PkgConfig_FOUND) + pkg_check_modules(SYSTEMD QUIET systemd) endif() - # Configure and install systemd service file - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.service.in - ${CMAKE_CURRENT_BINARY_DIR}/3proxy.service - @ONLY - ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.service - DESTINATION ${SYSTEMD_UNIT_DIR} - ) + if(SYSTEMD_FOUND) + # systemd is available - install systemd service + # Get systemd unit directory + pkg_get_variable(SYSTEMD_UNIT_DIR systemd systemdsystemunitdir) + if(NOT SYSTEMD_UNIT_DIR) + # Fallback to common location + set(SYSTEMD_UNIT_DIR "/lib/systemd/system") + endif() - # Install tmpfiles.d configuration for runtime directory - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.tmpfiles.in - ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf - @ONLY - ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf - DESTINATION /usr/lib/tmpfiles.d - ) + # Configure and install systemd service file + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.service.in + ${CMAKE_CURRENT_BINARY_DIR}/3proxy.service + @ONLY + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.service + DESTINATION ${SYSTEMD_UNIT_DIR} + ) - message(STATUS " systemd: YES (${SYSTEMD_UNIT_DIR})") + # Install tmpfiles.d configuration for runtime directory + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.tmpfiles.in + ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf + @ONLY + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf + DESTINATION /usr/lib/tmpfiles.d + ) + + message(STATUS " systemd: YES (${SYSTEMD_UNIT_DIR})") + else() + # No systemd - install init.d script + install(FILES scripts/init.d/3proxy.sh + DESTINATION /etc/init.d + RENAME 3proxy + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) + + message(STATUS " systemd: NO (using init.d)") + endif() else() - # No systemd - install init.d script + # Other Unix - install init.d script install(FILES scripts/init.d/3proxy.sh DESTINATION /etc/init.d RENAME 3proxy PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) - message(STATUS " systemd: NO (using init.d)") + message(STATUS " init.d: YES (/etc/init.d)") endif() endif() diff --git a/Makefile.FreeBSD b/Makefile.FreeBSD index 7468f45..b58fea5 100644 --- a/Makefile.FreeBSD +++ b/Makefile.FreeBSD @@ -50,7 +50,7 @@ install: all if [ ! -d "/usr/local/3proxy/bin" ]; then mkdir -p /usr/local/3proxy/bin/; fi install bin/3proxy /usr/local/3proxy/bin/3proxy install bin/mycrypt /usr/local/3proxy/bin/mycrypt - install scripts/init.d/proxy.sh /usr/local/etc/rc.d/3proxy + install scripts/rc.d/3proxy /usr/local/etc/rc.d/3proxy install scripts/add3proxyuser.sh /usr/local/3proxy/bin/ if [ -s /usr/local/etc/3proxy/3proxy.cfg ]; then /usr/local/3proxy/3proxy.cfg already exists ; else install scripts/3proxy.cfg /usr/local/etc/3proxy/; fi if [ ! -d /var/log/3proxy/ ]; then mkdir /var/log/3proxy/; fi diff --git a/Makefile.unix b/Makefile.unix index 24d009e..7c996ed 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -51,7 +51,7 @@ install: all if [ ! -d "/usr/local/3proxy/bin" ]; then mkdir -p /usr/local/3proxy/bin/; fi install bin/3proxy /usr/local/3proxy/bin/3proxy install bin/mycrypt /usr/local/3proxy/bin/mycrypt - install scripts/init.d/proxy.sh /usr/local/etc/rc.d/3proxy + install scripts/rc.d/3proxy /usr/local/etc/rc.d/3proxy install scripts/add3proxyuser.sh /usr/local/3proxy/bin/ if [ -s /usr/local/etc/3proxy/3proxy.cfg ]; then /usr/local/3proxy/3proxy.cfg already exists ; else install scripts/3proxy.cfg /usr/local/etc/3proxy/; fi if [ ! -d /var/log/3proxy/ ]; then mkdir /var/log/3proxy/; fi diff --git a/scripts/rc.d/3proxy b/scripts/rc.d/3proxy new file mode 100644 index 0000000..f293671 --- /dev/null +++ b/scripts/rc.d/3proxy @@ -0,0 +1,27 @@ +#!/bin/sh + +# PROVIDE: 3proxy +# REQUIRE: LOGIN DAEMON +# KEYWORD: shutdown + +. /etc/rc.subr + +name="3proxy" +rcvar="3proxy_enable" + +command="/usr/local/3proxy/bin/3proxy" +pidfile="/var/run/3proxy/${name}.pid" +command_args="${3proxy_config:-/usr/local/etc/3proxy/3proxy.cfg}" +required_files="${3proxy_config:-/usr/local/etc/3proxy/3proxy.cfg}" + +start_precmd="3proxy_precmd" + +3proxy_precmd() +{ + if [ ! -d /var/run/3proxy ]; then + mkdir -p /var/run/3proxy + fi +} + +load_rc_config $name +run_rc_command "$1" diff --git a/scripts/rc.d/3proxy.in b/scripts/rc.d/3proxy.in new file mode 100644 index 0000000..c3690ac --- /dev/null +++ b/scripts/rc.d/3proxy.in @@ -0,0 +1,27 @@ +#!/bin/sh + +# PROVIDE: 3proxy +# REQUIRE: LOGIN DAEMON +# KEYWORD: shutdown + +. /etc/rc.subr + +name="3proxy" +rcvar="3proxy_enable" + +command="@CMAKE_INSTALL_FULL_BINDIR@/3proxy" +pidfile="/var/run/3proxy/${name}.pid" +command_args="${3proxy_config:-/etc/3proxy/3proxy.cfg}" +required_files="${3proxy_config:-/etc/3proxy/3proxy.cfg}" + +start_precmd="3proxy_precmd" + +3proxy_precmd() +{ + if [ ! -d /var/run/3proxy ]; then + mkdir -p /var/run/3proxy + fi +} + +load_rc_config $name +run_rc_command "$1"