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