ports/176475: rewritten sympa startup script to make it freebsd compatible
Eimar Koort
eimar.koort at gmail.com
Wed Feb 27 10:30:00 UTC 2013
>Number: 176475
>Category: ports
>Synopsis: rewritten sympa startup script to make it freebsd compatible
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Wed Feb 27 10:30:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Eimar Koort
>Release:
>Organization:
>Environment:
>Description:
With original sympa startup script services were not started after boot.
So i took the liberty, removed non-freebsd stuff from there and made it more suitable for FreeBSD (rc.conf: sympa_enable="YES")
Also made it start after mysql or postgresql. Otherwise it won't start properly.
OTOH i'm not sure what happends when e.g. mysql is requirement in order to start but mysql server is not runnig on localhost.
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
diff -ruN sympa.orig/Makefile sympa/Makefile
--- sympa.orig/Makefile 2013-02-16 15:49:31.000000000 +0200
+++ sympa/Makefile 2013-02-27 11:55:31.000000000 +0200
@@ -3,6 +3,7 @@
PORTNAME= sympa
PORTVERSION= 6.1.17
+PORTREVISION= 1
CATEGORIES= mail
MASTER_SITES= http://www.sympa.org/distribution/ \
http://www.sympa.org/distribution/old/
@@ -63,6 +64,8 @@
MAKE_ENV?= PERL_EXTUTILS_AUTOINSTALL=--skip
SUB_FILES= pkg-install
+USE_RC_SUBR?= sympa
+
.if !defined(WITHOUT_NLS)
USE_GETTEXT= yes
PLIST_SUB+= NLS=""
@@ -104,10 +107,12 @@
.if ${PORT_OPTIONS:MORACLE}
RUN_DEPENDS+= p5-DBD-Oracle>=0:${PORTSDIR}/databases/p5-DBD-Oracle
.elif ${PORT_OPTIONS:MPGSQL}
+SUB_LIST+= REQ_MYSQL="" REQ_PGSQL=postgresql
RUN_DEPENDS+= p5-DBD-Pg>=0:${PORTSDIR}/databases/p5-DBD-Pg
.elif ${PORT_OPTIONS:MSYBASE}
RUN_DEPENDS+= p5-DBD-Sybase>=0:${PORTSDIR}/databases/p5-DBD-Sybase
.elif ${PORT_OPTIONS:MMYSQL}
+SUB_LIST+= REQ_MYSQL=mysql REQ_PGSQL=""
RUN_DEPENDS+= p5-DBD-mysql>=0:${PORTSDIR}/databases/p5-DBD-mysql
.endif
diff -ruN sympa.orig/files/patch-src__etc__script__sympa.in sympa/files/patch-src__etc__script__sympa.in
--- sympa.orig/files/patch-src__etc__script__sympa.in 2012-07-11 09:29:44.000000000 +0300
+++ sympa/files/patch-src__etc__script__sympa.in 1970-01-01 03:00:00.000000000 +0300
@@ -1,38 +0,0 @@
---- src/etc/script/sympa.in.orig 2010-11-17 08:25:42.000000000 +0100
-+++ src/etc/script/sympa.in 2012-04-20 12:35:40.000000000 +0200
-@@ -2,6 +2,10 @@
- #
- # sympa Mailing Lists Management System
- #
-+# PROVIDE: sympa
-+# REQUIRE: LOGIN cleanvar
-+# KEYWORD: shutdown
-+#
- # Written by Michel Bouissou 20/07/2000
- #
- # Modified by Olivier Salaun 27/07/2000
-@@ -159,7 +163,7 @@
- if [ "$pids" != "" ]; then
- for pid in $pids; do
- killcount=0
-- running=`ps -A | grep "$pid ..* $1\\.pl"`
-+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
- while [ "$running" != "" ]; do
- if [ $killcount -gt 10 ]; then
- if [ ${use_functions} ]; then
-@@ -171,13 +175,13 @@
- fi
-
- kill -TERM $pid >/dev/null 2>&1
-- running=`ps -A | grep "$pid ..* $1\\.pl"`
-+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
- if [ "$running" = "" ]; then
- runcount=`expr $runcount + 1`
- break
- fi
- sleep 2
-- running=`ps -A | grep "$pid ..* $1\\.pl"`
-+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
- if [ "$running" = "" ]; then
- runcount=`expr $runcount + 1`
- break
diff -ruN sympa.orig/files/sympa.in sympa/files/sympa.in
--- sympa.orig/files/sympa.in 1970-01-01 03:00:00.000000000 +0300
+++ sympa/files/sympa.in 2013-02-27 11:36:01.000000000 +0200
@@ -0,0 +1,207 @@
+#!/bin/sh
+#
+# sympa Mailing Lists Management System
+#
+# PROVIDE: sympa
+# REQUIRE: LOGIN cleanvar %%REQ_MYSQL%% %%REQ_PGSQL%%
+# KEYWORD: shutdown
+#
+# Written by Michel Bouissou 20/07/2000
+#
+# Modified by Olivier Salaun 27/07/2000
+# - translations
+# - lang parameter deleted (defined in sympa.conf)
+# - introduced --VARS-- parsed by Makefile
+# - no more sympauser since sympa sets its UID
+# Modified by Michel Bouissou 27/07/2000
+# Modified by Eimar Koort 27/02/2013
+# - optimized for FreeBSD
+#
+# sympa_enable (bool): Set to NO by default.
+# Set it to YES to enable sympa.
+#
+
+. /etc/rc.subr
+
+name="sympa"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+extra_commands="status"
+rcvar=sympa_enable
+
+load_rc_config $name
+
+sympadir="%%PREFIX%%/libexec/sympa"
+
+# Sympa config files directory
+sympaconf="%%PREFIX%%/etc/sympa.conf"
+wwsympaconf="%%PREFIX%%/etc/wwsympa.conf"
+
+# Current state of the module
+sub_status() {
+ # Test syntax.
+ if [ $# = 0 ] ; then
+ echo "Usage: sub_status {program}"
+ return 1
+ fi
+ # First try "/u1/home/sympa/*.pid" files
+ if [ -f /var/run/sympa/$1.pid ] ; then
+ pid=`head -1 /var/run/sympa/$1.pid | tr -s ' ' '|'`
+ if [ "$pid" != "" ] ; then
+ running=`ps -A | egrep "$pid"`
+ if [ "$running" != "" ]; then
+ echo "$1 (pid(s) $pid) is active..."
+ return 0
+ else
+ echo "$1 died, pid file remains."
+ return 1
+ fi
+ fi
+ fi
+ echo "$1 is stopped."
+ return 3
+}
+# Start a module
+sub_module_start() {
+ if [ $# = 0 ] ; then
+ echo "Usage: sub_module_start {program}"
+ return 1
+ fi
+ $sympadir/$1.pl $startparam && echo "success" || echo "failure"
+ echo
+}
+
+# Test state of module before startup
+sub_start() {
+ if [ $# = 0 ] ; then
+ echo "Usage: sub_start {program}"
+ return 1
+ fi
+ sub_status $1 > /dev/null
+ case "$?" in
+ 3)
+ echo $echo_opt "Starting module $1.pl: "
+ sub_module_start $1
+ ;;
+ 1)
+ echo $echo_opt "Starting $1, overwriting old pid file."
+ sub_module_start $1
+ ;;
+ 0)
+ echo "$1 seems active. No action will be taken."
+ echo "Try \"sympa status\" or \"sympa restart"\".
+ ;;
+ esac
+}
+
+# Stop a module
+sub_stop() {
+ if [ $# = 0 ] ; then
+ echo "Usage: sub_stop {program}"
+ return 1
+ fi
+
+ if [ -f /var/run/sympa/$1.pid ]; then
+ echo $echo_opt "Stopping module $1.pl: "
+ pids=`head -1 /var/run/sympa/$1.pid`
+ runcount=0
+ if [ "$pids" != "" ]; then
+ for pid in $pids; do
+ killcount=0
+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
+ while [ "$running" != "" ]; do
+ if [ $killcount -gt 10 ]; then
+ echo 'failure'
+ return 3
+ fi
+
+ kill -TERM $pid >/dev/null 2>&1
+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
+ if [ "$running" = "" ]; then
+ runcount=`expr $runcount + 1`
+ break
+ fi
+ sleep 2
+ running=`ps -A | grep "^[[:space:]]*$pid[[:space:]].*$1\\.pl"`
+ if [ "$running" = "" ]; then
+ runcount=`expr $runcount + 1`
+ break
+ fi
+ killcount=`expr $killcount + 1`
+ done
+ done
+ fi
+ if [ $runcount -gt 0 ]; then
+ echo 'success'
+ else
+ echo 'died'
+ fi
+ echo
+ else
+ echo "Module $1.pl not running"
+ fi
+ return 0
+}
+
+# Check config files
+[ -d $sympadir ] || exit 0
+[ -f $sympaconf ] || exit 0
+[ -f $wwsympaconf ] || exit 0
+
+sympa_start()
+ {
+ if [ ! -f /var/spool/lock/sympa ]; then
+ echo "Starting Sympa subsystem: "
+ sub_start sympa
+ sub_start bulk
+ sub_start archived
+ sub_start bounced
+ sub_start task_manager
+ touch /var/spool/lock/sympa
+ echo
+ else
+
+ echo "Sympa seems active. No action will be taken."
+ echo "Try \"sympa status\" or \"sympa restart"\".
+
+ fi
+ }
+sympa_stop()
+ {
+ echo "Stopping Sympa subsystem: "
+ sub_stop bounced
+ sub_stop archived
+ sub_stop bulk
+ sub_stop sympa
+ if [ -f /var/run/sympa/sympa-creation.pid ]; then
+ sub_stop sympa-creation
+ fi
+ sub_stop task_manager
+ if [ -f /var/spool/lock/sympa ]; then
+ rm -f /var/spool/lock/sympa
+ fi
+ }
+sympa_status()
+ {
+ echo "Status of Sympa subsystem: "
+ if [ -f /var/spool/lock/sympa ]; then
+ echo "Status file for subsystem found."
+ else
+ echo "Status file for subsystem NOT found."
+ fi
+ sub_status sympa
+ sub_status bulk
+ sub_status archived
+ sub_status bounced
+ sub_status task_manager
+ }
+sympa_restart()
+ {
+ echo "Restarting Sympa subsystem: "
+ $0 stop && $0 start
+ echo
+ }
+
+run_rc_command "$1"
+
diff -ruN sympa.orig/pkg-plist sympa/pkg-plist
--- sympa.orig/pkg-plist 2013-02-16 15:49:31.000000000 +0200
+++ sympa/pkg-plist 2013-02-27 09:51:55.000000000 +0200
@@ -1,4 +1,3 @@
-etc/rc.d/sympa
@comment copyover handled in pkg-install
@unexec cmp -s %D/etc/sympa.conf.sample %D/etc/sympa.conf && rm -f %D/etc/sympa.conf
etc/sympa.conf.sample
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list