CI / lint (pull_request) Canceled after 0s
CI / test (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / reuse (pull_request) Canceled after 0s
CI / lint (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / reuse (push) Canceled after 0s
Provide a one-shot installer and matching systemd *user* units so the
server and client can be built, installed system-wide, and run in the
background without hand-rolled steps.
- script/install.sh: builds all three binaries (trx-server, trx-client,
trx-configurator) in release mode and installs them to /usr/local/bin
(configurable via --prefix/--bindir/PREFIX, sudo only when the target
is not writable). Seeds ~/.config/trx-rs/trx-rs.toml from the example
without ever overwriting existing config, then installs the user units
with @BINDIR@ substituted to the real path and runs daemon-reload.
Flags: --no-sdr, --no-build, --no-systemd, --enable-now.
- script/uninstall.sh: stops/disables the units, removes them and the
binaries; keeps config unless --purge.
- packaging/systemd/{trx-server,trx-client}.service: user units reading
the combined config at ~/.config/trx-rs/trx-rs.toml. The client softly
depends on the server (Wants/After). KillSignal=SIGINT matches how the
binaries shut down cleanly (SIGTERM is not handled).
- README: new "Install (optional, Linux + systemd)" section.
The web UI assets are embedded in the binary, so an install needs only
the binaries plus a config file — no data directory to ship.
Signed-off-by: Stan Grams <sjg@haxx.space>
87 lines
2.4 KiB
Bash
Executable File
87 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-FileCopyrightText: 2026 Stan Grams <sjg@haxx.space>
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
#
|
|
# Reverse script/install.sh: stop and remove the systemd user services and the
|
|
# installed binaries. User config (~/.config/trx-rs) is left in place unless
|
|
# --purge is given.
|
|
|
|
set -euo pipefail
|
|
|
|
BINARIES=(trx-server trx-client trx-configurator)
|
|
|
|
PREFIX="${PREFIX:-/usr/local}"
|
|
BINDIR="${BINDIR:-}"
|
|
PURGE=0
|
|
|
|
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/trx-rs"
|
|
UNIT_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user"
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage: script/uninstall.sh [options]
|
|
|
|
Options:
|
|
--prefix DIR Install prefix binaries were installed under (default: /usr/local)
|
|
--bindir DIR Directory binaries were installed to (overrides --prefix)
|
|
--purge Also delete the user config directory ($CONFIG_DIR)
|
|
-h, --help Show this help
|
|
EOF
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--prefix) PREFIX="$2"; shift 2 ;;
|
|
--bindir) BINDIR="$2"; shift 2 ;;
|
|
--purge) PURGE=1; shift ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) echo "error: unknown option '$1'" >&2; usage >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
|
|
[ -n "$BINDIR" ] || BINDIR="$PREFIX/bin"
|
|
|
|
log() { printf '\033[1;32m==>\033[0m %s\n' "$*"; }
|
|
|
|
need_sudo() {
|
|
local dir="$1"
|
|
while [ ! -e "$dir" ]; do dir="$(dirname "$dir")"; done
|
|
[ -w "$dir" ] && return 1 || return 0
|
|
}
|
|
|
|
# --- Stop and remove user services -----------------------------------------
|
|
if command -v systemctl >/dev/null 2>&1; then
|
|
log "Stopping and disabling user services…"
|
|
systemctl --user disable --now trx-client.service trx-server.service 2>/dev/null || true
|
|
fi
|
|
for unit in trx-client trx-server; do
|
|
if [ -e "$UNIT_DIR/$unit.service" ]; then
|
|
rm -f "$UNIT_DIR/$unit.service"
|
|
log "removed $UNIT_DIR/$unit.service"
|
|
fi
|
|
done
|
|
if command -v systemctl >/dev/null 2>&1; then
|
|
systemctl --user daemon-reload || true
|
|
fi
|
|
|
|
# --- Remove binaries --------------------------------------------------------
|
|
SUDO=""
|
|
if need_sudo "$BINDIR"; then SUDO="sudo"; fi
|
|
for b in "${BINARIES[@]}"; do
|
|
if [ -e "$BINDIR/$b" ]; then
|
|
$SUDO rm -f "$BINDIR/$b"
|
|
log "removed $BINDIR/$b"
|
|
fi
|
|
done
|
|
|
|
# --- Optionally purge config ------------------------------------------------
|
|
if [ "$PURGE" -eq 1 ]; then
|
|
rm -rf "$CONFIG_DIR"
|
|
log "purged $CONFIG_DIR"
|
|
else
|
|
log "Left config in place: $CONFIG_DIR (use --purge to delete)"
|
|
fi
|
|
|
|
log "Done."
|