#!/bin/sh
-#
-# TODO:
-# pre_start_service() and pre_stop_service()
-#
+
parse_one_service() {
- SOCKET_FILE="${CURRENT_SERVICE}.socket"
- SERVICE_FILE="${CURRENT_SERVICE}.service"
+ SOCKET_FILE="$1/rc-inetd-${CURRENT_SERVICE}.socket"
case "$FAMILY" in
ipv4)
stream)
[ "$PROTOCOL" = "tcp" ] || return
__LISTEN="ListenStream=$PORT"
+ SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}@.service"
;;
dgram)
[ "$PROTOCOL" = "udp" ] || return
__LISTEN="ListenDatagram=$PORT"
+ SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service"
;;
seqpacket)
__LISTEN="ListenSequentialPacket=$PORT"
+ SERVICE_FILE="$1/rc-inetd-${CURRENT_SERVICE}.service"
;;
*)
return
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
;;
*)
[ "${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" >/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" >/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
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
+
SERVICES=$(ls -d /etc/sysconfig/rc-inetd/* 2>/dev/null | grep -Ev '.*(\.rpm(save|new|orig)|~|CVS)')
for i in $SERVICES; do
# unset everything
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