适用于Android的Linux on Linux
问题描述:
我需要在Linux上为Android构建最新的tor,以便在Tor Onion Proxy Library中继续使用。适用于Android的Linux on Linux
当前最新的stable tor是maint-0.3.1。
我正在使用Android NDK r15b。
答
我准备了一个解决方案,我将在下面展示。 它是各种来源的组成。该脚本可以进一步优化。
的指令允许使用构建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的
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。