1 |
kumaneko |
3102 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
2 |
|
|
<html lang="ja-JP"> |
3 |
|
|
<head> |
4 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
5 |
|
|
<meta http-equiv="Content-Style-Type" content="text/css"> |
6 |
|
|
<title>TOMOYO Linux 導入手順書</title> |
7 |
kumaneko |
3270 |
<link rel="stylesheet" href="http://tomoyo.sourceforge.jp/tomoyo.css" media="all" type="text/css"> |
8 |
kumaneko |
3102 |
</head> |
9 |
|
|
<body> |
10 |
|
|
<p style="text-align:right;"><a href="android-arm.html.en">English Page</a></p> |
11 |
|
|
<p style="text-align:right;">Last modified: $Date$</p> |
12 |
|
|
|
13 |
kumaneko |
3801 |
<h1>TOMOYO Linux on Android</h1> |
14 |
|
|
|
15 |
kumaneko |
3102 |
<p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86 上で動作している Ubuntu 8.04.3 を使用します。</p> |
16 |
|
|
|
17 |
|
|
<hr> |
18 |
|
|
|
19 |
|
|
<h2>ステップ1:必要なパッケージのインストール</h2> |
20 |
|
|
|
21 |
kumaneko |
3765 |
<p><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a> に示されているとおり、必要なパッケージをインストールします。</p> |
22 |
kumaneko |
3102 |
|
23 |
|
|
<table border="1"> |
24 |
|
|
<tr><td> |
25 |
|
|
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev |
26 |
|
|
</td></tr> |
27 |
|
|
</table> |
28 |
|
|
|
29 |
|
|
<h2>ステップ2:環境変数の設定</h2> |
30 |
|
|
|
31 |
|
|
<p>以下の内容を環境変数として指定します。 ~/.bashrc などに追加しておくことをお勧めします。 arm-eabi-4.2.1 の部分は arm-eabi-4.3.1 または arm-eabi-4.4.0 にしても構いません。</p> |
32 |
|
|
|
33 |
|
|
<table border="1"> |
34 |
|
|
<tr><td> |
35 |
|
|
export ANDROID_HOME=$HOME/mydroid/<br> |
36 |
|
|
export ANDROID_IMG=$ANDROID_HOME/image/<br> |
37 |
|
|
export ANDROID_TOOLCHAIN=$ANDROID_HOME/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/<br> |
38 |
|
|
export PATH=$PATH:$ANDROID_HOME/out/host/linux-x86/bin/:$ANDROID_TOOLCHAIN |
39 |
|
|
</td></tr> |
40 |
|
|
</table> |
41 |
|
|
|
42 |
|
|
<h2>ステップ3: Android 環境の構築</h2> |
43 |
|
|
|
44 |
|
|
<p>エミュレータをコンパイルします。</p> |
45 |
|
|
|
46 |
|
|
<table border="1"> |
47 |
|
|
<tr><td> |
48 |
|
|
mkdir -p $ANDROID_HOME<br> |
49 |
|
|
cd $ANDROID_HOME<br> |
50 |
|
|
wget http://android.git.kernel.org/repo<br> |
51 |
|
|
chmod 755 repo<br> |
52 |
|
|
./repo init -u git://android.git.kernel.org/platform/manifest.git<br> |
53 |
|
|
./repo sync<br> |
54 |
|
|
make |
55 |
|
|
</td></tr> |
56 |
|
|
</table> |
57 |
|
|
|
58 |
|
|
<h2>ステップ4: Android 用カーネルの構築</h2> |
59 |
|
|
|
60 |
|
|
<p>カーネルをコンパイルします。 TOMOYO Linux パッチを適用する以外は通常の手順と同じです。</p> |
61 |
|
|
|
62 |
|
|
<table border="1"> |
63 |
|
|
<tr><td> |
64 |
|
|
mkdir -p $ANDROID_HOME/tmp<br> |
65 |
|
|
cd $ANDROID_HOME/tmp/<br> |
66 |
kumaneko |
3772 |
wget -O kernel-source.tar.gz 'http://android.git.kernel.org/?p=kernel/common.git;a=snapshot;h=b0d93fb0426911d0329f861f22c59f1c72cff815;sf=tgz'<br> |
67 |
kumaneko |
3102 |
tar -zxf kernel-source.tar.gz<br> |
68 |
|
|
cd common/<br> |
69 |
kumaneko |
3875 |
wget -O ccs-patch.tar.gz 'http://sourceforge.jp/projects/tomoyo/svn/view/trunk/1.8.x/ccs-patch.tar.gz?root=tomoyo&view=tar'<br> |
70 |
|
|
tar -zxf ccs-patch.tar.gz --strip 1<br> |
71 |
kumaneko |
3102 |
patch -p1 < patches/ccs-patch-2.6.29-android-goldfish.diff<br> |
72 |
|
|
sed -i -e 's:/sbin/modprobe /sbin/hotplug::' -e 's:/sbin/ccs-start:/init:' -- security/ccsecurity/Kconfig<br> |
73 |
|
|
ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make goldfish_defconfig<br> |
74 |
|
|
ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make -s<br> |
75 |
|
|
mkdir -p $ANDROID_IMG/tmp<br> |
76 |
|
|
cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img |
77 |
|
|
</td></tr> |
78 |
|
|
</table> |
79 |
|
|
|
80 |
|
|
<h2>ステップ5:イメージファイルのコピー</h2> |
81 |
|
|
|
82 |
|
|
<p>Android エミュレータで指定するためのイメージファイルをコピーします。</p> |
83 |
|
|
|
84 |
|
|
<table border="1"> |
85 |
|
|
<tr><td> |
86 |
|
|
cd $ANDROID_HOME/out/target/product/generic/<br> |
87 |
|
|
cp -p system.img ramdisk.img userdata.img $ANDROID_IMG |
88 |
|
|
</td></tr> |
89 |
|
|
</table> |
90 |
|
|
|
91 |
|
|
<h2>ステップ6:ホスト環境用ツールのインストール</h2> |
92 |
|
|
|
93 |
|
|
<p>Android エミュレータを遠隔操作するために、ホスト側に TOMOYO Linux のツールをインストールします。</p> |
94 |
|
|
|
95 |
|
|
<table border="1"> |
96 |
|
|
<tr><td> |
97 |
|
|
cd $ANDROID_HOME/tmp/<br> |
98 |
kumaneko |
3875 |
wget -O ccs-tools.tar.gz 'http://sourceforge.jp/projects/tomoyo/svn/view/trunk/1.8.x/ccs-tools/ccstools.tar.gz?root=tomoyo&view=tar'<br> |
99 |
|
|
tar -zxf ccs-tools.tar.gz<br> |
100 |
kumaneko |
3102 |
cd ccstools<br> |
101 |
|
|
sudo apt-get install libreadline5-dev<br> |
102 |
|
|
make<br> |
103 |
|
|
sudo make install |
104 |
|
|
</td></tr> |
105 |
|
|
</table> |
106 |
|
|
|
107 |
|
|
<h2>ステップ7:エミュレータ環境用ツールのインストール</h2> |
108 |
|
|
|
109 |
|
|
<p>Android エミュレータ側にインストールするためのエージェントをコンパイルします。</p> |
110 |
|
|
|
111 |
kumaneko |
3769 |
<p>Android エミュレータで使用するRAMディスクに含まれている /init.rc が /etc という名前で /system/etc/ ディレクトリへのシンボリックリンクを作成するため、(ステップ13で追加する TOMOYO Linux のポリシーローダである) /sbin/ccs-init が /etc/ccs/ ディレクトリを起動時に読み込むポリシーを保存しておくためのディレクトリとして使用することができません。そのため、 /etc/ccs/ の代わりに /ccs/ をポリシー用ディレクトリとして使用します。</p> |
112 |
|
|
|
113 |
kumaneko |
3102 |
<table border="1"> |
114 |
|
|
<tr><td> |
115 |
|
|
cd $ANDROID_HOME/tmp/<br> |
116 |
|
|
wget -O agcc http://plausible.org/andy/agcc<br> |
117 |
|
|
chmod 755 agcc<br> |
118 |
|
|
./agcc -o init_policy $ANDROID_HOME/tmp/ccstools/init_policy.c<br> |
119 |
|
|
./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccstools/ccs-editpolicy-agent.c<br> |
120 |
kumaneko |
3769 |
sed -e 's:etc/ccs:ccs:g' $ANDROID_HOME/tmp/ccstools/ccs-init.c > $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br> |
121 |
|
|
./agcc -o ccs-init $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br> |
122 |
kumaneko |
3102 |
chmod 700 init_policy ccs-editpolicy-agent ccs-init |
123 |
|
|
</td></tr> |
124 |
|
|
</table> |
125 |
|
|
|
126 |
|
|
<h2>ステップ8:RAMディスクの編集</h2> |
127 |
|
|
|
128 |
|
|
<p>Android エミュレータで使用するRAMディスクにエージェントをコピーし、自動的に起動されるようにします。</p> |
129 |
|
|
|
130 |
|
|
<table border="1"> |
131 |
|
|
<tr><td> |
132 |
|
|
cd $ANDROID_IMG/tmp/<br> |
133 |
|
|
zcat ../ramdisk.img | cpio -id<br> |
134 |
|
|
echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' >> init.rc<br> |
135 |
|
|
echo ' oneshot' >> init.rc<br> |
136 |
|
|
echo >> init.rc<br> |
137 |
|
|
cp -p $ANDROID_HOME/tmp/init_policy $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/<br> |
138 |
|
|
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
139 |
|
|
</td></tr> |
140 |
|
|
</table> |
141 |
|
|
|
142 |
|
|
<h2>ステップ9:エミュレータの起動</h2> |
143 |
|
|
|
144 |
|
|
<p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ8で作成したものを指定します。</p> |
145 |
|
|
|
146 |
|
|
<table border="1"> |
147 |
|
|
<tr><td> |
148 |
|
|
emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel |
149 |
|
|
</td></tr> |
150 |
|
|
</table> |
151 |
|
|
|
152 |
|
|
<h2>ステップ10:必要なファイルのコピー</h2> |
153 |
|
|
|
154 |
kumaneko |
3936 |
<p>/sbin/ccs-init の動作に必要なファイルをRAMディスクにコピーします。 Android 環境では、ダイナミックリンクライブラリをロードするために /system/bin/loader が使われます。しかし、 /sbin/ccs-init が実行される時点では /system/ パーティションはまだマウントされていません。そのため、 /system/ パーティションの中にある /bin/loader をRAMディスク内の /system/bin/ ディレクトリにコピーしておく必要があります。同様に、 /system/ パーティションの中にある /lib/libc.so と /lib/libm.so をRAMディスク内の /lib/ ディレクトリにコピーしておく必要があります。</p> |
155 |
kumaneko |
3102 |
|
156 |
|
|
<table border="1"> |
157 |
|
|
<tr><td> |
158 |
|
|
cd $ANDROID_IMG/tmp/<br> |
159 |
|
|
mkdir -p system/bin lib<br> |
160 |
|
|
adb pull /system/bin/linker system/bin/<br> |
161 |
|
|
adb pull /system/lib/libc.so lib/<br> |
162 |
|
|
adb pull /system/lib/libm.so lib/<br> |
163 |
|
|
chmod 755 system/bin/linker lib/libc.so lib/libm.so<br> |
164 |
|
|
</td></tr> |
165 |
|
|
</table> |
166 |
|
|
|
167 |
|
|
<h2>ステップ11:ポリシーの初期化</h2> |
168 |
|
|
|
169 |
kumaneko |
3769 |
<p>TOMOYO Linux が使用するための初期状態のポリシーを作成します。初期状態のポリシーファイルをRAMディスクの中の /ccs/ ディレクトリにコピーします。</p> |
170 |
kumaneko |
3102 |
|
171 |
|
|
<table border="1"> |
172 |
|
|
<tr><td> |
173 |
kumaneko |
3769 |
mkdir -p $ANDROID_IMG/tmp/ccs/<br> |
174 |
kumaneko |
3102 |
adb shell /sbin/init_policy policy_dir=/data/ccs/<br> |
175 |
kumaneko |
3769 |
adb pull /data/ccs/ $ANDROID_IMG/tmp/ccs/<br> |
176 |
kumaneko |
3102 |
adb shell rm /data/ccs/\*<br> |
177 |
|
|
adb shell rmdir /data/ccs/<br> |
178 |
|
|
adb emu kill |
179 |
|
|
</td></tr> |
180 |
|
|
</table> |
181 |
|
|
|
182 |
|
|
<h2>ステップ12:ポリシーの修正</h2> |
183 |
|
|
|
184 |
kumaneko |
3867 |
<p>不足している file_pattern や file read などを例外ポリシーに追加します。以下の内容は一例です。ドメインポリシーでは全体をプロファイル1(学習モード)で動作させるように指定しています。マネージャにはエージェントプログラムだけを指定しています。</p> |
185 |
kumaneko |
3102 |
|
186 |
|
|
<table border="1"> |
187 |
|
|
<tr><td> |
188 |
|
|
cd $ANDROID_IMG/tmp/<br> |
189 |
|
|
(<br> |
190 |
|
|
echo 'initialize_domain /init'<br> |
191 |
|
|
echo 'initialize_domain /system/bin/app_process'<br> |
192 |
|
|
<br> |
193 |
|
|
echo 'file_pattern /dev/tty\$'<br> |
194 |
|
|
<br> |
195 |
|
|
echo 'file_pattern /system/lib/\@.so'<br> |
196 |
kumaneko |
3867 |
echo 'file read /system/lib/\@.so'<br> |
197 |
kumaneko |
3102 |
echo 'file_pattern /system/framework/\*.jar'<br> |
198 |
kumaneko |
3867 |
echo 'file read /system/framework/\*.jar'<br> |
199 |
kumaneko |
3102 |
echo 'file_pattern /system/media/audio/\*/\*'<br> |
200 |
kumaneko |
3867 |
echo 'file read /system/media/audio/\*/\*'<br> |
201 |
kumaneko |
3102 |
echo 'file_pattern /system/fonts/\*.ttf'<br> |
202 |
kumaneko |
3867 |
echo 'file read /system/fonts/\*.ttf'<br> |
203 |
kumaneko |
3102 |
echo 'file_pattern /data/tombstones/tombstone_\$'<br> |
204 |
|
|
<br> |
205 |
|
|
echo 'file_pattern /data/dalvik-cache/system@framework@\*.jar@classes.dex'<br> |
206 |
|
|
echo 'file_pattern /data/dalvik-cache/system@app@\*.jar@classes.dex'<br> |
207 |
|
|
echo 'file_pattern /data/dalvik-cache/data@app@\*@classes.dex'<br> |
208 |
|
|
<br> |
209 |
|
|
echo 'file_pattern /data/local/tmp/\*.apk'<br> |
210 |
|
|
echo 'file_pattern /data/local/tmp/\*.apk'<br> |
211 |
|
|
<br> |
212 |
|
|
echo 'file_pattern /data/app/\*.tmp'<br> |
213 |
|
|
echo 'file_pattern /data/data/\*/databases/\*'<br> |
214 |
|
|
echo 'file_pattern /data/data/\*/databases/'<br> |
215 |
|
|
<br> |
216 |
|
|
echo 'file_pattern /data/dalvik-cache/system@framework@\*.jar@classes.dex'<br> |
217 |
|
|
echo 'file_pattern /data/dalvik-cache/system@app@\*.apk@classes.dex'<br> |
218 |
|
|
echo 'file_pattern /data/dalvik-cache/system@app-private@\*.apk@classes.dex'<br> |
219 |
|
|
<br> |
220 |
|
|
echo 'file_pattern /sdcard/dcim/.thumbnails/\$.jpg'<br> |
221 |
|
|
echo 'file_pattern /sdcard/dcim/.thumbnails/.thumbdata\*'<br> |
222 |
|
|
echo 'file_pattern /sdcard/dcim/.thumbnails/.thumbdata3--\$'<br> |
223 |
|
|
<br> |
224 |
|
|
echo 'path_group SYSTEM_APK /system/app/\@.apk'<br> |
225 |
|
|
<br> |
226 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_wmem_min'<br> |
227 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_wmem_def'<br> |
228 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_wmem_max'<br> |
229 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_rmem_min'<br> |
230 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_rmem_def'<br> |
231 |
|
|
echo 'path_group SYS_FILES /sys/kernel/ipv4/tcp_rmem_max'<br> |
232 |
|
|
<br> |
233 |
kumaneko |
3867 |
echo 'file read /sys/devices/platform/\*battery\*/power_supply/ac/online'<br> |
234 |
|
|
echo 'file read /sys/devices/platform/\*battery\*/power_supply/battery/\@'<br> |
235 |
kumaneko |
3102 |
<br> |
236 |
|
|
#App. specific data files<br> |
237 |
|
|
echo 'file_pattern /data/data/com.android.browser/cache/webviewCache/\*'<br> |
238 |
|
|
echo 'file_pattern /data/data/com.android.browser/app_thumbnails/\*'<br> |
239 |
kumaneko |
3769 |
) >> ccs/exception_policy.conf<br> |
240 |
kumaneko |
3102 |
(<br> |
241 |
|
|
echo '<kernel>'<br> |
242 |
|
|
echo 'use_profile 1'<br> |
243 |
kumaneko |
3769 |
) > ccs/domain_policy.conf<br> |
244 |
|
|
echo /sbin/ccs-editpolicy-agent > ccs/manager.conf |
245 |
kumaneko |
3102 |
</td></tr> |
246 |
|
|
</table> |
247 |
|
|
|
248 |
|
|
<h2>ステップ13:ポリシーローダの追加</h2> |
249 |
|
|
|
250 |
|
|
<p>TOMOYO Linux を有効にするために、 ccs-init を追加します。</p> |
251 |
|
|
|
252 |
|
|
<table border="1"> |
253 |
|
|
<tr><td> |
254 |
|
|
cd $ANDROID_IMG/tmp/<br> |
255 |
|
|
rm sbin/init_policy<br> |
256 |
|
|
cp -p $ANDROID_HOME/tmp/ccs-init sbin/<br> |
257 |
|
|
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
258 |
|
|
</td></tr> |
259 |
|
|
</table> |
260 |
|
|
|
261 |
|
|
<h2>ステップ14:エミュレータの起動</h2> |
262 |
|
|
|
263 |
|
|
<p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ13で作成したものを指定します。</p> |
264 |
|
|
|
265 |
|
|
<table border="1"> |
266 |
|
|
<tr><td> |
267 |
|
|
emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel |
268 |
|
|
</td></tr> |
269 |
|
|
</table> |
270 |
|
|
|
271 |
|
|
<h2>ステップ15:ポート転送の指定</h2> |
272 |
|
|
|
273 |
|
|
<p>エミュレータ内で動作しているエージェントと通信するために、ポート転送を指定します。以下のように指定した場合、ホスト側でのポート 10000 への TCP 接続は、エミュレータ側でのポート 7000 へと転送されます。ステップ8で ccs-editpolicy-agent をポート 7000 で待機するように指定しているので、ホスト側でポート 10000 へ接続することにより、エージェントとの通信が可能になります。</p> |
274 |
|
|
|
275 |
|
|
<table border="1"> |
276 |
|
|
<tr><td> |
277 |
|
|
adb forward tcp:10000 tcp:7000 |
278 |
|
|
</td></tr> |
279 |
|
|
</table> |
280 |
|
|
|
281 |
|
|
<h2>ステップ16:エージェント経由での操作</h2> |
282 |
|
|
|
283 |
|
|
<p>以下のように ccs-editpolicy を起動すると、エミュレータ内のエージェント経由で ポリシーを閲覧/編集できます。</p> |
284 |
|
|
|
285 |
|
|
<table border="1"> |
286 |
|
|
<tr><td> |
287 |
|
|
/usr/sbin/ccs-editpolicy 127.0.0.1:10000 |
288 |
|
|
</td></tr> |
289 |
|
|
</table> |
290 |
|
|
|
291 |
kumaneko |
3769 |
<p>以下のように ccs-savepolicy を実行すると、エミュレータ内のエージェント経由で現在のポリシーをRAMディスク内の /ccs/ ディレクトリに出力できます。</p> |
292 |
kumaneko |
3102 |
|
293 |
|
|
<table border="1"> |
294 |
|
|
<tr><td> |
295 |
kumaneko |
3769 |
/usr/sbin/ccs-savepolicy edpm $ANDROID_IMG/tmp/ccs/ 127.0.0.1:10000<br> |
296 |
kumaneko |
3102 |
cd $ANDROID_IMG/tmp/<br> |
297 |
|
|
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
298 |
|
|
</td></tr> |
299 |
|
|
</table> |
300 |
|
|
|
301 |
|
|
<p>以下のように ccs-auditd を起動すると、エミュレータ内のエージェント経由でアクセス許可ログ/拒否ログを取得して保存することができます。なお、アクセスログは大量に出力されるため、ディスクの空き容量に注意してください。</p> |
302 |
|
|
|
303 |
|
|
<table border="1"> |
304 |
|
|
<tr><td> |
305 |
|
|
/usr/sbin/ccs-auditd /tmp/grant_log /tmp/reject_log 127.0.0.1:10000 |
306 |
|
|
</td></tr> |
307 |
|
|
</table> |
308 |
|
|
|
309 |
|
|
<p>以下のように ccs-queryd を実行すると、エミュレータ内のエージェント経由で、強制モードでのポリシー違反を対話的に処理できます。 ccs-queryd を終了させるには Ctrl-C を押してください。</p> |
310 |
|
|
|
311 |
|
|
<table border="1"> |
312 |
|
|
<tr><td> |
313 |
|
|
/usr/sbin/ccs-queryd 127.0.0.1:10000 |
314 |
|
|
</td></tr> |
315 |
|
|
</table> |
316 |
|
|
|
317 |
|
|
<hr> |
318 |
|
|
|
319 |
|
|
<p><a href="index.html.ja">目次へ戻る</a></p> |
320 |
|
|
<p><a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1973" width="96" height="31" alt="SourceForge.jp"></a></p> |
321 |
|
|
</body> |
322 |
|
|
</html> |