summaryrefslogtreecommitdiff
path: root/package/apcupsd/files
diff options
context:
space:
mode:
Diffstat (limited to 'package/apcupsd/files')
-rw-r--r--package/apcupsd/files/apccontrol74
-rw-r--r--package/apcupsd/files/apcupsd.conffiles1
-rw-r--r--package/apcupsd/files/apcupsd.init38
-rw-r--r--package/apcupsd/files/apcupsd.postinst3
4 files changed, 116 insertions, 0 deletions
diff --git a/package/apcupsd/files/apccontrol b/package/apcupsd/files/apccontrol
new file mode 100644
index 000000000..e402c513d
--- /dev/null
+++ b/package/apcupsd/files/apccontrol
@@ -0,0 +1,74 @@
+#!/bin/sh
+#
+# A custom apccontrol for use in embedded systems: just make sure there's no
+# data in-flight and wait for the blackout to shut us down.
+
+# these filesystems are not relevant
+IGNORE_FS="tmpfs proc sysfs devtmpfs devpts nfsd"
+
+get_rw_mounts() {
+ local excl='\((ro,\|type \('
+ local sep=""
+ for fs in $IGNORE_FS; do
+ excl+="${sep}$fs"
+ sep='\|'
+ done
+ excl+='\)\)'
+ mount | grep -v "$excl" | while read dev on mnt opts; do
+ echo "$mnt"
+ done
+}
+
+log() {
+ logger -s -t "$(basename $0)" -p daemon.crit "$*"
+}
+__mount() { # (ro/rw, txt, mnt)
+ local opt=$1
+ local txt=$2
+ local mnt="$3"
+
+ mount -o remount,$opt "$mnt"
+ rc=$?
+ case $rc in
+ 0) log "remounted $mnt $txt"
+ *) log "failed to remount $mnt $txt: rc=$rc"
+ esac
+ return $rc
+}
+mount_ro() {
+ __mount ro read-only "$1"
+}
+mount_rw() {
+ __mount rw read-write "$1"
+}
+
+romounts="/tmp/apcupsd.romounts"
+
+case "$1" in
+ emergency|failing)
+ log "UPS error condition happening"
+ ;& # fall through
+ doshutdown)
+ log "bracing for upcoming blackout"
+
+ rm -f "$romounts"
+ sync
+ get_rw_mounts | while read mnt; do
+ mount_ro "$mnt" && echo "$mnt" >>"$romounts"
+ done
+ ;;
+ mainsback)
+ log "returning to routine after near blackout"
+
+ touch "$romounts"
+ while read mnt; do
+ mount_rw "$mnt"
+ done <"$romounts"
+ rm "$romounts"
+ ;;
+ *)
+ log "Called for $1"
+ ;;
+esac
+
+exit 0
diff --git a/package/apcupsd/files/apcupsd.conffiles b/package/apcupsd/files/apcupsd.conffiles
new file mode 100644
index 000000000..7bae4c961
--- /dev/null
+++ b/package/apcupsd/files/apcupsd.conffiles
@@ -0,0 +1 @@
+/etc/apcupsd.conf
diff --git a/package/apcupsd/files/apcupsd.init b/package/apcupsd/files/apcupsd.init
new file mode 100644
index 000000000..a9817f1be
--- /dev/null
+++ b/package/apcupsd/files/apcupsd.init
@@ -0,0 +1,38 @@
+#!/bin/sh
+#PKG apcupsd
+#INIT 15
+. /etc/rc.conf
+
+pidfile=$(echo "$apcupsd_flags" | \
+ sed -n 's/.*\(-P\|--pid-file\) \([^ ]\+\).*/\2/p')
+[ "$pidfile" ] || pidfile="/var/run/apcupsd.pid"
+
+case $1 in
+autostop) ;;
+autostart)
+ test x"${apcupsd:-NO}" = x"NO" && exit 0
+ test x"$apcupsd" = x"DAEMON" && test -x /bin/mksh && exec mksh -T- $0 start
+ exec sh $0 start
+ ;;
+start)
+ mkdir -p /var/lock
+ /usr/sbin/apcupsd $apcupsd_flags
+ ;;
+stop)
+ if [ -f "$pidfile" ]; then
+ kill $(<$pidfile)
+ rm -f $pidfile
+ else
+ kill $(pgrep -f /usr/sbin/apcupsd)
+ fi
+ ;;
+restart)
+ sh $0 stop
+ sleep 1
+ sh $0 start
+ ;;
+*)
+ echo "usage: $0 (start | stop | restart)"
+ exit 1
+esac
+exit $?
diff --git a/package/apcupsd/files/apcupsd.postinst b/package/apcupsd/files/apcupsd.postinst
new file mode 100644
index 000000000..299fabc0f
--- /dev/null
+++ b/package/apcupsd/files/apcupsd.postinst
@@ -0,0 +1,3 @@
+#!/bin/sh
+. $IPKG_INSTROOT/etc/functions.sh
+add_rcconf apcupsd NO