diff --git a/docs/compile/builder-linux/build_deps.sh b/docs/compile/builder-linux/build_deps.sh index a3e34a3..f5a4144 100755 --- a/docs/compile/builder-linux/build_deps.sh +++ b/docs/compile/builder-linux/build_deps.sh @@ -7,22 +7,22 @@ EXEDIR="$(cd "$EXEDIR"; pwd)" dl_deps() { - if [ -d "$DEPS" ]; then - dir_is_not_empty "$DEPS" && { - echo "deps dir is not empty. if you want to redownload - delete it." - return - } - else - mkdir "$DEPS" - fi - pushd "$DEPS" - curl -Lo - https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj - curl -Lo - https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj - curl -Lo - https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj - curl -Lo - https://zlib.net/zlib-1.3.1.tar.gz | tar -xz - curl -Lo - https://github.com/openresty/luajit2/archive/refs/tags/v${LUAJIT_RELEASE}.tar.gz | tar -xz - curl -Lo - https://www.lua.org/ftp/lua-${LUA_RELEASE}.tar.gz | tar -xz - popd + [ -d "$DEPS" ] || mkdir -p "$DEPS" + ( + cd "$DEPS" + exists_dir libnfnetlink-* || + curl -Lo - https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj || exit 5 + exists_dir libmnl-* || + curl -Lo - https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj || exit 5 + exists_dir libnetfilter_queue-* || + curl -Lo - https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj || exit 5 + exists_dir zlib-* || + curl -Lo - https://zlib.net/fossils/zlib-1.3.1.tar.gz | tar -xz || exit 5 + exists_dir luajit2-* || + curl -Lo - https://github.com/openresty/luajit2/archive/refs/tags/v${LUAJIT_RELEASE}.tar.gz | tar -xz || exit 5 + exists_dir lua-* || + curl -Lo - https://www.lua.org/ftp/lua-${LUA_RELEASE}.tar.gz | tar -xz || exit 5 + ) } build_netlink() @@ -83,6 +83,8 @@ build_luajit_for_target() } } +check_prog curl tar gzip bzip2 sed make cc pkg-config +check_h_files dl_deps check_toolchains ask_target @@ -90,7 +92,7 @@ ask_target for t in $TGT; do buildenv $t pushd "$DEPS" - bsd_files + install_h_files build_netlink build_zlib build_lua diff --git a/docs/compile/builder-linux/build_zapret1.sh b/docs/compile/builder-linux/build_zapret1.sh new file mode 100755 index 0000000..c539bfd --- /dev/null +++ b/docs/compile/builder-linux/build_zapret1.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +EXEDIR="$(dirname "$0")" +EXEDIR="$(cd "$EXEDIR"; pwd)" + +. "$EXEDIR/common.inc" + +ZDIR="zapret" +ZBASE="$EXEDIR" +BRANCH=master +ZURL=https://github.com/bol-van/zapret/archive/refs/heads/${BRANCH}.zip +ZBIN="$EXEDIR/binaries" + +dl_zapret1() +{ + if [ -d "$ZBASE/$ZDIR" ]; then + dir_is_not_empty "$ZBASE/$ZDIR" && { + echo "zapret dir is not empty. if you want to redownload - delete it." + return + } + rmdir "$ZBASE/$ZDIR" + fi + ( + cd "$ZBASE" + curl -Lo /tmp/zapret.zip "$ZURL" + unzip /tmp/zapret.zip + rm /tmp/zapret.zip + mv zapret-${BRANCH} $ZDIR + ) +} + +check_prog curl unzip make +dl_zapret1 +check_toolchains +ask_target + +[ -d "$ZBIN" ] || mkdir -p "$ZBIN" + +for t in $TGT; do + buildenv $t + + translate_target $t || { + echo COULD NOT TRANSLATE TARGET $t TO BIN DIR + continue + } + + pushd $ZBASE/$ZDIR + + OPTIMIZE=-Oz \ + CFLAGS="-static-libgcc -static -I$STAGING_DIR/include $MINSIZE $CFLAGS" \ + LDFLAGS="-L$STAGING_DIR/lib $LDMINSIZE $LDFLAGS" \ + make + + [ -d "$ZBIN/$ZBINTARGET" ] || mkdir "$ZBIN/$ZBINTARGET" + cp -f binaries/my/* "$ZBIN/$ZBINTARGET" + + popd + + buildenv_clear +done + diff --git a/docs/compile/builder-linux/build_zapret2.sh b/docs/compile/builder-linux/build_zapret2.sh index 6a74250..1300b31 100755 --- a/docs/compile/builder-linux/build_zapret2.sh +++ b/docs/compile/builder-linux/build_zapret2.sh @@ -20,53 +20,16 @@ dl_zapret2() } rmdir "$ZBASE/$ZDIR" fi - pushd "$ZBASE" + ( + cd "$ZBASE" curl -Lo /tmp/zapret2.zip "$ZURL" unzip /tmp/zapret2.zip rm /tmp/zapret2.zip mv zapret2-${BRANCH} $ZDIR - popd -} - -translate_target() -{ - case $1 in - aarch64-unknown-linux-musl) - ZBINTARGET=linux-arm64 - ;; - arm-unknown-linux-musleabi) - ZBINTARGET=linux-arm - ;; - x86_64-unknown-linux-musl) - ZBINTARGET=linux-x86_64 - ;; - i586-unknown-linux-musl) - ZBINTARGET=linux-x86 - ;; - mips-unknown-linux-muslsf) - ZBINTARGET=linux-mips - ;; - mipsel-unknown-linux-muslsf) - ZBINTARGET=linux-mipsel - ;; - mips64-unknown-linux-musl) - ZBINTARGET=linux-mips64 - ;; - mips64el-unknown-linux-musl) - ZBINTARGET=linux-mipsel64 - ;; - powerpc-unknown-linux-musl) - ZBINTARGET=linux-ppc - ;; - riscv64-unknown-linux-musl) - ZBINTARGET=linux-riscv64 - ;; - *) - return 1 - esac - return 0 + ) } +check_prog curl unzip make dl_zapret2 check_toolchains ask_target @@ -94,7 +57,7 @@ for t in $TGT; do OPTIMIZE=-Oz \ CFLAGS="-static-libgcc -static -I$STAGING_DIR/include $CFLAGS" \ - LDFLAGS="-L$DEPS_DIR/lib $LDFLAGS" \ + LDFLAGS="-L$STAGING_DIR/lib $LDFLAGS" \ make LUA_JIT=$LJIT LUA_CFLAGS="$LCFLAGS" LUA_LIB="$LLIB" [ -d "$ZBIN/$ZBINTARGET" ] || mkdir "$ZBIN/$ZBINTARGET" diff --git a/docs/compile/builder-linux/common.inc b/docs/compile/builder-linux/common.inc index 9af7d18..a9d5ce1 100644 --- a/docs/compile/builder-linux/common.inc +++ b/docs/compile/builder-linux/common.inc @@ -46,9 +46,14 @@ target_has_luajit() return 1 } -bsd_files() +REQD_H_FILES="/usr/include/x86_64-linux-gnu/sys/queue.h /usr/include/sys/capability.h" +check_h_files() { - install -Dm644 -t $STAGING_DIR/include/sys /usr/include/x86_64-linux-gnu/sys/queue.h /usr/include/sys/capability.h + check_file $REQD_H_FILES +} +install_h_files() +{ + install -Dm644 -t $STAGING_DIR/include/sys $REQD_H_FILES } buildenv() @@ -78,6 +83,33 @@ buildenv_clear() OLDPATH= } +which() +{ + # on some systems 'which' command is considered deprecated and not installed by default + # 'command -v' replacement does not work exactly the same way. it outputs shell aliases if present + # $1 - executable name + local IFS=: + [ "$1" != "${1#/}" ] && [ -x "$1" ] && { + echo "$1" + return 0 + } + for p in $PATH; do + [ -x "$p/$1" ] && { + echo "$p/$1" + return 0 + } + done + return 1 +} +exists() +{ + which "$1" >/dev/null 2>/dev/null +} +exists_dir() +{ + # use $1, ignore other args + [ -d "$1" ] +} dir_is_not_empty() { @@ -168,3 +200,64 @@ check_toolchains() exit 1 } } + +check_prog() +{ + while [ -n "$1" ]; do + exists $1 || { + echo $1 is not available + echo "debian/ubuntu: apt install curl xz-utils bzip2 unzip make gcc libcap-dev pkg-config" + exit 10 + } + shift + done +} +check_file() +{ + while [ -n "$1" ]; do + [ -f "$1" ] || { + echo $1 is not available + exit 10 + } + shift + done +} + +translate_target() +{ + case $1 in + aarch64-unknown-linux-musl) + ZBINTARGET=linux-arm64 + ;; + arm-unknown-linux-musleabi) + ZBINTARGET=linux-arm + ;; + x86_64-unknown-linux-musl) + ZBINTARGET=linux-x86_64 + ;; + i586-unknown-linux-musl) + ZBINTARGET=linux-x86 + ;; + mips-unknown-linux-muslsf) + ZBINTARGET=linux-mips + ;; + mipsel-unknown-linux-muslsf) + ZBINTARGET=linux-mipsel + ;; + mips64-unknown-linux-musl) + ZBINTARGET=linux-mips64 + ;; + mips64el-unknown-linux-musl) + ZBINTARGET=linux-mipsel64 + ;; + powerpc-unknown-linux-musl) + ZBINTARGET=linux-ppc + ;; + riscv64-unknown-linux-musl) + ZBINTARGET=linux-riscv64 + ;; + *) + return 1 + esac + return 0 +} diff --git a/docs/compile/builder-linux/get_toolchains.sh b/docs/compile/builder-linux/get_toolchains.sh index b3c13df..d47c0f9 100755 --- a/docs/compile/builder-linux/get_toolchains.sh +++ b/docs/compile/builder-linux/get_toolchains.sh @@ -7,13 +7,16 @@ EXEDIR="$(cd "$EXEDIR"; pwd)" BASEURL=https://github.com/bol-van/musl-cross/releases/download/latest +check_prog curl tar xz + [ -d "$TOOLCHAINS" ] || mkdir -p "$TOOLCHAINS" ask_target 1 -pushd "$TOOLCHAINS" +( +cd "$TOOLCHAINS" for t in $TGT; do [ -d "$t" ] && rm -r "$t" curl -Lo - "${BASEURL}/${t}.tar.xz" | tar -Jx done -popd +)