Project

General

Profile

strongSwan on Android » History » Version 5

Tobias Brunner, 05.07.2010 11:52
link to frontend patch changed

1 1 Tobias Brunner
h1. strongSwan on Android
2 1 Tobias Brunner
3 2 Tobias Brunner
The IKEv2 daemon charon has recently been ported to "Google Android":http://www.android.com.
4 1 Tobias Brunner
5 4 Tobias Brunner
This document describes how to build strongSwan for Android 2.2 (using the emulator).
6 1 Tobias Brunner
7 5 Tobias Brunner
There is a patch that [[AndroidFrontend|integrates strongSwan into the default Android VPN frontend]].
8 4 Tobias Brunner
9 1 Tobias Brunner
h2. Android Source Tree
10 1 Tobias Brunner
11 1 Tobias Brunner
You will need the complete Android source to build strongSwan. Instructions on how to download and build it can be found on the "Android website":http://source.android.com/download.
12 1 Tobias Brunner
13 1 Tobias Brunner
To checkout a specific branch or tag of the sources, specify it with the @-b@ parameter when using the @repo init@ command.
14 1 Tobias Brunner
15 1 Tobias Brunner
Since building the whole source tree takes quite a while you should probably start with this first:
16 1 Tobias Brunner
<pre>
17 1 Tobias Brunner
cd /path/to/android/source
18 1 Tobias Brunner
. build/envsetup.sh
19 1 Tobias Brunner
lunch 1
20 1 Tobias Brunner
make
21 1 Tobias Brunner
</pre>
22 1 Tobias Brunner
23 1 Tobias Brunner
h2. Android Kernel
24 1 Tobias Brunner
25 3 Tobias Brunner
The prebuilt kernel that is used for the emulator lacks some modules required for strongSwan to work correctly. It is therefore required to build a custom kernel.
26 1 Tobias Brunner
To get the current kernel config you can use the "Android Debug Bridge":http://developer.android.com/guide/developing/tools/adb.html to download it from the running emulator. After starting the emulator use
27 1 Tobias Brunner
<pre>
28 1 Tobias Brunner
adb pull /proc/config.gz config.gz
29 4 Tobias Brunner
</pre>to copy the config to the current directory. Then enable the missing modules, this is mainly @CONFIG_XFRM_USER@ and @CONFIG_INET_XFRM_MODE_TUNNEL@ but might include other modules.
30 1 Tobias Brunner
Please compare your config to the list of [[KernelModules|required modules]] in this wiki (please note that some modules, especially all the IPv6 related modules, are not really required).
31 1 Tobias Brunner
32 1 Tobias Brunner
Clone the kernel sources and checkout an appropriate tag (check the version of the kernel in the emulator). For example:
33 1 Tobias Brunner
<pre>
34 1 Tobias Brunner
git clone git://android.git.kernel.org/kernel/common kernel
35 1 Tobias Brunner
cd kernel
36 1 Tobias Brunner
git checkout -t origin/android-goldfish-2.6.29
37 1 Tobias Brunner
</pre>
38 3 Tobias Brunner
39 1 Tobias Brunner
You can then copy your config to this directory and compile the kernel sources using
40 1 Tobias Brunner
<pre>
41 1 Tobias Brunner
export ARCH=arm
42 1 Tobias Brunner
export CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
43 1 Tobias Brunner
make oldconfig
44 1 Tobias Brunner
make
45 1 Tobias Brunner
</pre>
46 1 Tobias Brunner
47 3 Tobias Brunner
To start the emulator using your custom kernel use the following command.
48 1 Tobias Brunner
<pre>
49 1 Tobias Brunner
emulator -kernel /path/to/kernel/source/arch/arm/boot/zImage &
50 2 Tobias Brunner
</pre>
51 1 Tobias Brunner
52 2 Tobias Brunner
h2. Vstr Library
53 2 Tobias Brunner
54 3 Tobias Brunner
strongSwan can be fully integrated in the Android build system. But the required "Vstr string library":http://www.and.org/vstr/ can not (yet). Therefore, you will have to build that library first using "droid-gcc":http://github.com/tmurakam/droid-wrapper.
55 2 Tobias Brunner
56 2 Tobias Brunner
h3. droid-gcc
57 2 Tobias Brunner
58 2 Tobias Brunner
Since droid-gcc is written in Ruby you'll obviously need *Ruby* installed on your build system. Then download droid-gcc by either cloning the "Git tree":git://github.com/tmurakam/droid-wrapper.git or by downloading it "directly":http://github.com/tmurakam/droid-wrapper/raw/master/droid-gcc.
59 2 Tobias Brunner
60 2 Tobias Brunner
If you used Git you can install droid-gcc using @make install@, if you downloaded it directly, you have to manually create two symlinks to droid-gcc named _droid-gcc_ and _droid-ld_ in a directory that is included in your PATH environment variable.
61 2 Tobias Brunner
62 1 Tobias Brunner
h3. Build the Library
63 2 Tobias Brunner
64 2 Tobias Brunner
To simplify building the Vstr library, a build script is attached to this page (attachment:vstr.build). The attached patch (attachment:vstr.patch) and Android Makefile (attachment:vstr.mk) are also required.
65 2 Tobias Brunner
66 3 Tobias Brunner
Download the three helper files to an appropriate working directory and then download and extract the tarball for the Vstr library.
67 2 Tobias Brunner
<pre>
68 2 Tobias Brunner
wget http://download.strongswan.org/vstr-1.0.15.tar.bz2
69 2 Tobias Brunner
tar xjf vstr-1.0.15.tar.bz2
70 2 Tobias Brunner
</pre>
71 2 Tobias Brunner
72 2 Tobias Brunner
Adjust the variables in the build script (@DROID_ROOT@ and optionally @INSTALLDIR@). Then build and install the it using
73 2 Tobias Brunner
<pre>
74 2 Tobias Brunner
cd vstr-1.0.15
75 2 Tobias Brunner
patch -p1 < ../vstr.patch
76 1 Tobias Brunner
. ../vstr.build
77 1 Tobias Brunner
</pre>
78 2 Tobias Brunner
79 2 Tobias Brunner
h2. strongSwan
80 2 Tobias Brunner
81 3 Tobias Brunner
Now you are ready to build strongSwan. Download the current tarball (or build it yourself from the strongSwan source tree) and extract it in @DROID_ROOT/external@.
82 2 Tobias Brunner
83 3 Tobias Brunner
If you changed @INSTALLDIR@ in the build script above, you will have to change the top Android.mk (or Android.mk.in) accordingly. You can also adjust the plugin list in the that file.
84 2 Tobias Brunner
85 2 Tobias Brunner
Now just build the Android source tree.
86 2 Tobias Brunner
87 2 Tobias Brunner
<pre>
88 2 Tobias Brunner
cd /path/to/android/source
89 2 Tobias Brunner
make
90 1 Tobias Brunner
</pre>