| #!/bin/sh |
| # |
| # This is free software, licensed under the GNU General Public License v2. |
| # See /LICENSE for more information. |
| # |
| |
| stop_instance() { |
| /etc/init.d/nut-server stop "$1" |
| } |
| |
| shutdown_instance() { |
| local cfg="$1" |
| config_get driver "$cfg" driver "usbhid-ups" |
| |
| # Only FSD if killpower was indicated |
| if [ -f /var/run/killpower ]; then |
| /lib/nut/"${driver}" -a "$cfg" -k |
| fi |
| } |
| |
| do_fsd() { |
| if [ -f /var/run/killpower ]; then |
| # Only make FS readonly if we are doing an FSD |
| mount -o remount,ro /overlay /overlay |
| mount -o remount,ro / / |
| |
| . ${IPKG_INSTROOT}/lib/functions.sh |
| |
| if [ -f /etc/config/nut_server ]; then |
| config_load nut_server |
| |
| # Can't FSD unless drivers are stopped |
| config_foreach stop_instance driver |
| # Driver will wait 'offdelay' before shutting down |
| config_foreach shutdown_instance driver |
| # So this can happen |
| rm -f /var/run/killpower |
| poweroff |
| # And just in case |
| sleep 120 |
| # Uh-oh failed to poweroff UPS |
| reboot -f |
| else |
| poweroff |
| fi |
| else |
| poweroff |
| fi |
| } |
| |
| do_fsd |