#!/bin/bash
# Description: Start/Stop/Status FPAC node services.
# Updated: 27/05/2026 - Fixed by Claude

if [ "$(id -u)" != "0" ]; then
    echo "You need to be root to execute this script"
    exit 1
fi


DIR="/usr/local/sbin"
PATH=$DIR:$PATH

# log file
LOG=/var/log/fpac.log
echo "=========================================" >> $LOG
echo "MYFPAC.SH : " >> $LOG
/bin/date >> $LOG
#rm -f $LOG

# serial port for watchdog
# WDOG_PORT="/dev/ttyS4"
WDOG_PORT=""

# callsign of the sysop
SYSOP="F6BVP"
# Node Callsign
#NODECALL="$HOSTNAME"
NODECALL="f6bvp-8"

# route/callsign of the notified BBS
CONNECT="rose0 f6bvp-8 2080175520"
#CONNECT="MYBBS-1"

export PATH SYSOP CONNECT

case "$1" in
-restart|restart)
	echo -n "Restartting FPAC  :" >> $LOG
	$0 -stop && $0 -start
	sleep 3
	$0 status
	;;
-stop|stop)
	echo " "
	echo -n "Halting FPAC :"
	echo -n "Halting FPAC  :" >> $LOG
	# beacon est un binaire ELF : pidof -x ne le détecte pas fiablement.
	# pgrep -f sur le chemin complet garantit de ne tuer que le beacon lancé
	# par ax25up/myfpac, pas un éventuel beacon indépendant du même nom.
	echo -n " [beacon] "
	PID=$(pgrep -f "$DIR/beacon")
	if [ -n "$PID" ]; then
		kill -TERM $PID 2>/dev/null
		for i in {1..5}; do
			sleep 1
			if ! pgrep -f "$DIR/beacon" > /dev/null 2>&1; then
				break
			fi
			if [ $i -eq 5 ]; then
				kill -9 $PID 2>/dev/null
			fi
		done
	fi
	for PROC_NAME in fpacnode fpacshell
	do
#		PID=`/bin/pidof -x $DIR/$PROC_NAME`
		PID=`/bin/pidof -x $PROC_NAME`
		if [ -n "$PID" ]; then
                        kill -TERM $PID
			sleep 4
		fi
	done
	echo -n " [flexd] "
	kill -TERM `/bin/pidof -x $DIR/flexd` 2>/dev/null
	echo -n " [route] "
	kill -TERM `/bin/pidof -x $DIR/fpacroute` 2>/dev/null
	echo -n " [stats] "
	kill -TERM `/bin/pidof -x $DIR/fpacstat` 2>/dev/null
	echo -n " [wp] "
	kill -TERM `/bin/pidof -x $DIR/fpacwpd` 2>/dev/null
	echo -n " [pad] "
#	kill -KILL `/bin/pidof -x $DIR/fpad` 2>/dev/null
	kill -TERM `/bin/pidof -x $DIR/fpad` 2>/dev/null
	echo -n " [wdog] "
	kill -TERM `/bin/pidof -x $DIR/fpacwdog` 2>/dev/null
	echo -n " [mailbbs] "
	kill -TERM `/bin/pidof -x $DIR/mailbbs` 2>/dev/null
	echo -n " [ax25ipd] "
	PID=`/bin/pidof -x $DIR/ax25ipd`
	if [ -n "$PID" ]; then
		kill -TERM $PID 2>/dev/null
		sleep 1
	fi
	echo -n " [netromd] "
	PID=`/bin/pidof -x $DIR/netromd`
	if [ -n "$PID" ]; then
		kill -TERM $PID 2>/dev/null
		sleep 1
	fi
	echo -n " [kissattach] "
	if /bin/pidof kissattach > /dev/null 2>&1; then
		killall -TERM kissattach 2>/dev/null
		sleep 2
		killall -9 kissattach 2>/dev/null
	fi
	echo  " "
#	echo -n " ok "
	echo " ok "
	;;
-status|status)
	echo " "
        echo -e "\nStatus of FPAC :"

	for PROC_NAME in fpacwdog fpad fpacwpd fpacstat fpacroute flexd mailbbs ax25ipd netromd kissattach
	do
	        PID=`/bin/pidof -x $DIR/$PROC_NAME`
		if [ -n "$PID" ]; then
			echo -e "$PROC_NAME    \tis running"

		else
			echo -e "$PROC_NAME    \tis not running"
		fi
	done
	echo
        ;;
fpad)
	while [ 1 ]
	do
		$DIR/fpad -d
		sleep 1
	done
	;;
fpacwpd)
	while [ 1 ]
	do
		$DIR/fpacwpd -d -v -x
		sleep 1
	done
	;;

-start|start)
	FPAC_BG="yes"
	export FPAC_BG
	echo " "
	echo -n "Starting FPAC : " >> $LOG
	echo -n "Starting FPAC : "
	if [ "_$WDOG_PORT" != "_" ] ; then
		echo -n " [wdog] "
		$DIR/fpacwdog -p 2 $WDOG_PORT >> $LOG 2>&1
	fi
#	echo -n " [ax25d] "
#	$DIR/ax25d >> $LOG 2>&1
#	sleep 2
	echo -n " [rc-netrom] "
	/etc/ax25/rc.netrom >> $LOG 2>&1
	sleep 2
#	echo -n " [netromd] "
#	/usr/local/sbin/netromd -d -l -i -t 10
#	sleep 2
	echo -n " [fpad] "
	$DIR/fpad >> $LOG 2>&1 
	echo -n " [fpacwpd] "
	sleep 2
	$DIR/fpacwpd >> $LOG 2>&1 
	echo -n " [fpacstat] "
	sleep 2
	$DIR/fpacstat >> $LOG 2>&1
	echo -n " [fpacroute] "
	sleep 2
	$DIR/fpacroute >> $LOG 2>&1
	echo -n " [flexd] "
	$DIR/flexd >> $LOG 2>&1
	sleep 2
	(sleep 10 ; /bin/date | $DIR/mailbbs -d $SYSOP -t "FPAC node $NODECALL started" $CONNECT) &
	sleep 2
	echo " ok "
	;;

*) echo "Usage : $0 {-start|-stop|-restart|-status|fpad|fpacwpd}"
exit 1

esac


exit 0

#/usr/bin/killall netromd
#/usr/local/sbin/netromd -d -l -i -t 10
#/usr/local/sbin/netromd -i -t 5
