1
0
forked from finn/tinyboard

setup-hub.sh: fix sed delimiter and add file dep, onboard-spoke.sh: fix rclone append newline guard and keyscan key-type dedup, offboard-spoke.sh: fix crontab empty check and add timestamped backup, setup-network.sh: replace single bak with timestamped backup, compose.yaml: replace syncthing host network with explicit port bindings

This commit is contained in:
Justin Oros
2026-04-18 14:31:10 -07:00
parent f3792a38fc
commit 128b41ede9
6 changed files with 29 additions and 14 deletions

View File

@@ -88,15 +88,24 @@ fi
header "Removing Crontab Entry" header "Removing Crontab Entry"
EXISTING=$(crontab -l 2>/dev/null || true) EXISTING=$(crontab -l 2>/dev/null || true)
UPDATED=$(echo "$EXISTING" | grep -v "${SPOKE_NAME}-remote:" || true) if [ -z "$EXISTING" ]; then
if [ "$EXISTING" = "$UPDATED" ]; then
warn "No crontab entry found for $SPOKE_NAME." warn "No crontab entry found for $SPOKE_NAME."
elif [ -z "$UPDATED" ]; then
crontab -r 2>/dev/null || true
info "Crontab entry for $SPOKE_NAME removed (crontab now empty)."
else else
echo "$UPDATED" | crontab - CRONTAB_BACKUP="${HOME}/.config/tinyboard/crontab.$(date +%Y%m%d%H%M%S)"
info "Crontab entry for $SPOKE_NAME removed." mkdir -p "$(dirname "$CRONTAB_BACKUP")"
echo "$EXISTING" > "$CRONTAB_BACKUP"
info "Crontab backed up to $CRONTAB_BACKUP"
info "To restore: crontab $CRONTAB_BACKUP"
UPDATED=$(echo "$EXISTING" | grep -v "${SPOKE_NAME}-remote:" || true)
if [ "$EXISTING" = "$UPDATED" ]; then
warn "No crontab entry found for $SPOKE_NAME."
elif [ -z "$UPDATED" ]; then
crontab -r
info "Crontab entry for $SPOKE_NAME removed (crontab now empty)."
else
echo "$UPDATED" | crontab -
info "Crontab entry for $SPOKE_NAME removed."
fi
fi fi
header "Removing rclone Remote" header "Removing rclone Remote"

View File

@@ -78,7 +78,7 @@ info "Scanning spoke host key..."
KEYSCAN=$(ssh-keyscan -p "$TUNNEL_PORT" -H localhost 2>/dev/null) KEYSCAN=$(ssh-keyscan -p "$TUNNEL_PORT" -H localhost 2>/dev/null)
[ -n "$KEYSCAN" ] || die "Spoke not reachable on port $TUNNEL_PORT — is the tunnel up?" [ -n "$KEYSCAN" ] || die "Spoke not reachable on port $TUNNEL_PORT — is the tunnel up?"
while IFS= read -r KEYSCAN_LINE; do while IFS= read -r KEYSCAN_LINE; do
KEYSCAN_KEY=$(echo "$KEYSCAN_LINE" | awk '{print $3}') KEYSCAN_KEY=$(echo "$KEYSCAN_LINE" | awk '{print $2, $3}')
if ! grep -qF "$KEYSCAN_KEY" "$SSH_DIR/known_hosts" 2>/dev/null; then if ! grep -qF "$KEYSCAN_KEY" "$SSH_DIR/known_hosts" 2>/dev/null; then
echo "$KEYSCAN_LINE" >> "$SSH_DIR/known_hosts" echo "$KEYSCAN_LINE" >> "$SSH_DIR/known_hosts"
fi fi
@@ -125,6 +125,7 @@ header "Adding rclone Remote"
if grep -q "\[${SPOKE_NAME}-remote\]" "$RCLONE_CONF" 2>/dev/null; then if grep -q "\[${SPOKE_NAME}-remote\]" "$RCLONE_CONF" 2>/dev/null; then
warn "Remote [${SPOKE_NAME}-remote] already exists in $RCLONE_CONF, skipping." warn "Remote [${SPOKE_NAME}-remote] already exists in $RCLONE_CONF, skipping."
else else
[ -s "$RCLONE_CONF" ] && tail -c1 "$RCLONE_CONF" | grep -qv $'\n' && echo "" >> "$RCLONE_CONF"
cat >> "$RCLONE_CONF" <<EOF cat >> "$RCLONE_CONF" <<EOF
[${SPOKE_NAME}-remote] [${SPOKE_NAME}-remote]

View File

@@ -51,7 +51,7 @@ check_permissions() {
[ "$(id -u)" -eq 0 ] || die "Run as root" [ "$(id -u)" -eq 0 ] || die "Run as root"
check_deps ssh ssh-keygen systemctl useradd groupadd check_deps ssh ssh-keygen systemctl useradd groupadd file
header "TinyBoard Hub Setup" header "TinyBoard Hub Setup"
@@ -154,7 +154,7 @@ SSHD_CONF="/etc/ssh/sshd_config"
for DIRECTIVE in "GatewayPorts yes" "AllowTcpForwarding yes" "ClientAliveInterval 60" "ClientAliveCountMax 3"; do for DIRECTIVE in "GatewayPorts yes" "AllowTcpForwarding yes" "ClientAliveInterval 60" "ClientAliveCountMax 3"; do
KEY="${DIRECTIVE%% *}" KEY="${DIRECTIVE%% *}"
if grep -q "^$KEY" "$SSHD_CONF"; then if grep -q "^$KEY" "$SSHD_CONF"; then
sed -i "s/^$KEY.*/$DIRECTIVE/" "$SSHD_CONF" sed -i "s|^$KEY.*|$DIRECTIVE|" "$SSHD_CONF"
else else
echo "$DIRECTIVE" >> "$SSHD_CONF" echo "$DIRECTIVE" >> "$SSHD_CONF"
fi fi

View File

@@ -21,9 +21,11 @@ services:
container_name: spoke-syncthing container_name: spoke-syncthing
hostname: spoke-syncthing hostname: spoke-syncthing
restart: unless-stopped restart: unless-stopped
network_mode: host
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
ports:
- "127.0.0.1:8384:8384"
- "22000:22000"
volumes: volumes:
- /home/armbian/st:/var/syncthing - /home/armbian/st:/var/syncthing

View File

@@ -124,9 +124,12 @@ fi
header "Writing Netplan Config" header "Writing Netplan Config"
BACKUP_FILE="" BACKUP_FILE=""
if [ -f "$NETPLAN_FILE" ]; then if [ -f "$NETPLAN_FILE" ]; then
BACKUP_FILE="/root/$(basename "${NETPLAN_FILE}").bak" NETPLAN_BACKUP_DIR="/root/.config/tinyboard/netplan-backups"
mkdir -p "$NETPLAN_BACKUP_DIR"
BACKUP_FILE="$NETPLAN_BACKUP_DIR/$(basename "${NETPLAN_FILE}").$(date +%Y%m%d%H%M%S)"
cp "$NETPLAN_FILE" "$BACKUP_FILE" cp "$NETPLAN_FILE" "$BACKUP_FILE"
info "Backup saved to $BACKUP_FILE" info "Netplan config backed up to $BACKUP_FILE"
info "To restore: cp $BACKUP_FILE $NETPLAN_FILE && netplan apply"
fi fi
if $IS_WIFI; then if $IS_WIFI; then

View File

@@ -278,7 +278,7 @@ chmod 600 "$SSH_DIR/known_hosts"
HUB_KEYSCAN=$(ssh-keyscan -H "$HUB_HOST" 2>/dev/null) HUB_KEYSCAN=$(ssh-keyscan -H "$HUB_HOST" 2>/dev/null)
if [ -n "$HUB_KEYSCAN" ]; then if [ -n "$HUB_KEYSCAN" ]; then
while IFS= read -r KEYSCAN_LINE; do while IFS= read -r KEYSCAN_LINE; do
KEYSCAN_KEY=$(echo "$KEYSCAN_LINE" | awk '{print $3}') KEYSCAN_KEY=$(echo "$KEYSCAN_LINE" | awk '{print $2, $3}')
if ! grep -qF "$KEYSCAN_KEY" "$SSH_DIR/known_hosts" 2>/dev/null; then if ! grep -qF "$KEYSCAN_KEY" "$SSH_DIR/known_hosts" 2>/dev/null; then
echo "$KEYSCAN_LINE" >> "$SSH_DIR/known_hosts" echo "$KEYSCAN_LINE" >> "$SSH_DIR/known_hosts"
fi fi