Files
shadowsocks-libev/docker/static/README.md
T
Max Lv 201e70c4bd Modernize C builds with offline dependencies and portable runtime helpers (#3050)
Bundle pinned offline dependencies, remove libcork/libipset and submodule requirements, and add portable runtime helpers with relocatable static/shared library installations.

Add Clang static build validation for Linux/musl, macOS and Windows, real TCP/UDP and SIP003 interoperability coverage, and recorded performance tradeoffs. All 21 hosted checks pass at the reviewed PR head 8d504e6218.
2026-09-11 13:42:11 +08:00

2.1 KiB

Fully static Linux builds

The Alpine/musl builder uses Clang with LLD by default and links both third-party dependencies and libc statically. WITH_STATIC=ON alone only selects static third-party libraries; this image also passes -DCMAKE_EXE_LINKER_FLAGS=-static and omits shared-library outputs. The compile, unit/vendor tests and six-method TCP/UDP relay tests run with Docker network access disabled. The final ELF check rejects interpreters and dynamic library dependencies. Initial image/toolchain installation requires networking.

From the repository root, export binaries and licenses (ARM64 example):

docker build --platform linux/arm64 -f docker/static/Dockerfile \
  --target artifacts --output type=local,dest=build-artifacts/static-linux-arm64 .

Requires Docker Buildx/BuildKit. If Docker Hub is unavailable, add --build-arg ALPINE_IMAGE=public.ecr.aws/docker/library/alpine:3.24. An alternate package mirror can be selected with --build-arg ALPINE_MIRROR=https://mirrors.aliyun.com/alpine; APK signature checks remain enabled. Docker build proxy settings apply to package installation; a broken configured proxy can be bypassed for this command with empty HTTP_PROXY, HTTPS_PROXY, ALL_PROXY build arguments and their lowercase equivalents.

Use --platform linux/amd64 and a different destination for x86-64. Docker needs a matching native builder or CPU emulation to compile and run the tests for a foreign architecture. Add --build-arg SS_MINIMAL=ON for the minimal profile.

Build the scratch runtime image using the same cached build stage:

docker build --platform linux/arm64 -f docker/static/Dockerfile \
  --target runtime -t shadowsocks-libev:static-arm64 .
docker run --rm -p 8388:8388/tcp -p 8388:8388/udp \
  shadowsocks-libev:static-arm64 \
  -s 0.0.0.0 -p 8388 -k example-password -m aes-256-gcm -u

The runtime image has no shell or external plugin executables. Supply any SIP003 plugin and its own runtime requirements separately. Configuration files can be bind-mounted and passed with -c. Exported binaries run on Linux with the same CPU architecture; they do not run directly on macOS or Windows.