From a4d566fb29521458b1c477d9066f4407f7d00824 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Tue, 25 Jun 2024 06:57:19 +0800 Subject: [PATCH] added shadowsocks-rust --- .gitea/workflows/build-shadowsocks-rust.yaml | 54 +++++++++++++++++++ shadowsocks-rust/Dockerfile | 57 ++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 .gitea/workflows/build-shadowsocks-rust.yaml create mode 100644 shadowsocks-rust/Dockerfile diff --git a/.gitea/workflows/build-shadowsocks-rust.yaml b/.gitea/workflows/build-shadowsocks-rust.yaml new file mode 100644 index 0000000..63f39ff --- /dev/null +++ b/.gitea/workflows/build-shadowsocks-rust.yaml @@ -0,0 +1,54 @@ +name: CI +on: + push: + branches: [ master ] + paths: + - 'shadowsocks-rust/*' + - '.gitea/workflows/build-shadowsocks-rust.yaml' +jobs: + "Build shadowsocks-rust docker images": + runs-on: woryzen + steps: + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + - + name: Login to Gitea container registry + uses: docker/login-action@v3 + with: + registry: gitea.woggioni.net + username: woggioni + password: ${{ secrets.PUBLISHER_TOKEN }} + - + name: Build and push sserver-rust amd64 image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:shadowsocks-rust" + platforms: linux/amd64 + push: true + tags: | + "gitea.woggioni.net/woggioni/sserver-rust:latest" + "gitea.woggioni.net/woggioni/sserver-rust:v1.20.1" + build-args: | + "TARGETARCH=amd64" + "VERSION=1.20.1" + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/sserver-rust:buildx + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/sserver-rust:buildx + - + name: Build and push sserver-rust arm64 image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:shadowsocks-rust" + platforms: linux/arm64 + push: true + tags: | + "gitea.woggioni.net/woggioni/sserver-rust:latest" + "gitea.woggioni.net/woggioni/sserver-rust:v1.20.1" + build-args: | + "TARGETARCH=arm64" + "VERSION=1.20.1" + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/sserver-rust:buildx + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/sserver-rust:buildx + diff --git a/shadowsocks-rust/Dockerfile b/shadowsocks-rust/Dockerfile new file mode 100644 index 0000000..814eb59 --- /dev/null +++ b/shadowsocks-rust/Dockerfile @@ -0,0 +1,57 @@ +FROM --platform=$BUILDPLATFORM rust:alpine3.20 AS builder + +ARG TARGETARCH VERSION + +RUN set -x \ + && apk add --no-cache build-base cmake llvm15-dev clang15-libclang clang15 rust-bindgen git + +WORKDIR /root/shadowsocks-rust + +RUN git clone --depth 1 --branch "v${VERSION}" https://github.com/shadowsocks/shadowsocks-rust.git . + +RUN case "$TARGETARCH" in \ + "386") \ + RUST_TARGET="i686-unknown-linux-musl" \ + MUSL="i686-linux-musl" \ + ;; \ + "amd64") \ + RUST_TARGET="x86_64-unknown-linux-musl" \ + MUSL="x86_64-linux-musl" \ + ;; \ + "arm64") \ + RUST_TARGET="aarch64-unknown-linux-musl" \ + MUSL="aarch64-linux-musl" \ + ;; \ + *) \ + echo "Doesn't support $TARGETARCH architecture" \ + exit 1 \ + ;; \ + esac \ + && wget -qO- "https://musl.cc/$MUSL-cross.tgz" | tar -xzC /root/ \ + && PATH="/root/$MUSL-cross/bin:$PATH" \ + && CC=/root/$MUSL-cross/bin/$MUSL-gcc \ + && echo "CC=$CC" \ + && rustup override set stable \ + && rustup target add "$RUST_TARGET" \ + && RUSTFLAGS="-C linker=$CC" CC=$CC cargo build --target "$RUST_TARGET" --release --features "full-extra" \ + && mv target/$RUST_TARGET/release/ss* target/release/ + +FROM alpine:3.20 AS sslocal + +# NOTE: Please be careful to change the path of these binaries, refer to #1149 for more information. +COPY --from=builder /root/shadowsocks-rust/target/release/sslocal /usr/bin/ +COPY --from=builder /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/ +COPY --from=builder /root/shadowsocks-rust/docker/docker-entrypoint.sh /usr/bin/ + +ENTRYPOINT [ "docker-entrypoint.sh" ] +CMD [ "sslocal", "--log-without-time", "-c", "/etc/shadowsocks-rust/config.json" ] + +FROM alpine:3.17 AS ssserver + +COPY --from=builder /root/shadowsocks-rust/target/release/ssserver /usr/bin/ +COPY --from=builder /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/ +COPY --from=builder /root/shadowsocks-rust/docker/docker-entrypoint.sh /usr/bin/ + +ENTRYPOINT [ "docker-entrypoint.sh" ] + +CMD [ "ssserver", "--log-without-time", "-a", "nobody", "-c", "/etc/shadowsocks-rust/config.json" ]