Initial StartOS 0.3.5.1 packaging scaffold for Kamado Pool

Multi-stage Dockerfile clones KamadoPool at a pinned SHA, builds
ckpool and kamado-api (with embedded Svelte UI), runtime image
supervises both processes via tini + wait -n. Config covers
bitcoind mainnet/testnet4 variant, payout address, coinbase tag,
vardiff knobs, and log level. Web UI interface only — stratum
:3333 requires a router port-forward or simpleproxy workaround
because StartOS 0.3.x does not forward raw TCP on LAN.

TODO before first build: pin KAMADO_REPO + KAMADO_SHA in the
Dockerfile to a pushed commit.
This commit is contained in:
satoshi
2026-04-13 03:51:23 +03:00
commit 4064f9e56a
18 changed files with 689 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
import { matches, types as T } from "../deps.ts";
const { shape, boolean, arrayOf, string, dictionary, any } = matches;
const bitcoindMatcher = shape({
"rpc": shape({
"enable": boolean,
"username": string,
"password": string,
}, ["enable", "username", "password"]),
"advanced": shape({
"peers": shape({
"listen": boolean,
}, ["listen"]),
}, ["peers"]),
}, ["rpc", "advanced"]);
const checkBitcoind: T.ExpectedExports.dependencyConfig["check"] = async (
effects,
input,
) => {
const res = bitcoindMatcher.test(input);
if (!res) return { error: "Bitcoin Core RPC settings are missing." };
if (!input.rpc.enable) {
return { error: "Bitcoin Core RPC must be enabled." };
}
return { result: null };
};
const autoBitcoind: T.ExpectedExports.dependencyConfig["autoConfigure"] =
async (effects, input) => {
input.rpc.enable = true;
return { result: input };
};
export const dependencies: T.ExpectedExports.dependencies = {
"bitcoind": {
check: checkBitcoind,
autoConfigure: autoBitcoind,
},
"bitcoind-testnet": {
check: checkBitcoind,
autoConfigure: autoBitcoind,
},
};