diff --git a/ChangeLog b/ChangeLog index 0e34cee2..76604b13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -32,7 +32,8 @@ Version 4.5.2 'dan Eider': - Fix stale-nonce documentation. Resolves #604 - Version number is changed to semver 2.0 - Merge PR #288 (by Hristo Venev) - * pkg-config, and various cleanups in connfigure file + * pkg-config, and various cleanups in connfigure file + - Add systemd notification for better systemd integration 24/06/2020 Oleg Moskalenko Mihály Mészáros Version 4.5.1.3 'dan Eider': diff --git a/README.turnserver b/README.turnserver index ba3ad28a..b3fed4fc 100644 --- a/README.turnserver +++ b/README.turnserver @@ -158,6 +158,8 @@ Flags: -o, --daemon Run server as daemon. +--systemd Notify systemd about server status. (Use only in forground!) + --no-software-attribute Production mode: hide the software version. -f, --fingerprint Use fingerprints in the TURN messages. If an incoming request diff --git a/configure b/configure index 2884d6c4..01034f72 100755 --- a/configure +++ b/configure @@ -864,6 +864,21 @@ else OSCFLAGS="${OSCFLAGS} -DTURN_NO_PROMETHEUS" fi +########################### +# Test libsystemd +########################### + +if [ -z "${TURN_NO_SYSTEMD}" ] ; then + if testpkg_common libsystemd; then + ${ECHO_CMD} "Systemd library found." + else + ${ECHO_CMD} "Systemd library not found. Building without systemd support." + TURN_NO_PQ="-DTURN_NO_SYSTEMD" + fi +else + TURN_NO_PQ="-DTURN_NO_SYSTEMD" +fi + ########################### # Test SQLite3 setup ########################### diff --git a/docker/coturn/Dockerfile b/docker/coturn/Dockerfile index fc109980..b84f84ce 100644 --- a/docker/coturn/Dockerfile +++ b/docker/coturn/Dockerfile @@ -6,7 +6,7 @@ ENV BUILD_PREFIX /usr/local/src # Install build dependencies RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get update && \ - apt-get install -y build-essential git debhelper dpkg-dev libssl-dev libevent-dev sqlite3 libsqlite3-dev postgresql-client libpq-dev default-mysql-client default-libmysqlclient-dev libhiredis-dev libmongoc-dev libbson-dev + apt-get install -y build-essential git debhelper dpkg-dev libssl-dev libevent-dev sqlite3 libsqlite3-dev postgresql-client libpq-dev default-mysql-client default-libmysqlclient-dev libhiredis-dev libmongoc-dev libbson-dev libsystemd-dev # Clone Coturn WORKDIR ${BUILD_PREFIX} diff --git a/examples/etc/coturn.service b/examples/etc/coturn.service index c3831f80..3fb2a39d 100644 --- a/examples/etc/coturn.service +++ b/examples/etc/coturn.service @@ -9,12 +9,10 @@ Wants=network-online.target [Service] User=turnserver Group=turnserver -Type=forking +Type=notify RuntimeDirectory=turnserver PIDFile=/run/turnserver/turnserver.pid -ExecStart=/usr/bin/turnserver --daemon -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid -#FixMe: turnserver exit faster than it is finshing the setup and ready for handling the connection. -ExecStartPost=/bin/sleep 2 +ExecStart=/usr/bin/turnserver --systemd -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid Restart=on-failure InaccessibleDirectories=/home PrivateTmp=yes diff --git a/man/man1/turnadmin.1 b/man/man1/turnadmin.1 index d19ce74d..308b356b 100644 --- a/man/man1/turnadmin.1 +++ b/man/man1/turnadmin.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "05 January 2021" "" "" +.TH TURN 1 "07 January 2021" "" "" .SH GENERAL INFORMATION \fIturnadmin\fP is a TURN administration tool. This tool can be used to manage diff --git a/man/man1/turnserver.1 b/man/man1/turnserver.1 index 02bfd5da..da3448fa 100644 --- a/man/man1/turnserver.1 +++ b/man/man1/turnserver.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "05 January 2021" "" "" +.TH TURN 1 "07 January 2021" "" "" .SH GENERAL INFORMATION The \fBTURN Server\fP project contains the source code of a TURN server and TURN client @@ -230,6 +230,10 @@ Extra verbose mode, very annoying and not recommended. .B \fB\-o\fP, \fB\-\-daemon\fP Run server as daemon. +.TP +.B +\fB\-\-systemd\fP +Notify systemd about server status. (Use only in forground!) .PP \fB\-\-no\-software\-attribute\fP Production mode: hide the software version. .TP diff --git a/man/man1/turnutils.1 b/man/man1/turnutils.1 index 26b98805..8e3c5062 100644 --- a/man/man1/turnutils.1 +++ b/man/man1/turnutils.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "05 January 2021" "" "" +.TH TURN 1 "07 January 2021" "" "" .SH GENERAL INFORMATION A set of turnutils_* programs provides some utility functionality to be used diff --git a/rpm/turnserver.service.fc b/rpm/turnserver.service.fc index f0113fff..6e9301f6 100644 --- a/rpm/turnserver.service.fc +++ b/rpm/turnserver.service.fc @@ -6,10 +6,10 @@ After=syslog.target network.target [Service] User=turnserver Group=turnserver -Type=forking +Type=notify EnvironmentFile=/etc/sysconfig/turnserver PIDFile=/var/run/turnserver/turnserver.pid -ExecStart=/usr/bin/turnserver -o -c /etc/turnserver/turnserver.conf $EXTRA_OPTIONS +ExecStart=/usr/bin/turnserver --systemd -c /etc/turnserver/turnserver.conf $EXTRA_OPTIONS ExecStopPost=/usr/bin/rm -f /var/run/turnserver/turnserver.pid Restart=on-abort diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index 2c3c7e13..d4c794ed 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -170,7 +170,8 @@ DEFAULT_CPUS_NUMBER, 0, /* no_dynamic_ip_list */ 0, /* no_dynamic_realms */ -0 /* log_binding */ +0, /* log_binding */ +0 /* systemd */ }; //////////////// OpenSSL Init ////////////////////// @@ -463,6 +464,7 @@ static char Usage[] = "Usage: turnserver [options]\n" " -v, --verbose 'Moderate' verbose mode.\n" " -V, --Verbose Extra verbose mode, very annoying (for debug purposes only).\n" " -o, --daemon Start process as daemon (detach from current shell).\n" +" --systemd Notify systemd about server status. (Use only in forground!)\n" " --no-software-attribute Production mode: hide the software version (formerly --prod).\n" " -f, --fingerprint Use fingerprints in the TURN messages.\n" " -a, --lt-cred-mech Use the long-term credential mechanism.\n" @@ -813,7 +815,8 @@ enum EXTRA_OPTS { NO_HTTP_OPT, SECRET_KEY_OPT, ACME_REDIRECT_OPT, - LOG_BINDING_OPT + LOG_BINDING_OPT, + SYSTEMD_OPT }; struct myoption { @@ -949,6 +952,7 @@ static const struct myoption long_options[] = { { "keep-address-family", optional_argument, NULL, 'K' }, { "acme-redirect", required_argument, NULL, ACME_REDIRECT_OPT }, { "log-binding", optional_argument, NULL, LOG_BINDING_OPT }, + { "systemd", optional_argument, NULL, SYSTEMD_OPT }, { NULL, no_argument, NULL, 0 } }; @@ -1606,6 +1610,9 @@ static void set_option(int c, char *value) case LOG_BINDING_OPT: turn_params.log_binding = get_bool_value(value); break; + case SYSTEMD_OPT: + turn_params.systemd = get_bool_value(value); + break; /* these options have been already taken care of before: */ case 'l': diff --git a/src/apps/relay/mainrelay.h b/src/apps/relay/mainrelay.h index 5b6f7cdd..be467584 100644 --- a/src/apps/relay/mainrelay.h +++ b/src/apps/relay/mainrelay.h @@ -85,6 +85,10 @@ #include #endif +#if !defined(TURN_NO_SYSTEMD) +#include +#endif + #ifdef __cplusplus extern "C" { #endif @@ -335,6 +339,8 @@ typedef struct _turn_params_ { vint log_binding; + vint systemd; + } turn_params_t; extern turn_params_t turn_params; diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 6a456f6a..1590dda4 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -1590,6 +1590,11 @@ void run_listener_server(struct listener_server *ls) unsigned int cycle = 0; while (!turn_params.stop_turn_server) { + #if !defined(TURN_NO_SYSTEMD) + if(turn_params.systemd) + sd_notify (0, "READY=1"); + #endif + if (eve(turn_params.verbose)) { if ((cycle++ & 15) == 0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "%s: cycle=%u\n", __FUNCTION__, cycle); @@ -1600,6 +1605,11 @@ void run_listener_server(struct listener_server *ls) rollover_logfile(); } + + #if !defined(TURN_NO_SYSTEMD) + if(turn_params.systemd) + sd_notify (0, "STOPPING=1"); + #endif } static void setup_relay_server(struct relay_server *rs, ioa_engine_handle e, int to_set_rfc5780)