From 0b3422fab2e8ca0a988a6ba2e1919eb904401e7b Mon Sep 17 00:00:00 2001 From: BT Date: Tue, 14 Jul 2020 13:11:51 +0700 Subject: [PATCH 1/3] Partitioner fix (#29) https://github.com/getumbrel/umbrel/pull/29 --- contrib/partitioner/partitioner.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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') From 0801a0dd8573f791021ff165837eec06b17a28bd Mon Sep 17 00:00:00 2001 From: Mayank Chhabra Date: Tue, 14 Jul 2020 15:34:22 +0530 Subject: [PATCH 2/3] Remove signals dir (#30) https://github.com/getumbrel/umbrel/pull/30 --- signals/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 signals/.gitkeep diff --git a/signals/.gitkeep b/signals/.gitkeep deleted file mode 100644 index e69de29..0000000 From 2a88e7eaa36f284eccd9a6fbf922fb8dc9234502 Mon Sep 17 00:00:00 2001 From: Luke Childs Date: Wed, 15 Jul 2020 09:28:33 +0700 Subject: [PATCH 3/3] Add signal watcher system with power cycle triggers (#28) * Related: https://github.com/getumbrel/umbrel-manager/pull/21 * Related: https://github.com/getumbrel/umbrel-dashboard/pull/130 * Add signal watcher system with power cycle triggers * Stop docker containers before system shutdown * karen * Run karen triggers async * Allow specifying an event dir * Check root_der exists * Add space * Check dependencies * Make sure karen is run as root * Make karen more kareny * Mount signals dir from umbrel-manager on host --- docker-compose.yml | 1 + events/signals/.blah | 0 events/triggers/reboot | 5 ++++ events/triggers/shutdown | 5 ++++ karen | 53 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100644 events/signals/.blah create mode 100755 events/triggers/reboot create mode 100755 events/triggers/shutdown create mode 100755 karen diff --git a/docker-compose.yml b/docker-compose.yml index a173672..c8f1e1e 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/events/signals/.blah b/events/signals/.blah new file mode 100644 index 0000000..e69de29 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