чување f7fe5a52ff99bda432ff73e8d47446c5f8e673e0
родитељ 2e0f60d63d21bb975d3c8b63f467d10ccd5fca68
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 3 May 2023 22:24:08 +0200
sdhcp: Use inotifywait to wait for wpa_supplicant; wpa_supplicant: Specify
pidfile with -P
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 5, додавања: 73(+), брисања: 32(-)
diff --git a/TODO b/TODO
@@ -1,5 +1,5 @@
TODO
====
-[ ] Add some form of dependance
- [ ] Make sdhcp depend on wpa_supplicant if interface is wlan0
+[x] Add some form of dependance
+ [x] Make sdhcp depend on wpa_supplicant if interface is wlan0
diff --git a/svc.d/avail/sdhcp b/svc.d/avail/sdhcp
@@ -5,45 +5,65 @@ svcbin=/bin/sdhcp
. /bin/svc.d/default/${svc}
-PID=''
-if [ -z "${PIDFILE}" ]; then
- exit 2
-elif [ -e "${PIDFILE}" ]; then
- PID=$(< "${PIDFILE}")
-fi
+PID=$(pidof -o %PPID ${svcbin})
case $1 in
-e) if [ -z "${PID}" ]; then
exit 2
- elif [ -z "$(ps -ef | awk '{print $2}' | \
- grep "${PID}")" ]; then
- exit 2
fi;;
- -s) svc -e ${svc}
+ -s) $0 -e
case $? in
- 0) exit 1;;
- 2) ${svcbin} ${PARAMS} >/dev/null 2>&1 &
- if [ -n "${STARTDELAY}" ]; then
+ 0) exit 1;;
+ 2) case "${PARAMS}" in
+ *wlan*) if [ -z "$(find "${RUNDIR}"/ -name \
+ wpa_supplicant.up)" ]
+ then
+ while [ -z "$(inotifywait -r ${RUNDIR} \
+ 2>/dev/null \
+ | grep wpa_supplicant.up)" ]
+ do done
+ fi;;
+ *) if [ -n "${STARTDELAY}" ]; then
/bin/usleep "${STARTDELAY}"
- fi
- svc -e ${svc};;
- *) ;;
+ fi;;
+ esac
+ ${svcbin} ${PARAMS} >/dev/null 2>&1 &
+ if [ -n "${RUNDIR}" ] && [ -n "${PIDFILE}" ] \
+ && [ -z "$(find "${RUNDIR}"/ -name ${PIDFILE##*/})" ]
+ then
+ while [ -z "$(inotifywait -e create,modify \
+ ${RUNDIR} 2>/dev/null \
+ | grep ${PIDFILE##*/})" ]; do done
+ elif [ -n "${STARTDELAY}" ]; then
+ /bin/usleep "${STARTDELAY}"
+ fi
+ $0 -e
+ errno=$?
+ if [ -n "${RUNDIR}" ]; then
+ case $errno in
+ 0) :> "${RUNDIR}/${SERVICE}.up";;
+ *) rm "${RUNDIR}/${SERVICE}.up";;
+ esac
+ fi;;
+ *) return $?;;
esac;;
- -k) svc -e ${svc}
+ -k) $0 -e
case $? in
2) exit 1;;
0) kill "${PID}" >/dev/null 2>&1
- if [ -n "$(ps -ef | awk '{print $2}' | \
- grep "${PID}")" ]
+ if [ -n "$(pidof -o %PPID "${svcbin}" \
+ 2>/dev/null)" ]
then
- kill -9 "${PID}" >/dev/null \
- 2>&1 || exit 2
+ pkill -9 -f "${BIN}" >/dev/null 2>&1 \
+ || exit 2
+ fi
+ if [ -n "${RUNDIR}" ]; then
+ rm "${RUNDIR}/${SERVICE}.up"
fi
- rm "${PIDFILE}" 2>/dev/null
- exit 0;;
- *) ;;
+ rm "${PIDFILE}" 2>/dev/null;;
+ *) exit 1;;
esac;;
- -r) svc -k ${svc}
- svc -s ${svc};;
+ -r) $0 -k
+ $0 -s;;
*) exit 2;;
esac
diff --git a/svc.d/bare.sh b/svc.d/bare.sh
@@ -36,10 +36,25 @@ case $1 in
case $? in
0) return 1;;
2) ${BIN} ${PARAMS} >/dev/null 2>&1 &
- if [ -n "${STARTDELAY}" ]; then
+ if [ -n "${RUNDIR}" ] && [ -n "${PIDFILE}" ] \
+ && [ -z "$(find "${RUNDIR}"/ \
+ -name ${PIDFILE##*/})" ]
+ then
+ while [ -z "$(inotifywait -e create,modify \
+ ${RUNDIR} 2>/dev/null \
+ | grep ${PIDFILE##*/})" ]
+ do done
+ elif [ -n "${STARTDELAY}" ]; then
/bin/usleep "${STARTDELAY}"
fi
- $0 "${SERVICE}" -e;;
+ $0 "${SERVICE}" -e
+ errno=$?
+ if [ -n "${RUNDIR}" ]; then
+ case $errno in
+ 0) :> "${RUNDIR}/${SERVICE}.up";;
+ *) rm "${RUNDIR}/${SERVICE}.up";;
+ esac
+ fi;;
*) return $?;;
esac;;
-k) $0 "${SERVICE}" -e
@@ -51,6 +66,9 @@ case $1 in
then
pkill -9 -f "${BIN}" >/dev/null 2>&1 \
|| exit 2
+ fi
+ if [ -n "${RUNDIR}" ]; then
+ rm "${RUNDIR}/${SERVICE}.up"
fi;;
*) return $?;;
esac;;
diff --git a/svc.d/default/sdhcp b/svc.d/default/sdhcp
@@ -1,2 +1,3 @@
+RUNDIR=/var/run
+PIDFILE=${RUNDIR}/sdhcp.pid
PARAMS="eth0"
-PIDFILE=/var/run/sdhcp.pid
diff --git a/svc.d/default/wpa_supplicant b/svc.d/default/wpa_supplicant
@@ -1 +1,3 @@
-PARAMS="-Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B"
+RUNDIR=/var/run/wpa_supplicant
+PIDFILE=${RUNDIR}/wpa_supplicant.pid
+PARAMS="-Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -P${PIDFILE} -B"