Compare commits

..
Author SHA1 Message Date
GuofangandClaude Sonnet 5.5 40ca3c693f Install ws2tcp-local, add entrypoint script and Claude installation handling
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 09:38:43 +08:00
GuofangandClaude Sonnet 5.5 9608a9616f Add SQLite 3.54.1
Build from the official autoconf amalgamation in debian13, rocky9 and
alpine3.24; rocky9-system uses the distribution sqlite-devel.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 15:28:58 +08:00
Guofang 4a1a0a903f Update json-c library version to 0.18 in Dockerfiles and fetch script 2026-11-10 14:04:07 +08:00
GuofangandClaude Sonnet 5.5 464bf717ed Build Protobuf from source in rocky9-system
Every other library still comes from the distribution packages.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 11:25:58 +08:00
GuofangandClaude Sonnet 5.5 d57ea76fa4 Add rocky9-system image using distribution libraries
Install libraries from Rocky Linux 9, CRB and EPEL instead of building
from source; packages missing from those repositories are skipped.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-10 11:17:27 +08:00
11 changed files with 233 additions and 7 deletions

No files matched your search

+2
View File
@@ -21,6 +21,8 @@
- On Rocky Linux 9, `glibc-devel`, `kernel-headers`, and `libstdc++-devel` may be installed directly or as compiler dependencies because they are foundational C/C++ platform and toolchain components. - On Rocky Linux 9, `glibc-devel`, `kernel-headers`, and `libstdc++-devel` may be installed directly or as compiler dependencies because they are foundational C/C++ platform and toolchain components.
- On Alpine Linux, `musl-dev` and `linux-headers` may be installed directly or as compiler dependencies because they are foundational C/C++ platform and toolchain components. - On Alpine Linux, `musl-dev` and `linux-headers` may be installed directly or as compiler dependencies because they are foundational C/C++ platform and toolchain components.
- The `rocky9-system` image is the exception to the rules above: it deliberately installs third-party libraries and their `-devel` packages from the Rocky Linux 9, CRB and EPEL repositories instead of building them from source, with Protobuf (`v3.21.12`, installed under `/usr/local`) as the only library built from source. Other libraries use distribution versions and are not pinned. Libraries missing from those repositories (for example `magic_enum`) are skipped, not built from source.
## Meta Libraries ## Meta Libraries
- Pin all Meta/Facebook ecosystem libraries to the same date-based release tag. - Pin all Meta/Facebook ecosystem libraries to the same date-based release tag.
+2 -1
View File
@@ -34,7 +34,7 @@
| CZMQ | `4.2.1` | | CZMQ | `4.2.1` |
| JsonCpp | `1.9.8` | | JsonCpp | `1.9.8` |
| librdkafka | `2.15.0` | | librdkafka | `2.15.0` |
| json-c | `0.19` | | json-c | `0.18` |
| RapidJSON | `1.1.0` | | RapidJSON | `1.1.0` |
| curl | `8.21.0` | | curl | `8.21.0` |
| hiredis | `1.4.1` | | hiredis | `1.4.1` |
@@ -50,6 +50,7 @@
| Snappy | `1.2.2` | | Snappy | `1.2.2` |
| LZ4 | `v1.10.0` | | LZ4 | `v1.10.0` |
| Apache Arrow / Parquet | `25.0.1` | | Apache Arrow / Parquet | `25.0.1` |
| SQLite | `3.54.1` |
The image includes position-independent static builds of these libraries. Protobuf and libxml2 enable zlib support, and LibDwarf enables compressed debug section support using zlib and Zstd. ZeroMQ enables CURVE security using static libsodium. CZMQ enables UUID support using static util-linux libuuid while disabling undeclared optional integrations. librdkafka includes SSL, zlib, Zstd, and bundled LZ4 support while disabling undeclared optional integrations. spdlog uses external fmt, glog uses gflags, and all Meta libraries share the same release tag. Apache Arrow is built with Parquet (including OpenSSL-based Parquet encryption) and Snappy, LZ4, zlib, and Zstd compression using only the pinned system dependencies above (`ARROW_DEPENDENCY_SOURCE=SYSTEM`), with the bundled jemalloc and mimalloc allocators disabled. Apache Thrift only builds its C++ library, and its headers sit next to fbthrift's under `include/thrift` without overlapping. The image includes position-independent static builds of these libraries. Protobuf and libxml2 enable zlib support, and LibDwarf enables compressed debug section support using zlib and Zstd. ZeroMQ enables CURVE security using static libsodium. CZMQ enables UUID support using static util-linux libuuid while disabling undeclared optional integrations. librdkafka includes SSL, zlib, Zstd, and bundled LZ4 support while disabling undeclared optional integrations. spdlog uses external fmt, glog uses gflags, and all Meta libraries share the same release tag. Apache Arrow is built with Parquet (including OpenSSL-based Parquet encryption) and Snappy, LZ4, zlib, and Zstd compression using only the pinned system dependencies above (`ARROW_DEPENDENCY_SOURCE=SYSTEM`), with the bundled jemalloc and mimalloc allocators disabled. Apache Thrift only builds its C++ library, and its headers sit next to fbthrift's under `include/thrift` without overlapping.
+4
View File
@@ -10,6 +10,7 @@ Each build script automatically selects Docker or Podman:
./build-all.sh ./build-all.sh
./debian13/build.sh ./debian13/build.sh
./rocky9/build.sh ./rocky9/build.sh
./rocky9-system/build.sh
./alpine3.24/build.sh ./alpine3.24/build.sh
``` ```
@@ -26,10 +27,13 @@ PREFIX=/opt/stack ./debian13/build.sh
PREFIX=/opt/stack ./rocky9/build.sh PREFIX=/opt/stack ./rocky9/build.sh
``` ```
The `rocky9-system` image uses the libraries shipped by Rocky Linux 9 (BaseOS, AppStream, CRB and EPEL) instead of building them from source, except Protobuf, which is built from source (`v3.21.12`, under `/usr/local`). Libraries that those repositories do not provide are simply left out.
## Run ## Run
```sh ```sh
docker run --rm -it debian13-source-stack docker run --rm -it debian13-source-stack
docker run --rm -it rocky9-source-stack docker run --rm -it rocky9-source-stack
docker run --rm -it rocky9-system-stack
docker run --rm -it alpine3.24-source-stack docker run --rm -it alpine3.24-source-stack
``` ```
+11 -1
View File
@@ -388,7 +388,7 @@ RUN --mount=type=bind,from=sources,source=librdkafka-v2.15.0.tar.gz,target=/tmp/
&& cmake --build build --parallel "$(nproc)" --target install \ && cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src && rm -rf build src
RUN --mount=type=bind,from=sources,source=json-c-json-c-0.19-20260627.tar.gz,target=/tmp/json-c.tar.gz \ RUN --mount=type=bind,from=sources,source=json-c-json-c-0.18-20240915.tar.gz,target=/tmp/json-c.tar.gz \
mkdir src \ mkdir src \
&& tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \ && tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
@@ -607,4 +607,14 @@ RUN --mount=type=bind,from=sources,source=makeself-release-2.7.1.tar.gz,target=/
&& ln -s makeself.sh /usr/local/bin/makeself \ && ln -s makeself.sh /usr/local/bin/makeself \
&& rm -rf src && rm -rf src
RUN --mount=type=bind,from=sources,source=sqlite-autoconf-3540100.tar.gz,target=/tmp/sqlite.tar.gz \
mkdir src \
&& tar --extract --gzip --file=/tmp/sqlite.tar.gz --directory=src --strip-components=1 \
&& cd src \
&& CFLAGS="-O2 -fPIC" ./configure --prefix=/usr/local --libdir=/usr/local/lib --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
CMD ["/bin/sh"] CMD ["/bin/sh"]
+1
View File
@@ -6,4 +6,5 @@ SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
"$SCRIPT_DIR/debian13/build.sh" "$SCRIPT_DIR/debian13/build.sh"
"$SCRIPT_DIR/rocky9/build.sh" "$SCRIPT_DIR/rocky9/build.sh"
"$SCRIPT_DIR/rocky9-system/build.sh"
"$SCRIPT_DIR/alpine3.24/build.sh" "$SCRIPT_DIR/alpine3.24/build.sh"
+21 -1
View File
@@ -493,7 +493,7 @@ RUN --mount=type=bind,from=sources,source=librdkafka-v2.15.0.tar.gz,target=/tmp/
&& cmake --build build --parallel "$(nproc)" --target install \ && cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src && rm -rf build src
RUN --mount=type=bind,from=sources,source=json-c-json-c-0.19-20260627.tar.gz,target=/tmp/json-c.tar.gz \ RUN --mount=type=bind,from=sources,source=json-c-json-c-0.18-20240915.tar.gz,target=/tmp/json-c.tar.gz \
mkdir src \ mkdir src \
&& tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \ && tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
@@ -819,8 +819,28 @@ RUN --mount=type=bind,from=sources,source=duckdb-v1.5.6.tar.gz,target=/tmp/duckd
&& cmake --build build --parallel "$(nproc)" --target install \ && cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src ui-src && rm -rf build src ui-src
RUN --mount=type=bind,from=sources,source=sqlite-autoconf-3540100.tar.gz,target=/tmp/sqlite.tar.gz \
mkdir src \
&& tar --extract --gzip --file=/tmp/sqlite.tar.gz --directory=src --strip-components=1 \
&& cd src \
&& CFLAGS="-O2 -fPIC" ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib/$(gcc -dumpmachine) --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
COPY source-stack.cmake.in /tmp/ COPY source-stack.cmake.in /tmp/
RUN mkdir -p ${PREFIX}/share/source-stack \ RUN mkdir -p ${PREFIX}/share/source-stack \
&& sed "s|@MULTIARCH@|$(gcc -dumpmachine)|" /tmp/source-stack.cmake.in \ && sed "s|@MULTIARCH@|$(gcc -dumpmachine)|" /tmp/source-stack.cmake.in \
> ${PREFIX}/share/source-stack/source-stack.cmake \ > ${PREFIX}/share/source-stack/source-stack.cmake \
&& rm /tmp/source-stack.cmake.in && rm /tmp/source-stack.cmake.in
RUN useradd --create-home develop
USER develop
ENV CLAUDE_CONFIG_DIR="$HOME/my-claude"
ENV DISABLE_AUTOUPDATER="1"
RUN bash -c 'curl -fsSL https://claude.ai/install.sh | bash'
ARG CLAUDE_CODE_OAUTH_TOKEN
ENV CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_CODE_OAUTH_TOKEN}
+47 -1
View File
@@ -1,10 +1,38 @@
#!/bin/sh #!/bin/sh
# Usage:
# ./build.sh build the image, asking for the password that unlocks the token
# ./build.sh --encrypt encrypt a token and print the value to paste into ENCRYPTED_TOKEN
set -eu set -eu
IMAGE_NAME="${IMAGE_NAME:-debian13-source-stack}" IMAGE_NAME="${IMAGE_NAME:-debian13-source-stack}"
PREFIX="${PREFIX:-/opt/local}" PREFIX="${PREFIX:-/opt/local}"
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
# CLAUDE_CODE_OAUTH_TOKEN encrypted with AES-256-CBC (PBKDF2, base64). Generate with --encrypt.
ENCRYPTED_TOKEN='U2FsdGVkX1/BCTASs0tR40hsT+sngp46zANCbGZnklLN1M0wSJs/DxbQ6JDg593G09A+cVtVius4hJHRzB6caOO2KwBV0/+i7yUjr/PfreZksrdkz1DnFc7oorxXfvB7azuNEkQfAE2fZg8cnYL5jy3/LKRdAm11SUm83fU8ke8='
OPENSSL_ARGS="enc -aes-256-cbc -pbkdf2 -iter 600000 -a -A"
if ! command -v openssl >/dev/null 2>&1; then
echo "Error: OpenSSL is required." >&2
exit 1
fi
# read_secret PROMPT VARNAME: read the input with echo on, so it stays visible while typing.
read_secret() {
printf '%s' "$1" >&2
IFS= read -r "$2"
}
if [ "${1:-}" = "--encrypt" ]; then
read_secret "OAuth token: " token
read_secret "Password: " BUILD_PASSWORD
export BUILD_PASSWORD
printf '%s' "$token" | openssl $OPENSSL_ARGS -pass env:BUILD_PASSWORD
echo
exit 0
fi
SOURCES_DIR="${SOURCES_DIR:-$SCRIPT_DIR/../sources}" SOURCES_DIR="${SOURCES_DIR:-$SCRIPT_DIR/../sources}"
FETCH_SCRIPT="$SCRIPT_DIR/../fetch-sources.sh" FETCH_SCRIPT="$SCRIPT_DIR/../fetch-sources.sh"
@@ -13,6 +41,22 @@ if ! command -v podman >/dev/null 2>&1; then
exit 1 exit 1
fi fi
if [ -z "$ENCRYPTED_TOKEN" ]; then
echo "Error: ENCRYPTED_TOKEN is empty; run './build.sh --encrypt' and paste the output into build.sh." >&2
exit 1
fi
read_secret "Password for CLAUDE_CODE_OAUTH_TOKEN: " BUILD_PASSWORD
export BUILD_PASSWORD
if ! CLAUDE_CODE_OAUTH_TOKEN=$(printf '%s' "$ENCRYPTED_TOKEN" | openssl $OPENSSL_ARGS -d -pass env:BUILD_PASSWORD 2>/dev/null); then
echo "Error: wrong password or corrupted token." >&2
exit 1
fi
unset BUILD_PASSWORD
# Exported so podman reads the value from the environment and it never appears in the command line.
export CLAUDE_CODE_OAUTH_TOKEN
SOURCES_DIR="$SOURCES_DIR" "$FETCH_SCRIPT" SOURCES_DIR="$SOURCES_DIR" "$FETCH_SCRIPT"
# macOS reports arm64 where Linux (and Debian multiarch) call it aarch64. # macOS reports arm64 where Linux (and Debian multiarch) call it aarch64.
@@ -20,6 +64,8 @@ ARCH=$(uname -m)
[ "$ARCH" = arm64 ] && ARCH=aarch64 [ "$ARCH" = arm64 ] && ARCH=aarch64
echo "Building image $IMAGE_NAME with podman (prefix $PREFIX) ..." echo "Building image $IMAGE_NAME with podman (prefix $PREFIX) ..."
exec podman build --build-context sources="$SOURCES_DIR" \ exec podman build \
--build-arg CLAUDE_CODE_OAUTH_TOKEN \
--build-context sources="$SOURCES_DIR" \
--build-arg PREFIX="$PREFIX" --build-arg MULTIARCH="$ARCH-linux-gnu" \ --build-arg PREFIX="$PREFIX" --build-arg MULTIARCH="$ARCH-linux-gnu" \
--tag "$IMAGE_NAME" "$SCRIPT_DIR" --tag "$IMAGE_NAME" "$SCRIPT_DIR"
+4 -2
View File
@@ -96,8 +96,8 @@ fetch jsoncpp-1.9.8.tar.gz \
https://wangguofang.net/github.com/open-source-parsers/jsoncpp/archive/1.9.8.tar.gz https://wangguofang.net/github.com/open-source-parsers/jsoncpp/archive/1.9.8.tar.gz
fetch librdkafka-v2.15.0.tar.gz \ fetch librdkafka-v2.15.0.tar.gz \
https://wangguofang.net/github.com/confluentinc/librdkafka/archive/v2.15.0.tar.gz https://wangguofang.net/github.com/confluentinc/librdkafka/archive/v2.15.0.tar.gz
fetch json-c-json-c-0.19-20260627.tar.gz \ fetch json-c-json-c-0.18-20240915.tar.gz \
https://wangguofang.net/github.com/json-c/json-c/archive/json-c-0.19-20260627.tar.gz https://wangguofang.net/github.com/json-c/json-c/archive/json-c-0.18-20240915.tar.gz
fetch rapidjson-v1.1.0.tar.gz \ fetch rapidjson-v1.1.0.tar.gz \
https://wangguofang.net/github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz https://wangguofang.net/github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz
fetch curl-curl-8_21_0.tar.gz \ fetch curl-curl-8_21_0.tar.gz \
@@ -162,3 +162,5 @@ fetch log4cplus-REL_2_0_5.tar.gz \
https://wangguofang.net/github.com/log4cplus/log4cplus/archive/REL_2_0_5.tar.gz https://wangguofang.net/github.com/log4cplus/log4cplus/archive/REL_2_0_5.tar.gz
fetch ThreadPool-cc0b6371d3963f7028c2da5fc007733f9f3bf205.tar.gz \ fetch ThreadPool-cc0b6371d3963f7028c2da5fc007733f9f3bf205.tar.gz \
https://wangguofang.net/github.com/log4cplus/ThreadPool/archive/cc0b6371d3963f7028c2da5fc007733f9f3bf205.tar.gz https://wangguofang.net/github.com/log4cplus/ThreadPool/archive/cc0b6371d3963f7028c2da5fc007733f9f3bf205.tar.gz
fetch sqlite-autoconf-3540100.tar.gz \
https://www.sqlite.org/2026/sqlite-autoconf-3540100.tar.gz
+111
View File
@@ -0,0 +1,111 @@
FROM docker.io/library/rockylinux:9
# Toolchain and build tools, same as the rocky9 image.
RUN dnf install --assumeyes --enablerepo=crb \
autoconf \
automake \
bzip2 \
ca-certificates \
cmake \
curl-minimal \
gcc \
gcc-c++ \
libasan \
gcc-toolset-15-gcc-c++ \
gcc-toolset-15-libasan-devel \
git \
libtool \
make \
ninja-build \
patch \
perl-core \
pkgconf-pkg-config \
rpm-build \
tar \
xz \
which \
epel-release \
&& sed \
-e 's!^metalink=!#metalink=!g' \
-e 's!^#baseurl=!baseurl=!g' \
-e 's!https\?://download\.example/pub/epel!https://mirrors.ustc.edu.cn/epel!g' \
-i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo \
&& dnf install --assumeyes \
makeself \
&& dnf upgrade --assumeyes \
&& dnf clean all \
&& rm -rf /var/cache/dnf
RUN git config --global url."https://wangguofang.net/github.com/".insteadOf "https://github.com/"
RUN test "$(cmake --version | sed -n '1s/[^0-9]*//p' | cut -d. -f2)" -ge 29
# Libraries come from the distribution (Rocky Linux 9, CRB and EPEL) instead of being built from
# source, except Protobuf (below). A package that is not available in these repositories is skipped, not an error.
RUN dnf install --assumeyes --enablerepo=crb,epel \
--setopt=skip_missing_names_on_install=True \
--skip-broken \
boost-devel \
cyrus-sasl-devel \
fast_float-devel \
fmt-devel \
folly-devel \
gflags-devel \
glog-devel \
gmock-devel \
gmp-devel \
gnutls-devel \
gtest-devel \
hiredis-devel \
jsoncpp-devel \
json-c-devel \
libaio-devel \
libcurl-devel \
libdwarf-devel \
libevent-devel \
libmaxminddb-devel \
libsodium-devel \
liburing-devel \
libuuid-devel \
libxml2-devel \
libyaml-devel \
libzstd-devel \
log4cplus-devel \
lz4-devel \
magic_enum-devel \
nettle-devel \
numactl-devel \
openssl-devel \
rapidjson-devel \
librdkafka-devel \
snappy-devel \
spdlog-devel \
sqlite-devel \
thrift-devel \
tsl-sparse-map-devel \
xsimd-devel \
xxhash-devel \
zeromq-devel \
czmq-devel \
zlib-devel \
libarrow-devel \
parquet-libs-devel \
&& dnf clean all \
&& rm -rf /var/cache/dnf
# Protobuf is the only library built from source; it is installed under /usr/local, which takes
# precedence over the system packages in /usr.
RUN --mount=type=bind,from=sources,source=protobuf-v3.21.12.tar.gz,target=/tmp/protobuf.tar.gz \
mkdir src \
&& tar --extract --gzip --file=/tmp/protobuf.tar.gz --directory=src --strip-components=1 \
&& cmake -G Ninja -S src -B build -Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_BUILD_SHARED_LIBS=OFF \
-Dprotobuf_WITH_ZLIB=ON \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
&& cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src
CMD ["/bin/bash"]
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
set -eu
IMAGE_NAME="${IMAGE_NAME:-rocky9-system-stack}"
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
SOURCES_DIR="${SOURCES_DIR:-$SCRIPT_DIR/../sources}"
FETCH_SCRIPT="$SCRIPT_DIR/../fetch-sources.sh"
if ! command -v podman >/dev/null 2>&1; then
echo "Error: Podman is required." >&2
exit 1
fi
SOURCES_DIR="$SOURCES_DIR" "$FETCH_SCRIPT"
echo "Building image $IMAGE_NAME with podman ..."
exec podman build --build-context sources="$SOURCES_DIR" \
--tag "$IMAGE_NAME" "$SCRIPT_DIR"
+11 -1
View File
@@ -494,7 +494,7 @@ RUN --mount=type=bind,from=sources,source=librdkafka-v2.15.0.tar.gz,target=/tmp/
&& cmake --build build --parallel "$(nproc)" --target install \ && cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src && rm -rf build src
RUN --mount=type=bind,from=sources,source=json-c-json-c-0.19-20260627.tar.gz,target=/tmp/json-c.tar.gz \ RUN --mount=type=bind,from=sources,source=json-c-json-c-0.18-20240915.tar.gz,target=/tmp/json-c.tar.gz \
mkdir src \ mkdir src \
&& tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \ && tar --extract --gzip --file=/tmp/json-c.tar.gz --directory=src --strip-components=1 \
&& cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \ && cmake -G Ninja -S src -B build -DCMAKE_BUILD_TYPE=Release \
@@ -814,6 +814,16 @@ RUN --mount=type=bind,from=sources,source=duckdb-v1.5.6.tar.gz,target=/tmp/duckd
&& cmake --build build --parallel "$(nproc)" --target install \ && cmake --build build --parallel "$(nproc)" --target install \
&& rm -rf build src ui-src && rm -rf build src ui-src
RUN --mount=type=bind,from=sources,source=sqlite-autoconf-3540100.tar.gz,target=/tmp/sqlite.tar.gz \
mkdir src \
&& tar --extract --gzip --file=/tmp/sqlite.tar.gz --directory=src --strip-components=1 \
&& cd src \
&& CFLAGS="-O2 -fPIC" ./configure --prefix=${PREFIX} --libdir=${PREFIX}/lib64 --disable-shared --enable-static \
&& make --jobs="$(nproc)" \
&& make install \
&& cd .. \
&& rm -rf src
COPY source-stack.cmake ${PREFIX}/share/source-stack/source-stack.cmake COPY source-stack.cmake ${PREFIX}/share/source-stack/source-stack.cmake
CMD ["/bin/bash"] CMD ["/bin/bash"]