Bug#840675: RFP: influxdb-relay -- basic high availability layer for InfluxDB
Hi!
On Thu, 2016-10-13 at 19:54:23 +0200, Guillem Jover wrote:
> Package: wnpp
> Severity: wishlist
>
> * Package name : influxdb-relay
> Version : 0.0~20160928.0.535181e
> Upstream Author : InfluxData
> * URL : https://github.com/influxdata/influxdb-relay
> * License : Expat
> Programming Lang: Go
> Description : basic high availability layer for InfluxDB
>
> This daemon listens for InfluxDB requests and forwards them to one or
> more InfluxDB servers, allowing to replicate for example writes requests
> to multiple destinations.
> This package is helpful if you are deploying InfluxDB on a cluster
> and need some kind of basic replication and HA setup.
>
> Attached a working and tested packaging patch (execept for the systemd
> service file), where only the ITP bug number needs to be filled in the
> debian/changelog, Maintainer changed, and Vcs fields added.
Updated patch against latest upstream, and several minor fixes to the
init script and packaging metadata.
Thanks,
Guillem
From 003fe691dd6a7cadb88440e005969156767da1ae Mon Sep 17 00:00:00 2001
From: Guillem Jover <gjover@sipwise.com>
Date: Wed, 28 Sep 2016 16:24:34 +0200
Subject: [PATCH] Initial packaging
---
debian/changelog | 5 +
debian/compat | 1 +
debian/control | 44 ++++++++
debian/copyright | 32 ++++++
...lang-github-influxdb-influxdb-relay-dev.install | 1 +
...golang-github-influxdb-influxdb-relay-dev.links | 1 +
debian/influxdb-relay.conf | 54 ++++++++++
debian/influxdb-relay.dirs | 2 +
debian/influxdb-relay.init | 120 +++++++++++++++++++++
debian/influxdb-relay.install | 2 +
debian/influxdb-relay.lintian-overrides | 5 +
debian/influxdb-relay.logrotate | 8 ++
debian/influxdb-relay.manpages | 1 +
debian/influxdb-relay.postinst | 44 ++++++++
debian/influxdb-relay.postrm | 31 ++++++
debian/influxdb-relay.service | 16 +++
debian/manpages/influxdb-relay.1 | 13 +++
debian/rules | 11 ++
debian/source/format | 1 +
19 files changed, 392 insertions(+)
create mode 100644 debian/changelog
create mode 100644 debian/compat
create mode 100644 debian/control
create mode 100644 debian/copyright
create mode 100644 debian/golang-github-influxdb-influxdb-relay-dev.install
create mode 100644 debian/golang-github-influxdb-influxdb-relay-dev.links
create mode 100644 debian/influxdb-relay.conf
create mode 100644 debian/influxdb-relay.dirs
create mode 100644 debian/influxdb-relay.init
create mode 100644 debian/influxdb-relay.install
create mode 100644 debian/influxdb-relay.lintian-overrides
create mode 100644 debian/influxdb-relay.logrotate
create mode 100644 debian/influxdb-relay.manpages
create mode 100644 debian/influxdb-relay.postinst
create mode 100644 debian/influxdb-relay.postrm
create mode 100644 debian/influxdb-relay.service
create mode 100644 debian/manpages/influxdb-relay.1
create mode 100755 debian/rules
create mode 100644 debian/source/format
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..44d88f7
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,5 @@
+influxdb-relay (0.0~20161114.0.adaa2ea-1) UNRELEASED; urgency=medium
+
+ * Initial release. (Closes: #840675)
+
+ -- Guillem Jover <gjover@sipwise.com> Wed, 28 Sep 2016 14:21:32 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..c4d65d2
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,44 @@
+Source: influxdb-relay
+Section: database
+Priority: extra
+Homepage: https://github.com/influxdata/influxdb-relay
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Build-Depends:
+ debhelper (>= 9),
+ dh-golang (>= 1.9),
+ golang-go,
+# Golang libraries below - Shared deps with dev package
+ golang-github-influxdb-influxdb-dev,
+ golang-github-naoina-go-stringutil-dev,
+ golang-github-naoina-toml-dev,
+Standards-Version: 3.9.8
+XS-Go-Import-Path: github.com/influxdata/influxdb-relay
+
+Package: golang-github-influxdb-influxdb-relay-dev
+Architecture: all
+Pre-Depends:
+ ${misc:Pre-Depends}
+Depends:
+ ${misc:Depends},
+ golang-github-influxdb-influxdb-dev,
+ golang-github-naoina-go-stringutil-dev,
+ golang-github-naoina-toml-dev,
+Description: basic high availability layer for InfluxDB -- development files
+ This daemon listens for InfluxDB requests and forwards them to one or
+ more InfluxDB servers, allowing to replicate for example writes requests
+ to multiple destination InfluxDB servers.
+ .
+ This is the development package.
+
+Package: influxdb-relay
+Architecture: any
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+ adduser,
+ lsb-base (>= 3.0-6),
+Built-Using: ${misc:Built-Using}
+Description: basic high availability layer for InfluxDB
+ This daemon listens for InfluxDB requests and forwards them to one or
+ more InfluxDB servers, allowing to replicate for example writes requests
+ to multiple destination InfluxDB servers.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..9535d44
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,32 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Source: https://github.com/influxdata/influxdb-relay
+Upstream-Name: influxdb-relay
+
+Files: *
+Copyright:
+ Copyright © 2016 InfluxData
+License: Expat
+
+Files: debian/*
+Copyright:
+ Copyright © 2016 Sipwise GmbH, Austria
+License: Expat
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
diff --git a/debian/golang-github-influxdb-influxdb-relay-dev.install b/debian/golang-github-influxdb-influxdb-relay-dev.install
new file mode 100644
index 0000000..1237e8d
--- /dev/null
+++ b/debian/golang-github-influxdb-influxdb-relay-dev.install
@@ -0,0 +1 @@
+usr/share/gocode/src usr/share/gocode
diff --git a/debian/golang-github-influxdb-influxdb-relay-dev.links b/debian/golang-github-influxdb-influxdb-relay-dev.links
new file mode 100644
index 0000000..50da994
--- /dev/null
+++ b/debian/golang-github-influxdb-influxdb-relay-dev.links
@@ -0,0 +1 @@
+usr/share/gocode/src/github.com/influxdata/influxdb-relay usr/share/gocode/src/github.com/influxdb/influxdb-relay
diff --git a/debian/influxdb-relay.conf b/debian/influxdb-relay.conf
new file mode 100644
index 0000000..14e1fb0
--- /dev/null
+++ b/debian/influxdb-relay.conf
@@ -0,0 +1,54 @@
+### Welcome to the InfluxDB-Relay configuration file.
+
+# Standard
+
+#[[http]]
+#name = "example-http"
+#bind-addr = "127.0.0.1:9096"
+#output = [
+# { name="local1", location = "http://127.0.0.1:8086/write" },
+# { name="local2", location = "http://127.0.0.1:7086/write" },
+#]
+#
+#[[udp]]
+#name = "example-udp"
+#bind-addr = "127.0.0.1:9096"
+#read-buffer = 0 # default
+#output = [
+# { name="local1", location="127.0.0.1:8089", mtu=512 },
+# { name="local2", location="127.0.0.1:7089", mtu=1024 },
+#]
+
+# Buffered
+
+#[[http]]
+#name = "example-http-buffered"
+#bind-addr = "127.0.0.1:9096"
+#output = [
+# { name="local1", location = "http://127.0.0.1:8086/write", buffer-size-mb = 100, max-batch-kb = 50, max-delay-interval = "5s" },
+# { name="local2", location = "http://127.0.0.1:7086/write", buffer-size-mb = 100, max-batch-kb = 50, max-delay-interval = "5s" },
+#]
+
+# The relay can also be used to dual write data to Kapacitor
+#
+# There are a few advantages of using the relay instead of relying on InfluxDB subscriptions
+#
+# 1. Traffic is HTTP/TCP meaning you don't have to worry about dropped UDP packets
+# 2. Less load on InfluxDB since it doesn't have to fork the data.
+# 3. Slighly lower latency since there is one less hop.
+#
+# Kapacitor is wire compatible with InfluxDB for writes.
+# This means you can add a Kapacitor instance to the output list as if it were an InfluxDB instance.
+#
+
+# This example config sends all writes to
+# two InfluxDB hosts and a single Kapacitor host.
+#[[http]]
+#name = "kapacitor-http"
+#bind-addr = "0.0.0.0:9096"
+#default-retention-policy = "default"
+#output = [
+# { name="influxdb1", location = "http://influxdb1:8086/write" },
+# { name="influxdb2", location = "http://influxdb2:8086/write" },
+# { name="kapacitor1", location = "http://kapacitor1:9092/write" },
+#]
diff --git a/debian/influxdb-relay.dirs b/debian/influxdb-relay.dirs
new file mode 100644
index 0000000..8a147b7
--- /dev/null
+++ b/debian/influxdb-relay.dirs
@@ -0,0 +1,2 @@
+var/lib/influxdb-relay
+var/log/influxdb-relay
diff --git a/debian/influxdb-relay.init b/debian/influxdb-relay.init
new file mode 100644
index 0000000..1c080f2
--- /dev/null
+++ b/debian/influxdb-relay.init
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: influxdb-relay
+# Required-Start: $network $local_fs $remote_fs
+# Required-Stop: $network $local_fs $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Basic HA layer for InfluxDB
+# Description: InfluxDB-Relay is a basic HA layer for InfluxDB. With
+# the right architecture and and disaster recovery
+# processes, this achieves a highly available setup.
+### END INIT INFO
+
+# If you modify this, please make sure to also edit influxdb.service.
+
+# Command-line options that can be set in /etc/default/influxdb-relay.
+# These will override any config file values.
+INFLUXDB_RELAY_OPTS=
+NAME=influxdb-relay
+
+USER=influxdb
+GROUP=influxdb
+
+if [ -r /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+fi
+
+DEFAULT=/etc/default/$NAME
+
+if [ -r $DEFAULT ]; then
+ . $DEFAULT
+fi
+
+if [ -z "$STDOUT" ]; then
+ STDOUT=/var/log/$NAME/$NAME.log
+fi
+if [ ! -f "$STDOUT" ]; then
+ mkdir -p $(dirname $STDOUT)
+fi
+
+if [ -z "$STDERR" ]; then
+ STDERR=/var/log/$NAME/$NAME.log
+fi
+if [ ! -f "$STDERR" ]; then
+ mkdir -p $(dirname $STDERR)
+fi
+
+OPEN_FILE_LIMIT=65536
+
+# Process name ( For display )
+DESC=database
+
+# Daemon name, where is the actual executable
+DAEMON=/usr/bin/$NAME
+
+# pid file for the daemon
+PIDFILE=/var/run/$NAME/$NAME.pid
+PIDDIR=$(dirname $PIDFILE)
+
+if [ ! -d "$PIDDIR" ]; then
+ mkdir -p $PIDDIR
+ chown $USER:$GROUP $PIDDIR
+fi
+
+# Configuration file
+CONFIG=/etc/$NAME/$NAME.conf
+
+# If the daemon is not there, then exit.
+[ -x $DAEMON ] || exit 0
+
+case $1 in
+ start)
+ log_daemon_msg "Starting $DESC" "$NAME"
+
+ # Bump the file limits, before launching the daemon. These will carry
+ # over to launched processes.
+ ulimit -n $OPEN_FILE_LIMIT
+ if [ $? -ne 0 ]; then
+ log_progress_msg "set open file limit to $OPEN_FILE_LIMIT"
+ log_end_msg 1
+ exit 1
+ fi
+
+ start-stop-daemon --start --quiet --oknodo --exec $DAEMON \
+ --user $USER --chuid $GROUP:$USER \
+ --pidfile $PIDFILE --make-pidfile --background --no-close \
+ -- -config $CONFIG $INFLUXD_RELAY_OPTS \
+ >>$STDOUT 2>>$STDERR
+
+ log_end_msg $?
+ ;;
+
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+
+ start-stop-daemon --stop --quiet --oknodo --exec $DAEMON \
+ --user $USER --pidfile $PIDFILE --remove-pidfile
+
+ log_end_msg $?
+ ;;
+
+ restart|force-reload)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ # Restart the daemon.
+ $0 stop && sleep 2 && $0 start
+ $0 status || errcode=$?
+ log_end_msg $errcode
+ ;;
+
+ status)
+ status_of_proc $DAEMON $NAME
+ ;;
+
+ *)
+ # For invalid arguments, print the usage message.
+ echo "Usage: $0 {start|stop|force-reload|restart|status}"
+ exit 2
+ ;;
+esac
diff --git a/debian/influxdb-relay.install b/debian/influxdb-relay.install
new file mode 100644
index 0000000..75b07ed
--- /dev/null
+++ b/debian/influxdb-relay.install
@@ -0,0 +1,2 @@
+usr/bin/influxdb-relay usr/bin
+debian/influxdb-relay.conf etc/influxdb-relay
diff --git a/debian/influxdb-relay.lintian-overrides b/debian/influxdb-relay.lintian-overrides
new file mode 100644
index 0000000..fdff022
--- /dev/null
+++ b/debian/influxdb-relay.lintian-overrides
@@ -0,0 +1,5 @@
+# The Go compiler is currently unable to produce read-only relocations
+# (it produces static binaries).
+hardening-no-bindnow usr/bin/influxdb-relay
+hardening-no-pie usr/bin/influxdb-relay
+hardening-no-fortify-functions usr/bin/influxdb-relay
diff --git a/debian/influxdb-relay.logrotate b/debian/influxdb-relay.logrotate
new file mode 100644
index 0000000..17010f0
--- /dev/null
+++ b/debian/influxdb-relay.logrotate
@@ -0,0 +1,8 @@
+/var/log/influxdb-relay/influxdb-relay.log {
+ daily
+ rotate 7
+ missingok
+ dateext
+ copytruncate
+ compress
+}
diff --git a/debian/influxdb-relay.manpages b/debian/influxdb-relay.manpages
new file mode 100644
index 0000000..524e21d
--- /dev/null
+++ b/debian/influxdb-relay.manpages
@@ -0,0 +1 @@
+debian/manpages/influxdb-relay.1
diff --git a/debian/influxdb-relay.postinst b/debian/influxdb-relay.postinst
new file mode 100644
index 0000000..a13758e
--- /dev/null
+++ b/debian/influxdb-relay.postinst
@@ -0,0 +1,44 @@
+#!/bin/sh
+# postinst script for influxdb
+#
+# see: dh_installdeb(1)
+
+set -e
+
+case "$1" in
+configure|reconfigure)
+ # Create an influxdb group and user.
+ if ! getent passwd influxdb >/dev/null; then
+ adduser --system --home /var/lib/influxdb --no-create-home influxdb
+ addgroup --system influxdb
+ adduser influxdb influxdb
+ fi
+
+ if [ -d /var/lib/influxdb-relay ]; then
+ chown -R influxdb:influxdb /var/lib/influxdb-relay
+ fi
+
+ if [ -d /var/log/influxdb-relay ]; then
+ chown -R influxdb:influxdb /var/log/influxdb-relay
+ fi
+
+ # Create rundir.
+ mkdir -p /var/run/influxdb-relay
+ chown -R influxdb:influxdb /var/run/influxdb-relay
+ ;;
+
+abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+
+*)
+ echo "postinst called with unknown argument '$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/influxdb-relay.postrm b/debian/influxdb-relay.postrm
new file mode 100644
index 0000000..c5d3a01
--- /dev/null
+++ b/debian/influxdb-relay.postrm
@@ -0,0 +1,31 @@
+#!/bin/sh
+# postrm script for influxdb
+#
+# see: dh_installdeb(1)
+
+set -e
+
+case "$1" in
+purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+ # Always remove /var/run dir.
+ rm -rf /var/run/influxdb-relay
+
+ # Only remove /var/lib and /var/log dirs on purge.
+ if [ "$1" = "purge" ] ; then
+ rm -rf /var/lib/influxdb-relay
+ rm -rf /var/log/influxdb-relay
+ fi
+ ;;
+
+*)
+ echo "postrm called with unknown argument '$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/influxdb-relay.service b/debian/influxdb-relay.service
new file mode 100644
index 0000000..28345df
--- /dev/null
+++ b/debian/influxdb-relay.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=InfluxDB-Relay is a basic HA layer for InfluxDB
+After=network.target
+Documentation=man:influxdb-relay(1)
+
+[Service]
+User=influxdb
+Group=influxdb
+LimitNOFILE=65536
+EnvironmentFile=-/etc/default/influxdb-relay
+ExecStart=/usr/bin/influxdb-relay -config /etc/influxdb-relay/influxdb-relay.conf $INFLUXDB_RELAY_OPTS
+KillMode=control-group
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/debian/manpages/influxdb-relay.1 b/debian/manpages/influxdb-relay.1
new file mode 100644
index 0000000..970dd1e
--- /dev/null
+++ b/debian/manpages/influxdb-relay.1
@@ -0,0 +1,13 @@
+.TH influxdb\-relay 8 "2016-09-28" "0.0~20160928.0.535181e" "influxdata"
+.SH NAME
+influxdb-relay \- Basic HA layer for InfluxDB Server
+.SH SYNOPSIS
+.BR influxdb\-relay " [\fIoptions\fP...]"
+.SH DESCRIPTION
+influxdb-relay provides a basic HA layer for InfluxDB.
+.SH OPTIONS
+.TP
+.BR \-config " \fIpath\fP"
+Set the configuration file
+.SH SEE ALSO
+influxd(1)
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..4b4ec9d
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+
+include /usr/share/dpkg/pkg-info.mk
+
+export DH_GOLANG_GO_GENERATE := 1
+
+%:
+ dh $@ --buildsystem=golang --with=golang --builddirectory=_build
+
+override_dh_auto_build:
+ dh_auto_build -- -ldflags="-X main.version=$(DEB_VERSION_UPSTREAM)"
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
--
2.10.2
Reply to: