Align Dockerfile and entrypoint with upstream KamadoPool build

Previous scaffold referenced a non-existent 'make ckpool-src'
target. Rewritten to inline the real build steps from the
upstream KamadoPool repo: clone ckpool at CKPOOL_COMMIT, apply
patches/*.patch, build with the same portable CFLAGS the
ckpool Dockerfile uses. The ui and api stages now match
api/Dockerfile exactly.

Entrypoint now uses the same env-var interface as the upstream
ckpool entrypoint (POOL_BTCADDRESS, BITCOIN_RPC_*, STRATUM_PORT,
etc.) and renders ckpool.conf from the bundled template via
sed. kamado-api env vars corrected to match config.FromEnv
(BITCOIN_RPC_URL, CKPOOL_SOCKDIR, CKPOOL_LOGFILE, LISTEN_ADDR).
This commit is contained in:
satoshi
2026-04-13 18:10:17 +03:00
parent 54935bf638
commit 90e745f160
2 changed files with 98 additions and 72 deletions
+58 -52
View File
@@ -1,18 +1,14 @@
#!/bin/bash
# Kamado Pool StartOS entrypoint.
#
# Renders ckpool.conf from /root/.kamado/start9/config.yaml, resolves
# which bitcoind variant the user picked (mainnet vs testnet4), then
# supervises ckpool and kamado-api as a pair — if either exits, tear
# the container down so StartOS restarts the service cleanly.
# Reads /root/.kamado/start9/config.yaml via yq, resolves the chosen
# bitcoind variant (mainnet vs testnet4), exports the env vars the
# upstream ckpool entrypoint expects, renders ckpool.conf from the
# template shipped alongside this script, and then supervises
# ckpool-solo + kamado-api as a pair.
set -euo pipefail
CONFIG_FILE="/root/.kamado/start9/config.yaml"
CKPOOL_DIR="/root/.ckpool"
CKPOOL_CONF="${CKPOOL_DIR}/ckpool.conf"
CKPOOL_LOG_DIR="${CKPOOL_DIR}/logs"
mkdir -p "${CKPOOL_DIR}" "${CKPOOL_LOG_DIR}"
if [[ ! -f "${CONFIG_FILE}" ]]; then
echo "kamado-entrypoint: config file missing: ${CONFIG_FILE}" >&2
exit 1
@@ -23,12 +19,12 @@ q() { yq -r "$1" "${CONFIG_FILE}"; }
BITCOIND_VARIANT=$(q '.bitcoind.type')
case "${BITCOIND_VARIANT}" in
bitcoind)
BITCOIN_HOST="bitcoind.embassy"
BITCOIN_PORT=8332
export BITCOIN_RPC_HOST="bitcoind.embassy"
export BITCOIN_RPC_PORT=8332
;;
bitcoind-testnet)
BITCOIN_HOST="bitcoind-testnet.embassy"
BITCOIN_PORT=48332
export BITCOIN_RPC_HOST="bitcoind-testnet.embassy"
export BITCOIN_RPC_PORT=48332
;;
*)
echo "kamado-entrypoint: unknown bitcoind variant: ${BITCOIND_VARIANT}" >&2
@@ -36,53 +32,63 @@ case "${BITCOIND_VARIANT}" in
;;
esac
BITCOIN_USER=$(q '.bitcoind.user')
BITCOIN_PASS=$(q '.bitcoind.password')
POOL_BTCADDRESS=$(q '.pool-address')
POOL_IDENTIFIER=$(q '.pool-identifier')
STRATUM_PORT=$(q '.stratum-port // 3333')
DROPIDLE=$(q '.dropidle // 0')
STARTDIFF=$(q '.startdiff // 16384')
MINDIFF=$(q '.mindiff // 1000')
MAXDIFF=$(q '.maxdiff // 0')
export BITCOIN_RPC_USER=$(q '.bitcoind.user')
export BITCOIN_RPC_PASSWORD=$(q '.bitcoind.password')
export POOL_BTCADDRESS=$(q '.pool-address')
export POOL_BTCSIG=$(q '.pool-identifier')
export STRATUM_PORT=$(q '.stratum-port // 3333')
export STARTDIFF=$(q '.startdiff // 16384')
export MINDIFF=$(q '.mindiff // 1000')
export MAXDIFF=$(q '.maxdiff // 0')
export DROPIDLE=$(q '.dropidle // 0')
LOG_LEVEL=$(q '.log-level // "info"')
cat > "${CKPOOL_CONF}" <<EOF
{
"btcd": [
{
"url": "${BITCOIN_HOST}:${BITCOIN_PORT}",
"auth": "${BITCOIN_USER}",
"pass": "${BITCOIN_PASS}",
"notify": true
}
],
"btcaddress": "${POOL_BTCADDRESS}",
"btcsig": "${POOL_IDENTIFIER}",
"serverurl": [
"0.0.0.0:${STRATUM_PORT}"
],
"mindiff": ${MINDIFF},
"startdiff": ${STARTDIFF},
"maxdiff": ${MAXDIFF},
"logdir": "${CKPOOL_LOG_DIR}"
}
EOF
export LOGDIR=/var/log/ckpool
export SOCKET_DIR=/run/ckpool
export BITCOIN_NOTIFY=true
export ZMQ_BLOCK=""
export BLOCKPOLL_MS=100
export UPDATE_INTERVAL_S=30
mkdir -p "${LOGDIR}" "${SOCKET_DIR}" /etc/ckpool
echo "kamado-entrypoint: starting ckpool (solo, ${BITCOIND_VARIANT})"
ckpool -B -c "${CKPOOL_CONF}" &
# Render ckpool.conf using the same sed approach as the upstream
# KamadoPool ckpool entrypoint — the template is bundled into the
# image at build time.
TEMPLATE=/etc/ckpool/ckpool.conf.template
CONF=/etc/ckpool/ckpool.conf
sed \
-e "s|\${BITCOIN_RPC_HOST}|${BITCOIN_RPC_HOST}|g" \
-e "s|\${BITCOIN_RPC_PORT}|${BITCOIN_RPC_PORT}|g" \
-e "s|\${BITCOIN_RPC_USER}|${BITCOIN_RPC_USER}|g" \
-e "s|\${BITCOIN_RPC_PASSWORD}|${BITCOIN_RPC_PASSWORD}|g" \
-e "s|\${BITCOIN_NOTIFY}|${BITCOIN_NOTIFY}|g" \
-e "s|\${POOL_BTCADDRESS}|${POOL_BTCADDRESS}|g" \
-e "s|\${POOL_BTCSIG}|${POOL_BTCSIG}|g" \
-e "s|\${BLOCKPOLL_MS}|${BLOCKPOLL_MS}|g" \
-e "s|\${UPDATE_INTERVAL_S}|${UPDATE_INTERVAL_S}|g" \
-e "s|\${STRATUM_PORT}|${STRATUM_PORT}|g" \
-e "s|\${MINDIFF}|${MINDIFF}|g" \
-e "s|\${STARTDIFF}|${STARTDIFF}|g" \
-e "s|\${MAXDIFF}|${MAXDIFF}|g" \
-e "s|\${DROPIDLE}|${DROPIDLE}|g" \
-e "s|\${LOGDIR}|${LOGDIR}|g" \
-e "s|\${ZMQ_BLOCK}|${ZMQ_BLOCK}|g" \
"${TEMPLATE}" > "${CONF}"
sed -i '/"zmqblock":/d' "${CONF}"
echo "kamado-entrypoint: starting ckpool (solo, ${BITCOIND_VARIANT}) on port ${STRATUM_PORT}"
/usr/local/bin/ckpool --btcsolo --config "${CONF}" --sockdir "${SOCKET_DIR}" --log-shares &
CKPOOL_PID=$!
export KAMADO_CKPOOL_SOCKET="${CKPOOL_DIR}/solo/listener"
export KAMADO_CKPOOL_LOGFILE="${CKPOOL_LOG_DIR}/ckpool.log"
export KAMADO_BITCOIND_URL="http://${BITCOIN_HOST}:${BITCOIN_PORT}"
export KAMADO_BITCOIND_USER="${BITCOIN_USER}"
export KAMADO_BITCOIND_PASS="${BITCOIN_PASS}"
export KAMADO_HTTP_ADDR=":8080"
export LISTEN_ADDR=":8080"
export CKPOOL_SOCKDIR="${SOCKET_DIR}"
export CKPOOL_LOGFILE="${LOGDIR}/ckpool.log"
export BITCOIN_RPC_URL="http://${BITCOIN_RPC_HOST}:${BITCOIN_RPC_PORT}"
export POLL_INTERVAL=5s
export KAMADO_LOG_LEVEL="${LOG_LEVEL}"
echo "kamado-entrypoint: starting kamado-api"
kamado-api &
/usr/local/bin/kamado-api &
API_PID=$!
term() {