#!/bin/sh set -e BIN_SRC="./whisper" BIN_DST="/usr/bin/whisper" CONF_DIR="/etc/whisper" CONF_DST="$CONF_DIR/.env" CONF_SRC="./example.env" die() { printf '%s\n' "$1" >&2 exit 1 } usage() { printf 'Usage: install.sh [-i|--install] [-u|--uninstall] [-h|--help]\n' printf ' -i, --install Install whisper (default)\n' printf ' -u, --uninstall Remove whisper\n' printf ' -h, --help Show this help\n' exit 0 } do_install() { printf 'This will:\n' printf ' - Copy whisper to %s\n' "$BIN_DST" printf ' - Create %s/ with config\n\n' "$CONF_DIR" printf 'Proceed? [Y/n] ' read -r answer case "$answer" in [nN]) printf 'Aborted.\n'; exit 0 ;; esac [ -f "$BIN_SRC" ] || die "Cannot find $BIN_SRC in current directory" [ -f "$CONF_SRC" ] || die "Cannot find $CONF_SRC in current directory" cp "$BIN_SRC" "$BIN_DST" chown root:root "$BIN_DST" chmod 755 "$BIN_DST" mkdir -p "$CONF_DIR" if [ ! -f "$CONF_DST" ]; then cp "$CONF_SRC" "$CONF_DST" else printf 'Keeping existing %s\n' "$CONF_DST" fi chown root:root "$CONF_DST" chmod 644 "$CONF_DST" printf '\nInstalled. Edit %s and set your values.\n' "$CONF_DST" } do_uninstall() { printf 'This will remove:\n' printf ' - %s\n' "$BIN_DST" printf ' - %s/\n\n' "$CONF_DIR" printf 'Proceed? [y/N] ' read -r answer case "$answer" in [yY]) ;; *) printf 'Aborted.\n'; exit 0 ;; esac rm -f "$BIN_DST" rm -rf "$CONF_DIR" printf 'Done.\n' } # --- main --- [ "$(id -u)" -eq 0 ] || die "Must be run as root" ACTION="install" while [ $# -gt 0 ]; do case "$1" in -i|--install) ACTION="install"; shift ;; -u|--uninstall) ACTION="uninstall"; shift ;; -h|--help) usage ;; *) die "Unknown option: $1" ;; esac done case "$ACTION" in install) do_install ;; uninstall) do_uninstall ;; esac