somratpro commited on
Commit
ddb17fb
Β·
1 Parent(s): 0f21014

fix: use default value expansion for environment variables to prevent unbound variable errors in start.sh

Browse files
Files changed (1) hide show
  1. start.sh +13 -13
start.sh CHANGED
@@ -118,7 +118,7 @@ chmod 700 /home/node/.openclaw
118
  chmod 700 /home/node/.openclaw/credentials
119
 
120
  # ── Validate HF token (if provided) ──
121
- if [ -n "$HF_TOKEN" ]; then
122
  echo "πŸ”‘ Validating HF token..."
123
  HF_AUTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $HF_TOKEN" https://huggingface.co/api/repos/create --max-time 10 2>/dev/null || echo "000")
124
  if [ "$HF_AUTH_STATUS" = "401" ]; then
@@ -261,7 +261,7 @@ if [ "$BROWSER_SHOULD_ENABLE" = "true" ]; then
261
  fi
262
 
263
  # Control UI origin (allow HF Space URL for web UI access)
264
- if [ -n "$SPACE_HOST" ]; then
265
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = [\"https://${SPACE_HOST}\"]")
266
  fi
267
 
@@ -269,35 +269,35 @@ fi
269
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.dangerouslyDisableDeviceAuth = true")
270
 
271
  # Password auth (optional β€” simpler alternative to token for casual users)
272
- if [ -n "$OPENCLAW_PASSWORD" ]; then
273
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.auth.mode = \"password\" | .gateway.auth.password = \"$OPENCLAW_PASSWORD\"")
274
  fi
275
 
276
  # Trusted proxies (optional β€” fixes "Proxy headers detected from untrusted address" on HF Spaces)
277
  # Set TRUSTED_PROXIES as comma-separated IPs/CIDRs, e.g. "10.20.31.87,10.20.26.157"
278
  # Loopback proxies stay trusted by default so the local dashboard reverse proxy works correctly.
279
- if [ -n "$TRUSTED_PROXIES" ]; then
280
  PROXIES_JSON=$(echo "$TRUSTED_PROXIES" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
281
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.trustedProxies += $PROXIES_JSON | .gateway.trustedProxies |= unique")
282
  fi
283
 
284
  # Allowed origins (optional β€” lock down Control UI to specific URLs)
285
  # Set ALLOWED_ORIGINS as comma-separated URLs, e.g. "https://your-space.hf.space"
286
- if [ -n "$ALLOWED_ORIGINS" ]; then
287
  ORIGINS_JSON=$(echo "$ALLOWED_ORIGINS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
288
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = $ORIGINS_JSON")
289
  fi
290
 
291
  # Telegram (supports multiple user IDs, comma-separated)
292
- if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
293
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq '.plugins.entries.telegram = {"enabled": true}')
294
  export TELEGRAM_BOT_TOKEN="$TELEGRAM_BOT_TOKEN"
295
 
296
- if [ -n "$TELEGRAM_USER_IDS" ]; then
297
  # Convert comma-separated IDs to JSON array
298
  IDS_JSON=$(echo "$TELEGRAM_USER_IDS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
299
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": $IDS_JSON}")
300
- elif [ -n "$TELEGRAM_USER_ID" ]; then
301
  # Single user (backward compatible)
302
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": [\"$TELEGRAM_USER_ID\"]}")
303
  fi
@@ -324,7 +324,7 @@ echo " β”‚ πŸ“‹ Configuration Summary β”‚"
324
  echo " β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€"
325
  printf " β”‚ %-40s β”‚\n" "OpenClaw: $OPENCLAW_DISPLAY_VERSION"
326
  printf " β”‚ %-40s β”‚\n" "Model: $LLM_MODEL"
327
- if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
328
  printf " β”‚ %-40s β”‚\n" "Telegram: βœ… enabled"
329
  else
330
  printf " β”‚ %-40s β”‚\n" "Telegram: ❌ not configured"
@@ -344,12 +344,12 @@ printf " β”‚ %-40s β”‚\n" "Backup: βœ… ${BACKUP_DATASET:-huggingclaw-backup} (
344
  else
345
  printf " β”‚ %-40s β”‚\n" "Backup: ❌ not configured"
346
  fi
347
- if [ -n "$OPENCLAW_PASSWORD" ]; then
348
  printf " β”‚ %-40s β”‚\n" "Auth: πŸ”‘ password"
349
  else
350
  printf " β”‚ %-40s β”‚\n" "Auth: πŸ” token"
351
  fi
352
- if [ -n "$SPACE_HOST" ]; then
353
  printf " β”‚ %-40s β”‚\n" "Control UI: https://${SPACE_HOST}/app"
354
  printf " β”‚ %-40s β”‚\n" "Dashboard: https://${SPACE_HOST}"
355
  fi
@@ -358,14 +358,14 @@ if [ -n "${HF_TOKEN:-}" ]; then
358
  SYNC_STATUS="βœ… every ${SYNC_INTERVAL:-180}s"
359
  fi
360
  printf " β”‚ %-40s β”‚\n" "Auto-sync: $SYNC_STATUS"
361
- if [ -n "$WEBHOOK_URL" ]; then
362
  printf " β”‚ %-40s β”‚\n" "Webhooks: βœ… enabled"
363
  fi
364
  echo " β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜"
365
  echo ""
366
 
367
  # ── Trigger Webhook on Restart ──
368
- if [ -n "$WEBHOOK_URL" ]; then
369
  echo "πŸ”” Sending restart webhook..."
370
  curl -s -X POST "$WEBHOOK_URL" \
371
  -H "Content-Type: application/json" \
 
118
  chmod 700 /home/node/.openclaw/credentials
119
 
120
  # ── Validate HF token (if provided) ──
121
+ if [ -n "${HF_TOKEN:-}" ]; then
122
  echo "πŸ”‘ Validating HF token..."
123
  HF_AUTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $HF_TOKEN" https://huggingface.co/api/repos/create --max-time 10 2>/dev/null || echo "000")
124
  if [ "$HF_AUTH_STATUS" = "401" ]; then
 
261
  fi
262
 
263
  # Control UI origin (allow HF Space URL for web UI access)
264
+ if [ -n "${SPACE_HOST:-}" ]; then
265
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = [\"https://${SPACE_HOST}\"]")
266
  fi
267
 
 
269
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.dangerouslyDisableDeviceAuth = true")
270
 
271
  # Password auth (optional β€” simpler alternative to token for casual users)
272
+ if [ -n "${OPENCLAW_PASSWORD:-}" ]; then
273
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.auth.mode = \"password\" | .gateway.auth.password = \"$OPENCLAW_PASSWORD\"")
274
  fi
275
 
276
  # Trusted proxies (optional β€” fixes "Proxy headers detected from untrusted address" on HF Spaces)
277
  # Set TRUSTED_PROXIES as comma-separated IPs/CIDRs, e.g. "10.20.31.87,10.20.26.157"
278
  # Loopback proxies stay trusted by default so the local dashboard reverse proxy works correctly.
279
+ if [ -n "${TRUSTED_PROXIES:-}" ]; then
280
  PROXIES_JSON=$(echo "$TRUSTED_PROXIES" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
281
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.trustedProxies += $PROXIES_JSON | .gateway.trustedProxies |= unique")
282
  fi
283
 
284
  # Allowed origins (optional β€” lock down Control UI to specific URLs)
285
  # Set ALLOWED_ORIGINS as comma-separated URLs, e.g. "https://your-space.hf.space"
286
+ if [ -n "${ALLOWED_ORIGINS:-}" ]; then
287
  ORIGINS_JSON=$(echo "$ALLOWED_ORIGINS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
288
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".gateway.controlUi.allowedOrigins = $ORIGINS_JSON")
289
  fi
290
 
291
  # Telegram (supports multiple user IDs, comma-separated)
292
+ if [ -n "${TELEGRAM_BOT_TOKEN:-}" ]; then
293
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq '.plugins.entries.telegram = {"enabled": true}')
294
  export TELEGRAM_BOT_TOKEN="$TELEGRAM_BOT_TOKEN"
295
 
296
+ if [ -n "${TELEGRAM_USER_IDS:-}" ]; then
297
  # Convert comma-separated IDs to JSON array
298
  IDS_JSON=$(echo "$TELEGRAM_USER_IDS" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | jq -R . | jq -s .)
299
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": $IDS_JSON}")
300
+ elif [ -n "${TELEGRAM_USER_ID:-}" ]; then
301
  # Single user (backward compatible)
302
  CONFIG_JSON=$(echo "$CONFIG_JSON" | jq ".channels.telegram = {\"dmPolicy\": \"allowlist\", \"allowFrom\": [\"$TELEGRAM_USER_ID\"]}")
303
  fi
 
324
  echo " β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€"
325
  printf " β”‚ %-40s β”‚\n" "OpenClaw: $OPENCLAW_DISPLAY_VERSION"
326
  printf " β”‚ %-40s β”‚\n" "Model: $LLM_MODEL"
327
+ if [ -n "${TELEGRAM_BOT_TOKEN:-}" ]; then
328
  printf " β”‚ %-40s β”‚\n" "Telegram: βœ… enabled"
329
  else
330
  printf " β”‚ %-40s β”‚\n" "Telegram: ❌ not configured"
 
344
  else
345
  printf " β”‚ %-40s β”‚\n" "Backup: ❌ not configured"
346
  fi
347
+ if [ -n "${OPENCLAW_PASSWORD:-}" ]; then
348
  printf " β”‚ %-40s β”‚\n" "Auth: πŸ”‘ password"
349
  else
350
  printf " β”‚ %-40s β”‚\n" "Auth: πŸ” token"
351
  fi
352
+ if [ -n "${SPACE_HOST:-}" ]; then
353
  printf " β”‚ %-40s β”‚\n" "Control UI: https://${SPACE_HOST}/app"
354
  printf " β”‚ %-40s β”‚\n" "Dashboard: https://${SPACE_HOST}"
355
  fi
 
358
  SYNC_STATUS="βœ… every ${SYNC_INTERVAL:-180}s"
359
  fi
360
  printf " β”‚ %-40s β”‚\n" "Auto-sync: $SYNC_STATUS"
361
+ if [ -n "${WEBHOOK_URL:-}" ]; then
362
  printf " β”‚ %-40s β”‚\n" "Webhooks: βœ… enabled"
363
  fi
364
  echo " β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜"
365
  echo ""
366
 
367
  # ── Trigger Webhook on Restart ──
368
+ if [ -n "${WEBHOOK_URL:-}" ]; then
369
  echo "πŸ”” Sending restart webhook..."
370
  curl -s -X POST "$WEBHOOK_URL" \
371
  -H "Content-Type: application/json" \