オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

Contents of /tags/htdocs/1.8-old/android-arm.html.ja

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6289 - (show annotations) (download)
Sat Oct 19 10:41:39 2013 UTC (10 years, 7 months ago) by kumaneko
File size: 13691 byte(s)


1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
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 <link rel="stylesheet" href="http://tomoyo.sourceforge.jp/tomoyo.css" media="all" type="text/css">
8 </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 <h1>TOMOYO Linux on Android</h1>
14
15 <p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86 上で動作している Ubuntu 8.04.4 を使用します。</p>
16
17 <hr>
18
19 <h2>ステップ1:必要なパッケージのインストール</h2>
20
21 <p><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a> に示されているとおり、必要なパッケージをインストールします。</p>
22
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 -b froyo<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 wget -O kernel-source.tar.gz 'http://android.git.kernel.org/?p=kernel/common.git;a=snapshot;h=b0d93fb0426911d0329f861f22c59f1c72cff815;sf=tgz'<br>
67 tar -zxf kernel-source.tar.gz<br>
68 cd common-b0d93fb/<br>
69 wget -O ccs-patch-1.8.3-20131019.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49684/ccs-patch-1.8.3-20131019.tar.gz'<br>
70 wget -O ccs-patch-1.8.3-20131019.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49684/ccs-patch-1.8.3-20131019.tar.gz.asc'<br>
71 gpg ccs-patch-1.8.3-20131019.tar.gz.asc<br>
72 tar -zxf ccs-patch-1.8.3-20131019.tar.gz<br>
73 patch -p1 &lt; patches/ccs-patch-2.6.29-android-goldfish.diff<br>
74 sed -i -e 's:/sbin/modprobe /sbin/hotplug::' -e 's:/sbin/ccs-start:/init:' -- security/ccsecurity/Kconfig<br>
75 ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make goldfish_defconfig<br>
76 ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make -s<br>
77 mkdir -p $ANDROID_IMG/tmp<br>
78 cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img
79 </td></tr>
80 </table>
81
82 <h2>ステップ5:イメージファイルのコピー</h2>
83
84 <p>Android エミュレータで指定するためのイメージファイルをコピーします。</p>
85
86 <table border="1">
87 <tr><td>
88 cd $ANDROID_HOME/out/target/product/generic/<br>
89 cp -p system.img ramdisk.img userdata.img $ANDROID_IMG
90 </td></tr>
91 </table>
92
93 <h2>ステップ6:ホスト環境用ツールのインストール</h2>
94
95 <p>Android エミュレータを遠隔操作するために、ホスト側に TOMOYO Linux のツールをインストールします。</p>
96
97 <table border="1">
98 <tr><td>
99 cd $ANDROID_HOME/tmp/<br>
100 wget -O ccs-tools-1.8.3-20130406.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49693/ccs-tools-1.8.3-20130406.tar.gz'<br>
101 wget -O ccs-tools-1.8.3-20130406.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&amp;f=/tomoyo/49693/ccs-tools-1.8.3-20130406.tar.gz.asc'<br>
102 gpg ccs-tools-1.8.3-20130406.tar.gz.asc<br>
103 tar -zxf ccs-tools-1.8.3-20130406.tar.gz<br>
104 cd ccstools<br>
105 make<br>
106 sudo make install
107 </td></tr>
108 </table>
109
110 <h2>ステップ7:エミュレータ環境用ツールのインストール</h2>
111
112 <p>Android エミュレータ側にインストールするためのエージェントをコンパイルします。</p>
113
114 <p>Android エミュレータで使用するRAMディスクに含まれている /init.rc が /etc という名前で /system/etc/ ディレクトリへのシンボリックリンクを作成するため、(ステップ13で追加する TOMOYO Linux のポリシーローダである) /sbin/ccs-init が /etc/ccs/ ディレクトリを起動時に読み込むポリシーを保存しておくためのディレクトリとして使用することができません。そのため、 /etc/ccs/ の代わりに /ccs/ をポリシー用ディレクトリとして使用します。</p>
115
116 <table border="1">
117 <tr><td>
118 cd $ANDROID_HOME/tmp/<br>
119 wget -O agcc http://plausible.org/andy/agcc<br>
120 chmod 755 agcc<br>
121 ./agcc -o init_policy $ANDROID_HOME/tmp/ccstools/usr_lib_ccs/init_policy.c<br>
122 ./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccstools/usr_lib_ccs/ccs-editpolicy-agent.c<br>
123 sed -e 's:etc/ccs:ccs:g' $ANDROID_HOME/tmp/ccstools/sbin/ccs-init.c &gt; $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br>
124 ./agcc -o ccs-init $ANDROID_HOME/tmp/ccstools/ccs-init2.c<br>
125 chmod 700 init_policy ccs-editpolicy-agent ccs-init
126 </td></tr>
127 </table>
128
129 <h2>ステップ8:RAMディスクの編集</h2>
130
131 <p>Android エミュレータで使用するRAMディスクにエージェントをコピーし、自動的に起動されるようにします。</p>
132
133 <table border="1">
134 <tr><td>
135 cd $ANDROID_IMG/tmp/<br>
136 zcat ../ramdisk.img | cpio -id<br>
137 echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' &gt;&gt; init.rc<br>
138 echo '&nbsp;&nbsp;&nbsp;&nbsp;oneshot' &gt;&gt; init.rc<br>
139 echo &gt;&gt; init.rc<br>
140 cp -p $ANDROID_HOME/tmp/init_policy $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/<br>
141 find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img
142 </td></tr>
143 </table>
144
145 <h2>ステップ9:エミュレータの起動</h2>
146
147 <p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ8で作成したものを指定します。</p>
148
149 <table border="1">
150 <tr><td>
151 emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel
152 </td></tr>
153 </table>
154
155 <h2>ステップ10:必要なファイルのコピー</h2>
156
157 <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>
158
159 <table border="1">
160 <tr><td>
161 cd $ANDROID_IMG/tmp/<br>
162 mkdir -p system/bin lib<br>
163 adb pull /system/bin/linker system/bin/<br>
164 adb pull /system/lib/libc.so lib/<br>
165 adb pull /system/lib/libm.so lib/<br>
166 chmod 755 system/bin/linker lib/libc.so lib/libm.so<br>
167 </td></tr>
168 </table>
169
170 <h2>ステップ11:ポリシーの初期化</h2>
171
172 <p>TOMOYO Linux が使用するための初期状態のポリシーを作成します。初期状態のポリシーファイルをRAMディスクの中の /ccs/ ディレクトリにコピーします。</p>
173
174 <table border="1">
175 <tr><td>
176 mkdir -p $ANDROID_IMG/tmp/ccs/<br>
177 adb shell /sbin/init_policy policy_dir=/data/ccs/<br>
178 adb pull /data/ccs/ $ANDROID_IMG/tmp/ccs/<br>
179 rm -fR $ANDROID_IMG/tmp/ccs/tools/ $ANDROID_IMG/tmp/ccs/policy/ $ANDROID_IMG/tmp/ccs/ccs-load-module<br>
180 adb shell rm -R /data/ccs/<br>
181 adb emu kill
182 </td></tr>
183 </table>
184
185 <h2>ステップ12:ポリシーの修正</h2>
186
187 <p>不足している acl_group 0 file read などを例外ポリシーに追加します。以下の内容は一例です。ドメインポリシーでは全体をプロファイル1(学習モード)で動作させるように指定しています。マネージャにはエージェントプログラムだけを指定しています。</p>
188
189 <table border="1">
190 <tr><td>
191 cd $ANDROID_IMG/tmp/<br>
192 (<br>
193 echo 'initialize_domain /init'<br>
194 echo 'initialize_domain /system/bin/app_process'<br>
195 <br>
196 echo 'acl_group 0 file read /system/lib/\@.so'<br>
197 echo 'acl_group 0 file read /system/framework/\*.jar'<br>
198 echo 'acl_group 0 file read /system/media/audio/\*/\*'<br>
199 echo 'acl_group 0 file read /system/fonts/\*.ttf'<br>
200 <br>
201 echo 'path_group SYSTEM_APK /system/app/\@.apk'<br>
202 <br>
203 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_wmem_min'<br>
204 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_wmem_def'<br>
205 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_wmem_max'<br>
206 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_rmem_min'<br>
207 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_rmem_def'<br>
208 echo 'path_group SYS_FILES sysfs:/kernel/ipv4/tcp_rmem_max'<br>
209 <br>
210 echo 'acl_group 0 file read sysfs:/devices/platform/\*battery\*/power_supply/ac/online'<br>
211 echo 'acl_group 0 file read sysfs:/devices/platform/\*battery\*/power_supply/battery/\@'<br>
212 <br>
213 #App. specific data files<br>
214 ) &gt;&gt; ccs/exception_policy.conf<br>
215 (<br>
216 echo '&lt;kernel&gt;'<br>
217 echo 'use_profile 1'<br>
218 ) &gt; ccs/domain_policy.conf<br>
219 echo /sbin/ccs-editpolicy-agent &gt; ccs/manager.conf
220 </td></tr>
221 </table>
222
223 <h2>ステップ13:ポリシーローダの追加</h2>
224
225 <p>TOMOYO Linux を有効にするために、 ccs-init を追加します。</p>
226
227 <table border="1">
228 <tr><td>
229 cd $ANDROID_IMG/tmp/<br>
230 rm sbin/init_policy<br>
231 cp -p $ANDROID_HOME/tmp/ccs-init sbin/<br>
232 find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img
233 </td></tr>
234 </table>
235
236 <h2>ステップ14:エミュレータの起動</h2>
237
238 <p>Android エミュレータを起動します。カーネルはステップ4で作成したものを、RAMディスクはステップ13で作成したものを指定します。</p>
239
240 <table border="1">
241 <tr><td>
242 emulator -kernel $ANDROID_IMG/kernel.img -ramdisk $ANDROID_IMG/ramdisk.img -sysdir $ANDROID_IMG -data $ANDROID_IMG/userdata.img -show-kernel
243 </td></tr>
244 </table>
245
246 <h2>ステップ15:ポート転送の指定</h2>
247
248 <p>エミュレータ内で動作しているエージェントと通信するために、ポート転送を指定します。以下のように指定した場合、ホスト側でのポート 10000 への TCP 接続は、エミュレータ側でのポート 7000 へと転送されます。ステップ8で ccs-editpolicy-agent をポート 7000 で待機するように指定しているので、ホスト側でポート 10000 へ接続することにより、エージェントとの通信が可能になります。</p>
249
250 <table border="1">
251 <tr><td>
252 adb forward tcp:10000 tcp:7000
253 </td></tr>
254 </table>
255
256 <h2>ステップ16:エージェント経由での操作</h2>
257
258 <p>以下のように ccs-editpolicy を起動すると、エミュレータ内のエージェント経由で ポリシーを閲覧/編集できます。</p>
259
260 <table border="1">
261 <tr><td>
262 /usr/sbin/ccs-editpolicy 127.0.0.1:10000
263 </td></tr>
264 </table>
265
266 <p>以下のように ccs-savepolicy を実行すると、エミュレータ内のエージェント経由で現在のポリシーをRAMディスク内の /ccs/ ディレクトリに出力できます。</p>
267
268 <table border="1">
269 <tr><td>
270 cd $ANDROID_IMG/tmp/<br>
271 /usr/sbin/ccs-savepolicy -e 127.0.0.1:10000 &gt; ccs/exception_policy.conf<br>
272 /usr/sbin/ccs-savepolicy -d 127.0.0.1:10000 &gt; ccs/domain_policy.conf<br>
273 /usr/sbin/ccs-savepolicy -p 127.0.0.1:10000 &gt; ccs/profile.conf<br>
274 find . -print0 | cpio -o0 -H newc | gzip -9 &gt; ../ramdisk.img
275 </td></tr>
276 </table>
277
278 <p>以下のように ccs-auditd を起動すると、エミュレータ内のエージェント経由でアクセス許可ログ/拒否ログを取得して保存することができます。なお、アクセスログは大量に出力されるため、ディスクの空き容量に注意してください。</p>
279
280 <table border="1">
281 <tr><td>
282 /usr/sbin/ccs-auditd 127.0.0.1:10000
283 </td></tr>
284 </table>
285
286 <p>以下のように ccs-queryd を実行すると、エミュレータ内のエージェント経由で、強制モードでのポリシー違反を対話的に処理できます。 ccs-queryd を終了させるには Ctrl-C を押してください。</p>
287
288 <table border="1">
289 <tr><td>
290 /usr/sbin/ccs-queryd 127.0.0.1:10000
291 </td></tr>
292 </table>
293
294 <hr>
295
296 <p><a href="index.html.ja">目次へ戻る</a></p>
297 <p><a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1973" width="96" height="31" alt="sflogo.php" title="SourceForge.jp"></a></p>
298 </body>
299 </html>

Properties

Name Value
svn:keywords Date

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26