2017-09-14 53 views
0

我需要在Linux上为Android构建最新的tor,以便在Tor Onion Proxy Library中继续使用。适用于Android的Linux on Linux

当前最新的stable tor是maint-0.3.1。

我正在使用Android NDK r15b。

回答

0

我准备了一个解决方案,我将在下面展示。 它是各种来源的组成。该脚本可以进一步优化。

的指令允许使用构建Tor:

  • Android SDK中25
  • 的Android NDK r15b
  • TOR MAINT-0.3.1
  • openssl1.1.0f
  • 的libevent 2.0.23 -stable-rc

主要步骤是:

  • 构建OpenSSL的
  • 构建了libevent
  • 构建Tor

完整的脚本可以下载here

指定安装NDK的位置:我们创造

export ANDROID_NDK_HOME=/home/marco/Android/ndkr15b 

和工作被称为 '天然' 的文件夹中:

rm -Rf native 
mkdir native 
mkdir native/lib 
cd native 

构建OpenSSL的

参见these instructions

wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz 

setenv-android.sh可以从here被下载和编辑,或使用this version已经修改为使用_ANDROID_EABI = “臂-Linux的androideabi-4.9”。

# ANDROID_NDK_ROOT is required by setenv-android.sh 
export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME 

. ../setenv-android.sh 
# ANDROID_TOOLCHAIN is now set 

tar -xvzf openssl-1.1.0f.tar.gz 
cd openssl-1.1.0f 

# openssl engine is needed by libevent 
./config shared no-ssl2 no-ssl3 no-comp no-hw --openssldir=/usr/local/ssl/android-16/ 

make depend 

make all 

照顾:下一个命令在/ usr /本地/包含/ OpenSSL的,在/ usr /本地/ LIB /分别安装交叉编译头文件和库。连接tor时,将在最后一步中使用交叉编译的库。

sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib 

cd .. 
# go back to native folder 

# when linking to, openssl libraries are still linked from /usr/local/lib/ 
cp ./openssl-1.1.0f/'*'.a lib/ 
cp -R ./openssl-1.1.0f/include/openssl ./include 

构建了libevent

rm -Rf libevent 

我们需要删除提及arc4random_addrandom,为方便起见,我们可以用这个repo修正的libevent的。 查看diff

git clone https://github.com/marcotessarotto/libevent 
cd libevent 

export NDK=$ANDROID_NDK_ROOT 

$NDK/build/tools/make-standalone-toolchain.sh --platform=android-16 --toolchain=arm-linux-androideabi-4.9 --install-dir=`pwd`/android-toolchain-arm 
export TOOLCHAIN_PATH=`pwd`/android-toolchain-arm/bin 
export TOOL=arm-linux-androideabi 
export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL} 
export CC="$NDK_TOOLCHAIN_BASENAME-gcc -D__ANDROID_API__=16 " 
export CXX="$NDK_TOOLCHAIN_BASENAME-g++ -D__ANDROID_API__=16 " 
export LINK=${CXX} 
export LD=$NDK_TOOLCHAIN_BASENAME-ld 
export AR=$NDK_TOOLCHAIN_BASENAME-ar 
export RANLIB=$NDK_TOOLCHAIN_BASENAME-ranlib 
export STRIP=$NDK_TOOLCHAIN_BASENAME-strip 
export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" 
export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8" 
export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 " 
export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions " 
export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 " 
export LDFLAGS=" ${ARCH_LINK} " 

./autogen.sh 

./configure --host=arm-linux-androideabi 

make 
# all tests should pass successfully 

#copy headers and libary in work folder 
cp .libs/libevent.a ../lib 
cp -R include/* ../include 
cd .. 

构建Tor

git clone https://github.com/torproject/tor 
cd tor/ 
git checkout remotes/origin/maint-0.3.1 

export NDK_ROOT=$ANDROID_NDK_ROOT 

echo "SETTING UP CROSS COMPILER" 
# export needed variables 
export NDK_TOOLCHAIN=$NDK_ROOT/my-android-toolchain 

# remove the old toolchain 
rm -rf $NDK_TOOLCHAIN 
# create the toolchain 
$NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-16 --install-dir=$NDK_TOOLCHAIN 

# export needed variables for crosscompile 
export PATH="$NDK_TOOLCHAIN/bin/:$PATH" 

export HOST=arm-linux-androideabi 

export CC=$HOST-gcc 
export CXX=$HOST-g++ 
export AR=$HOST-ar 
export LD=$HOST-ld 
export AS=$HOST-as 
export NM=$HOST-nm 
export STRIP=$HOST-strip 
export RANLIB=$HOST-ranlib 
export OBJDUMP=$HOST-objdump 


export CPPFLAGS="--sysroot=$NDK_TOOLCHAIN/sysroot -I$NDK_TOOLCHAIN/sysroot/usr/include -I$NDK_TOOLCHAIN/include -I../include -L../lib " 
export LDFLAGS="-L$NDK_TOOLCHAIN/sysroot/usr/lib -L$NDK_TOOLCHAIN/lib -L../lib" 


export CC="$HOST-gcc -D__ANDROID_API__=16 " 

export CXX="$HOST-g++ -D__ANDROID_API__=16 " 

./autogen.sh 

./configure --host=arm-linux-eabi --disable-asciidoc --prefix=$NDK_TOOLCHAIN --with-openssl-dir=../lib --enable-static-openssl --with-libevent-dir=../lib --enable-static-libevent 

make 

#some tests fail on compilation, but tor is built (in src/or/tor) and I confirm that it works on Android 6 

cd .. 

下面是从开始TOR(0.3.2.0-α-DEV)使用修补Tor的洋葱代理库的logcat的(见下文):

09-14 12:25:43.059 13520-13544/? I/c*.m*.t*.t*.c: Sep 14 12:25:43.058 [notice] Tor 0.3.2.0-alpha-dev (git-d71a00e91f3921f6) running on Linux with Libevent 2.0.23-stable, OpenSSL 1.1.0f, Zlib 1.2.8, Liblzma N/A, and Libzstd N/A. 

09-14 12:25:43.060 13520-13544/? I/c*.m*.t*.t*.c: Sep 14 12:25:43.058 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning 

09-14 12:25:43.060 13520-13544/? I/c*.m*.t*.t*.c: Sep 14 12:25:43.058 [notice] This version is not a stable Tor release. Expect more bugs than usual. 

09-14 12:25:43.060 13520-13544/? I/c*.m*.t*.t*.c: Sep 14 12:25:43.059 [notice] Read configuration file "/data/user/0/rs.tlcadvancedtech.ultravpnandroidclient/app_torfiles/torrc". 

09-14 12:25:43.080 13520-13544/? I/c*.m*.t*.t*.c: Sep 14 12:25:43.079 [notice] I think we have 8 CPUS, but only 2 of them are available. Telling Tor to only use 2. You can override this with the NumCPUs option 

09-14 12:26:04.593 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 53%: Loading relay descriptors 

09-14 12:26:07.023 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 59%: Loading relay descriptors 

09-14 12:26:08.472 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 67%: Loading relay descriptors 

09-14 12:26:09.027 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 72%: Loading relay descriptors 

09-14 12:26:09.689 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 78%: Loading relay descriptors 

09-14 12:26:10.301 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 80%: Connecting to the Tor network 

09-14 12:26:11.633 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Bootstrapped 90%: Establishing a Tor circuit 

09-14 12:26:14.637 13520-13548/? I/c*.m*.t*.t*.d: message: severity: NOTICE, msg: Tor has successfully opened a circuit. Looks like client functionality is working. 

Tor洋葱代理库

为了使用最新的tor版本(编写时:0.3.2.0 alpha-dev),torrc configuratio由于最近的tor对其配置文件中的相对路径更严格(如果指定了相对文件名,tor会退出),因此Tor Onion代理库会产生不同的结果。

补丁Tor Onion代理库可以找到here