-
-
Save harv/dd0bcd5eba533cbc267f6a0aaf6bee62 to your computer and use it in GitHub Desktop.
| #!/bin/sh | |
| # cross & static compile shadowsocks-libev | |
| PCRE_VER=8.41 | |
| PCRE_FILE="http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_VER.tar.gz" | |
| MBEDTLS_VER=2.6.0 | |
| MBEDTLS_FILE="https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz" | |
| LIBSODIUM_VER=1.0.15 | |
| LIBSODIUM_FILE="https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz" | |
| LIBEV_VER=4.24 | |
| LIBEV_FILE="http://dist.schmorp.de/libev/libev-$LIBEV_VER.tar.gz" | |
| LIBC_ARES_VER=1.13.0 | |
| LIBC_ARES_FILE="https://c-ares.haxx.se/download/c-ares-$LIBC_ARES_VER.tar.gz" | |
| SHADOWSOCKS_LIBEV_VER=3.1.0 | |
| SHADOWSOCKS_LIBEV_FILE="https://github.com/shadowsocks/shadowsocks-libev" | |
| SIMPLE_OBFS_VER=0.0.4 | |
| SIMPLE_OBFS_FILE="https://github.com/shadowsocks/simple-obfs" | |
| cur_dir=$(pwd) | |
| prepare() { | |
| rm -rf $cur_dir/build && mkdir $cur_dir/build | |
| } | |
| compile_pcre() { | |
| [ -d $prefix/pcre ] && return | |
| cd $cur_dir/build | |
| wget --no-check-certificate $PCRE_FILE | |
| tar xvf pcre-$PCRE_VER.tar.gz | |
| cd pcre-$PCRE_VER | |
| CPPFLAGS="-DNEED_PRINTF" ./configure --prefix=$prefix/pcre --host=$host --enable-jit --enable-utf8 --enable-unicode-properties --disable-shared | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| compile_mbedtls() { | |
| [ -d $prefix/mbedtls ] && return | |
| cd $cur_dir/build | |
| wget --no-check-certificate $MBEDTLS_FILE | |
| tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz | |
| cd mbedtls-$MBEDTLS_VER | |
| prefix_reg=$(echo $prefix | sed "s/\//\\\\\//g") | |
| sed -i "s/DESTDIR=\/usr\/local/DESTDIR=$prefix_reg\/mbedtls/g" Makefile | |
| [ -z $host ] && make install -j$(getconf _NPROCESSORS_ONLN) || CC=$host-gcc AR=$host-ar LD=$host-ld make install -j$(getconf _NPROCESSORS_ONLN) | |
| } | |
| compile_libsodium() { | |
| [ -d $prefix/libsodium ] && return | |
| cd $cur_dir/build | |
| wget --no-check-certificate $LIBSODIUM_FILE | |
| tar xvf libsodium-$LIBSODIUM_VER.tar.gz | |
| cd libsodium-$LIBSODIUM_VER | |
| ./configure --prefix=$prefix/libsodium --host=$host --disable-ssp --disable-shared | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| compile_libev() { | |
| [ -d $prefix/libev ] && return | |
| cd $cur_dir/build | |
| wget --no-check-certificate $LIBEV_FILE | |
| tar xvf libev-$LIBEV_VER.tar.gz | |
| cd libev-$LIBEV_VER | |
| ./configure --prefix=$prefix/libev --host=$host --disable-shared | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| compile_libc_ares() { | |
| [ -d $prefix/libc-ares ] && return | |
| cd $cur_dir/build | |
| wget --no-check-certificate $LIBC_ARES_FILE | |
| tar xvf c-ares-$LIBC_ARES_VER.tar.gz | |
| cd c-ares-$LIBC_ARES_VER | |
| ./configure --prefix=$prefix/libc-ares --host=$host --disable-shared | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| compile_shadowsocks_libev() { | |
| [ -f $prefix/shadowsocks-libev/bin/ss-local ] && return | |
| cd $cur_dir/build | |
| git clone --branch v$SHADOWSOCKS_LIBEV_VER --single-branch --depth 1 $SHADOWSOCKS_LIBEV_FILE | |
| cd shadowsocks-libev | |
| git submodule update --init --recursive | |
| ./autogen.sh | |
| LIBS="-lpthread -lm" LDFLAGS="-Wl,-static -static-libgcc -L$prefix/libc-ares/lib -L$prefix/libev/lib" CFLAGS="-I$prefix/libc-ares/include -I$prefix/libev/include" ./configure --prefix=$prefix/shadowsocks-libev --host=$host --disable-ssp --disable-documentation --with-mbedtls=$prefix/mbedtls --with-pcre=$prefix/pcre --with-sodium=$prefix/libsodium | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| compile_simple_obfs() { | |
| [ -f $prefix/shadowsocks-libev/bin/obfs-local ] && return | |
| cd $cur_dir/build | |
| git clone --branch v$SIMPLE_OBFS_VER --single-branch --depth 1 $SIMPLE_OBFS_FILE | |
| cd simple-obfs | |
| git submodule update --init --recursive | |
| ./autogen.sh | |
| LIBS="-lpthread -lm" LDFLAGS="-Wl,-static -static-libgcc -L$prefix/libc-ares/lib -L$prefix/libev/lib -L$prefix/libsodium/lib" CFLAGS="-I$prefix/libc-ares/include -I$prefix/libev/include -I$prefix/libsodium/include" ./configure --prefix=$prefix/shadowsocks-libev --host=$host --disable-ssp --disable-documentation | |
| make -j$(getconf _NPROCESSORS_ONLN) && make install | |
| } | |
| clean() { | |
| cd $cur_dir | |
| rm -rf $cur_dir/build | |
| } | |
| while [ ! -z $1 ]; do | |
| case $1 in | |
| -h | --help) | |
| echo "Useage: sh $0 [--host=<host>] [--prefix=<path>]" | |
| echo "" | |
| echo "Options:" | |
| echo " --host=<host> the machine that you are building for" | |
| echo " --prefix=<path> install architecture-independent files in prefix[$cur_dir/dists]" | |
| exit 0 | |
| ;; | |
| --host) | |
| shift | |
| host=$1 | |
| ;; | |
| --host=*) | |
| arr=(${1//=/ }) | |
| host=${arr[1]} | |
| ;; | |
| --prefix) | |
| shift | |
| prefix=$1 | |
| ;; | |
| --prefix=*) | |
| arr=(${1//=/ }) | |
| prefix=${arr[1]} | |
| ;; | |
| esac | |
| shift | |
| done | |
| red="\033[0;31m" | |
| green="\033[0;32m" | |
| plain="\033[0m" | |
| [ -z $host ] && compiler=gcc || compiler=$host-gcc | |
| if [ -f "$(which $compiler)" ]; then | |
| echo -e "found cross compiler ${green}$(which ${compiler})${plain}" | |
| else | |
| echo -e "${red}Error:${plain} not found cross compiler ${green}${compiler}${plain}" | |
| exit -1 | |
| fi | |
| [ -z $prefix ] && prefix=$cur_dir/dists | |
| echo -e "binaries will be installed in ${green}${prefix}${plain}" | |
| prepare | |
| compile_pcre | |
| compile_mbedtls | |
| compile_libsodium | |
| compile_libev | |
| compile_libc_ares | |
| compile_shadowsocks_libev | |
| compile_simple_obfs | |
| clean |
请您指导一下,谢谢您!
autoreconf: aclocal failed with exit status: 1
./11.sh: 行 95: ./configure: 没有那个文件或目录
make: *** 没有指明目标并且找不到 makefile。 停止。
正克隆到 'simple-obfs'...
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 75 (delta 7), reused 46 (delta 3), pack-reused 0
展开对象中: 100% (75/75), 完成.
检查连接... 完成。
子模组 'libcork' (https://github.com/shadowsocks/libcork.git) 未对路径 'libcork' 注册
正克隆到 'libcork'...
remote: Counting objects: 3741, done.
remote: Total 3741 (delta 0), reused 0 (delta 0), pack-reused 3741
接收对象中: 100% (3741/3741), 1.42 MiB | 897.00 KiB/s, 完成.
处理 delta 中: 100% (1969/1969), 完成.
检查连接... 完成。
子模组路径 'libcork':检出 '3bcb8324431d3bd4be5e4ff2a4323b455c8d5409'
main::scan_file() called too early to check prototype at /projects/hnd/tools/linux/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/aclocal line 618.
autom4te: need GNU m4 1.4 or later: /projects/hnd/tools/linux/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/m4
aclocal: /projects/hnd/tools/linux/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/autom4te failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
./11.sh: 行 108: ./configure: 没有那个文件或目录
make: *** 没有指明目标并且找不到 makefile。 停止。
把 hndtools 放到 PATH 的最后试试
非常感谢您的指导,本人勤奋菜鸟一只,反复研究,通过您的手动编译教程成功编译3.0.8,但是最新的3.1.0编译不成功,官方改libudns为libc-ares,我就不会弄了。。。期盼您的再次指导或者更新哪个帖子。。谢谢您的帖子。
@qswx2007 怎么编译成功的
@harv 能帮忙看看嘛,我也是用Netgear R6400的
configure.ac:13: installing 'auto/ar-lib'
configure.ac:10: installing 'auto/compile'
configure.ac:21: installing 'auto/config.guess'
configure.ac:21: installing 'auto/config.sub'
configure.ac:12: installing 'auto/install-sh'
configure.ac:12: installing 'auto/missing'
libcork/Makefile.am: installing 'auto/depcomp'
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/root/cross/build/simple-obfs':
configure: error: C compiler cannot create executables
See `config.log' for more details
make: *** No targets specified and no makefile found. Stop.
@ LawrenceHan加入电报讨论之:https://t.me/joinchat/FWY7DA_CQ7HWhy9AyaOekA
It works.
NOTE:
- change /bin/sh to /bin/bash if neccessary.
- set env properly like this
export host=arm-brcm-linux-uclibcgnueabi
PCRE_VER=8.41
PCRE_FILE="http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_VER.tar.gz"
update to
PCRE_VER=8.41
PCRE_FILE="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_VER.tar.gz"
适当优化,添加 cross toolchains,https://gist.github.com/0neday/20b95dc30157af177cb10c38f936d3ef
On Alpine:
compile_shadowsocks_libev() {
[ -f $prefix/shadowsocks-libev/bin/ss-local ] && return
cd $cur_dir/build
git clone --branch v$SHADOWSOCKS_LIBEV_VER --single-branch --depth 1 $SHADOWSOCKS_LIBEV_FILE
cd shadowsocks-libev
git submodule update --init --recursive
./autogen.sh
LIBS="-lpthread -lm" LDFLAGS="-L$prefix/libc-ares/lib -L$prefix/libev/lib" CFLAGS="-I$prefix/libc-ares/include -I$prefix/libev/include" ./configure --prefix=$prefix/shadowsocks-libev --host=$host --disable-ssp --disable-documentation --with-mbedtls=$prefix/mbedtls --with-pcre=$prefix/pcre --with-sodium=$prefix/libsodium
ld_line=$(grep "^LDFLAGS" src/Makefile | sed 's/LDFLAGS = //g')
sed -i "s#$ld_line#-all-static -s $ld_line#g" src/Makefile
make -j$(getconf _NPROCESSORS_ONLN) && make install
}
All the links are out of date. None of them work.
#!/bin/sh to #!/bin/bash
work for zsh.