mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-06-11 17:46:32 -04:00
Depends on https://github.com/lightpanda-io/zig-v8-fork/pull/179 An improvement to https://github.com/lightpanda-io/browser/pull/2515 to prevent a v8 assertion if we terminate as an inspector dispatch is happening. The problem is that if we just immediately terminate, we aren't sure what the worker thread is doing, and, apparently, if we terminate then dispatch a message to the inspector, we fail an assertion. With the way the code was, the only safe solution would be to hold a mutex over the session dispatch, but that could block the network thread. So instead of terminating from the network thread, we now ask v8 to execute a callback. This gets executed on the worker thread, which can then terminate the execution. The initial version of 2515 delayed the termination from the network thread. It's possible that solution would "solve" the issue, simply because it's very unlikely that a worker would be "stuck" for 5 seconds and then get unstuck. More likely that it exits immediately, or is stuck in an endless loop. But that would still leave a window where we could terminate in network and then dispatch in the worker. Less likely, but still possible. Hopefully this new mechanism eliminates this from being a problem in all circumstances.
84 lines
3.1 KiB
Docker
84 lines
3.1 KiB
Docker
FROM debian:stable-slim
|
|
|
|
ARG MINISIG=0.12
|
|
ARG ZIG_MINISIG=RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U
|
|
ARG V8=14.0.365.4
|
|
ARG ZIG_V8=v0.4.6
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN apt-get update -yq && \
|
|
apt-get install -yq --no-install-recommends xz-utils ca-certificates \
|
|
pkg-config libglib2.0-dev \
|
|
clang make curl git && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Get Rust
|
|
# Download then execute (rather than `curl | sh`) so a failed download is not
|
|
# masked by sh's exit code under /bin/sh, which has no pipefail.
|
|
RUN curl --fail -sSL --retry 3 --retry-delay 2 -o /tmp/rustup.sh https://sh.rustup.rs && \
|
|
sh /tmp/rustup.sh --profile minimal -y && \
|
|
rm /tmp/rustup.sh
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
|
|
# install minisig
|
|
RUN curl --fail -L --retry 3 --retry-delay 2 -O https://github.com/jedisct1/minisign/releases/download/${MINISIG}/minisign-${MINISIG}-linux.tar.gz && \
|
|
tar xzf minisign-${MINISIG}-linux.tar.gz -C /
|
|
|
|
# clone lightpanda
|
|
RUN git clone --depth 1 https://github.com/lightpanda-io/browser.git
|
|
WORKDIR /browser
|
|
|
|
# install zig
|
|
RUN ZIG=$(grep '\.minimum_zig_version = "' "build.zig.zon" | cut -d'"' -f2) && \
|
|
case $TARGETPLATFORM in \
|
|
"linux/arm64") ARCH="aarch64" ;; \
|
|
*) ARCH="x86_64" ;; \
|
|
esac && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -O https://ziglang.org/download/${ZIG}/zig-${ARCH}-linux-${ZIG}.tar.xz && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -O https://ziglang.org/download/${ZIG}/zig-${ARCH}-linux-${ZIG}.tar.xz.minisig && \
|
|
/minisign-linux/${ARCH}/minisign -Vm zig-${ARCH}-linux-${ZIG}.tar.xz -P ${ZIG_MINISIG} && \
|
|
tar xf zig-${ARCH}-linux-${ZIG}.tar.xz && \
|
|
mv zig-${ARCH}-linux-${ZIG} /usr/local/lib && \
|
|
ln -s /usr/local/lib/zig-${ARCH}-linux-${ZIG}/zig /usr/local/bin/zig
|
|
|
|
# download and install v8
|
|
RUN case $TARGETPLATFORM in \
|
|
"linux/arm64") ARCH="aarch64" ;; \
|
|
*) ARCH="x86_64" ;; \
|
|
esac && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -o libc_v8.a https://github.com/lightpanda-io/zig-v8-fork/releases/download/${ZIG_V8}/libc_v8_${V8}_linux_${ARCH}.a && \
|
|
mkdir -p v8/ && \
|
|
mv libc_v8.a v8/libc_v8.a
|
|
|
|
# build v8 snapshot
|
|
RUN zig build -Doptimize=ReleaseFast \
|
|
-Dprebuilt_v8_path=v8/libc_v8.a \
|
|
snapshot_creator -- src/snapshot.bin
|
|
|
|
# build release
|
|
RUN zig build -Doptimize=ReleaseFast \
|
|
-Dsnapshot_path=../../snapshot.bin \
|
|
-Dprebuilt_v8_path=v8/libc_v8.a
|
|
|
|
FROM debian:stable-slim
|
|
|
|
RUN apt-get update -yq && \
|
|
apt-get install -yq --no-install-recommends tini && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
FROM debian:stable-slim
|
|
|
|
# copy ca certificates
|
|
COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
|
|
|
COPY --from=0 /browser/zig-out/bin/lightpanda /bin/lightpanda
|
|
COPY --from=1 /usr/bin/tini /usr/bin/tini
|
|
|
|
EXPOSE 9222/tcp
|
|
|
|
# Lightpanda install only some signal handlers, and PID 1 doesn't have a default SIGTERM signal handler.
|
|
# Using "tini" as PID1 ensures that signals work as expected, so e.g. "docker stop" will not hang.
|
|
# (See https://github.com/krallin/tini#why-tini).
|
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
CMD ["/bin/lightpanda", "serve", "--host", "0.0.0.0", "--port", "9222", "--log-level", "info"]
|