TLDR:
The exports.sh
file was empty in my bitcoin app directory, so I replaced it with a working one.
I copied the exports.sh
from the /home/umbrel/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/bitcoin/exports.sh
path and restarted my node. Then the bitcoin app started properly.
Use this command to do exactly what I did (you may have to modify the copy path a bit):
# Change directory to bitcoin app
cd ~/umbrel/app-data/bitcoin/
# Backup existing exports.sh file
mv exports.sh exports.sh.backup
# Copy working exports.sh file from "app-stores" directory
cp ~/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/bitcoin/exports.sh $PWD
For others having the issue where it seems like environment variables aren’t set and have their apps stuck on starting or restarting forever, I seem to have found a fix. My bitcoin app was stuck on starting which prevented many other apps that depended on it from running, obviously.
For context, I am running on Raspberry Pi 4 and recently updated to version umbrelOS 1.4.2. I originally started before the 1.0 update so definitely have legacy stuff laying around. This problem started immediately after updating to 1.4.2.
I was having the following output when I tried to troubleshoot:
Command failed with exit code 1: /opt/umbreld/source/modules/apps/legacy-compat/app-script logs bitcoin
time="2025-06-08T17:52:09Z" level=warning msg="/opt/umbreld/source/modules/apps/legacy-compat/docker-compose.app_proxy.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
time="2025-06-08T17:52:10Z" level=warning msg="/opt/umbreld/source/modules/apps/legacy-compat/docker-compose.tor.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
time="2025-06-08T17:52:10Z" level=warning msg="/opt/umbreld/source/modules/apps/legacy-compat/docker-compose.common.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
time="2025-06-08T17:52:10Z" level=warning msg="networks.default: external.name is deprecated. Please set name and external: true"
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_NODE_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PASS\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_HIDDEN_SERVICE\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_P2P_HIDDEN_SERVICE\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_TOR_PROXY_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_USER\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_USER\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PASS\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_P2P_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_I2P_DAEMON_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_NODE_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_DATA_DIR\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_DATA_DIR\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_P2P_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_P2P_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_RPC_PORT\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_NODE_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_COMMAND\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_TOR_PROXY_IP\" variable is not set. Defaulting to a blank string."
time="2025-06-08T17:52:10Z" level=warning msg="The \"APP_BITCOIN_I2P_DAEMON_IP\" variable is not set. Defaulting to a blank string."
invalid spec: :/data/.bitcoin: empty section between colons
Like I mentioned in the TLDR, I was able to fix this by copying ~/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/bitcoin/exports.sh
to ~/umbrel/app-data/bitcoin/