From 2cdc32ffcfcc6e2d5ebf7565a4b296a8e1dc580b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Sun, 10 Jun 2012 17:21:12 +0000 Subject: [PATCH] - create/remove unit files in normal generator directory - prefix service and socket units with "rc-inetd-" - ensure that exit status of the per-connection processes is forgotten, to make sure that systemd won't keep around information for numerous possibly failed connections - nowait means "Accept=true" (http://0pointer.de/blog/projects/inetd.html) - properly set stdin and stderr Changed files: pld-rc-inetd-generator.sh -> 1.4 --- pld-rc-inetd-generator.sh | 61 +++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/pld-rc-inetd-generator.sh b/pld-rc-inetd-generator.sh index d4ac416..c828c00 100644 --- a/pld-rc-inetd-generator.sh +++ b/pld-rc-inetd-generator.sh @@ -1,8 +1,8 @@ #!/bin/sh parse_one_service() { - SOCKET_FILE="${CURRENT_SERVICE}.socket" - SERVICE_FILE="${CURRENT_SERVICE}.service" + SOCKET_FILE="$1/rc-inetd-${CURRENT_SERVICE}.socket" + SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}@.service" case "$FAMILY" in ipv4) @@ -35,20 +35,22 @@ parse_one_service() { echo "[Unit]" >>$SERVICE_FILE echo "Description=$SERVICE_NAME" >>$SERVICE_FILE echo >>$SERVICE_FILE + echo "[Service]" >>$SERVICE_FILE + echo "StandardInput=socket" >>$SERVICE_FILE + echo "StandardError=syslog" >>$SERVICE_FILE echo "[Unit]" >>$SOCKET_FILE echo "Description=$SERVICE_NAME" >>$SOCKET_FILE echo >>$SOCKET_FILE + echo "[Socket]" >>$SOCKET_FILE echo $__LISTEN >>$SOCKET_FILE for i in $FLAGS; do case "$i" in - wait) - echo "Accept=true" >>$SOCKET_FILE - ;; nowait) + echo "Accept=true" >>$SOCKET_FILE [ "${MAX_CONNECTIONS:-n}" = "n" ] || echo "MaxConnections=$MAX_CONNECTIONS" >>$SOCKET_FILE ;; *) @@ -68,32 +70,32 @@ parse_one_service() { [ "${NICE:-none}" = "none" ] || echo "Nice=$NICE" >>$SERVICE_FILE [ "${CHROOT:-none}" = "none" ] || echo "RootDirectory=$CHROOT" >>$SERVICE_FILE [ "${ENV:-none}" = "none" ] || echo "Environment=$ENV" >>$SERVICE_FILE - echo -n "ExecStart=$DAEMON" >>$SERVICE_FILE + echo -n "ExecStart=-$DAEMON" >>$SERVICE_FILE if [ "${DAEMONARGS:-none}" = "none" ] ; then echo >>$SERVICE_FILE else - echo "$DAEMONARGS" >>$SERVICE_FILE + echo " $DAEMONARGS" >>$SERVICE_FILE fi if typeset -f pre_start_service 2>&1 >/dev/null ; then - echo "#!/bin/sh" >${CURRENT_SERVICE}_pre_start.sh - typeset -f pre_start_service >>${CURRENT_SERVICE}_pre_start.sh - echo "pre_start_service" >>${CURRENT_SERVICE}_pre_start.sh - chmod u+x ${CURRENT_SERVICE}_pre_start.sh - echo "ExecStartPre=${CURRENT_SERVICE}_pre_start.sh" >>$SERVICE_FILE + echo "#!/bin/sh" >/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh + typeset -f pre_start_service >>/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh + echo "pre_start_service >&2" >>/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh + chmod u+x /run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh + echo "ExecStartPre=-/run/rc-inetd/${CURRENT_SERVICE}_pre_start.sh" >>$SERVICE_FILE fi if typeset -f pre_stop_service 2>&1 >/dev/null ; then - echo "#!/bin/sh" >${CURRENT_SERVICE}_post_stop.sh - typeset -f pre_stop_service >>${CURRENT_SERVICE}_post_stop.sh - echo "pre_stop_service" >>${CURRENT_SERVICE}_post_stop.sh - chmod u+x ${CURRENT_SERVICE}_post_stop.sh - echo "ExecStopPost=${CURRENT_SERVICE}_post_stop.sh" >>$SERVICE_FILE + echo "#!/bin/sh" >/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh + typeset -f pre_stop_service >>/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh + echo "pre_stop_service >&2" >>/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh + chmod u+x /run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh + echo "ExecStopPost=-/run/rc-inetd/${CURRENT_SERVICE}_post_stop.sh" >>$SERVICE_FILE fi echo >>$SERVICE_FILE echo "[Install]" >>$SERVICE_FILE - echo "Also=${CURRENT_SERVICE}.socket" >>$SERVICE_FILE + echo "Also=rc-inetd-${CURRENT_SERVICE}.socket" >>$SERVICE_FILE echo >>$SERVICE_FILE echo >>$SOCKET_FILE @@ -101,6 +103,22 @@ parse_one_service() { echo "WantedBy=sockets.target" >>$SOCKET_FILE } +normalunitdir=${1:-/tmp} +earlyunitdir=${2:-/tmp} +lateunitdir=${3:-/tmp} + +destunitdir=$normalunitdir + +rm -f $destunitdir/rc-inetd-*.service \ + $destunitdir/rc-inetd-*.socket \ + $destunitdir/sockets.target.wants/rc-inetd-*.socket \ + /run/rc-inetd/* + +mkdir -p $destunitdir/sockets.target.wants \ + /run/rc-inetd + +[ "$1" = "stop" ] && exit 0 + SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | grep -Ev '.*(\.rpm(save|new|orig)|~|CVS)') for i in $SERVICES; do # unset everything @@ -130,5 +148,10 @@ for i in $SERVICES; do done [ $DONT_PARSE -eq 0 ] || continue - parse_one_service + parse_one_service $destunitdir + + if [ -f $destunitdir/rc-inetd-${CURRENT_SERVICE}.socket ]; then + ln -sf "$destunitdir/rc-inetd-${CURRENT_SERVICE}.socket" \ + "$destunitdir/sockets.target.wants/rc-inetd-${CURRENT_SERVICE}.socket" + fi done -- 2.44.0