I've been running/testing sparkbox on a Debian13 VM. Everything has been great with a few minor hiccups. Ready to install sparkbox on it's real home... a QNAP NAS TS-464 pm running an Intel Celeron N5095 with 8GB memory. It is on the same local network. I have made a backup. Do I just install fresh with the curl command? Do I move the .env file over before I run the curl command? Any other concerns before I start?
17 replies
Chris wrote:
Good news — having the backup already is the part most people miss. Yes, install fresh on the QNAP first: run curl -sSL https://get.sparkbox.app/install.sh | sudo bash (it will warn the box is unsupported — normal, it still installs). Do not move the .env by hand: the backup already contains it, and copying it early would point the new install back at the old VM. Instead, copy the backup file across and run sudo sparkbox restore /path/to/sparkbox-backup-TIMESTAMP.tar.gz then sudo sparkbox up. Two things for QNAP: its web UI already uses ports 8080 and 80/443, which SparkBox wants for qBittorrent and Nginx Proxy Manager, so plan to move one side. And your backup does not include media files — copy those to your big volume and set the dashboard Media Root to match.
Wolf21 wrote:
just for clarification... what does this mean: "Two things for QNAP: its web UI already uses ports 8080 and 80/443, which SparkBox wants for qBittorrent and Nginx Proxy Manager, so plan to move one side." Do you mean that I should adjust sparkbox to a different port, or adjust qnap to a different port? I'm concern that if I move qnap, then I'll be chasing port assignments every time qnap gets a firmware update, since this seems to be a known problem with qnap (it doesn't always honor the new port assignments on some firmware upgrades.) Can I change the port assignment for sparkbox instead? if sow, how and at what step during the install?
Chris wrote:
Good news — you do not need to move QNAP's ports, so that firmware-update worry disappears. Correcting my earlier note: qBittorrent already runs on 8089, not 8080, so it never fights QTS. And the installer detects QTS holding 80/443 and switches the proxy manager to 8080/8444 on its own — no Control Panel changes needed. Just run the install as-is. If you ever want a different port, it is set in the .env file in the install directory afterwards, followed by sudo sparkbox up — not during the curl step. One watch-item: if the proxy-manager tile won't start after install, that's a known QNAP port overlap Tom is aware of — tell me and I'll flag it.
Wolf21 wrote:
Just checked QNAP.... http://ip:8080 connects to the system web page https://ip:443 connects to the system web page. QNAP firmware change log shows they have fixed the system port and https port - which now honors changes through firmware upgrades. Is it okay to move the qnap system port to something like 6060 and the https port to 6443?
Chris wrote:
Good catch — you found the exact overlap. QNAP's own web page sits on 8080, which is the same port SparkBox's proxy manager would take on a QNAP, so you're right to flag it. Moving QNAP's ports is safe too (and as you found, QNAP now keeps them through updates), but you don't need to. Leave QNAP alone: after the install finishes, open the .env file in the install folder and change HTTPPORT=8080 to HTTPPORT=8088, leave HTTPSPORT=8444, then run sudo sparkbox up. I've flagged this QNAP overlap to Tom so the installer can pick a free port by itself.
Wolf21 wrote:
Ran into a problem right off... running the curl install command "curl -fsSL https://get.tomsparkbox.com/install.sh | sudo bash" gave an error: bash: line 643: ${ver,,}: bad substitution curl: (23) Failure writing output to destination I checked to make sure Docker was reachable: [jmladmin@NAS4 arr-stack]$ which docker /share/CACHEDEV1DATA/.qpkg/container-station/bin/docker I then checked for the docker version: [jmladmin@NAS4 arr-stack]$ docker --version Docker version 27.1.2-qnap8, build b8cbe19 looking at the code that threw the error, it appears that the "ver" isn't being created?
Chris wrote:
This one is on our installer, not your QNAP or Docker — you ran the right command. The line it dies on uses a bash 4+ lowercase feature that the older bash bundled on your QNAP does not support, so it aborts with bad substitution and curl reports (23) because bash exited mid-pipe. Your Docker 27.1.2 is fine. Could you run bash --version in that same SSH session and paste the first line? It should show 3.x, which confirms this. I have flagged it to Tom and the team so the installer gets corrected for the older bash on QNAP — I will not hand you a fragile workaround on a brand-new NAS. Once it is fixed, re-running your same curl command will pick up the corrected installer.
Wolf21 wrote:
[jmladmin@NAS4 arr-stack]$ bash --version GNU bash, version 3.2.57(1)-release (x8664-QNAP-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.
Chris wrote:
Exactly the confirmation I was after — bash 3.2.57 is the older bash, and it's what halts the installer. Your QNAP and Docker (27.1.2) are fine, nothing to change there. The installer has one line that only newer bash understands, which is the "bad substitution" you saw. We've found that line and the corrected installer is on its way. Nothing to do on your end — when it's live, re-run your same curl command and it'll grab the fixed version.
Wolf21 wrote:
was able to install using the new script obtained from the curl install command. It didn't show any errors: [SparkBox] Downloading SparkBox... [SparkBox] Verifying release integrity... [SparkBox] SHA256 digest verified [SparkBox] ed25519 signature verified [SparkBox] SparkBox downloaded to /share/CACHEDEV1DATA/Container/arr-stack [SparkBox] SparkBox installed to /share/CACHEDEV1DATA/Container/arr-stack [SparkBox] NAS mode: skipping firewall configuration. [SparkBox] Configure port forwarding through your NAS or router admin panel. [SparkBox] Setting up SparkBox — you'll finish in your browser (the setup wizard runs in the dashboard). [SparkBox] Bringing up core services so the dashboard is reachable... However, the terminal messages show the dashboard is reachable, but failed to show on which port! First, I tried this: [admin@NAS4 arr-stack] sparkbox status | grep dashboard ● dashboard (enabled) - TomSparkBox Dashboard So, dashboard is live, now to try to find the correct port... tried http://192.168.170.32:8443/ and https://192.168.170.32:8443/ - Nope. failed to connect tried http://192.168.170.32:8080 - Nope. That's the QNAP Web UI tried http://192.168.170.32:8444/ and https://192.168.170.32:8444/ - Nope. failed to connect tried https://192.168.170.32:443 - Nope. That's the QNAP Web UI Then I remembered there is a docotr command, so I ran it thinking maybe it will provide the port. Nope - no information available: admin@NAS4 arr-stack] sparkbox doctor / | | | | ) \ \| ' \ / | '| |/ / \ / \ \/ / ) | |) | (| | | | <| |) | () < |/| ./ \,|| ||\\/ \//\\ || SparkBox v1.6.646 - Self-Hosted Privacy Stack Created by Tom Spark | youtube.com/@TomSparkReviews Environment: NAS (generic) SparkBox Doctor Running diagnostics... [Install location] [OK] SparkBox is installed at: /share/CACHEDEV1DATA/Container/arr-stack [OK] Settings file (.env): /share/CACHEDEV1DATA/Container/arr-stack/.env Okay, I'll take a look at the .env to see if anything is in there... Nope - nothing to indicate the port, just some keys. Tried http://192.168.170.32:8088/ - Nope. failed to connect So, last effort is to modify the .env to HTTPPORT=8088 and try sudo sparkbox up: I ran sparkbox down. It threw some errors, but gave an [OK] SparkBox stopped. I then edited the .env file to add HTTPPORT=8088 and saved I then tried to bring sparkbox back up and got another bad substitution error: [admin@NAS4 arr-stack] sparkbox up /usr/local/bin/sparkbox: line 3529: ${v,,}: bad substitution [admin@NAS4 arr-stack] So, now I'm out of ideas of what to try next just to get the dashboard in my web browser. Also, I'm ssh into QNAP as an user with admin privileges. running id shows: uid=1000(jmladmin) gid=100(everyone) groups=0(administrators),100(everyone) However, I couldnt run the install script since it wanted sudo. So I changed to sudo and the install seemed to work ok (except for not having the port number for the dashboard). However, when editing the .env file, I thought it was odd that it only contained a few lines that appear to be api keys. Nothing showed as to what the install directory was or the data directory. Seemed odd. When changed to sudo, running id shows: uid=0(admin) gid=0(administrators) groups=0(administrators),100(everyone) So, How do I find what the port number is for the dashboard, and the 'bad substitution' needs to be fixed in sparkbox up Thanks!
Chris wrote:
You've found the same issue in a second place, and it's still ours - not your QNAP. The installer got corrected, but the sparkbox up command itself still carries that same old-bash line, which is the bad substitution at line 3529. Because it can't finish, the stack never comes back up, so nothing is listening yet. Your dashboard's address is http://your-box-ip:8443 - that's the default port, nothing to set yourself - and it'll answer the moment sparkbox up runs cleanly. I've flagged the sparkbox command to Tom for the same fix the installer just got. Nothing more to try on your end right now.
Wolf21 wrote:
You'll notice in my notes that when the sparkbox was installed, it showed that the dashboard was up. I confirmed that by running sparkbox status | grep dashboard... which showed it was up and running. I then tried all of the possible ports including 8443, and none worked. It was only when I tried to modify the .env file as you suggested in one of your replies that I ran into the problem of trying to bring sparkbox back up, after I took it down to edit the .env file. So, even when Tom fixes the sparkbox up command, I still don't have the port number that it is running on? shouldn't this info be in the sparkbox .env file, or in the sparkbox doctor command? As another test, I removed and deleted everything and started over. Sparkbox status shows dashboard and core is up (green circle). I tried ip:8443 and there isn't a connection. so there seems to be a port conflict still on the qnap install.
Chris wrote:
The port is 8443 — you've been testing the right one, and it won't change. You're also right that it should be listed in the .env and in doctor, and that near-empty .env is the giveaway: a normal SparkBox .env lists the dashboard port and its data folder, but the same old-bash bug that stops sparkbox up also cuts off the step that writes those lines. So the green circle is enabled, not actually listening — on QNAP it never finishes starting. I won't hand you a fragile workaround on a brand-new NAS; the sparkbox command itself is the one remaining fix after the installer, and it's already with Tom.
Wolf21 wrote:
New day and saw a couple of updates were posted, with the ver fixed. so trying again... Deleted everything and pulled a fresh install. Ran the install and basically got the same messages as previous attempts. dashboard and core show that it's up. tried the url using port 8443 which results in no connection. tried sparkbox down and it showed an error: [admin@NAS4 arr-stack] sparkbox down [INFO] Stopping SparkBox... /usr/local/bin/sparkbox: line 3508: ${v,,}: bad substitution Tried sparkbox up and it showed an error: [admin@NAS4 arr-stack] sparkbox up /usr/local/bin/sparkbox: line 3529: ${v,,}: bad substitution looked to see what version i'm on: [admin@NAS4 arr-stack] cat VERSION 1.6.646 the sparkbox executable shows So this version should have the 'fix'. next I looked to see what ports are being looked at (for clarification, the qnap is only running plex and has my media on it): [admin@NAS4 arr-stack] netstat -tulpn | grep LISTEN tcp 0 0 0.0.0.0:32469 0.0.0.0: LISTEN 1429/Plex DLNA Serv tcp 0 0 127.0.1.1:53 0.0.0.0: LISTEN 10825/dnsmasq tcp 0 0 10.0.5.1:53 0.0.0.0: LISTEN 10825/dnsmasq tcp 0 0 10.0.3.1:53 0.0.0.0: LISTEN 10825/dnsmasq tcp 0 0 10.0.7.1:53 0.0.0.0: LISTEN 10825/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 21541/sshd tcp 0 0 127.0.0.1:32600 0.0.0.0: LISTEN 1416/Plex Tuner Ser tcp 0 0 127.0.0.1:5050 0.0.0.0: LISTEN 1473/python tcp 0 0 0.0.0.0:445 0.0.0.0: LISTEN 19401/smbd tcp 0 0 127.0.0.1:58080 0.0.0.0: LISTEN 20263/thttpd tcp 0 0 0.0.0.0:1320 0.0.0.0: LISTEN 1429/Plex DLNA Serv tcp 0 0 0.0.0.0:139 0.0.0.0: LISTEN 19401/smbd tcp 0 0 127.0.0.1:44587 0.0.0.0: LISTEN 30293/Plex Plug-in tcp 0 0 127.0.0.1:3310 0.0.0.0: LISTEN 22450/mariadbd tcp 0 0 127.0.0.1:3311 0.0.0.0: LISTEN 22450/mariadbd tcp 0 0 127.0.0.1:32401 0.0.0.0: LISTEN 30058/Plex Media Se tcp 0 0 ::1:53 ::: LISTEN 10825/dnsmasq tcp 0 0 :::22 ::: LISTEN 21541/sshd tcp 0 0 :::443 ::: LISTEN 3373/fcgi-pm tcp 0 0 :::445 ::: LISTEN 19401/smbd tcp 0 0 :::2376 ::: LISTEN 4349/dockerd tcp 0 0 :::139 ::: LISTEN 19401/smbd tcp 0 0 :::32400 ::: LISTEN 30058/Plex Media Se tcp 0 0 :::8080 ::: LISTEN 2990/fcgi-pm So, the result is that sparkbox shows that the dashboard and core is up, but netstat doesn't show any ports being used for sparkbox. Also, looking at the .env, only a few lines that show some keys (I have replaced the actual keys with {key} for posting) SparkBox configuration Generated by non-interactive install on 2026-08-29T08:54:05-0600 --- Core paths + identity --- SBROOT=/share/CACHEDEV1DATA/Container/arr-stack SBSESSIONSECRET={key} SBBACKUPKEY={key} SBBOOTSTRAPTOKEN={key} So, still stuck on the install with no dashboard.
Chris wrote:
Good news — this one is fixed now. The version you are on, 1.6.646, still has the broken line; Tom shipped the fix in v1.6.647, which is why it kept dying even though the number looked close. The sparkbox command was using a trick the older bash on QNAP cannot read, so up and down stopped before the stack ever started — that is why no port opened and the .env stayed nearly empty. One step gets you the fixed copy: run sudo sparkbox upgrade. Use upgrade, not update — update only refreshes the apps, while upgrade pulls v1.6.647 with the corrected sparkbox command and then starts everything. Once it finishes, open http://your-box-ip:8443 and the dashboard should finally be there.
Wolf21 wrote:
Kinda worked. I now have access to the dashboard at port 8443. Was able to log in and create a password. However, the dashboard now says it doesn't see docker, and is waiting for the service to start. Docker in the conatain app on QNAP see sparkbox and shows that it is running. So... more issues for this qnap model. I think I'm coming to the conclusion that on this model/firmware of qnap, even if I eventually chase down all of the gotchas and get it working, at some point either during a qnap firmware upgrade or a new sparkbox upgrade, I'm going to be constantly chasing errors and unique qnap system issues in order to get a working sparkbox - it may work this week, but it will probably throw more errors after an upgrade. I may explore running sparkbox on a different box (I really didn't want to have to deal with another system) in order to have sparkbox running. I may just keep in on my debian 13 vm since that install seems to be working. I'll look into ugreen and maybe sell the qnap. Thank you to you and Tom for working through some of the qnap issues! Support on these issues have been great!
Chris wrote:
That's a fair read — three separate QNAP quirks in two days (the installer, the sparkbox command, and now the dashboard not seeing Docker) is exactly the chasing-errors loop you described, and staying on the Debian VM that already runs clean is sensible, not giving up. The Docker piece is real too: QNAP's Container Station keeps its Docker somewhere the dashboard can't reach the normal way, and I've flagged it to Tom. If you ever want another go on the NAS, your backup plus this thread makes the move quick. Thank you for the detailed logs — they're what got the first two fixed.