Dockerfile raw
1 # syntax=docker/dockerfile:1
2 FROM alpine:3.22 AS builder
3
4 ARG RDTS_CONSENT="UNSET"
5
6 RUN <<EORUN
7 cat <<\EOSCRIPT >/tmp/rdts_check
8 case "$(echo "$RDTS_CONSENT" | tr '[:lower:]' '[:upper:]')" in
9 1|ON|YES|TRUE|Y) RDTS_CONSENT="IMPLICIT" ;;
10 esac
11 case "$RDTS_CONSENT" in
12 RUNTIME_CHECK|RUNTIME_WARN|IMPLICIT)
13 ;;
14 *)
15 red=$(printf '\033[31m')
16 term_reset=$(printf '\033[0m')
17 cat <<EOF >&2
18
19 ${red}ERROR: RDTS_CONSENT is not set.
20
21 This version of Limenka Knots applies the BIP110 (RDTS) network upgrade, which fixes critical vulnerabilities in long-standing network design. To avoid applying this upgrade by accident, please choose whether to accept it now, or defer explicit confirmation until runtime.
22
23 Important: Because this upgrade already has broad community support, reverting to an older software version does not reject it. Running outdated software after any network upgrade only leaves your node vulnerable to displaying fake or fraudulent transactions. To effectively reject this upgrade, you need to run alternative software designed to split away from the upgraded network.
24
25 To accept this upgrade now, add to your Docker build arguments:
26
27 --build-arg RDTS_CONSENT=IMPLICIT
28
29 Or to defer explicit confirmation until runtime (via consensusrules=rdts config setting):
30
31 --build-arg RDTS_CONSENT=RUNTIME_CHECK (exits if absent)
32 --build-arg RDTS_CONSENT=RUNTIME_WARN (warns hourly if absent)
33
34 For more information, see: https://limenkaknots.org/learn/2026-rdts ${term_reset}
35 EOF
36 exit 1
37 ;;
38 esac
39 EOSCRIPT
40 EORUN
41
42 RUN . /tmp/rdts_check
43
44 RUN apk add --no-cache \
45 build-base \
46 cmake \
47 boost-dev \
48 libevent-dev \
49 sqlite-dev \
50 zeromq-dev \
51 coreutils \
52 binutils
53
54 WORKDIR /opt/limenka
55
56 COPY . .
57
58 WORKDIR /opt/limenka/build
59
60 RUN cmake .. \
61 -D RDTS_CONSENT="${RDTS_CONSENT}" \
62 -DCMAKE_INSTALL_PREFIX="/usr/local/" \
63 -DBUILD_DAEMON="ON" \
64 -DBUILD_CLI="ON" \
65 -DENABLE_WALLET="ON" \
66 -DWITH_ZMQ="ON" \
67 -DBUILD_TESTS="ON" \
68 -DBUILD_GUI="OFF" \
69 -DBUILD_TX="OFF" \
70 -DBUILD_UTIL="OFF" \
71 -DBUILD_WALLET_TOOL="OFF" \
72 -DBUILD_BENCH="OFF" \
73 -DBUILD_FUZZ_BINARY="OFF" \
74 -DBUILD_UTIL_CHAINSTATE="OFF" \
75 -DWITH_BDB="OFF" \
76 -DWITH_USDT="OFF" \
77 -DINSTALL_MAN="OFF" \
78 -DWITH_CCACHE="OFF"
79
80 RUN cmake --build . --parallel $(nproc)
81 RUN ctest --output-on-failure
82 RUN cmake --install .
83
84 RUN strip --strip-unneeded /usr/local/bin/*
85
86 FROM alpine:3.22 AS final
87
88 ARG RDTS_CONSENT
89 LABEL org.limenkaknots.rdts_consent="${RDTS_CONSENT}"
90
91 ARG USER_ID=1000
92 ARG GROUP_ID=1000
93
94 RUN apk add --no-cache \
95 libevent \
96 sqlite-libs \
97 zeromq \
98 boost-system \
99 boost-filesystem \
100 boost-program_options
101
102 COPY --from=builder /usr/local/bin/limenkad /usr/local/bin/limenkad
103 COPY --from=builder /usr/local/bin/limenka-cli /usr/local/bin/limenka-cli
104
105 RUN addgroup -S -g ${GROUP_ID} limenka && \
106 adduser -S -u ${USER_ID} -G limenka -H -s /bin/false limenka
107
108 WORKDIR /var/lib/limenkad
109 EXPOSE 8333 8332
110 USER limenka
111 VOLUME ["/var/lib/limenkad", "/etc/limenka/limenka.conf"]
112
113 ENTRYPOINT ["limenkad", "-conf=/etc/limenka/limenka.conf", "-datadir=/var/lib/limenkad"]
114
115 HEALTHCHECK --interval=5m --timeout=15s --start-period=2m --start-interval=10s \
116 CMD ["limenka-cli", "-conf=/etc/limenka/limenka.conf", "-datadir=/var/lib/limenkad", "getblockchaininfo"]
117