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 ++#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 Log messages to given file (default: stderr)\n" +- " -L Log messages to syslog\n" + " -c 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 Run as given user\n" + " -g Run with given group permissions\n" + " -p 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 + + #ifndef WIN32 ++ ++#ifdef SYSTEMD ++#define SD_JOURNAL_SUPPRESS_LOCATION ++#include ++ ++#else + #include ++#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 + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e6809fc45c63..965a7c45f87c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2407,6 +2407,8 @@ let inherit (pkgs.kde4) kdelibs; }; + uhub = callPackage ../servers/uhub { }; + unclutter = callPackage ../tools/misc/unclutter { }; unbound = callPackage ../tools/networking/unbound { };