diff --git a/MIGRATION.md b/MIGRATION.md index 153bc1a..e614994 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -43,11 +43,12 @@ git clone https://git.whcself.xyz/WHC/CST-agent.git # 兼容;请改 origin | 旧 | 新 | |---|---| | `cst-agent` | `hermit`(安装时仍提供 `cst-agent` → `hermit` 软链) | -| `cst-agent-update` | 仍可用;内部装的是 `hermit` | +| `cst-agent-update` | → `hermit-update`(软链;议会助手 → `hermit-service`) | | Release `cst-agent-VERSION-linux-*.tar.gz` | `hermit-VERSION-linux-*.tar.gz`(过渡期可能双发) | ```bash -hermit --version # hermit 1.0.0 +hermit --version # hermit 1.0.x +hermit-update # 升级;兼容名 cst-agent-update cst-agent --version # 同二进制(软链) ``` diff --git a/Makefile b/Makefile index 784a863..8041081 100644 --- a/Makefile +++ b/Makefile @@ -323,11 +323,41 @@ clean: rm -f $(OBJ) $(DEPFILES) hermit cst-agent $(CST_CORE_LIB) $(TESTS) \ .gen/models_builtin.inc .gen/web_assets.inc +# Absolute checkout path for hermit-update (survives cd). Override with HERMIT_SRC. +HERMIT_SRC ?= $(abspath .) + install: hermit install -d "$(DESTDIR)$(PREFIX)/bin" install -m 0755 hermit "$(DESTDIR)$(PREFIX)/bin/hermit" ln -sfr "$(DESTDIR)$(PREFIX)/bin/hermit" "$(DESTDIR)$(PREFIX)/bin/cst-agent" 2>/dev/null || \ ln -sf hermit "$(DESTDIR)$(PREFIX)/bin/cst-agent" + @# hermit-update / hermit-service (cst-* compat symlinks) + @printf '%s\n' '#!/usr/bin/env bash' \ + 'export HERMIT_PREFIX="$${HERMIT_PREFIX:-$${CST_AGENT_PREFIX:-$(PREFIX)}}"' \ + 'export CST_AGENT_PREFIX="$$HERMIT_PREFIX"' \ + 'export HERMIT_DIR="$${HERMIT_DIR:-$${CST_AGENT_DIR:-$(HERMIT_SRC)}}"' \ + 'export CST_AGENT_DIR="$$HERMIT_DIR"' \ + 'exec bash "$$HERMIT_DIR/scripts/bootstrap_linux.sh" "$$HERMIT_DIR" "$$@"' \ + > "$(DESTDIR)$(PREFIX)/bin/hermit-update" + @chmod 0755 "$(DESTDIR)$(PREFIX)/bin/hermit-update" + @ln -sfr "$(DESTDIR)$(PREFIX)/bin/hermit-update" "$(DESTDIR)$(PREFIX)/bin/cst-agent-update" 2>/dev/null || \ + ln -sf hermit-update "$(DESTDIR)$(PREFIX)/bin/cst-agent-update" + @printf '%s\n' '#!/usr/bin/env bash' \ + 'set -euo pipefail' \ + 'BIN="$(PREFIX)/bin/hermit"' \ + 'cmd="$${1:-status}"' \ + 'case "$$cmd" in' \ + 'status) "$$BIN" --version; if command -v systemctl >/dev/null 2>&1 && systemctl --user is-active cst-agent-parliament.service >/dev/null 2>&1; then systemctl --user status cst-agent-parliament.service --no-pager; else "$$BIN" --service-stop >/dev/null 2>&1 || true; echo "parliament service: not managed by systemd --user"; fi ;;' \ + 'install-unit) make -C "$(HERMIT_SRC)" install-service PREFIX="$(PREFIX)" ;;' \ + 'start) systemctl --user start cst-agent-parliament.service ;;' \ + 'stop) systemctl --user stop cst-agent-parliament.service; "$$BIN" --service-stop || true ;;' \ + 'restart) systemctl --user restart cst-agent-parliament.service ;;' \ + '*) echo "usage: hermit-service {status|install-unit|start|stop|restart}" >&2; exit 2 ;;' \ + 'esac' \ + > "$(DESTDIR)$(PREFIX)/bin/hermit-service" + @chmod 0755 "$(DESTDIR)$(PREFIX)/bin/hermit-service" + @ln -sfr "$(DESTDIR)$(PREFIX)/bin/hermit-service" "$(DESTDIR)$(PREFIX)/bin/cst-agent-service" 2>/dev/null || \ + ln -sf hermit-service "$(DESTDIR)$(PREFIX)/bin/cst-agent-service" @if [ ! -f res/hermit-icons.ttf ]; then $(MAKE) hermit-font || true; fi @if [ -f res/hermit-icons.ttf ]; then \ install -d "$(DESTDIR)$(PREFIX)/share/hermit"; \ @@ -347,6 +377,7 @@ install: hermit install -d "$(DESTDIR)$(PREFIX)/share/hermit/frames"; \ cp -a res/hermit-frames/. "$(DESTDIR)$(PREFIX)/share/hermit/frames/"; \ fi + @echo "installed hermit-update → $(PREFIX)/bin/hermit-update" # Optional systemd --user unit for the parliament seat service. install-service: install @@ -361,6 +392,8 @@ install-service: install uninstall: rm -f "$(DESTDIR)$(PREFIX)/bin/hermit" "$(DESTDIR)$(PREFIX)/bin/cst-agent" + rm -f "$(DESTDIR)$(PREFIX)/bin/hermit-update" "$(DESTDIR)$(PREFIX)/bin/cst-agent-update" + rm -f "$(DESTDIR)$(PREFIX)/bin/hermit-service" "$(DESTDIR)$(PREFIX)/bin/cst-agent-service" rm -f "$(DESTDIR)$(PREFIX)/share/hermit/hermit-icons.ttf" rm -f "$(DESTDIR)$(PREFIX)/share/fonts/hermit/hermit-icons.ttf" rm -rf "$(DESTDIR)$(PREFIX)/share/hermit/frames" diff --git a/README.md b/README.md index fe39895..5d13dc7 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ curl -fsSL https://git.whcself.xyz/WHC/Hermit/raw/branch/main/scripts/bootstrap_ ```bash ./scripts/bootstrap_linux.sh . -hermit --version # hermit 1.0.0 -cst-agent-update # 升级助手仍可用 +hermit --version # hermit 1.0.x +hermit-update # 升级(源码或 --release);兼容 cst-agent-update ./scripts/migrate_remote_to_hermit.sh # 已有 CST-agent 检出时改 origin ``` diff --git a/include/cst_version.h b/include/cst_version.h index bf1d5f4..4fcf0b5 100644 --- a/include/cst_version.h +++ b/include/cst_version.h @@ -3,7 +3,7 @@ #define CST_VERSION_MAJOR 1 #define CST_VERSION_MINOR 0 -#define CST_VERSION_PATCH 0 +#define CST_VERSION_PATCH 1 #define CST_VERSION_STR_(x) #x #define CST_VERSION_STR(x) CST_VERSION_STR_(x) diff --git a/scripts/bootstrap_linux.sh b/scripts/bootstrap_linux.sh index be51e81..48d1297 100755 --- a/scripts/bootstrap_linux.sh +++ b/scripts/bootstrap_linux.sh @@ -1,17 +1,18 @@ #!/usr/bin/env bash -# Install or upgrade CST-Agent on Linux, WSL or macOS. Safe to rerun: an +# Install or upgrade Hermit on Linux, WSL or macOS. Safe to rerun: an # existing checkout is fast-forwarded, rebuilt and reinstalled. # # bootstrap_linux.sh [DIR] [--no-pull] [--release] [--source] -# cst-agent-update (installed by this script; same as rerunning it) +# hermit-update (installed by this script; same as rerunning it) +# cst-agent-update (compat symlink → hermit-update) # # --release downloads the static musl tarball for this host (fast; no compile). # --source (default) builds from the checkout. CST_INSTALL_MODE=release|source # overrides the flag. # -# Env: CST_AGENT_PREFIX (install prefix, default ~/.local), CST_AGENT_DIR -# (checkout, default: current checkout or ~/CST-agent), CST_AGENT_REPO, -# CST_AGENT_VERSION (pin a release; default: cst_version.h or latest tag). +# Env: HERMIT_PREFIX / CST_AGENT_PREFIX (install prefix, default ~/.local), +# HERMIT_DIR / CST_AGENT_DIR (checkout), HERMIT_REPO / CST_AGENT_REPO, +# HERMIT_VERSION / CST_AGENT_VERSION (pin a release; default: cst_version.h). set -euo pipefail ROOT_HINT="$(cd "$(dirname "$0")/.." 2>/dev/null && pwd || true)" @@ -80,15 +81,24 @@ install_font() { install_helpers() { local prefix="$1" dir="$2" + local bash_bin + bash_bin="$(command -v bash)" mkdir -p "$prefix/bin" - cat >"$prefix/bin/cst-agent-update" <"$prefix/bin/hermit-update" <"$prefix/bin/cst-agent-service" </dev/null || \ + ln -sf hermit-update "$prefix/bin/cst-agent-update" + + cat >"$prefix/bin/hermit-service" <&2 + echo "usage: hermit-service {status|install-unit|start|stop|restart}" >&2 exit 2 ;; esac EOF - chmod 0755 "$prefix/bin/cst-agent-service" + chmod 0755 "$prefix/bin/hermit-service" + ln -sfr "$prefix/bin/hermit-service" "$prefix/bin/cst-agent-service" 2>/dev/null || \ + ln -sf hermit-service "$prefix/bin/cst-agent-service" } # Fast path: fetch static release tarball for this machine. @@ -129,7 +141,7 @@ install_from_release() { echo "no prebuilt release for $(uname -m); use --source" >&2 return 1 } - local ver="${CST_AGENT_VERSION:-}" + local ver="${HERMIT_VERSION:-${CST_AGENT_VERSION:-}}" if [[ -z "$ver" ]]; then ver="$(cst_version)" fi @@ -161,8 +173,8 @@ install_from_release() { } main() { - local repo_url="${CST_AGENT_REPO:-${HERMIT_REPO:-https://git.whcself.xyz/WHC/Hermit.git}}" - local prefix="${CST_AGENT_PREFIX:-$HOME/.local}" + local repo_url="${HERMIT_REPO:-${CST_AGENT_REPO:-https://git.whcself.xyz/WHC/Hermit.git}}" + local prefix="${HERMIT_PREFIX:-${CST_AGENT_PREFIX:-$HOME/.local}}" local dir="" pull=1 changed=0 mode="${CST_INSTALL_MODE:-source}" arg for arg in "$@"; do case "$arg" in @@ -178,12 +190,16 @@ main() { esac done if [[ -z "$dir" ]]; then - if [[ -n "${CST_AGENT_DIR:-}" ]]; then + if [[ -n "${HERMIT_DIR:-}" ]]; then + dir="$HERMIT_DIR" + elif [[ -n "${CST_AGENT_DIR:-}" ]]; then dir="$CST_AGENT_DIR" elif [[ -f Makefile && -f src/main.c && -d .git ]]; then dir="$(pwd)" elif [[ -n "$ROOT_HINT" && -f "$ROOT_HINT/Makefile" ]]; then dir="$ROOT_HINT" + elif [[ -d "$HOME/Hermit/.git" ]]; then + dir="$HOME/Hermit" else dir="$HOME/CST-agent" fi @@ -222,7 +238,7 @@ main() { *":$prefix/bin:"*) ;; *) echo "Add to PATH: export PATH=\"$prefix/bin:\$PATH\"" ;; esac - echo "Upgrade: cst-agent-update --release Rebuild from source: --source" + echo "Upgrade: hermit-update --release Rebuild from source: hermit-update --source" return 0 fi echo "==> continuing with source build" @@ -257,9 +273,9 @@ main() { *":$prefix/bin:"*) ;; *) echo "Add to PATH: export PATH=\"$prefix/bin:\$PATH\"" ;; esac - echo "Run 'hermit' (or 'cst-agent') in a project; upgrade with 'cst-agent-update'." - echo "Fast upgrade from Release: 'cst-agent-update --release'." - echo "Parliament helper: 'cst-agent-service status|install-unit'." + echo "Run 'hermit' in a project; upgrade with 'hermit-update' (compat: cst-agent-update)." + echo "Fast upgrade from Release: 'hermit-update --release'." + echo "Parliament helper: 'hermit-service status|install-unit'." echo "The first start asks for the provider and its API key and saves them." } diff --git a/scripts/bootstrap_termux.sh b/scripts/bootstrap_termux.sh index 35d999e..6c8bb7c 100755 --- a/scripts/bootstrap_termux.sh +++ b/scripts/bootstrap_termux.sh @@ -75,15 +75,17 @@ main() { echo "==> install to $PREFIX/bin" make install - cat >"$PREFIX/bin/cst-agent-update" <"$PREFIX/bin/hermit-update" </dev/null || \ + ln -sf hermit-update "$PREFIX/bin/cst-agent-update" echo - echo "OK: $("$PREFIX/bin/cst-agent" --version)" - echo "Run 'cst-agent' inside a project directory; upgrade later with 'cst-agent-update'." + echo "OK: $("$PREFIX/bin/hermit" --version 2>/dev/null || "$PREFIX/bin/cst-agent" --version)" + echo "Run 'hermit' inside a project directory; upgrade later with 'hermit-update'." echo "The first start asks for the provider and its API key and saves them." }