Browse Source

Integrate electrs (#242)

Also adds a 2GB RAM requirement for future OTA updates.
ram-fix
Luke Childs 4 years ago
committed by GitHub
parent
commit
447dfea171
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .gitignore
  2. 15
      docker-compose.yml
  3. 0
      electrs/.gitkeep
  4. 15
      scripts/configure
  5. 1
      scripts/update/.updateignore
  6. 1
      scripts/update/.updateinclude
  7. 2
      scripts/update/00-run.sh
  8. 6
      scripts/update/01-run.sh
  9. 2
      scripts/update/02-run.sh
  10. 2
      scripts/update/03-run.sh
  11. 26
      scripts/update/check-memory
  12. 6
      templates/electrs-sample.toml
  13. 4
      templates/torrc-sample

1
.gitignore

@ -20,6 +20,7 @@ bitcoin/*
lnd/*
tor/*
db/*
electrs/*
statuses/*
!statuses/update-status.json

15
docker-compose.yml

@ -176,6 +176,21 @@ services:
networks:
net:
ipv4_address: 10.11.3.0
electrs:
container_name: electrs
image: getumbrel/electrs:v0.8.5
logging: *default-logging
depends_on: [ bitcoin ]
volumes:
- ${PWD}/bitcoin:/data/.bitcoin:ro
- ${PWD}/electrs:/data
restart: unless-stopped
stop_grace_period: 5m
ports:
- "50001:50001"
networks:
net:
ipv4_address: 10.11.4.0
networks:
net:
ipam:

0
electrs/.gitkeep

15
scripts/configure

@ -48,6 +48,9 @@ if [ "$BITCOIN_NETWORK" != "mainnet" ] && [ "$BITCOIN_NETWORK" != "testnet" ] &&
exit 1
fi
# Get current Umbrel version
UMBREL_VERSION="$(cat ${UMBREL_ROOT}/info.json | jq -r .version)"
echo
echo "======================================"
if [[ -f "${STATUS_DIR}/configured" ]]; then
@ -68,6 +71,7 @@ echo
BITCOIN_CONF_FILE="./templates/bitcoin.conf"
LND_CONF_FILE="./templates/lnd.conf"
TOR_CONF_FILE="./templates/torrc"
ELECTRS_CONF_FILE="./templates/electrs.toml"
ENV_FILE="./templates/.env"
# Remove intermediary files if they exist from any
@ -75,12 +79,14 @@ ENV_FILE="./templates/.env"
[[ -f "$BITCOIN_CONF_FILE" ]] && rm -f "$BITCOIN_CONF_FILE"
[[ -f "$LND_CONF_FILE" ]] && rm -f "$LND_CONF_FILE"
[[ -f "$TOR_CONF_FILE" ]] && rm -f "$TOR_CONF_FILE"
[[ -f "$ELECTRS_CONF_FILE" ]] && rm -f "$ELECTRS_CONF_FILE"
[[ -f "$ENV_FILE" ]] && rm -f "$ENV_FILE"
# Copy template configs to intermediary configs
[[ -f "./templates/bitcoin-sample.conf" ]] && cp "./templates/bitcoin-sample.conf" "$BITCOIN_CONF_FILE"
[[ -f "./templates/lnd-sample.conf" ]] && cp "./templates/lnd-sample.conf" "$LND_CONF_FILE"
[[ -f "./templates/torrc-sample" ]] && cp "./templates/torrc-sample" "$TOR_CONF_FILE"
[[ -f "./templates/electrs-sample.toml" ]] && cp "./templates/electrs-sample.toml" "$ELECTRS_CONF_FILE"
[[ -f "./templates/.env-sample" ]] && cp "./templates/.env-sample" "$ENV_FILE"
@ -122,6 +128,8 @@ if [ "$BITCOIN_NETWORK" == "testnet" ]; then
sed -i "s/\# \[neutrino\]/\[neutrino\]/g;" "$LND_CONF_FILE"
sed -i "s/\# neutrino.addpeer=testnet1-btcd.zaphq.io/neutrino.addpeer=testnet1-btcd.zaphq.io/g;" "$LND_CONF_FILE"
sed -i "s/\# neutrino.addpeer=testnet2-btcd.zaphq.io/neutrino.addpeer=testnet2-btcd.zaphq.io/g;" "$LND_CONF_FILE"
# Set electrs to testnet
sed -i "s/network = \"bitcoin\"/network = \"testnet\"/g;" "$ELECTRS_CONF_FILE"
fi
@ -135,12 +143,15 @@ if [ "$BITCOIN_NETWORK" == "regtest" ]; then
sed -i "s/bitcoin.mainnet=1/bitcoin.regtest=1/g;" "$LND_CONF_FILE"
# Use bitcoind as the node
sed -i "s/bitcoin.node=neutrino/bitcoin.node=bitcoind/g;" "$LND_CONF_FILE"
# Set electrs to regtest
sed -i "s/network = \"bitcoin\"/network = \"regtest\"/g;" "$ELECTRS_CONF_FILE"
fi
# Update RPC and P2P Ports
sed -i "s/rpcport=<port>/rpcport=$BITCOIN_RPC_PORT/g;" "$BITCOIN_CONF_FILE"
sed -i "s/port=<port>/port=$BITCOIN_P2P_PORT/g;" "$BITCOIN_CONF_FILE"
sed -i "s/<bitcoin-p2p-port>/$BITCOIN_P2P_PORT/g;" "$TOR_CONF_FILE"
sed -i "/daemon_rpc_addr/s/<port>/$BITCOIN_RPC_PORT/g;" "$ELECTRS_CONF_FILE"
sed -i "s/BITCOIN_RPC_PORT=<port>/BITCOIN_RPC_PORT=$BITCOIN_RPC_PORT/g;" "$ENV_FILE"
sed -i "s/BITCOIN_P2P_PORT=<port>/BITCOIN_P2P_PORT=$BITCOIN_P2P_PORT/g;" "$ENV_FILE"
@ -163,6 +174,9 @@ sed -i "s/tor.password=<password>/tor.password=$TOR_PASS/g;" "$LND_CONF_FILE"
sed -i "s/TOR_PASSWORD=<password>/TOR_PASSWORD=$TOR_PASS/g;" "$ENV_FILE"
sed -i "s/TOR_HASHED_PASSWORD=<password>/TOR_HASHED_PASSWORD=$TOR_HASHED_PASS/g;" "$ENV_FILE"
# Set Umbrel version in electrs banner
sed -i "/server_banner/s/<version>/$UMBREL_VERSION/g;" "$ELECTRS_CONF_FILE"
# Add hostname to lnd.conf for TLS certificate
DEVICE_HOSTNAME="$(hostname)"
sed -i "s/tlsextradomain=<hostname>/tlsextradomain=$DEVICE_HOSTNAME.local/g;" "$LND_CONF_FILE"
@ -194,6 +208,7 @@ sed -i -e "s/dbcache=<size>/dbcache=$DBCACHE_SIZE/g" "$BITCOIN_CONF_FILE"
mv -f "$BITCOIN_CONF_FILE" "./bitcoin/bitcoin.conf"
mv -f "$LND_CONF_FILE" "./lnd/lnd.conf"
mv -f "$TOR_CONF_FILE" "./tor/torrc"
mv -f "$ELECTRS_CONF_FILE" "./electrs/electrs.toml"
mv -f "$ENV_FILE" "./.env"

1
scripts/update/.updateignore

@ -4,4 +4,5 @@ db
lnd/*
statuses
tor/*
electrs/*
events/signals

1
scripts/update/.updateinclude

@ -2,3 +2,4 @@
bitcoin/bitcoin.conf
lnd/lnd.conf
tor/torrc
electrs/electrs.toml

2
scripts/update/00-run.sh

@ -4,6 +4,8 @@ set -euo pipefail
RELEASE=$1
UMBREL_ROOT=$2
./check-memory "${RELEASE}" "${UMBREL_ROOT}" "firstrun"
echo
echo "======================================="
echo "=============== UPDATE ================"

6
scripts/update/01-run.sh

@ -4,6 +4,8 @@ set -euo pipefail
RELEASE=$1
UMBREL_ROOT=$2
./check-memory "${RELEASE}" "${UMBREL_ROOT}" "notfirstrun"
# Only used on Umbrel OS
SD_CARD_UMBREL_ROOT="/sd-root${UMBREL_ROOT}"
@ -19,7 +21,7 @@ echo
# Make Umbrel OS specific updates
if [[ ! -z "${UMBREL_OS:-}" ]]; then
echo
echo
echo "============================================="
echo "Installing on Umbrel OS $UMBREL_OS"
echo "============================================="
@ -34,7 +36,7 @@ if [[ ! -z "${UMBREL_OS:-}" ]]; then
sed -i "s/#allow-interfaces=eth0/allow-interfaces=eth0,wlan0/g;" "/etc/avahi/avahi-daemon.conf"
systemctl restart avahi-daemon.service
fi
# Update SD card installation
if [[ -f "${SD_CARD_UMBREL_ROOT}/.umbrel" ]]; then
echo "Replacing ${SD_CARD_UMBREL_ROOT} on SD card with the new release"

2
scripts/update/02-run.sh

@ -4,6 +4,8 @@ set -euo pipefail
RELEASE=$1
UMBREL_ROOT=$2
./check-memory "${RELEASE}" "${UMBREL_ROOT}" "notfirstrun"
echo
echo "======================================="
echo "=============== UPDATE ================"

2
scripts/update/03-run.sh

@ -4,6 +4,8 @@ set -euo pipefail
RELEASE=$1
UMBREL_ROOT=$2
./check-memory "${RELEASE}" "${UMBREL_ROOT}" "notfirstrun"
echo
echo "======================================="
echo "=============== UPDATE ================"

26
scripts/update/check-memory

@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail
RELEASE=$1
UMBREL_ROOT=$2
first_run=$3
MIN_RAM=2000000
# Abort on low memory devices
memory="$(awk '/MemTotal/{printf "%d\n", $2}' /proc/meminfo)"
if ((memory<MIN_RAM)); then
if [[ "${first_run}" == "firstrun" ]]; then
cat <<EOF > "$UMBREL_ROOT"/statuses/update-status.json
{"state": "installing", "progress": 20, "description": "Checking device memory", "updateTo": "${RELEASE}"}
EOF
# Sleep for a few seconds so the user has been redirected to the update screen
sleep 10
memory_error="Sorry, this update isn't compatible with your device, it requires at least $((MIN_RAM/1000000))GB RAM."
echo "${memory_error}"
cat <<EOF > "$UMBREL_ROOT"/statuses/update-status.json
{"state": "failed", "progress": 100, "description": "${memory_error}", "updateTo": "${RELEASE}"}
EOF
fi
exit 1
fi

6
templates/electrs-sample.toml

@ -0,0 +1,6 @@
verbose = 4
network = "bitcoin"
db_dir = "/data/db"
daemon_rpc_addr = "10.11.1.1:<port>"
electrum_rpc_addr = "0.0.0.0:50001"
server_banner = "Umbrel v<version>"

4
templates/torrc-sample

@ -10,6 +10,10 @@ HiddenServicePort 80 10.11.0.2:80
HiddenServiceDir /var/lib/tor/bitcoin-p2p
HiddenServicePort <bitcoin-p2p-port> 10.11.1.1:<bitcoin-p2p-port>
# Electrum Hidden Service
HiddenServiceDir /var/lib/tor/electrum
HiddenServicePort 50001 10.11.4.0:50001
# LND REST Hidden Service
HiddenServiceDir /var/lib/tor/lnd-rest
HiddenServicePort 8080 10.11.1.2:8080

Loading…
Cancel
Save