Project

General

Profile

strongSwan on Android » History » Version 2

Tobias Brunner, 12.04.2010 15:54
second part of the android documentation

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 1 Tobias Brunner
This document describes how to build strongSwan for Android 2.0 (using the emulator).
6 1 Tobias Brunner
7 1 Tobias Brunner
h2. Android Source Tree
8 1 Tobias Brunner
9 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.
10 1 Tobias Brunner
11 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.
12 1 Tobias Brunner
13 1 Tobias Brunner
Since building the whole source tree takes quite a while you should probably start with this first:
14 1 Tobias Brunner
<pre>
15 1 Tobias Brunner
cd /path/to/android/source
16 1 Tobias Brunner
. build/envsetup.sh
17 1 Tobias Brunner
lunch 1
18 1 Tobias Brunner
make
19 1 Tobias Brunner
</pre>
20 1 Tobias Brunner
21 1 Tobias Brunner
h2. Android Kernel
22 1 Tobias Brunner
23 1 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. To get the current kernel config you can use the adb tool to download it from the running emulator. After starting the emulator use
24 1 Tobias Brunner
<pre>
25 1 Tobias Brunner
adb pull /proc/config.gz config.gz
26 1 Tobias Brunner
</pre>to copy the config to the current directory. Then enable the missing modules, this is mainly @CONFIG_XFRM_USER@ and @CONFIG_NET_KEY@ but might include other modules.
27 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).
28 1 Tobias Brunner
29 1 Tobias Brunner
Clone the kernel sources and checkout an appropriate tag (check the version of the kernel in the emulator). For example:
30 1 Tobias Brunner
<pre>
31 1 Tobias Brunner
git clone git://android.git.kernel.org/kernel/common kernel
32 1 Tobias Brunner
cd kernel
33 1 Tobias Brunner
git checkout -t origin/android-goldfish-2.6.29
34 1 Tobias Brunner
</pre>
35 1 Tobias Brunner
You can then copy your config to this directory and compile the kernel sources using
36 1 Tobias Brunner
<pre>
37 1 Tobias Brunner
export ARCH=arm
38 1 Tobias Brunner
export CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
39 1 Tobias Brunner
make oldconfig
40 1 Tobias Brunner
make
41 1 Tobias Brunner
</pre>
42 1 Tobias Brunner
43 1 Tobias Brunner
To start the emulator using your custom kernel use the following command:
44 1 Tobias Brunner
<pre>
45 1 Tobias Brunner
emulator -kernel /path/to/kernel/source/arch/arm/boot/zImage &
46 2 Tobias Brunner
</pre>
47 2 Tobias Brunner
48 2 Tobias Brunner
h2. Vstr Library
49 2 Tobias Brunner
50 2 Tobias Brunner
strongSwan can be built directly from the downloadable tarball. 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.
51 2 Tobias Brunner
52 2 Tobias Brunner
h3. droid-gcc
53 2 Tobias Brunner
54 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.
55 2 Tobias Brunner
56 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.
57 2 Tobias Brunner
58 2 Tobias Brunner
h3. Build the Library
59 2 Tobias Brunner
60 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.
61 2 Tobias Brunner
62 2 Tobias Brunner
Download the helper files to an appropriate working directory and then download and extract the tarball for the Vstr library.
63 2 Tobias Brunner
<pre>
64 2 Tobias Brunner
wget http://download.strongswan.org/vstr-1.0.15.tar.bz2
65 2 Tobias Brunner
tar xjf vstr-1.0.15.tar.bz2
66 2 Tobias Brunner
</pre>
67 2 Tobias Brunner
68 2 Tobias Brunner
Adjust the variables in the build script (@DROID_ROOT@ and optionally @INSTALLDIR@). Then build and install the it using
69 2 Tobias Brunner
<pre>
70 2 Tobias Brunner
cd vstr-1.0.15
71 2 Tobias Brunner
patch -p1 < ../vstr.patch
72 2 Tobias Brunner
. ../vstr.build
73 2 Tobias Brunner
</pre>
74 2 Tobias Brunner
75 2 Tobias Brunner
h2. strongSwan
76 2 Tobias Brunner
77 2 Tobias Brunner
Now you are ready to build strongSwan. Download the tarball (or build it yourself from the strongSwan source tree) and extract it in @DROID_ROOT/external@.
78 2 Tobias Brunner
79 2 Tobias Brunner
Because the strongSwan specific Android.mk files refer to the path external/strongswan you have to move the sources to that directory or change the top Android.mk file. You can also adjust the plugin list in the that file.
80 2 Tobias Brunner
81 2 Tobias Brunner
Now just build the Android source tree.
82 2 Tobias Brunner
83 2 Tobias Brunner
<pre>
84 2 Tobias Brunner
cd /path/to/android/source
85 2 Tobias Brunner
make
86 1 Tobias Brunner
</pre>