aboutsummaryrefslogtreecommitdiff
path: root/pkgs/servers/uhub
diff options
context:
space:
mode:
authorEmery Hemingway <emery@vfemail.net>2014-07-18 13:02:53 -0400
committerMichael Raskin <7c6f434c@mail.ru>2014-09-01 10:53:19 +0400
commit9aa9345a5a5fda36ed0ce4dd1081494ea2391b3a (patch)
tree27539a5744f6130f1bfd571bca73d5818cc504d0 /pkgs/servers/uhub
parenta49caa77e7e5e861e5b8d0b614157fe9c42ac7e2 (diff)
uhub: initial package for version 0.4.1
Diffstat (limited to 'pkgs/servers/uhub')
-rw-r--r--pkgs/servers/uhub/default.nix43
-rw-r--r--pkgs/servers/uhub/plugin-dir.patch23
-rw-r--r--pkgs/servers/uhub/systemd.patch164
3 files changed, 230 insertions, 0 deletions
diff --git a/pkgs/servers/uhub/default.nix b/pkgs/servers/uhub/default.nix
new file mode 100644
index 000000000000..a6e0d474d897
--- /dev/null
+++ b/pkgs/servers/uhub/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, cmake, openssl, sqlite, pkgconfig, systemd
+, tlsSupport ? false }:
+
+assert tlsSupport -> openssl != null;
+
+let version = "0.4.1"; in
+stdenv.mkDerivation {
+ name = "uhub-${version}";
+
+ src = fetchurl {
+ url = "http://www.extatic.org/downloads/uhub/uhub-${version}-src.tar.bz2";
+ sha256 = "1q0n74fb0h5w0k9fhfkznxb4r46qyfb8g2ss3wflivx4l0m1f9x2";
+ };
+
+ buildInputs = [ cmake sqlite pkgconfig systemd ] ++ stdenv.lib.optional tlsSupport openssl;
+
+ outputs = [ "out"
+ "mod_example"
+ "mod_welcome"
+ "mod_logging"
+ "mod_auth_simple"
+ "mod_auth_sqlite"
+ "mod_chat_history"
+ "mod_chat_only"
+ "mod_topic"
+ "mod_no_guest_downloads"
+ ];
+
+ patches = [ ./plugin-dir.patch ./systemd.patch ];
+
+ cmakeFlags = ''
+ -DSYSTEMD_SUPPORT=ON
+ ${if tlsSupport then "-DSSL_SUPPORT=ON" else "-DSSL_SUPPORT=OFF"}
+ '';
+
+ meta = with stdenv.lib; {
+ description = "High performance peer-to-peer hub for the ADC network";
+ homepage = https://www.uhub.org/;
+ license = licenses.gpl3;
+ maintainers = [ maintainers.emery ];
+ platforms = platforms.unix;
+ };
+} \ No newline at end of file
diff --git a/pkgs/servers/uhub/plugin-dir.patch b/pkgs/servers/uhub/plugin-dir.patch
new file mode 100644
index 000000000000..95ebfd6706ff
--- /dev/null
+++ b/pkgs/servers/uhub/plugin-dir.patch
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 40e996e..d3b7e6d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -185,10 +185,16 @@ else()
+ # add_definitions(-DDEBUG)
+ endif()
+
++set( PLUGINS mod_example mod_welcome mod_logging mod_auth_simple mod_auth_sqlite mod_chat_history mod_chat_only mod_topic mod_no_guest_downloads )
++
+ if (UNIX)
+ install( TARGETS uhub RUNTIME DESTINATION bin )
+- install( TARGETS mod_example mod_welcome mod_logging mod_auth_simple mod_auth_sqlite mod_chat_history mod_chat_only mod_topic mod_no_guest_downloads DESTINATION /usr/lib/uhub/ OPTIONAL )
+- install( FILES ${CMAKE_SOURCE_DIR}/doc/uhub.conf ${CMAKE_SOURCE_DIR}/doc/plugins.conf ${CMAKE_SOURCE_DIR}/doc/rules.txt ${CMAKE_SOURCE_DIR}/doc/motd.txt DESTINATION /etc/uhub OPTIONAL )
++
++ foreach( PLUGIN ${PLUGINS} )
++ install( TARGETS ${PLUGIN} DESTINATION $ENV{${PLUGIN}} OPTIONAL )
++ endforeach( PLUGIN )
++
++ install( FILES ${CMAKE_SOURCE_DIR}/doc/uhub.conf ${CMAKE_SOURCE_DIR}/doc/plugins.conf ${CMAKE_SOURCE_DIR}/doc/rules.txt ${CMAKE_SOURCE_DIR}/doc/motd.txt DESTINATION doc/ OPTIONAL )
+
+ if (SQLITE_SUPPORT)
+ install( TARGETS uhub-passwd RUNTIME DESTINATION bin )
diff --git a/pkgs/servers/uhub/systemd.patch b/pkgs/servers/uhub/systemd.patch
new file mode 100644
index 000000000000..05e7571d18d5
--- /dev/null
+++ b/pkgs/servers/uhub/systemd.patch
@@ -0,0 +1,164 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 40e996e..fc4fb01 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -19,6 +19,7 @@ option(LINK_SUPPORT "Allow hub linking" OFF)
+ option(SSL_SUPPORT "Enable SSL support" ON)
+ option(USE_OPENSSL "Use OpenSSL's SSL support" ON )
+ option(SQLITE_SUPPORT "Enable SQLite support" ON)
++option(SYSTEMD_SUPPORT "Enable systemd notify and journal logging" OFF)
+ option(ADC_STRESS "Enable the stress tester client" OFF)
+
+ find_package(Git)
+@@ -34,6 +35,12 @@ if (SSL_SUPPORT)
+ endif()
+ endif()
+
++if (SYSTEMD_SUPPORT)
++ INCLUDE(FindPkgConfig)
++ pkg_search_module(SD_DAEMON REQUIRED libsystemd-daemon)
++ pkg_search_module(SD_JOURNAL REQUIRED libsystemd-journal)
++endif()
++
+ if (MSVC)
+ add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+ endif()
+@@ -175,6 +182,18 @@ if(SSL_SUPPORT)
+ endif()
+ endif()
+
++if (SYSTEMD_SUPPORT)
++ target_link_libraries(uhub ${SD_DAEMON_LIBRARIES})
++ target_link_libraries(uhub ${SD_JOURNAL_LIBRARIES})
++ target_link_libraries(test ${SD_DAEMON_LIBRARIES})
++ target_link_libraries(test ${SD_JOURNAL_LIBRARIES})
++ target_link_libraries(uhub-passwd ${SD_JOURNAL_LIBRARIES})
++ target_link_libraries(uhub-admin ${SD_JOURNAL_LIBRARIES})
++ include_directories(${SD_DAEMON_INCLUDE_DIRS})
++ include_directories(${SD_JOURNAL_INCLUDE_DIRS})
++ add_definitions(-DSYSTEMD)
++endif()
++
+ configure_file ("${PROJECT_SOURCE_DIR}/version.h.in" "${PROJECT_SOURCE_DIR}/version.h")
+
+ mark_as_advanced(FORCE CMAKE_BUILD_TYPE)
+diff --git a/src/core/main.c b/src/core/main.c
+index bb78672..ac2d2a8 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -19,6 +19,10 @@
+
+ #include "uhub.h"
+
++#ifdef SYSTEMD
++#include <systemd/sd-daemon.h>
++#endif
++
+ static int arg_verbose = 5;
+ static int arg_fork = 0;
+ static int arg_check_config = 0;
+@@ -145,7 +149,16 @@ int main_loop()
+ }
+ #if !defined(WIN32)
+ setup_signal_handlers(hub);
+-#endif
++#ifdef SYSTEMD
++ /* Notify the service manager that this daemon has
++ * been successfully initalized and shall enter the
++ * main loop.
++ */
++ sd_notifyf(0, "READY=1\n"
++ "MAINPID=%lu", (unsigned long) getpid());
++#endif /* SYSTEMD */
++
++#endif /* ! WIN32 */
+ }
+
+ hub_set_variables(hub, &acl);
+@@ -216,13 +229,17 @@ void print_usage(char* program)
+ " -q Quiet mode - no output\n"
+ " -f Fork to background\n"
+ " -l <file> Log messages to given file (default: stderr)\n"
+- " -L Log messages to syslog\n"
+ " -c <file> Specify configuration file (default: " SERVER_CONFIG ")\n"
+ " -C Check configuration and return\n"
+ " -s Show configuration parameters\n"
+ " -S Show configuration parameters, but ignore defaults\n"
+ " -h This message\n"
+ #ifndef WIN32
++#ifdef SYSTEMD
++ " -L Log messages to journal\n"
++#else
++ " -L Log messages to syslog\n"
++#endif
+ " -u <user> Run as given user\n"
+ " -g <group> Run with given group permissions\n"
+ " -p <file> Store pid in file (process id)\n"
+diff --git a/src/util/log.c b/src/util/log.c
+index 42badb3..2d97528 100644
+--- a/src/util/log.c
++++ b/src/util/log.c
+@@ -21,7 +21,15 @@
+ #include <locale.h>
+
+ #ifndef WIN32
++
++#ifdef SYSTEMD
++#define SD_JOURNAL_SUPPRESS_LOCATION
++#include <systemd/sd-journal.h>
++
++#else
+ #include <syslog.h>
++#endif
++
+ static int use_syslog = 0;
+ #endif
+
+@@ -83,7 +91,9 @@ void hub_log_initialize(const char* file, int syslog)
+ if (syslog)
+ {
+ use_syslog = 1;
++ #ifndef SYSTEMD
+ openlog("uhub", LOG_PID, LOG_USER);
++ #endif
+ }
+ #endif
+
+@@ -132,7 +142,9 @@ void hub_log_shutdown()
+ if (use_syslog)
+ {
+ use_syslog = 0;
++ #ifndef SYSTEMD
+ closelog();
++ #endif
+ }
+ #endif
+ }
+@@ -212,7 +224,12 @@ void hub_log(int log_verbosity, const char *format, ...)
+ case log_fatal: level = LOG_CRIT; break;
+ case log_error: level = LOG_ERR; break;
+ case log_warning: level = LOG_WARNING; break;
+- case log_user: level = LOG_INFO | LOG_AUTH; break;
++ #ifdef SYSTEMD
++ case log_user: level = LOG_INFO; break;
++
++ #else
++ case log_user: level = LOG_INFO | LOG_AUTH; break;
++ #endif
+ case log_info: level = LOG_INFO; break;
+ case log_debug: level = LOG_DEBUG; break;
+
+@@ -224,8 +241,13 @@ void hub_log(int log_verbosity, const char *format, ...)
+ if (level == 0)
+ return;
+
++ #ifdef SYSTEMD
++ sd_journal_print(level, "%s", logmsg);
++
++ #else
+ level |= (LOG_USER | LOG_DAEMON);
+ syslog(level, "%s", logmsg);
++ #endif
+ }
+ #endif
+