@@ -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
168232RUN 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
182246COPY tools/docker-entrypoint.sh /entrypoint.sh
183247
@@ -189,3 +253,36 @@ ENV LIGHTNINGD_NETWORK=bitcoin
189253EXPOSE 9735 9835
190254VOLUME ["/root/.lightning" ]
191255ENTRYPOINT ["/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