Skip to content

Commit 7138dbe

Browse files
committed
Initial setup
1 parent 8e63e7d commit 7138dbe

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

setup.sh

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
echo "🚀 Starting environment setup for your Synology Bitcoin Full Node stack"
6+
7+
# === 1. Define default paths ===
8+
DEFAULT_SLOW="/volume1/data/bitcoin"
9+
DEFAULT_FAST="/volume2/docker/appdata"
10+
REPO_URL="https://github.com/magicdude4eva/btc-fullnode-stack.git"
11+
12+
# === 2. Prompt user for mount locations ===
13+
read -p "📁 Enter slow-storage path (blockchain data) [${DEFAULT_SLOW}]: " DOCKERDATADIR
14+
DOCKERDATADIR=${DOCKERDATADIR:-$DEFAULT_SLOW}
15+
16+
read -p "🚀 Enter fast-storage path (docker config) [${DEFAULT_FAST}]: " DOCKERCONFDIR
17+
DOCKERCONFDIR=${DOCKERCONFDIR:-$DEFAULT_FAST}
18+
19+
# === 3. Get docker user UID/GID ===
20+
DOCKER_USER="docker"
21+
PUID=$(id -u "$DOCKER_USER")
22+
PGID=$(id -g "$DOCKER_USER")
23+
echo "🔐 Using PUID=$PUID and PGID=$PGID (user: $DOCKER_USER)"
24+
25+
# === 4. Prepare slow-storage for blockchain data ===
26+
echo "📂 Setting up slow-storage at $DOCKERDATADIR"
27+
mkdir -p "${DOCKERDATADIR}/blocks"
28+
chown -R "$PUID:$PGID" "${DOCKERDATADIR}"
29+
chmod 775 "${DOCKERDATADIR}" "${DOCKERDATADIR}/blocks"
30+
find "${DOCKERDATADIR}/blocks" -type f -name "blk*.dat" -exec chmod 664 {} \;
31+
32+
# === 5. Prepare fast-storage structure ===
33+
echo "📂 Setting up fast-storage at $DOCKERCONFDIR"
34+
if [ ! -d "${DOCKERCONFDIR}/.git" ]; then
35+
echo "📥 Cloning project repo into $DOCKERCONFDIR..."
36+
git clone "$REPO_URL" "$DOCKERCONFDIR"
37+
else
38+
echo "✅ Git repo already exists in $DOCKERCONFDIR – skipping clone"
39+
fi
40+
41+
# === 6. Ownership and permissions ===
42+
echo "🛠️ Setting ownership and permissions..."
43+
44+
# Bitcoin
45+
chown -R "$PUID:$PGID" "${DOCKERCONFDIR}/bitcoin"
46+
chmod 777 "${DOCKERCONFDIR}/bitcoin"
47+
chmod 664 "${DOCKERCONFDIR}/bitcoin/"*.{conf,Dockerfile,.dockerignore}
48+
chmod 700 "${DOCKERCONFDIR}/bitcoin/bitcoin-data"
49+
50+
# Bitcoin Explorer
51+
chown -R "$PUID:$PGID" "${DOCKERCONFDIR}/bitcoin-explorer"
52+
chmod 777 "${DOCKERCONFDIR}/bitcoin-explorer"
53+
chmod 664 "${DOCKERCONFDIR}/bitcoin-explorer/"*.{conf,Dockerfile}
54+
55+
# CKPool (cksolo)
56+
chown -R "$PUID:$PGID" "${DOCKERCONFDIR}/cksolo"
57+
chmod 777 "${DOCKERCONFDIR}/cksolo"
58+
chmod 777 "${DOCKERCONFDIR}/cksolo/"{start.sh,Dockerfile,ckpool.conf}
59+
chmod 555 "${DOCKERCONFDIR}/cksolo/.dockerignore"
60+
chmod 775 "${DOCKERCONFDIR}/cksolo/logs"
61+
62+
# CKStats
63+
chown -R "$PUID:$PGID" "${DOCKERCONFDIR}/ckstats"
64+
chmod 777 "${DOCKERCONFDIR}/ckstats"
65+
chmod 664 "${DOCKERCONFDIR}/ckstats/"{Dockerfile,supervisord.conf,ckstats-cron,.env.template}
66+
chmod 755 "${DOCKERCONFDIR}/ckstats/startup.sh"
67+
chown -R 100:103 "${DOCKERCONFDIR}/ckstats/pgdata"
68+
chmod 700 "${DOCKERCONFDIR}/ckstats/pgdata"
69+
70+
# Fulcrum
71+
chown -R "$PUID:$PGID" "${DOCKERCONFDIR}/fulcrum"
72+
chmod 777 "${DOCKERCONFDIR}/fulcrum"
73+
chmod 664 "${DOCKERCONFDIR}/fulcrum/"{Dockerfile,fulcrum.conf}
74+
chmod 777 "${DOCKERCONFDIR}/fulcrum/data"
75+
chmod 755 "${DOCKERCONFDIR}/fulcrum/.dockerignore"
76+
77+
# Grafana
78+
chown -R 472:472 "${DOCKERCONFDIR}/grafana"
79+
chmod 777 "${DOCKERCONFDIR}/grafana"
80+
81+
# InfluxDB
82+
chown -R 1000:users "${DOCKERCONFDIR}/influxdb"
83+
chmod 777 "${DOCKERCONFDIR}/influxdb"
84+
85+
# Mempool
86+
chown -R 1000:users "${DOCKERCONFDIR}/mempool"
87+
chmod 777 "${DOCKERCONFDIR}/mempool"
88+
89+
# Root files
90+
chown "$PUID:$PGID" "${DOCKERCONFDIR}/.env" "${DOCKERCONFDIR}/docker-compose.yml"
91+
chmod 664 "${DOCKERCONFDIR}/.env" "${DOCKERCONFDIR}/docker-compose.yml"
92+
93+
# === 7. Generate RPC credentials ===
94+
echo "🔐 Generating Bitcoin RPC authentication..."
95+
RPC_USER="ckpool"
96+
RPC_OUTPUT=$(curl -sSL https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py | python3 - "$RPC_USER")
97+
RPC_AUTH=$(echo "$RPC_OUTPUT" | grep '^rpcauth=' | cut -d'=' -f2)
98+
RPC_PASS=$(echo "$RPC_OUTPUT" | awk '/^Your password:/{getline; print}')
99+
100+
echo " ✔️ RPC user: $RPC_USER"
101+
echo " ✔️ RPC password: $RPC_PASS"
102+
echo " ✔️ RPC auth: $RPC_AUTH"
103+
104+
# === 8. Update .env values in-place ===
105+
echo "🔄 Updating .env file..."
106+
sed -i "s|^CORE_RPC_USERNAME=.*|CORE_RPC_USERNAME=$RPC_USER|" "${DOCKERCONFDIR}/.env"
107+
sed -i "s|^CORE_RPC_PASSWORD=.*|CORE_RPC_PASSWORD=$RPC_PASS|" "${DOCKERCONFDIR}/.env"
108+
sed -i "s|^BITCOIN_RPCAUTH=.*|BITCOIN_RPCAUTH=$RPC_AUTH|" "${DOCKERCONFDIR}/.env"
109+
110+
# === 9. Replace values in bitcoin.conf ===
111+
echo "🔧 Replacing RPC credentials in bitcoin.conf..."
112+
sed -i "s|^rpcauth=.*|rpcauth=$RPC_AUTH|" "${DOCKERCONFDIR}/bitcoin/bitcoin.conf"
113+
114+
# === 10. Replace values in bitcoin-explorer.conf ===
115+
echo "🔧 Replacing RPC credentials in bitcoin-explorer.conf..."
116+
sed -i "s|^BTCEXP_BITCOIND_USER=.*|BTCEXP_BITCOIND_USER=$RPC_USER|" "${DOCKERCONFDIR}/bitcoin-explorer/bitcoin-explorer.conf"
117+
sed -i "s|^BTCEXP_BITCOIND_PASS=.*|BTCEXP_BITCOIND_PASS=$RPC_PASS|" "${DOCKERCONFDIR}/bitcoin-explorer/bitcoin-explorer.conf"
118+
119+
# === 11. Replace values in ckpool.conf (cksolo) ===
120+
echo "🔧 Replacing RPC credentials in ckpool.conf..."
121+
sed -i 's|"auth": *"[^"]*"|"auth": "'"$RPC_USER"'"|' "${DOCKERCONFDIR}/cksolo/ckpool.conf"
122+
sed -i 's|"pass": *"[^"]*"|"pass": "'"$RPC_PASS"'"|' "${DOCKERCONFDIR}/cksolo/ckpool.conf"
123+
124+
# === 12. Final message ===
125+
echo -e "\n✅ Environment setup complete!"
126+
echo "📌 Review your docker-compose.yml at $DOCKERCONFDIR"
127+
echo "▶️ Run: cd $DOCKERCONFDIR && docker compose up -d"

0 commit comments

Comments
 (0)