diff --git a/Dockerfile b/Dockerfile index ceaee92..50f5897 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,17 +6,6 @@ ARG GO17_IMG="golang:1.17-alpine3.16" ARG GO18_IMG="golang:1.18-alpine3.16" ARG PYTHON_IMG="python:3.10-alpine3.16" -# Compile upx (under gcc10) -FROM ${ALPINE_IMG} AS upx -ENV UPX_VERSION="3.96" -RUN sed -i 's/v3.\d\d/v3.15/' /etc/apk/repositories && \ - apk add bash build-base perl ucl-dev zlib-dev -RUN wget https://github.com/upx/upx/releases/download/v${UPX_VERSION}/upx-${UPX_VERSION}-src.tar.xz && \ - tar xf upx-${UPX_VERSION}-src.tar.xz -WORKDIR ./upx-${UPX_VERSION}-src/ -RUN make all && mkdir -p /upx/bin/ && mv ./src/upx.out /upx/bin/upx && \ - mkdir -p /upx/lib/ && cd /usr/lib/ && cp -d ./libgcc_s.so* ./libstdc++.so* ./libucl.so* /upx/lib/ - # Download build-base FROM ${ALPINE_IMG} AS build-base WORKDIR /apk/ @@ -24,6 +13,12 @@ RUN apk add build-base | grep -oE 'Installing \S+' | cut -b 12- > ./build-base RUN chmod +x ./build-base && cat ./build-base | xargs -n1 apk fetch && \ sed -i 's/^/ \/apk\/&/g;s/$/&-*.apk/g;1i\apk add' ./build-base && sed -i ':a;N;s/\n//g;ba' ./build-base +# Compile numpy +FROM ${PYTHON_IMG} AS numpy +WORKDIR /wheels/ +COPY --from=build-base /apk/ /apk/ +RUN /apk/build-base && pip wheel numpy + # Compile gevent FROM ${PYTHON_IMG} AS gevent WORKDIR /wheels/ @@ -31,12 +26,6 @@ RUN apk add libffi-dev COPY --from=build-base /apk/ /apk/ RUN /apk/build-base && pip wheel gevent -# Compile numpy -FROM ${PYTHON_IMG} AS numpy -WORKDIR /wheels/ -COPY --from=build-base /apk/ /apk/ -RUN /apk/build-base && pip wheel numpy - # Build python wheels FROM ${PYTHON_IMG} AS wheels WORKDIR /wheels/ @@ -46,6 +35,17 @@ RUN /apk/build-base && pip wheel colorlog flask IPy psutil pysocks requests sals COPY --from=gevent /wheels/*.whl /wheels/ COPY --from=numpy /wheels/*.whl /wheels/ +# Compile upx (under gcc10) +FROM ${ALPINE_IMG} AS upx +ENV UPX_VERSION="3.96" +RUN sed -i 's/v3.\d\d/v3.15/' /etc/apk/repositories && \ + apk add bash build-base perl ucl-dev zlib-dev +RUN wget https://github.com/upx/upx/releases/download/v${UPX_VERSION}/upx-${UPX_VERSION}-src.tar.xz && \ + tar xf upx-${UPX_VERSION}-src.tar.xz +WORKDIR ./upx-${UPX_VERSION}-src/ +RUN make -C ./src/ && mkdir -p /upx/bin/ && mv ./src/upx.out /upx/bin/upx && \ + mkdir -p /upx/lib/ && cd /usr/lib/ && cp -d ./libgcc_s.so* ./libstdc++.so* ./libucl.so* /upx/lib/ + # Compile shadowsocks-rust FROM ${RUST_IMG} AS ss-rust ENV SS_RUST="1.15.0-alpha.8" @@ -59,7 +59,7 @@ RUN cargo build --target-dir ./ --release --bin sslocal --bin ssserver \ mv ./release/sslocal /tmp/ss-rust-local && mv ./release/ssserver /tmp/ss-rust-server && \ strip /tmp/ss-rust-* COPY --from=upx /upx/ /usr/ -RUN upx -9 /tmp/ss-rust-* +RUN ls /tmp/ss-rust-* | xargs -P0 -n1 upx -9 # Compile shadowsocks-libev FROM ${ALPINE_IMG} AS ss-libev @@ -174,7 +174,7 @@ RUN cargo build --target-dir ./ --release && \ mv ./release/qtun-client ./release/qtun-server /plugins/ && \ strip /plugins/* COPY --from=upx /upx/ /usr/ -RUN upx -9 /plugins/qtun-* +RUN ls /plugins/qtun-* | xargs -P0 -n1 upx -9 # Compile sip003 plugins (part2 -> go1.16) FROM ${GO16_IMG} AS plugin-2 @@ -232,7 +232,7 @@ RUN go mod download -x RUN env CGO_ENABLED=0 go build -v -o gun-plugin -trimpath -ldflags "-s -w" ./cmd/sip003/ && \ mv ./gun-plugin /plugins/ COPY --from=upx /upx/ /usr/ -RUN upx -9 /plugins/* +RUN ls /plugins/* | xargs -P0 -n1 upx -9 # Compile sip003 plugins (part3 -> go1.17) FROM ${GO17_IMG} AS plugin-3 @@ -260,13 +260,13 @@ RUN env CGO_ENABLED=0 go build -v -trimpath -ldflags "-X main.version=$(git desc env CGO_ENABLED=0 go build -v -trimpath -ldflags "-X main.version=$(git describe --tags) -s -w" ./cmd/ck-server && \ mv ./ck-client ./ck-server /plugins/ COPY --from=upx /upx/ /usr/ -RUN upx -9 /plugins/* +RUN ls /plugins/* | xargs -P0 -n1 upx -9 # Combine sip003 plugins FROM ${ALPINE_IMG} AS plugin -COPY --from=plugin-1 /plugins/ /release/ -COPY --from=plugin-2 /plugins/ /release/ -COPY --from=plugin-3 /plugins/ /release/ +COPY --from=plugin-1 /plugins/ /plugins/ +COPY --from=plugin-2 /plugins/ /plugins/ +COPY --from=plugin-3 /plugins/ /plugins/ # Compile xray-core and v2fly-core FROM ${GO18_IMG} AS v2ray @@ -285,7 +285,7 @@ RUN go mod download -x RUN env CGO_ENABLED=0 go build -v -o v2ray -trimpath -ldflags "-s -w" ./main && \ mv ./v2ray /tmp/ COPY --from=upx /upx/ /usr/ -RUN upx -9 /tmp/*ray +RUN ls /tmp/*ray | xargs -P0 -n1 upx -9 # Compile trojan-go FROM ${GO17_IMG} AS trojan-go @@ -391,7 +391,7 @@ RUN env CGO_ENABLED=0 go build -v -trimpath -ldflags \ "-s -w -X 'github.com/icpz/open-snell/constants.Version=${SNELL_VERSION}'" ./cmd/snell-server && \ mv ./snell-client ./snell-server /tmp/ COPY --from=upx /upx/ /usr/ -RUN upx -9 /tmp/snell-* +RUN ls /tmp/snell-* | xargs -P0 -n1 upx -9 # Compile hysteria FROM ${GO17_IMG} AS hysteria @@ -475,7 +475,7 @@ RUN mkdir -p /asset/usr/local/lib/python${PYTHON}/site-packages/ && \ tar xf /packages.tar.gz -C /asset/usr/local/lib/python${PYTHON}/site-packages/ COPY --from=openssl /tmp/libcrypto.so* /asset/lib/ COPY --from=shadowsocks /release/ /asset/usr/bin/ -COPY --from=plugin /release/ /asset/usr/bin/ +COPY --from=plugin /plugins/ /asset/usr/bin/ COPY --from=v2ray /tmp/*ray /asset/usr/bin/ COPY --from=trojan /tmp/trojan* /asset/usr/bin/ COPY --from=gost /tmp/gost* /asset/usr/bin/