Package: xorp Version: 1.8.5-4.1 Severity: normal Tags: patch Usertags: systemd-units X-Debbugs-CC: [email protected]
Dear Maintainer, The attached patch incorporates systemd integration and notifications via sd_notify to xorp_rtrmgr. It has been tested in a production router, the tests were limited to the start, stop, restart and logging behaviour. The patch also routes the log to the journal via stderr, therefore eliminating the weekly restart performed by logrotate. That restart was failing in a somewhat loaded router until the proposed changes where applied. It was also found that the default output log setup was failing to work with systemd and it was changed to a simple one which, as far as I know, should be very portable. The unit file was sent to the systemd maintainers for review and their helpful directions have been followed. I hope this patch can be useful. Regards, -- System Information: Debian Release: 8.2 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 3.16.0-4-amd64 (SMP w/1 CPU core) Locale: LANG=es_VE.UTF-8, LC_CTYPE=es_VE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages xorp depends on: ii adduser 3.113+nmu3 ii init-system-helpers 1.22 ii libc6 2.19-18+deb8u1 ii libgcc1 1:4.9.2-10 ii libncurses5 5.9+20140913-1+b1 ii libpcap0.8 1.6.2-2 ii libssl1.0.0 1.0.1k-3+deb8u1 ii libstdc++6 4.9.2-10 ii libsystemd0 215-17+deb8u2 ii libtinfo5 5.9+20140913-1+b1 Versions of packages xorp recommends: ii iputils-ping 3:20121221-5+b2 ii iputils-tracepath 3:20121221-5+b2 ii traceroute 1:2.0.20-2+b1 xorp suggests no packages. -- Configuration Files: /etc/default/xorp changed [not included] /etc/xorp/config.boot changed [not included] -- no debconf information -- Dhionel Díaz Centro Nacional de Desarrollo e Investigación en Tecnologías Libres Ministerio del Poder Popular para Educación Universitaria, Ciencia y Tecnología
diff -u xorp-1.8.5/debian/control xorp-1.8.5/debian/control --- xorp-1.8.5/debian/control +++ xorp-1.8.5/debian/control @@ -7,6 +7,7 @@ scons, libboost-dev, autotools-dev, quilt, libssl-dev, libncurses5-dev | ncurses-dev, docbook-to-man, libpcap0.8-dev, + dh-systemd, libsystemd-dev, pkg-config, Build-Conflicts: iptables-dev Standards-Version: 3.9.5 Homepage: http://www.xorp.org diff -u xorp-1.8.5/debian/patches/series xorp-1.8.5/debian/patches/series --- xorp-1.8.5/debian/patches/series +++ xorp-1.8.5/debian/patches/series @@ -13,0 +14,2 @@ +default_log_output.patch +sd_notify_rtrmgr.patch diff -u xorp-1.8.5/debian/rules xorp-1.8.5/debian/rules --- xorp-1.8.5/debian/rules +++ xorp-1.8.5/debian/rules @@ -22,11 +22,11 @@ DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -# Personall Variables +# Personal Variables PACKNAME=$(shell dh_listpackages) PACKAGE=$(shell dh_listpackages) -# Variabels used by the Debian Maintainer exclusively for package +# Variables used by the Debian Maintainer exclusively for package # development. SOURCENAME=$(shell dpkg-parsechangelog | grep "Source:" | cut -d ' ' -f 2) DEBVER=$(shell dpkg-parsechangelog | grep "Version:" | cut -d ' ' -f 2) @@ -57,6 +57,7 @@ sysconfdir=/etc \ with-olsr=true \ disable_fw=true \ + enable_systemd=true \ CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS='-Wl,-z,defs' #SCONSFLAGS += CC=gcc-4.6 CXX=g++-4.6 @@ -165,7 +166,9 @@ dh_installdocs dh_installexamples -pxorp rtrmgr/config/*.boot debian/config.boot.mcast rtrmgr/config/README dh_installlogrotate + dh_systemd_enable dh_installinit + dh_systemd_start dh_installman dh_link dh_strip diff -u xorp-1.8.5/debian/xorp.postinst xorp-1.8.5/debian/xorp.postinst --- xorp-1.8.5/debian/xorp.postinst +++ xorp-1.8.5/debian/xorp.postinst @@ -41,6 +41,7 @@ --system \ --ingroup $XORPGROUP \ --no-create-home \ + --home $LOGDIR \ --disabled-password \ $XORPUSER 2>/dev/null || true fi only in patch2: unchanged: --- xorp-1.8.5.orig/debian/patches/default_log_output.patch +++ xorp-1.8.5/debian/patches/default_log_output.patch @@ -0,0 +1,34 @@ +Description: Simplify and fix default log output setup. +Author: Dhionel DÃaz <[email protected]> +Last-Update: 2015-09-09 + +--- +--- a/libxorp/xlog.c ++++ b/libxorp/xlog.c +@@ -798,24 +798,8 @@ + return (xlog_add_output(fp)); + + #else /* !HOST_OS_WINDOWS */ +- +- const char* defaults[] = { /* The default outputs (in preference order) */ +- "/dev/stderr", /* XXX: temporary this is the default */ +- "/dev/console", +- "/dev/stdout" +- }; +- size_t ndefaults = sizeof(defaults) / sizeof(defaults[0]); +- size_t i; +- +- /* +- * Attempt to open default output stream, console first in case +- * we are root, then stderr. +- */ +- for (i = 0; fp_default == NULL && i < ndefaults; i++) { +- if ((fp_default = fopen(defaults[i], "w")) != NULL) { +- return (xlog_add_output(fp_default)); +- } +- } ++ if((fp_default = fdopen(dup(STDERR_FILENO), "w")) != NULL) ++ return (xlog_add_output(fp_default)); + #endif /* HOST_OS_WINDOWS */ + + return -1; only in patch2: unchanged: --- xorp-1.8.5.orig/debian/patches/sd_notify_rtrmgr.patch +++ xorp-1.8.5/debian/patches/sd_notify_rtrmgr.patch @@ -0,0 +1,104 @@ +Description: Add support to systemd integration via status notifications +Author: Dhionel DÃaz <[email protected]> +Last-Update: 2015-09-10 + +--- +--- a/rtrmgr/main_rtrmgr.cc ++++ b/rtrmgr/main_rtrmgr.cc +@@ -65,6 +65,9 @@ + #include <getopt.h> + #endif + ++#ifdef XORP_USE_SYSTEMD ++#include <systemd/sd-daemon.h> ++#endif + + // + // Default values +@@ -358,6 +361,11 @@ + } + + _ready = true; ++#ifdef XORP_USE_SYSTEMD ++ // Notify systemd that service startup has been successfully completed ++ sd_notify(0, "READY=1\n" ++ "STATUS=Startup successfully completed."); ++#endif + // + // Loop while handling configuration events and signals + // +@@ -369,6 +377,11 @@ + } + fflush(stdout); + _ready = false; ++#ifdef XORP_USE_SYSTEMD ++ // Notify systemd that the service is beginning its shutdown ++ sd_notify(0, "STOPPING=1\n" ++ "STATUS=Shutdown process started."); ++#endif + + // + // Shutdown everything +@@ -782,5 +795,9 @@ + xlog_stop(); + xlog_exit(); + ++#ifdef XORP_USE_SYSTEMD ++ // Send final status message to systemd ++ sd_notify(0, "STATUS=Exiting."); ++#endif + exit(errcode); + } +--- a/SConstruct ++++ b/SConstruct +@@ -83,6 +83,7 @@ + BoolVariable('disable_profile', 'Disable Xorp Profiler feature', False), + BoolVariable('enable_boost', 'Use BOOST', False), + BoolVariable('enable_ustl', 'Use uSTL', False), ++ BoolVariable('enable_systemd', 'Use systemd', False), + BoolVariable('enable_bgp', 'Build BGP', True), + BoolVariable('enable_buildinfo', 'Build Info, see libxorp/create_buildinfo.sh', True), + BoolVariable('enable_olsr', 'Build OLSR', True), +@@ -274,6 +275,7 @@ + print 'Enable BuildInfo: ', env['enable_buildinfo'] + print 'Try Enable BOOST: ', env['enable_boost'] + print 'Try Enable uSTL : ', env['enable_ustl'] ++print 'Try Enable systemd: ', env['enable_systemd'] + print 'Disable IPv6: ', env['disable_ipv6'] + print 'Disable libtecla: ', env['disable_libtecla'] + print 'Disable Firewall: ', env['disable_fw'] +@@ -396,6 +398,12 @@ + else: + env['enable_ustl'] = False + ++tst = ARGUMENTS.get('enable_systemd', False) ++if tst and not (tst == "no"): ++ env['enable_systemd'] = True ++else: ++ env['enable_systemd'] = False ++ + tst = ARGUMENTS.get('enable_tests', False) + if tst and not (tst == "no"): + env['enable_tests'] = True +@@ -654,6 +662,9 @@ + # so just over-ride it here and assume it exists. + conf.Define('HAS_BOOST_NONCOPYABLE_INC') + ++ if env['enable_systemd']: ++ conf.Define('XORP_USE_SYSTEMD') ++ + # Big ball of mud. + from config.allconfig import DoAllConfig + DoAllConfig(env, conf, host_os) +--- a/rtrmgr/SConscript ++++ b/rtrmgr/SConscript +@@ -175,6 +175,9 @@ + + rtrmgr_env.Append(LIBS = ['xorp_core', 'crypto']) + ++if rtrmgr_env['enable_systemd']: ++ rtrmgr_env.ParseConfig("pkg-config --cflags --libs libsystemd") ++ + + rtrmgr_srcs = [ + 'main_rtrmgr.cc', only in patch2: unchanged: --- xorp-1.8.5.orig/debian/xorp.service +++ xorp-1.8.5/debian/xorp.service @@ -0,0 +1,13 @@ +[Unit] +Description=eXtensible Open Router Platform +After=network.target + +[Service] +Type=notify +EnvironmentFile=-/etc/default/xorp +ExecStart=/usr/sbin/xorp_rtrmgr $DAEMON_OPTS +TimeoutStopSec=233 +Restart=always + +[Install] +WantedBy=multi-user.target
signature.asc
Description: OpenPGP digital signature

