diff --git a/.gitignore b/.gitignore index 012c5d61..9c04b8e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ /target /build/*.tar.gz /build/*.tar.xz +/build/target +/build/install /dev /*.log /debian/*.log diff --git a/build/Dockerfile b/build/Dockerfile index 276a622e..f8150c8a 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -13,9 +13,9 @@ RUN cd /home/rust/libs && \ make && sudo make install && \ cd .. && rm -rf libsodium-$SODIUM_VERS.tar.gz libsodium-$SODIUM_VERS -#RUN rustup install nightly -#RUN rustup default nightly -#RUN rustup target add x86_64-unknown-linux-musl +RUN rustup install nightly +RUN rustup default nightly +RUN rustup target add x86_64-unknown-linux-musl ENV SODIUM_STATIC=yes ENV SODIUM_LIB_DIR=/usr/local/musl/lib diff --git a/build/build-release b/build/build-release index 0a08e530..0bdda07e 100755 --- a/build/build-release +++ b/build/build-release @@ -1,9 +1,12 @@ #!/bin/sh -VERSION="latest" +CUR_DIR=$( cd $( dirname $0 ) && pwd ) +VERSION=$(grep -E '^version' ${CUR_DIR}/../Cargo.toml | awk '{print $3}' | sed 's/"//g') ENABLE_GZ=false +BUILD_DOCKER_IMG=false +BUILD_NIGHTLY=false -while getopts "v:gh" opt; do +while getopts "v:ghbn" opt; do case $opt in v) VERSION=$OPTARG @@ -11,50 +14,111 @@ while getopts "v:gh" opt; do g) ENABLE_GZ=true ;; + b) + BUILD_DOCKER_IMG=true + ;; + n) + BUILD_NIGHTLY=true + ;; h|\?) - echo "$0 [-v VERSION] [-g] [-h]" + echo "$0 [-v VERSION] [-g] [-h] [-b] [-n]" + echo " -v VERSION Specify VERSION in output package name" + echo " -g Enable GZip" + echo " -b Re-build docker image" + echo " -n Build with nightly rust" + echo " -h Show this image" exit 0 ;; esac done -IMAGE='shadowsocks-rust:latest' -CUR_DIR=$( cd $( dirname $0 ) && pwd ) +if $BUILD_NIGHTLY; then + RELEASE_NAME="nightly"; +else + RELEASE_NAME="stable"; +fi -docker build -t "${IMAGE}" "$CUR_DIR" +echo "* Building ${RELEASE_NAME} package ${VERSION} ..." + +IMAGE='shadowsocks-rust:latest' + +if $BUILD_DOCKER_IMG; then + echo "* Rebuild docker image ${IMAGE} ..."; + docker build -t "${IMAGE}" "$CUR_DIR"; +fi SRC_PATH="/home/rust/src" CARGO_TARGET_DIR="${SRC_PATH}/build/target" +CARGO_INSTALL_ROOT="${SRC_PATH}/build/install" LOCAL_USER=$( id -u "$USER" ):$( id -g "$USER" ) TARGET_NAME="x86_64-unknown-linux-musl" -docker run \ - -e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \ - -v "${CUR_DIR}"/..:"$SRC_PATH" \ - -v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \ - "${IMAGE}" \ - /bin/bash -c \ - "sudo mkdir -p $CARGO_TARGET_DIR \ - && sudo chown -R rust:rust $CARGO_TARGET_DIR \ - && cargo build --release --target $TARGET_NAME \ - && sudo chown -R $LOCAL_USER $CARGO_TARGET_DIR" +if $BUILD_NIGHTLY; then + ## -- BUILD nightly version + docker run \ + -e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \ + -e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \ + -e HTTP_PROXY="$HTTP_PROXY" \ + -e HTTPS_PROXY="$HTTPS_PROXY" \ + -v "${CUR_DIR}"/..:"$SRC_PATH" \ + -v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \ + "${IMAGE}" \ + /bin/bash -c \ + "sudo mkdir -p $CARGO_TARGET_DIR \ + && sudo rm -rf $CARGO_INSTALL_ROOT \ + && (rustup update || (rustup toolchain remove nightly && rustup toolchain install nightly)) \ + && rustup run nightly cargo install -f --features miscreant \ + && sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT"; +else + docker run \ + -e CARGO_TARGET_DIR="${CARGO_TARGET_DIR}" \ + -e CARGO_INSTALL_ROOT="${CARGO_INSTALL_ROOT}" \ + -e HTTP_PROXY="$HTTP_PROXY" \ + -e HTTPS_PROXY="$HTTPS_PROXY" \ + -v "${CUR_DIR}"/..:"$SRC_PATH" \ + -v "${CUR_DIR}/target/musl-builder/cargo-cache":/home/rust/.cargo/registry \ + "${IMAGE}" \ + /bin/bash -c \ + "sudo mkdir -p $CARGO_TARGET_DIR \ + && sudo rm -rf $CARGO_INSTALL_ROOT \ + && (rustup update || (rustup toolchain remove stable && rustup toolchain install stable)) \ + && cargo install -f \ + && sudo chown -R $LOCAL_USER $CARGO_INSTALL_ROOT"; +fi +if [[ $? -ne "0" ]]; then + exit 1; +fi -TARGET_DIR="$CUR_DIR/target/$TARGET_NAME/release/" +TARGET_DIR="$CUR_DIR/install/bin" cd "$TARGET_DIR" +echo "* Finished building, target in ${TARGET_DIR}" + ## Disable OS X ACL file export COPYFILE_DISABLE=1 if $ENABLE_GZ; then - tar -czf "${CUR_DIR}/shadowsocks-${VERSION}-release.${TARGET_NAME}.tar.gz" \ + PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.gz" + PKG_PATH="${CUR_DIR}/${PKG_NAME}" + echo "* Packaging GZip in ${PKG_PATH} ..." + + tar -czf ${PKG_PATH} \ "sslocal" \ "ssserver" \ - "ssurl" + "ssurl"; + + echo "* Done build package ${PKG_NAME}" fi -tar -cJf "${CUR_DIR}/shadowsocks-${VERSION}-release.${TARGET_NAME}.tar.xz" \ +PKG_NAME="shadowsocks-v${VERSION}-${RELEASE_NAME}.${TARGET_NAME}.tar.xz" +PKG_PATH="${CUR_DIR}/${PKG_NAME}" +echo "* Packaging XZ in ${PKG_PATH} ..." + +tar -cJf ${PKG_PATH} \ "sslocal" \ "ssserver" \ "ssurl" + +echo "* Done build package ${PKG_NAME}" \ No newline at end of file