diff --git a/contrib/partitioner/partitioner.py b/contrib/partitioner/partitioner.py index 7be5a17..8619fe4 100755 --- a/contrib/partitioner/partitioner.py +++ b/contrib/partitioner/partitioner.py @@ -96,6 +96,20 @@ def main(): if len(usb_devs()) == 1: + if len(usb_partitions()) < 1: + try: + print("Running parted...") + os.system('/sbin/parted -s /dev/sda mkpart p ext4 3 100%'); + print('Making first partition'); + os.system('/sbin/mkfs.ext4 -F /dev/sda1'); + except: + print('Error running parted'); + sys.exit(1); + else: + print("Already partitioned") + + + if len(usb_partitions()) == 1: try: os.system('/bin/mount /dev/' + usb_partitions()[0] + ' /mnt/data') diff --git a/docker-compose.yml b/docker-compose.yml index 1d6577a..fa4d7ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -85,6 +85,7 @@ services: stop_grace_period: 5m30s volumes: - ${PWD}/db:/db + - ${PWD}/events/signals:/signals - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - ${PWD}:${PWD} diff --git a/signals/.gitkeep b/events/signals/.blah similarity index 100% rename from signals/.gitkeep rename to events/signals/.blah diff --git a/events/triggers/reboot b/events/triggers/reboot new file mode 100755 index 0000000..36eec5d --- /dev/null +++ b/events/triggers/reboot @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +docker-compose stop +shutdown -r now diff --git a/events/triggers/shutdown b/events/triggers/shutdown new file mode 100755 index 0000000..9662331 --- /dev/null +++ b/events/triggers/shutdown @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +docker-compose stop +shutdown -h now diff --git a/karen b/karen new file mode 100755 index 0000000..cb8c79c --- /dev/null +++ b/karen @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# karen watches for signals and executes triggers in the events dir +# karen gets triggered a lot + +check_dependencies () { + for cmd in "$@"; do + if ! command -v $cmd >/dev/null 2>&1; then + echo "This script requires \"${cmd}\" to be installed" + exit 1 + fi + done +} + +check_root () { + if [[ $UID != 0 ]]; then + echo "Error: This script must be run as root." + echo "Can I speak to a manager please?" + exit 1 + fi +} + +check_dependencies fswatch readlink dirname + +check_root + +if [[ -n "$1" ]]; then + root_dir="$(readlink -f $1)" +else + root_dir="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/events" +fi +signal_dir="$root_dir/signals" +trigger_dir="$root_dir/triggers" + +if [[ ! -d "$root_dir" ]]; then + echo "Root dir does not exist '$root_dir'" + exit 1 +fi + +echo "karen is running in $root_dir" +fswatch -0 --event=PlatformSpecific $signal_dir | while read -d "" event; do + signal="${event#"$signal_dir"}" + signal="${signal#"/"}" + trigger="$trigger_dir/$signal" + + echo "Got signal: $signal" + if test -x "$trigger"; then + echo "karen is getting triggered!" + "$trigger" & + else + echo "No trigger found" + fi +done