ports/56658: Convert security/amavisd startup scripts to use rc.subr

Scot W. Hetzel hetzelsw at westbend.net
Wed Sep 10 00:50:15 UTC 2003


>Number:         56658
>Category:       ports
>Synopsis:       Convert security/amavisd startup scripts to use rc.subr
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Sep 09 17:50:11 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Scot W. Hetzel
>Release:        FreeBSD 4.9-PRERELEASE i386
>Organization:
West Bend Internet
>Environment:
System: FreeBSD WBIw009.westbend.net 4.9-PRERELEASE FreeBSD 4.9-PRERELEASE #8: Mon Sep 1 11:51:34 CDT 2003 root at WBIw009.westbend.net:/usr/obj/usr/src/4x/sys/GENERIC-SMP i386


>Description:
	Convert security/amavisd startup scripts to use sysutils/rc_subr.

	Add PTHREADS_LIBS and PTHREADS_CFLAGS to CONFIGURE_ENV, fixes the
	build of amavis-milter to work on -CURRENT.  Since, -pthreads was
	removed.

	NOTE: The configuration of amavisd with milter support (-DWITH_MILTER)
	will fail, if either the libsmutil.a (<8.12) or libsm.a (8.12+) is not
	installed in /usr/lib.  To fix this problem change INTERNALLIB to NOPIC
	in /usr/src/lib/libsm/Makefile, then make obj && make && make install.

>How-To-Repeat:

>Fix:

	Changed Files:
	    Makefile
	    pkg-plist
	    files/amavisd-milter.sh
	    files/amavisd.sh

	Removed Files:
	    pkg-plist.milter

Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/security/amavisd/Makefile,v
retrieving revision 1.11
diff -u -r1.11 Makefile
--- Makefile	6 Sep 2003 15:59:09 -0000	1.11
+++ Makefile	9 Sep 2003 23:54:44 -0000
@@ -7,6 +7,7 @@
 
 PORTNAME=	amavisd
 PORTVERSION=	0.1
+PORTREVISION=	1
 PORTEPOCH=	1
 CATEGORIES=	security
 MASTER_SITES=	${MASTER_SITE_SOURCEFORGE}
@@ -39,6 +40,9 @@
 
 AMAVISGROUP?=	vscan
 AMAVISUSER?=	vscan
+MILTER_SCRIPT=
+MILTER=		"@comment -- no milter script --"
+SBIN_AMAVIS=	amavis
 SMTPPORT?=	10025
 STARTSCRIPT=	amavisd.sh
 WARNADMIN?=	yes
@@ -65,22 +69,52 @@
 .elif defined(WITH_MILTER)
 CONFIGURE_ARGS+=	--enable-milter
 MTA?=		milter
-PLIST=		${PKGDIR}/pkg-plist.milter
-STARTSCRIPT=	amavisd-milter.sh
+MILTER_SCRIPT=	amavisd-milter
+MILTER=
+SBIN_AMAVIS=	amavis-milter
 .else
 CONFIGURE_ARGS+=	--enable-sendmail
 MTA?=		sendmail
 .endif
 
+.include <bsd.port.pre.mk>
+
+.if ${OSVERSION} >= 500038
+RC_SUBR?=       ${DESTDIR}/etc/rc.subr
+RC_DIR=         ${DESTDIR}/etc/rc.d
+RC_SUFX=
+.else
+USE_RC_SUBR=    yes
+RC_DIR=         ${PREFIX}/etc/rc.d
+RC_SUFX=        .sh
+.endif
+
+CONFIGURE_ENV+=	PTHREAD_LIBS=${PTHREAD_LIBS} \
+		PTHREAD_CFLAGS=${PTHREAD_CFLAGS}
+
+RC_SCRIPTS_SUB=	AMAVISUSER=${AMAVISUSER} \
+		PREFIX=${PREFIX} \
+		PERL=${PERL} \
+		RC_SUBR=${RC_SUBR}
+
+PLIST_SUB+=	SBIN_AMAVIS=${SBIN_AMAVIS} \
+		MILTER=${MILTER} \
+		RC_SUFX=${RC_SUFX} \
+		RC_DIR=${RC_DIR}
+
 post-patch:
-	@${SED} 's,%%AMAVISUSER%%,${AMAVISUSER},g' ${FILESDIR}/${STARTSCRIPT} > ${WRKSRC}/${STARTSCRIPT}
+.for script in amavisd ${MILTER_SCRIPT}
+	@${SED} ${RC_SCRIPTS_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${FILESDIR}/${script}.sh > ${WRKSRC}/${script}.sh
+.endfor
 	@${PERL} -pi.orig -e 's|/etc/amavisd.conf|${PREFIX}/etc/amavisd.conf|g' ${WRKSRC}/configure ${WRKSRC}/amavis/amavisd.in ${WRKSRC}/amavis/Makefile.in
 
 pre-install:
 	@${SETENV} ${SCRIPTS_ENV} PKG_PREFIX="${PREFIX}" ${SH} ${PKGINSTALL} ${AMAVISUSER} ${AMAVISGROUP}
 
 post-install:
-	${INSTALL_SCRIPT} ${WRKSRC}/${STARTSCRIPT} ${PREFIX}/etc/rc.d
+.for script in amavisd ${MILTER_SCRIPT}
+	${INSTALL_SCRIPT} ${WRKSRC}/${script}.sh ${RC_DIR}/${script}${RC_SUFX}
+.endfor
 .if !defined(NOPORTDOCS)
 	@${MKDIR} ${DOCSDIR}
 .for FILE in FAQ INSTALL README README.exim README.milter README.postfix README.qmail README.scanners README.sendmail doc/amavis.html doc/amavis.m4 doc/amavis.png doc/amavis.txt
@@ -91,4 +125,4 @@
 	@${ECHO} "==============================================================================="
 .endif
 
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
Index: pkg-plist
===================================================================
RCS file: /home/ncvs/ports/security/amavisd/pkg-plist,v
retrieving revision 1.3
diff -u -r1.3 pkg-plist
--- pkg-plist	6 Sep 2003 15:59:09 -0000	1.3
+++ pkg-plist	9 Sep 2003 17:07:17 -0000
@@ -13,6 +13,8 @@
 %%PORTDOCS%%%%DOCSDIR%%/amavis.txt
 %%PORTDOCS%%@dirrm %%DOCSDIR%%
 etc/amavisd.conf
-etc/rc.d/amavisd.sh
-sbin/amavis
+sbin/%%SBIN_AMAVIS%%
 sbin/amavisd
+ at cwd %%RC_DIR%%
+%%MILTER%%amavisd-milter%%RC_SUFX%%
+amavisd%%RC_SUFX%%
Index: files/amavisd-milter.sh
===================================================================
RCS file: /home/ncvs/ports/security/amavisd/files/amavisd-milter.sh,v
retrieving revision 1.2
diff -u -r1.2 amavisd-milter.sh
--- files/amavisd-milter.sh	24 May 2002 03:58:28 -0000	1.2
+++ files/amavisd-milter.sh	9 Sep 2003 20:23:16 -0000
@@ -1,31 +1,57 @@
 #!/bin/sh
+#
+# $FreeBSD$
+#
 
-if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
-	echo "$0: Cannot determine the PREFIX" >&2
-	exit 1
-fi
-
-case "$1" in
-start)
-	( [ -x ${PREFIX}/sbin/amavisd ] || [ -x ${PREFIX}/sbin/amavis-milter ] ) || exit 1
-	AMAVISD=$(/bin/ps -xU %%AMAVISUSER%% | grep amavisd | awk '{ print $1 }')
-	AMAVIS_MILTER=$(/bin/ps -xU %%AMAVISUSER%% | grep amavis-milter | awk '{ print $1 }')
-	( /bin/test "$AMAVISD" || /bin/test "$AMAVIS_MILTER" ) && \
-	su - %%AMAVISUSER%% -c "/bin/kill $AMAVISD $AMAVIS_MILTER" > /dev/null
-	rm -rf /var/amavis/amavis*.sock
-	su - %%AMAVISUSER%% -c "${PREFIX}/sbin/amavis-milter -D -p /var/amavis/amavis-milter.sock" > /dev/null
-	su - %%AMAVISUSER%% -c ${PREFIX}/sbin/amavisd > /dev/null 2>&1 && echo -n ' amavisd-milter'
-	;;
-stop)
-	( [ -x ${PREFIX}/sbin/amavisd ] || [ -x ${PREFIX}/sbin/amavis-milter ] ) || exit 1
-	AMAVISD=$(/bin/ps -xU %%AMAVISUSER%% | grep amavisd | awk '{ print $1 }')
-	AMAVIS_MILTER=$(/bin/ps -xU %%AMAVISUSER%% | grep amavis-milter | awk '{ print $1 }')
-	( /bin/test "$AMAVISD" || /bin/test "$AMAVIS_MILTER" ) && \
-	su - %%AMAVISUSER%% -c "/bin/kill $AMAVISD $AMAVIS_MILTER" > /dev/null && echo -n ' amavisd-milter'
-	;;
-*)
-	echo "Usage: `basename $0` {start|stop}" >&2
-	;;
-esac
+# PROVIDE: amavisd-milter
+# BEFORE: amavisd mail
+# KEYWORD: FreeBSD shutdown
 
-exit 0
+prefix=%%PREFIX%%
+
+# Define these amavisd_milter_* variables in one of these files:
+#	/etc/rc.conf
+#	/etc/rc.conf.local
+#
+# DO NOT CHANGE THESE DEFAULT VALUES HERE
+amavisd_milter_enable=no
+amavisd_milter_flags="-D"
+amavisd_milter_user=%%AMAVISUSER%%
+#amavisd_milter_socket="inet:9999 at 127.0.0.1"
+amavisd_milter_socket="local:/var/amavis/amavis-milter.sock"
+
+. %%RC_SUBR%%
+
+name="amavisd_milter"
+rcvar=`set_rcvar`
+start_precmd="amavisd_precmd"
+stop_postcmd="remove_socket"
+command=${prefix}/sbin/amavis-milter
+
+# Remove the AMaViSd Milter Socket
+remove_socket()
+{
+	case ${amavisd_milter_socket} in
+		unix:*|local:*)
+			socket=`echo ${amavisd_milter_socket} | /usr/bin/cut -d: -f2`
+			if [ -S ${socket} ]; then
+				rm -f ${socket}
+			fi
+			;;
+		/*)
+			if [ -S ${amavisd_milter_socket} ]; then
+				rm -f ${amavisd_milter_socket}
+			fi
+			;;
+	esac
+}
+
+amavisd_precmd()
+{
+	rc_flags="${rc_flags} -p ${amavisd_milter_socket}"
+
+	remove_socket
+}
+
+load_rc_config $name
+run_rc_command "$1"
Index: files/amavisd.sh
===================================================================
RCS file: /home/ncvs/ports/security/amavisd/files/amavisd.sh,v
retrieving revision 1.3
diff -u -r1.3 amavisd.sh
--- files/amavisd.sh	24 May 2002 03:58:28 -0000	1.3
+++ files/amavisd.sh	9 Sep 2003 15:46:10 -0000
@@ -1,28 +1,41 @@
 #!/bin/sh
+#
+# $FreeBSD$
+#
+ 
+# PROVIDE: amavisd
+# BEFORE: mail
+# KEYWORD: FreeBSD shutdown
 
-if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/$(basename $0)\$"); then
-	echo "$0: Cannot determine the PREFIX" >&2
-	exit 1
-fi
-
-case "$1" in
-start)
-	( [ -x ${PREFIX}/sbin/amavisd ] || [ -x ${PREFIX}/sbin/amavis-milter ] ) || exit 1
-	AMAVISD=$(/bin/ps -xU %%AMAVISUSER%% | grep amavisd | awk '{ print $1 }')
-	( /bin/test "$AMAVISD" ) && \
-	su - %%AMAVISUSER%% -c "/bin/kill $AMAVISD" > /dev/null
-	rm -rf /var/amavis/amavis*.sock
-	su - %%AMAVISUSER%% -c ${PREFIX}/sbin/amavisd > /dev/null 2>&1 && echo -n ' amavisd'
-	;;
-stop)
-	( [ -x ${PREFIX}/sbin/amavisd ] || [ -x ${PREFIX}/sbin/amavis-milter ] ) || exit 1
-	AMAVISD=$(/bin/ps -xU %%AMAVISUSER%% | grep amavisd | awk '{ print $1 }')
-	( /bin/test "$AMAVISD") && \
-	su - %%AMAVISUSER%% -c "/bin/kill $AMAVISD" > /dev/null && echo -n ' amavisd'
-	;;
-*)
-	echo "Usage: `basename $0` {start|stop}" >&2
-	;;
-esac
+prefix=%%PREFIX%%
 
-exit 0
+# Define these amavisd_milter_* variables in one of these files:
+#       /etc/rc.conf
+#       /etc/rc.conf.local
+#
+# DO NOT CHANGE THESE DEFAULT VALUES HERE
+amavisd_enable=no
+amavisd_flags=""
+amavisd_user=%%AMAVISUSER%%
+
+. %%RC_SUBR%%
+
+name="amavisd"
+rcvar=`set_rcvar`
+start_precmd="remove_socket"
+stop_postcmd="remove_socket"
+command=${prefix}/sbin/amavisd
+command_arg="> /dev/null 2>&1"
+command_interpreter="%%PERL%%"
+pidfile="/var/amavis/amavisd.pid"
+
+# Remove the AMaViSd Socket
+remove_socket()
+{
+	if [ -S /var/amavis/amavisd.sock ]; then
+		rm -f /var/amavis/amavisd.sock
+	fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list