Skip to content

Commit be471e5

Browse files
docker: Add vls remote_hsmd_socket binary
This Dockerfile builds the VLS binaries during the builder stage and copies only the `remote_hsmd_socket` binary into the `lightningd-vls-signer` target.
1 parent c03288c commit be471e5

File tree

1 file changed

+100
-3
lines changed

1 file changed

+100
-3
lines changed

Dockerfile

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,71 @@ RUN find /tmp/lightning_install -type f -executable -exec \
163163
awk -F: '/ELF/ {print $1}' | \
164164
xargs -r ${STRIP} --strip-unneeded
165165

166-
FROM base-target AS final
166+
# VLS builder stage (only used by lightningd-vls-signer)
167+
FROM base-builder-${TARGETOS}-${TARGETARCH} AS vls-builder
168+
169+
# First declare the variables that come from parent stages
170+
ARG target_arch
171+
ARG target_arch_gcc
172+
ARG target_arch_dpkg
173+
ARG target_arch_rust
174+
ARG COPTFLAGS
175+
176+
# Then declare the tool variables using the target_arch
177+
ARG AR=${target_arch}-ar
178+
ARG AS=${target_arch}-as
179+
ARG CC=${target_arch}-gcc
180+
ARG CXX=${target_arch}-g++
181+
ARG LD=${target_arch}-ld
182+
ARG STRIP=${target_arch}-strip
183+
ARG TARGET=${target_arch_rust}
184+
ARG RUST_PROFILE=release
185+
ARG VERSION
186+
ARG VLS_VERSION=v0.14.0
187+
188+
# Install cross-compilation toolchain (same as builder stage)
189+
RUN dpkg --add-architecture ${target_arch_dpkg}
190+
191+
RUN apt-get update && \
192+
apt-get install -qq -y --no-install-recommends \
193+
pkg-config:${target_arch_dpkg} \
194+
crossbuild-essential-${target_arch_dpkg} && \
195+
apt-get clean && \
196+
rm -rf /var/lib/apt/lists/*
197+
198+
ENV PATH="/root/.cargo/bin:/root/.local/bin:${PATH}"
199+
ENV PKG_CONFIG_PATH=/usr/lib/${target_arch}/pkgconfig
200+
ENV PKG_CONFIG_LIBDIR=/usr/lib/${target_arch}/pkgconfig
201+
202+
WORKDIR /opt
203+
204+
RUN ./install-uv.sh -q
205+
RUN ./install-rust.sh -y -q --profile minimal --component rustfmt --target ${target_arch_rust}
206+
207+
RUN git clone --depth 1 --branch ${VLS_VERSION} https://gitlab.com/lightning-signer/validating-lightning-signer.git
208+
WORKDIR /opt/validating-lightning-signer
209+
210+
RUN mkdir -p .cargo && tee .cargo/config.toml <<EOF
211+
212+
[build]
213+
target = "${target_arch_rust}"
214+
rustflags = ["-C", "target-cpu=generic"]
215+
216+
[target.${target_arch_rust}]
217+
linker = "${CC}"
218+
219+
EOF
220+
221+
RUN cargo build --release --target ${target_arch_rust}
222+
223+
RUN cp -r ./target/${target_arch_rust}/release/ /tmp/vls_install/ \
224+
&& find /tmp/vls_install -type f -executable -exec \
225+
file {} + | \
226+
awk -F: '/ELF/ {print $1}' | \
227+
xargs -r ${STRIP} --strip-unneeded
228+
229+
# Standard Lightning image (without VLS)
230+
FROM base-target AS lightningd
167231

168232
RUN apt-get update && \
169233
apt-get install -qq -y --no-install-recommends \
@@ -176,8 +240,8 @@ RUN apt-get update && \
176240
apt-get clean && \
177241
rm -rf /var/lib/apt/lists/*
178242

179-
COPY --from=downloader /opt/bitcoin/bin/bitcoin-cli /usr/bin/
180-
COPY --from=builder /tmp/lightning_install/ /usr/local/
243+
COPY --from=downloader /opt/bitcoin/bin/bitcoin-cli /usr/bin/
244+
COPY --from=builder /tmp/lightning_install/ /usr/local/
181245

182246
COPY tools/docker-entrypoint.sh /entrypoint.sh
183247

@@ -189,3 +253,36 @@ ENV LIGHTNINGD_NETWORK=bitcoin
189253
EXPOSE 9735 9835
190254
VOLUME ["/root/.lightning"]
191255
ENTRYPOINT ["/entrypoint.sh"]
256+
257+
# Lightning with VLS Signer
258+
FROM base-target AS lightningd-vls-signer
259+
260+
RUN apt-get update && \
261+
apt-get install -qq -y --no-install-recommends \
262+
inotify-tools \
263+
socat \
264+
jq \
265+
libpq5 \
266+
libsqlite3-0 \
267+
libsodium23 && \
268+
apt-get clean && \
269+
rm -rf /var/lib/apt/lists/*
270+
271+
COPY --from=downloader /opt/bitcoin/bin/bitcoin-cli /usr/bin/
272+
COPY --from=builder /tmp/lightning_install/ /usr/local/
273+
COPY --from=vls-builder /tmp/vls_install/remote_hsmd_socket /var/lib/vls/bin/
274+
275+
COPY tools/docker-entrypoint.sh /entrypoint.sh
276+
277+
ENV LIGHTNINGD_DATA=/root/.lightning
278+
ENV LIGHTNINGD_RPC_PORT=9835
279+
ENV LIGHTNINGD_PORT=9735
280+
ENV LIGHTNINGD_NETWORK=bitcoin
281+
ENV VLS_ENABLED=true
282+
283+
EXPOSE 9735 9835
284+
VOLUME ["/root/.lightning"]
285+
ENTRYPOINT ["/entrypoint.sh"]
286+
287+
# Default target (for backward compatibility)
288+
FROM lightningd AS final

0 commit comments

Comments
 (0)