scripts: consolidate Agent deployment and remove Probe packages

Use Agent for native, container, systemd and OpenWrt installations and signed updates. Remove retired Probe deployment templates and smoke scripts.
This commit is contained in:
justme committed 2026-10-21 11:55:41 +08:00
1 parent ad5efc62ff
commit 016dbc2bbf
30 files changed
+96 -1206

No files matched your search

+17 -17
View File
@@ -1,5 +1,5 @@
#!/bin/sh
# Native OpenWrt Probe installer/updater. No container engine or .NET runtime.
# Native OpenWrt installer/updater for an Agent. No container engine or .NET runtime.
# Bootstrap: verify this script's published hash before running `sh install.sh install`.
# Trust/configuration live outside the collector's writable identity directory.
set -eu
@@ -9,7 +9,7 @@ ROOT=${MOSHIRO_NATIVE_ROOT:-/usr/lib/moshiro-native}
CONF=${MOSHIRO_NATIVE_CONF:-/etc/moshiro-native.conf}
STATE=${MOSHIRO_NATIVE_STATE:-/etc/moshiro-native-state}
STATUS=${MOSHIRO_NATIVE_STATUS:-/var/run/moshiro-update}
RUNTIME=${MOSHIRO_NATIVE_RUNTIME:-/var/run/moshiro-probe}
RUNTIME=${MOSHIRO_NATIVE_RUNTIME:-/var/run/moshiro-agent}
ACTION=${1:-install}
FEED=https://git.oeo.one/api/packages/justme/generic/moshiro-openwrt
CHANNEL=${MOSHIRO_CHANNEL:-release}
@@ -26,7 +26,7 @@ die() { echo "moshiro-openwrt: $*" >&2; exit 1; }
log() { echo "moshiro-openwrt: $*"; }
ctl() {
if [ "${MOSHIRO_NATIVE_TEST:-}" = 1 ]; then "$MOSHIRO_NATIVE_SERVICE" "$@"
else /etc/init.d/moshiro-probe "$@"; fi
else /etc/init.d/moshiro-agent "$@"; fi
}
field() { jsonfilter -i "$WORK/manifest.json" -e "@.$1"; }
download() {
@@ -121,7 +121,7 @@ verify() {
download "$FEED/$CHANNEL/manifest-$RID.sig" 1024 "$WORK/manifest.sig" || return 1
base64 -d "$WORK/manifest.sig" > "$WORK/signature" 2>/dev/null || return 1
openssl dgst -sha256 -verify "$STATE/release-key.pem" -signature "$WORK/signature" "$WORK/manifest.json" >/dev/null 2>&1 || return 1
[ "$(field schema)" = 1 ] && [ "$(field component)" = probe ] \
[ "$(field schema)" = 1 ] && [ "$(field component)" = agent ] \
&& [ "$(field channel)" = "$CHANNEL" ] && [ "$(field rid)" = "$RID" ] || return 1
HASH=$(field sha256); SIZE=$(field size); SEQ=$(field seq); VERSION=$(field version); PACKAGE=$(field package)
case "$HASH" in ''|*[!0-9a-f]*) return 1 ;; esac
@@ -130,7 +130,7 @@ verify() {
[ -n "$SEQ" ] && [ "${#SEQ}" -le 15 ] && [ -n "$SIZE" ] && [ "${#SIZE}" -le 9 ] && [ "$SIZE" -gt 0 ] && [ "$SIZE" -le "$MAX_BYTES" ] || return 1
case "$VERSION" in ''|*[!A-Za-z0-9.+_-]*) return 1 ;; esac
[ "${#VERSION}" -le 100 ] && printf '%s' "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9.-]+)?(\+[A-Za-z0-9.-]+)?$' || return 1
[ "$PACKAGE" = "probe-$RID-$HASH.tar.gz" ] || return 1
[ "$PACKAGE" = "agent-$RID-$HASH.tar.gz" ] || return 1
}
switch_to() {
@@ -168,7 +168,7 @@ stage() {
[ "$(sort -u "$WORK/members" | wc -l)" -eq "$(wc -l < "$WORK/members")" ] || return 1
while IFS= read -r member; do
case "$member" in
moshiro-probe|fleet-enroll|openwrt.sh|probe.init|updater.init) ;;
moshiro-agent|fleet-enroll|openwrt.sh|agent.init|updater.init) ;;
lib*.so.*) case "$member" in *[!A-Za-z0-9._+-]*) return 1 ;; esac ;;
*) return 1 ;;
esac
@@ -185,7 +185,7 @@ stage() {
if ! tar -xzf "$WORK/package.tar.gz" -C "$STAGED"; then
return 1
fi
for required in moshiro-probe fleet-enroll openwrt.sh probe.init updater.init; do
for required in moshiro-agent fleet-enroll openwrt.sh agent.init updater.init; do
[ -s "$STAGED/$required" ] || return 1
chmod 755 "$STAGED/$required" || return 1
done
@@ -206,7 +206,7 @@ healthy() {
version=$(jsonfilter -i "$health" -e '@.version' 2>/dev/null || true)
pid=$(jsonfilter -i "$health" -e '@.pid' 2>/dev/null || true)
at=$(jsonfilter -i "$health" -e '@.at' 2>/dev/null || echo 0)
active=$(ubus call service list '{"name":"moshiro-probe"}' 2>/dev/null | jsonfilter -e '@["moshiro-probe"].instances.*.pid' 2>/dev/null || true)
active=$(ubus call service list '{"name":"moshiro-agent"}' 2>/dev/null | jsonfilter -e '@["moshiro-agent"].instances.*.pid' 2>/dev/null || true)
case "$pid:$at" in ''|*[!0-9:]*) ;; *)
now=$(date +%s)
if [ "$version" = "$VERSION" ] && [ -n "$pid" ] && [ "$pid" = "$active" ] && [ "$at" -ge "$started" ] && [ $((now - at)) -le 30 ]; then
@@ -280,9 +280,9 @@ install() {
: "${MOSHIRO_SERVER:?panel URL required}" "${MOSHIRO_CODE:?join token required}" "${MOSHIRO_GENESIS:?trust root required}" "${MOSHIRO_CONTROLLERS:?owner required}"
case "$MOSHIRO_SERVER" in https://*) ;; *) die "panel must use HTTPS" ;; esac
case "$MOSHIRO_SERVER" in *[!A-Za-z0-9:/._-]*) die "unsupported panel URL characters" ;; esac
[ ! -e /etc/moshiro/node.json ] && [ ! -e /etc/moshiro/probe.json ] || die "existing native identity/config found; migrate explicitly instead of overwriting it"
[ ! -e /etc/moshiro/node.json ] && [ ! -e /etc/moshiro/agent.json ] || die "existing native identity/config found; migrate explicitly instead of overwriting it"
else
[ -f /etc/moshiro/node.json ] && [ -f /etc/moshiro/trust.json ] && [ -f /etc/moshiro/probe.json ] || die "saved identity/config incomplete; restore a backup before reinstalling"
[ -f /etc/moshiro/node.json ] && [ -f /etc/moshiro/trust.json ] && [ -f /etc/moshiro/agent.json ] || die "saved identity/config incomplete; restore a backup before reinstalling"
fi
acquire || die "another installation is running"
if [ ! -f "$STATE/release-key.pem" ]; then
@@ -301,7 +301,7 @@ KEY
uid=900
while awk -F: -v uid="$uid" '$3 == uid {found=1} END {exit !found}' /etc/passwd /etc/group; do uid=$((uid + 1)); done
echo "moshiro:x:$uid:" >> /etc/group
echo "moshiro:x:$uid:$uid:MoShiro:/var/run/moshiro-probe:/bin/false" >> /etc/passwd
echo "moshiro:x:$uid:$uid:MoShiro:/var/run/moshiro-agent:/bin/false" >> /etc/passwd
}
mkdir -p /etc/moshiro "$RUNTIME"
chmod 750 /etc/moshiro "$RUNTIME"
@@ -310,7 +310,7 @@ KEY
LD_LIBRARY_PATH="$ROOT/versions/$HASH" "$ROOT/versions/$HASH/fleet-enroll" \
--server "$MOSHIRO_SERVER" --join "$MOSHIRO_CODE" --name "${MOSHIRO_NAME:-$(uname -n)}" \
--identity-dir /etc/moshiro --genesis "$MOSHIRO_GENESIS" --controllers "$MOSHIRO_CONTROLLERS"
printf '{"fleet":{"server":"%s","identity_dir":"/etc/moshiro"},"limits":{"max_test_mbps":20,"max_total_pps":2000}}\n' "$MOSHIRO_SERVER" > /etc/moshiro/probe.json
printf '{"fleet":{"server":"%s","identity_dir":"/etc/moshiro"},"limits":{"max_test_mbps":20,"max_total_pps":2000}}\n' "$MOSHIRO_SERVER" > /etc/moshiro/agent.json
fi
chown -R moshiro:moshiro /etc/moshiro "$RUNTIME"
chmod 600 /etc/moshiro/node.key /etc/moshiro/tls.pfx
@@ -321,9 +321,9 @@ KEY
switch_to "versions/$HASH"
mkdir -p /usr/libexec
ln -sf "$ROOT/current/openwrt.sh" /usr/libexec/moshiro-openwrt
cp "$ROOT/current/probe.init" /etc/init.d/moshiro-probe
cp "$ROOT/current/updater.init" /etc/init.d/moshiro-probe-update
chmod 755 /etc/init.d/moshiro-probe /etc/init.d/moshiro-probe-update
cp "$ROOT/current/agent.init" /etc/init.d/moshiro-agent
cp "$ROOT/current/updater.init" /etc/init.d/moshiro-agent-update
chmod 755 /etc/init.d/moshiro-agent /etc/init.d/moshiro-agent-update
mkdir -p /lib/upgrade/keep.d
printf '/etc/moshiro/\n%s\n%s/\n' "$CONF" "$STATE" > /lib/upgrade/keep.d/moshiro
printf '%s\n' "$SEQ" > "$STATE/$CHANNEL.seq"
@@ -336,8 +336,8 @@ KEY
die "installed but not healthy; inspect logread -e moshiro, then rerun install (identity is preserved)"
fi
status up_to_date
/etc/init.d/moshiro-probe-update enable
/etc/init.d/moshiro-probe-update restart
/etc/init.d/moshiro-agent-update enable
/etc/init.d/moshiro-agent-update restart
log "installed $VERSION ($CHANNEL/$RID); automatic signed updates enabled"
}
@@ -1,16 +1,16 @@
#!/bin/sh /etc/rc.common
# procd service for moshiro-probe (OpenWrt). Installed as /etc/init.d/moshiro-probe.
# procd service for moshiro-agent (OpenWrt). Installed as /etc/init.d/moshiro-agent.
START=95
STOP=10
USE_PROCD=1
PROG=/usr/lib/moshiro/moshiro-probe
CONF=/etc/moshiro/probe.json
PROG=/usr/lib/moshiro/moshiro-agent
CONF=/etc/moshiro/agent.json
start_service() {
[ -f "$CONF" ] || {
logger -t moshiro-probe "$CONF not found: enroll first (install.sh probe --server URL --join TOKEN --name NAME)"
logger -t moshiro-agent "$CONF not found: enroll first (install.sh agent --server URL --join TOKEN --name NAME)"
return 1
}
procd_open_instance
@@ -4,12 +4,12 @@ STOP=10
USE_PROCD=1
start_service() {
[ -f /etc/moshiro/probe.json ] || return 1
mkdir -p /var/run/moshiro-probe
chown moshiro:moshiro /var/run/moshiro-probe
chmod 750 /var/run/moshiro-probe
[ -f /etc/moshiro/agent.json ] || return 1
mkdir -p /var/run/moshiro-agent
chown moshiro:moshiro /var/run/moshiro-agent
chmod 750 /var/run/moshiro-agent
procd_open_instance
procd_set_param command /usr/lib/moshiro-native/current/moshiro-probe --config /etc/moshiro/probe.json
procd_set_param command /usr/lib/moshiro-native/current/moshiro-agent --config /etc/moshiro/agent.json
procd_set_param env LD_LIBRARY_PATH=/usr/lib/moshiro-native/current MOSHIRO_UPDATE=openwrt
procd_set_param user moshiro
procd_set_param group moshiro