#!/bin/sh # Builds both halves and gets the server service running again. # # ./start.sh # # The "put it back the way it should be" script: run it after a pull, or # whenever the running server and the checkout have drifted apart. Every # step is safe to repeat, so running it when nothing is wrong is a no-op # that takes as long as a cached build. # # The service is reinstalled rather than only installed when missing. The # unit file is generated from the service script, so a pull that changes # how the service is defined leaves an installed unit that is out of date # -- and that unit is what decides the working directory the server starts # in, which is where it looks for its own checkout. Rewriting it every time # is the only way running this actually guarantees the state it claims to. # # The service steps go through the freshly built binary's `--service`, # which derives the name and the script from the same declaration the # running server reads. So there is one definition of this service rather # than a bootstrap copy of it here. set -eu cd "$(dirname "$0")" # The binary decides how its own service is named and invoked, so nothing # here has to. It is built by the step above, which is what makes asking it # possible at all -- and it means this script cannot drift out of step with # `service::driver` the way a second copy of the name and arguments would. SERVICE="./server/target/release/dev-updater --service" # This service used to be installed under its own name by a script of its # own. Left in place, that unit would still start a second copy at boot, # which then loses the race for the port -- so it goes before the new one # arrives. Harmless once it is gone; this is a no-op on every later run. LEGACY="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/dev-updater.service" LEGACY_OPENRC="${XDG_CONFIG_HOME:-$HOME/.config}/rc/init.d/dev-updater" if [ -f "$LEGACY" ] || [ -f "$LEGACY_OPENRC" ]; then echo "==> Removing the old dev-updater unit, which this service replaces" if [ -f "$LEGACY" ]; then systemctl --user disable --now dev-updater >/dev/null 2>&1 || true rm -f "$LEGACY" systemctl --user daemon-reload fi if [ -f "$LEGACY_OPENRC" ]; then rc-service --user dev-updater stop >/dev/null 2>&1 || true rc-update --user del dev-updater >/dev/null 2>&1 || true rm -f "$LEGACY_OPENRC" fi fi # Server first, then the APK: if the APK build fails, the phone keeps being # offered the one it already had rather than half of a matched pair. ./build-self.sh echo echo "==> Installing the service" $SERVICE install # Told apart because restart on a service somebody stopped on purpose is a # different thing from starting one that is merely down. case "$($SERVICE status)" in running) echo "==> Restarting into the build just made" $SERVICE restart ;; *) echo "==> Starting" $SERVICE start ;; esac echo echo "==> the service is $($SERVICE status)"