New DXP4800Pro and trying to run install script with this command: curl -sSL https://get.tomsparkbox.com/install.sh | sudo bash Getting this error: bash: line 1: syntax error near unexpected token <' Appears to then dump the entire script as text. Am I doing something wrong? Not nix literate at all, so appreciate any help!
13 replies
tomspark wrote:
Server side is fine on my end (just curl-checked install.sh — HTTP 200, real script). When bash sees syntax error near unexpected token '<' on line 1 of a piped script, the most common cause is that something between you and Cloudflare (router captive portal, ISP filter, corporate proxy) intercepted the request and returned an HTML error page that starts with <!DOCTYPE html — hence the <. Quick check: download to a file first instead of piping straight to bash: curl -sSL https://get.tomsparkbox.com/install.sh -o install.sh head -3 install.sh If the first line is !/usr/bin/env bash, you're good — run sudo bash install.sh. If it's <!DOCTYPE html or similar, your network is rewriting the response and we'll need to figure out where (often: switching off pi-hole/router DNS-rewriting just for that one curl, or trying from a different network).
JustJumpIn wrote:
I am running into the same issue on proxmox VM Ubuntu server 24.04.4 Running : curl -sSL https://get.tomsparkbox.com/install.sh | sudo bash as root results in the same syntax error as well as html dump. I have standard Fiber internet from my ISP with default router settings. Port 443 outbound is open. I have read through documentation but still cannot figure out why I can't begin this install. Sorry for wasting your time on this stupid issue, but if you or anyone else sees this, I would love any assistance.
tomspark wrote:
@JustJumpIn — not a stupid issue at all, you're the second person to hit this and the cause is the same as notabubba's. Something between your VM and our R2-via-Cloudflare returned HTML instead of the script — bash hit < (start of <!DOCTYPE html) and choked on line 1. Quick diagnostic — download to a file first instead of piping straight to bash: curl -sSL https://get.tomsparkbox.com/install.sh -o install.sh head -3 install.sh If line 1 says !/usr/bin/env bash you're good — run sudo bash install.sh. If it's HTML, paste the first 20 lines and I'll see what intercepted. Two common culprits on a Proxmox-host setup: an ad-block/DNS-rewriting layer on the host doing TLS interception, or a Cloudflare bot challenge against your VM's outbound IP.
JustJumpIn wrote:
Hi Tom, appreciate you taking the time for this. I was able to download the install.sh. Running head, it looks like I am failing on Cloudflare's bot challenge. Can you advise how to bypass this? <!DOCTYPE html<html lang="en-US"<head<titleJust a moment...</title<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"<meta http-equiv="X-UA-Compatible" content="IE=Edge"<meta name="robots" content="noindex,nofollow"<meta name="viewport" content="width=device-width,initial-scale=1"<meta http-equiv="content-security-policy" content="default-src &39;none&39;; script-src &39;nonce-tuSFbNxxUC7qEV7VLlyVLT&39; &39;unsafe-eval&39; https://challenges.cloudflare.com; script-src-attr &39;none&39;; style-src &39;unsafe-inline&39;; img-src &39;self&39; https://challenges.cloudflare.com; connect-src &39;self&39; https://challenges.cloudflare.com; frame-src &39;self&39; https://challenges.cloudflare.com blob:; child-src &39;self&39; https://challenges.cloudflare.com blob:; worker-src blob:; form-action http: https:; base-uri &39;self&39;"<style{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:313131;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}.main-content{margin:8rem auto;padding-left:1.5rem;max-width:60rem}@media (width <= 720px){.main-content{margin-top:4rem}}challenge-error-text{background-image:url
tomspark wrote:
Confirmed — Just a moment... is Cloudflare's bot-fight challenge interstitial. It's flagging your VM's outbound IP and serving the JS challenge instead of the script. Not something you can bypass from your end with curl alone, but two clean workarounds: 1. Download install.sh from a different machine that has a less-flagged IP (your laptop, phone hotspot, anything that's not a VPS/datacenter range) and scp it to the VM: scp install.sh user@<vm-ip:~/ Then sudo bash install.sh on the VM. 2. Run install.sh from a VPN endpoint with a clean IP — Tailscale exit node, Surfshark, etc. On my side, this is the second confirmed report and I need to flip off bot-fight-mode for the install.sh path so future fresh installs from datacenter IPs don't hit this. Thanks for the head output — that's the gold-standard repro that pinned it.
JustJumpIn wrote:
Got a clean download of the shell script on the VM and ran it. Started the install but failed at the download step. Would I need to do the whole install on a different network/or new IP? Wondering if Im still getting challenged on additional download steps? curl: (22) The requested URL returned error: 403 [SparkBox] Failed to download SparkBox. Check your internet connection. [SparkBox] URL: https://get.tomsparkbox.com/releases/latest/sparkbox.tar.gz
tomspark wrote:
Yeah, painful but expected — install.sh fetches the tarball from the same CF-fronted host, so every download inside the install hits the same bot-fight gate. Your scp workaround only got past the first file. Until I flip bot-fight-mode off on the CF dashboard (working on it), you need a clean outbound IP for the entire install duration. Easiest path: install Tailscale on the VM with an exit node on a machine with a clean residential IP (laptop, phone hotspot), point the VM at the exit, then re-run install.sh. Once it finishes, drop the exit node. Massive thanks for sticking through it — you've helped pin this down to 'CF bot-fight blocking /install.sh AND /releases/ for datacenter IPs'. Exactly the fix I need to push on the CF side.
JustJumpIn wrote:
Ill take a look at setting up tailscale tomorrow as its a bit late for me. I will provide an update when I can! Very much appreciate your time and effort into making this project as well as helping all of us out. I will get this working; Im determined.
tomspark wrote:
Get some sleep — you've already done the hard part by isolating the CF challenge as the actual blocker. Tailscale exit-node setup tomorrow is just a checklist. Yell back here whenever you're ready to retry; I'll be tracking the thread.
JustJumpIn wrote:
Hi Tom, Tailscale is installed and I was able to SCP the install script to the VM. Using tailscale exit node I was able to run the installer successfully. Few things I want to mention (forgive me if these are already mentioned elsewhere). 1. When running the install script, at the point where I was able to choose which apps I wanted to install (custom options), the top 6 or 7 options were cutoff the top of the screen and I was not able to see what they were. Not sure if this is just on my setup or others have faced this. I eventually cancelled the install and choose the Full Install option to try everything. (If you are concerned with this "bug" I can try to replicate and give you a write-up/screenshots. Let me know) 2. After the script completed, I was NOT prompted to input a bootstrap token; I was only asked to input my dashboard password that I had manually created through the install. This seemed to have deviated from the documentation but could also have been an update you pushed and this is expected behavior. 3. I was running into an issue where on the Dashboard initialization screen when "Get Started" was selected, an error message would show in the top right saying something along the lines of "Could not save your data. Make sure Docker is running and /opt/sparkbox has enough storage". I went to the documentation and followed the PUID and Docker Socket Permission Issues section to which running both of those seems to have fixed the error and I was able to finally access the Dashboard. Unsure if it was the result of executing one or both sections but just throwing that out there. .
tomspark wrote:
Awesome — three real signals here, addressing in order: 1) Wizard options cut off the top: not something I've seen reported before. Yes please, a screenshot + your terminal dimensions (rows/cols) would let me reproduce. The select-menu paging logic doesn't currently scroll, so on tall lists with a short terminal the top items go off-screen. 2) No bootstrap-token prompt: that's expected when you skip licensing during install — the dashboard's first-run flow swaps the bootstrap-token gate for a direct password create. The docs predate the license-skip path; queued to update. 3) The "Could not save your data, make sure Docker is running" red banner — that's the SAME bug another user (siv) hit tonight on a WSL2 install. Root cause is .env being root-owned after install.sh writes it; dashboard container (UID 1000) can't write back to it during setup-apply. Shipped v1.6.112 about 10 minutes ago that chowns .env at install time. Your PUID + docker-socket workaround healed it manually; new fresh installs on v1.6.112+ won't hit it. Thank you for the rigor on the writeup — that's two confirmed reports in one tick, which is exactly the pattern that escalates priority.
JustJumpIn wrote:
1. Terminal size 50x160 according to stty size command my environment: Proxmox VM Ubuntu server 24.04.4 using noVNC console steps to reproduce: a. run installer until Wizard opens b. Select OK as starting screen c. Select Custom for what will you use this server for question d. Enter IP - Next e: Enter timezone - Next f. Options show on next screen with top couple options cut off per screenshot ------------------------------------------ 2. Glad its expected behavior then! 3. Glad you were able to find root cause and push an update for it so quickly!
tomspark wrote:
Perfect repro, thanks. 50 rows × 160 cols is enough in absolute terms, but the wizard's select-menu doesn't subtract the rows the question header + timezone reminder eat — so it ends up drawing items past the top of the visible area instead of scrolling its viewport down. Logged as a class-level UX bug; v1.7.x fix is a viewport offset that respects the header row count + scroll indicators. Workaround in the meantime: noVNC has a fullscreen toggle that gives you more rows, or run the installer over plain SSH instead of the console (SSH terminals default to 50+ rows of usable space). Or just keep doing what you did — Full Install plus opt-out via dashboard Apps → Profiles is the same end state with less click-through.