pyblock/umbrel/bitcoin-cli-wrapper.sh
GaltRanch ba5e9606db fix(umbrel): bundle bitcoin-cli and lncli for mode A/B without Lite fallback
PyBLOCK's mode A (Bitcoin + Lightning) and mode B (Bitcoin only) call
bitcoin-cli and lncli directly via subprocess. The Umbrel image did not
ship those binaries, so the startup validation in PyBlock.py:1898-1909
detected the empty CLI paths and silently redirected to Lite Mode against
public APIs — defeating the point of installing PyBLOCK on a node.

Per nmfretz's review on getumbrel/umbrel-apps#5258, this takes the
"bundle the binaries inside the PyBLOCK image" path (option 2):

- dockerfile: download bitcoin-cli (Bitcoin Core 28.1) and lncli (LND
  v0.20.1-beta, matching what Umbrel ships) for both linux/amd64 and
  linux/arm64. Verifies the Bitcoin Core SHA256SUMS. Real binaries land
  at /usr/local/bin/{bitcoin-cli,lncli}.bin.
- umbrel/{bitcoin-cli,lncli}-wrapper.sh: thin shell wrappers installed
  as /usr/local/bin/{bitcoin-cli,lncli} that exec the real binary with
  -rpcconnect/-rpcuser/-rpcpassword (or --rpcserver/--tlscertpath/
  --macaroonpath for lncli) injected from the BITCOIN_RPC_* / LND_*
  env vars Umbrel provides via APP_BITCOIN_* / APP_LIGHTNING_*. They
  fail loud if those env vars are missing.
- entrypoint.sh: default BITCOIN_CLI_PATH/LND_CLI_PATH to the wrapper
  locations when the relevant RPC host env vars are set and the wrapper
  is executable, so bclock.conf / blndconnect.conf get the right
  bitcoincli / ln paths automatically.
- umbrel/: bump image tag and app version to v4.0.2 with release notes.

Local smoke test on amd64:
  bitcoin-cli.bin --version -> Bitcoin Core RPC client version v28.1.0
  lncli.bin --version       -> lncli version 0.20.1-beta
  /usr/local/bin/bitcoin-cli (no env) -> fails with "BITCOIN_RPC_HOST must be set"
  /usr/local/bin/bitcoin-cli (env set) -> dispatches to the real binary

Image grows ~70MB (mostly the Go-built lncli).

Co-Authored-By: kulvex code <noreply@github.com>
2026-06-23 18:10:00 -03:00

21 lines
846 B
Bash

#!/bin/sh
# bitcoin-cli wrapper for Umbrel/Docker deployments.
#
# PyBLOCK's modes A/B call bitcoin-cli directly via subprocess. Inside the
# Umbrel container we connect to the host's Bitcoin Core (or Knots) over the
# Docker network using the credentials Umbrel injects through APP_BITCOIN_*
# env vars (re-exported by the entrypoint as BITCOIN_RPC_*). This wrapper
# turns every `bitcoin-cli` call into a properly-authenticated remote RPC
# call against that node.
set -e
: "${BITCOIN_RPC_HOST:?BITCOIN_RPC_HOST must be set}"
: "${BITCOIN_RPC_USER:?BITCOIN_RPC_USER must be set}"
: "${BITCOIN_RPC_PASS:?BITCOIN_RPC_PASS must be set}"
exec /usr/local/bin/bitcoin-cli.bin \
-rpcconnect="${BITCOIN_RPC_HOST}" \
-rpcport="${BITCOIN_RPC_PORT:-8332}" \
-rpcuser="${BITCOIN_RPC_USER}" \
-rpcpassword="${BITCOIN_RPC_PASS}" \
"$@"