public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slawek Lis" <slis@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: net-analyzer/suricata/files/, net-analyzer/suricata/
Date: Thu, 22 Dec 2016 11:32:00 +0000 (UTC)	[thread overview]
Message-ID: <1482406530.be92f97f24e7867078e10efa0ee191b770cbf143.slis@gentoo> (raw)

commit:     be92f97f24e7867078e10efa0ee191b770cbf143
Author:     Slawomir Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 22 11:35:30 2016 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Thu Dec 22 11:35:30 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=be92f97f

net-analyzer/suricata: Updated init script

Applied patches sent in order to bug 602590.
Now it's possible to run one or many instances of suricata.

Thanks to Vieri <rentorbuy <AT> yahoo.com> for help.

Package-Manager: Portage-2.3.3, Repoman-2.3.1

 net-analyzer/suricata/files/suricata-3.2-conf |  17 +++--
 net-analyzer/suricata/files/suricata-3.2-init | 105 +++++++++++++++++++-------
 net-analyzer/suricata/suricata-3.2.ebuild     |  21 ++++--
 3 files changed, 102 insertions(+), 41 deletions(-)

diff --git a/net-analyzer/suricata/files/suricata-3.2-conf b/net-analyzer/suricata/files/suricata-3.2-conf
index dfb1471..bc6e281 100644
--- a/net-analyzer/suricata/files/suricata-3.2-conf
+++ b/net-analyzer/suricata/files/suricata-3.2-conf
@@ -5,27 +5,28 @@
 # SURICATA_DIR="/etc/suricata"
 
 # Pass options to each suricata service.
+#
 # You can launch more than one service at the same time with different options.
 # This can be useful in a multi-queue gateway, for example.
 # You can expand on the Suricata inline example found at:
-# https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Setting_up_IPSinline_for_Linux
+# http://suricata.readthedocs.io/en/latest/setting-up-ipsinline-for-linux.html
 # Instead of configuring iptables to send traffic to just one queue, you can configure it to "load balance"
 # on several queues. You can then have a Suricata instance processing traffic for each queue.
 # This should help improve performance on the gateway/firewall.
-# Suppose you configured iptables to use queues 0 and 1. You can now do the following:
+#
+# Suppose you configured iptables to use queues 0 and 1 named q0 and q1. You can now do the following:
 # ln -s /etc/init.d/suricata /etc/init.d/suricata.q0
 # ln -s /etc/init.d/suricata /etc/init.d/suricata.q1
 # cp /etc/suricata/suricata.yaml /etc/suricata/suricata-q0.yaml
 # cp /etc/suricata/suricata.yaml /etc/suricata/suricata-q1.yaml
-# mkdir /var/log/suricata/q{0,1}
-# Edit both suricata-q{0,1}.yaml files and set values accordingly (eg. set the suricata.log file path to
-# a dedicated dir in the section "logging:outputs:-file").
+# Edit both suricata-q{0,1}.yaml files and set values accordingly.
+# 
 # You can then define the following options here:
 
-# SURICATA_OPTS[q0]="-q 0 -l /var/log/suricata/q0"
-# SURICATA_OPTS[q1]="-q 1 -l /var/log/suricata/q1"
+# SURICATA_OPTS_q0="-i eth0"
+# SURICATA_OPTS_q1="-i eth1"
 
 # If you want to use ${SURICATA_DIR}/suricata.yaml and start the service with /etc/init.d/suricata
 # then you can set:
 
-# SURICATA_OPTIONS="-i eth0"
+SURICATA_OPTS="-i eth0"

diff --git a/net-analyzer/suricata/files/suricata-3.2-init b/net-analyzer/suricata/files/suricata-3.2-init
index 2a9d46f..3a9c356 100644
--- a/net-analyzer/suricata/files/suricata-3.2-init
+++ b/net-analyzer/suricata/files/suricata-3.2-init
@@ -3,20 +3,22 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
+SURICATA_BIN=/usr/bin/suricata
 SURICATA_DIR=${SURICATA_DIR:-/etc/suricata}
 SURICATA=${SVCNAME#*.}
+SURICATAID=$(shell_var "${SURICATA}")
 if [ -n "${SURICATA}" ] && [ ${SVCNAME} != "suricata" ]; then
     SURICATACONF="${SURICATA_DIR}/suricata-${SURICATA}.yaml"
     SURICATAPID="/var/run/suricata/suricata.${SURICATA}.pid"
-    SURICATAOPTS=${SURICATA_OPTS[${SURICATA}]}
+    eval SURICATAOPTS=\$SURICATA_OPTS_${SURICATAID}
 else
     SURICATACONF="${SURICATA_DIR}/suricata.yaml"
     SURICATAPID="/var/run/suricata/suricata.pid"
-    SURICATAOPTS=${SURICATA_OPTIONS}
+    SURICATAOPTS=${SURICATA_OPTS}
 fi
 
 extra_commands="checkconfig"
-extra_started_commands="reload"
+extra_started_commands="reload relog"
 
 depend() {
 	need net
@@ -34,49 +36,96 @@ checkconfig() {
 	fi
 }
 
+initpidinfo() {
+	[ -f ${SURICATAPID} ] && SUR_PID="$(cat ${SURICATAPID})"
+	if [ ${#SUR_PID} -gt 0 ]; then
+	    SUR_PID_CHECK="$(ps -eo pid | grep -c ${SUR_PID})"
+	    SUR_USER="$(ps -p ${SUR_PID} --no-headers -o user)"
+	fi
+}
+
+checkpidinfo() {
+	initpidinfo
+        if [ ! -f ${SURICATAPID} ]; then
+        	eerror "${SVCNAME} isn't running"
+                return 1
+	elif [ ${#SUR_PID} -eq 0 ] || [ $((SUR_PID_CHECK)) -ne 1 ]; then
+		eerror "Could not determine PID of ${SVCNAME}! Did the service crash?"
+		return 1
+	elif [ ${#SUR_USER} -eq 0 ]; then
+		eerror "Unable to determine user running ${SVCNAME}!"
+		return 1
+	elif [ "x${SUR_USER}" != "xroot" ]; then
+		eerror "${SVCNAME} must be running as root for reload or relog to work!"
+		return 1
+        fi
+}
+
 start() {
 	checkconfig || return 1
 	ebegin "Starting ${SVCNAME}"
-	start-stop-daemon --start --quiet --exec /usr/bin/suricata \
+	start-stop-daemon --start --quiet --exec ${SURICATA_BIN} \
 		-- --pidfile ${SURICATAPID} -D ${SURICATAOPTS} \
 		 -c ${SURICATACONF} >/dev/null 2>&1
-	eend $?
+	local SUR_EXIT=$?
+	if [ $((SUR_EXIT)) -ne 0 ]; then
+	    einfo "Could not start ${SURICATA_BIN} with:"
+	    einfo "--pidfile ${SURICATAPID} -D ${SURICATAOPTS} -c ${SURICATACONF}"
+	    einfo "Exit code ${SUR_EXIT}"
+	fi
+	eend ${SUR_EXIT}
 }
 
 stop() {
 	ebegin "Stopping ${SVCNAME}"
+	initpidinfo
 	start-stop-daemon --stop --quiet --pidfile ${SURICATAPID} >/dev/null 2>&1
 	einfon "Waiting for ${SVCNAME} to shut down. This can take a while..."
 	echo
 	# max wait: 5 minutes as it can take quite a while on some systems with heavy traffic
-	cnt=300
-	while [ -f ${SURICATAPID} ]; do
+	local cnt=300
+	while [ -f ${SURICATAPID} ] && [ $cnt -gt 0 ]; do
 	    cnt=$(expr $cnt - 1)
-	    if [ $cnt -lt 1 ] ; then
-		echo
-		eend 1 "Failed."
-		break
-	    fi
 	    sleep 1
-	    echo -ne "$cnt seconds left before we give up\r"
+	    echo -ne "$cnt seconds left before we give up checking the PID file...\r"
 	done
-	eend $?
+	# under certain conditions suricata can be pretty slow and the PID can persist long after the pidfile has been removed
+	# max wait for process to terminate: 1 minute
+	if [ ${#SUR_PID} -gt 0 ]; then
+	    cnt=60
+	    SUR_PID_CHECK="$(ps -eo pid | grep -c ${SUR_PID})"
+	    if [ $((SUR_PID_CHECK)) -ne 0 ]; then
+		echo
+		einfo "The PID file ${SURICATAPID} is gone but the ${SVCNAME} PID ${SUR_PID} is still running."
+		einfo "Waiting for process to shut down on its own. This can take a while..."
+	    fi
+	    while [ $((SUR_PID_CHECK)) -ne 0 ]; do
+		cnt=$(expr $cnt - 1)
+		if [ $cnt -lt 1 ] ; then
+		    echo
+		    eend 1 "Failed. You might need to kill PID ${SUR_PID} or find out why it can't be stopped."
+		    break
+		fi
+		sleep 1
+		echo -ne "$cnt seconds left before we give up checking PID ${SUR_PID}...\r"
+		SUR_PID_CHECK="$(ps -eo pid | grep -c ${SUR_PID})"
+	    done
+	fi
+	eend 0
 }
 
 reload() {
+	checkpidinfo || return 1
+	checkconfig || return 1
+	ebegin "Sending USR2 signal to ${SVCNAME} to perform a live rule and config reload."
+	start-stop-daemon --signal USR2 --pidfile ${SURICATAPID}
+	eend $?
+}
 
-	local SUR_PID="`cat ${SURICATAPID}`"
-	local SUR_USER="`ps -p ${SUR_PID} --no-headers -o user`"
-
-        if [ ! -f ${SURICATAPID} ]; then
-        	eerror "${SVCNAME} isn't running"
-                return 1
-	elif [ ${SUR_USER} != root ]; then
-		eerror "${SVCNAME} must be running as root for reload to work!"
-		return 1
-	else
-		checkconfig || return 1
-		ebegin "Reloading ${SVCNAME}"
-		start-stop-daemon --signal HUP --pidfile ${SURICATAPID}
-        fi
+relog() {
+	checkpidinfo || return 1
+	checkconfig || return 1
+	ebegin "Sending HUP signal to ${SVCNAME} to close and re-open all log files."
+	start-stop-daemon --signal HUP --pidfile ${SURICATAPID}
+	eend $?
 }

diff --git a/net-analyzer/suricata/suricata-3.2.ebuild b/net-analyzer/suricata/suricata-3.2.ebuild
index 2bd57bd..078186b 100644
--- a/net-analyzer/suricata/suricata-3.2.ebuild
+++ b/net-analyzer/suricata/suricata-3.2.ebuild
@@ -63,9 +63,6 @@ src_configure() {
 	if use cuda ; then
 		myeconfargs+=( $(use_enable cuda) )
 	fi
-	if use debug ; then
-		myeconfargs+=( $(use_enable debug) )
-	fi
 	if use geoip ; then
 		myeconfargs+=( $(use_enable geoip) )
 	fi
@@ -96,7 +93,16 @@ src_configure() {
 # this should be used when pf_ring use flag support will be added
 # 	LIBS+="-lrt -lnuma"
 
-	econf LIBS="${LIBS}" ${myeconfargs[@]}
+	# avoid upstream configure script trying to add -march=native to CFLAGS
+	myeconfargs+=( --enable-gccmarch-native=no )
+
+	if use debug ; then
+		myeconfargs+=( $(use_enable debug) )
+		# so we can get a backtrace according to "reporting bugs" on upstream web site
+		CFLAGS="-ggdb -O0" econf LIBS="${LIBS}" ${myeconfargs[@]}
+	else
+		econf LIBS="${LIBS}" ${myeconfargs[@]}
+	fi
 }
 
 src_install() {
@@ -124,7 +130,7 @@ src_install() {
 
 pkg_postinst() {
 	elog "The ${PN} init script expects to find the path to the configuration"
-	elog "file as well as extra options in /etc/conf.d."
+	elog "file as well as extra options in /etc/conf.d"
 	elog ""
 	elog "To create more than one ${PN} service, simply create a new .yaml file for it"
 	elog "then create a symlink to the init script from a link called"
@@ -136,4 +142,9 @@ pkg_postinst() {
 	elog "Then edit /etc/conf.d/${PN} and make sure you specify sensible options for foo."
 	elog ""
 	elog "You can create as many ${PN}.foo* services as you wish."
+
+	if use debug; then
+	    elog "You enabled the debug USE flag. Please read this link to report bugs upstream:"
+	    elog "https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Reporting_Bugs"
+	fi
 }


             reply	other threads:[~2016-12-22 11:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-22 11:32 Slawek Lis [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-04-24 12:39 [gentoo-commits] repo/gentoo:master commit in: net-analyzer/suricata/files/, net-analyzer/suricata/ Marek Szuba
2023-10-25 22:04 Marek Szuba
2022-08-24 15:36 Marek Szuba
2021-09-03 12:29 Marek Szuba
2021-05-11 22:07 Marek Szuba
2019-12-18 14:22 Marek Szuba
2019-12-16 18:14 Marek Szuba
2019-09-08 19:25 Slawek Lis
2017-02-17  5:40 Slawek Lis
2016-12-15  6:17 Slawek Lis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1482406530.be92f97f24e7867078e10efa0ee191b770cbf143.slis@gentoo \
    --to=slis@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox