34 |
|
|
35 |
<h2>TOMOYO Linux on Android</h2> |
<h2>TOMOYO Linux on Android</h2> |
36 |
|
|
37 |
<p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86_64 上で動作している Ubuntu 10.04.2 を使用します。</p> |
<p>このページでは、 TOMOYO Linux を arm 用 Android エミュレータ上で動作させる手順について説明します。ホスト環境として x86_64 上で動作している Ubuntu 10.04.3 を使用します。</p> |
38 |
|
|
39 |
<h3>ステップ1:必要なパッケージのインストール</h3> |
<h3>ステップ1:必要なパッケージのインストール</h3> |
40 |
|
|
44 |
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" |
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" |
45 |
sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner" |
sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner" |
46 |
sudo apt-get update |
sudo apt-get update |
47 |
sudo apt-get install sun-java6-jdk |
sudo apt-get install sun-java6-jdk |
48 |
sudo update-java-alternatives -s java-6-sun |
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev \ |
49 |
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib \ |
lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ |
50 |
g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev |
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc |
51 |
</pre> |
</pre> |
52 |
|
|
53 |
<h3>ステップ2:環境変数の設定</h3> |
<h3>ステップ2:環境変数の設定</h3> |
57 |
<pre class="command"> |
<pre class="command"> |
58 |
export ANDROID_HOME=$HOME/mydroid/ |
export ANDROID_HOME=$HOME/mydroid/ |
59 |
export ANDROID_IMG=$ANDROID_HOME/image/ |
export ANDROID_IMG=$ANDROID_HOME/image/ |
|
export ANDROID_TOOLCHAIN=$ANDROID_HOME/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ |
|
|
export PATH=$PATH:$ANDROID_HOME/out/host/linux-x86/bin/:$ANDROID_TOOLCHAIN |
|
60 |
</pre> |
</pre> |
61 |
|
|
62 |
<p>必要なディレクトリを作成します。</p> |
<p>必要なディレクトリを作成します。</p> |
67 |
mkdir -p $ANDROID_HOME/tmp/policy |
mkdir -p $ANDROID_HOME/tmp/policy |
68 |
mkdir -p $ANDROID_IMG |
mkdir -p $ANDROID_IMG |
69 |
mkdir -p $ANDROID_IMG/tmp |
mkdir -p $ANDROID_IMG/tmp |
70 |
sudo mkdir /var/log/tomoyo |
sudo mkdir -p /var/log/tomoyo |
71 |
sudo chown -R `id -u` /var/log/tomoyo/ |
sudo chown -R `id -u` /var/log/tomoyo/ |
72 |
</pre> |
</pre> |
73 |
|
|
77 |
|
|
78 |
<pre class="command"> |
<pre class="command"> |
79 |
cd $ANDROID_HOME |
cd $ANDROID_HOME |
80 |
wget http://android.git.kernel.org/repo |
wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo |
81 |
chmod 755 repo |
chmod 755 repo |
82 |
./repo init -u git://android.git.kernel.org/platform/manifest.git |
./repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 |
83 |
./repo sync |
./repo sync |
84 |
|
source build/envsetup.sh |
85 |
|
lunch full-eng |
86 |
make |
make |
87 |
</pre> |
</pre> |
88 |
|
|
92 |
|
|
93 |
<pre class="command"> |
<pre class="command"> |
94 |
cd $ANDROID_HOME/tmp/ |
cd $ANDROID_HOME/tmp/ |
95 |
wget -O ccs-tools-1.8.3-20110929.tar.gz 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49693/ccs-tools-1.8.3-20110929.tar.gz' |
wget -O ccs-tools-1.8.3-20120805.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49693/ccs-tools-1.8.3-20120805.tar.gz' |
96 |
wget -O ccs-tools-1.8.3-20110929.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49693/ccs-tools-1.8.3-20110929.tar.gz.asc' |
wget -O ccs-tools-1.8.3-20120805.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49693/ccs-tools-1.8.3-20120805.tar.gz.asc' |
97 |
gpg ccs-tools-1.8.3-20110929.tar.gz.asc |
wget http://I-love.SAKURA.ne.jp/kumaneko-key |
98 |
tar -zxf ccs-tools-1.8.3-20110929.tar.gz |
gpg --import kumaneko-key |
99 |
cd ccstools |
gpg ccs-tools-1.8.3-20120805.tar.gz.asc |
100 |
|
tar -zxf ccs-tools-1.8.3-20120805.tar.gz |
101 |
|
cd ccs-tools |
102 |
make |
make |
103 |
sudo make install |
sudo make install |
104 |
</pre> |
</pre> |
118 |
<pre class="command"> |
<pre class="command"> |
119 |
cd $ANDROID_HOME/tmp/ |
cd $ANDROID_HOME/tmp/ |
120 |
wget -O agcc http://plausible.org/andy/agcc |
wget -O agcc http://plausible.org/andy/agcc |
121 |
|
sed -i -e 's@4\.2\.1@4.4.3@g' -e 's@interwork/@@g' -- agcc |
122 |
chmod 755 agcc |
chmod 755 agcc |
123 |
./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccstools/usr_lib_ccs/ccs-editpolicy-agent.c |
./agcc -o ccs-editpolicy-agent $ANDROID_HOME/tmp/ccs-tools/usr_lib_ccs/ccs-editpolicy-agent.c |
124 |
chmod 700 ccs-editpolicy-agent |
chmod 700 ccs-editpolicy-agent |
125 |
</pre> |
</pre> |
126 |
|
|
254 |
|
|
255 |
<pre class="command"> |
<pre class="command"> |
256 |
cd $ANDROID_HOME/tmp/ |
cd $ANDROID_HOME/tmp/ |
257 |
wget -O kernel-source.tar.gz \ |
git clone https://android.googlesource.com/kernel/goldfish |
258 |
'http://android.git.kernel.org/?p=kernel/common.git;a=snapshot;h=b0d93fb0426911d0329f861f22c59f1c72cff815;sf=tgz' |
cd goldfish/ |
259 |
tar -zxf kernel-source.tar.gz |
git checkout origin/android-goldfish-2.6.29 |
260 |
cd common-b0d93fb/ |
ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s goldfish_armv7_defconfig |
|
ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make goldfish_defconfig |
|
261 |
</pre> |
</pre> |
262 |
|
|
263 |
<p>TOMOYO Linux パッチを適用します。</p> |
<p>TOMOYO Linux パッチを適用します。</p> |
264 |
|
|
265 |
<pre class="command"> |
<pre class="command"> |
266 |
cd $ANDROID_HOME/tmp/common-b0d93fb/ |
cd $ANDROID_HOME/tmp/goldfish/ |
267 |
wget -O ccs-patch-1.8.3-20110929.tar.gz 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49684/ccs-patch-1.8.3-20110929.tar.gz' |
wget -O ccs-patch-1.8.3-20121015.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49684/ccs-patch-1.8.3-20121015.tar.gz' |
268 |
wget -O ccs-patch-1.8.3-20110929.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?f=/tomoyo/49684/ccs-patch-1.8.3-20110929.tar.gz.asc' |
wget -O ccs-patch-1.8.3-20121015.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49684/ccs-patch-1.8.3-20121015.tar.gz.asc' |
269 |
gpg ccs-patch-1.8.3-20110929.tar.gz.asc |
gpg ccs-patch-1.8.3-20121015.tar.gz.asc |
270 |
tar -zxf ccs-patch-1.8.3-20110929.tar.gz |
tar -zxf ccs-patch-1.8.3-20121015.tar.gz |
271 |
patch -p1 < patches/ccs-patch-2.6.29-android-goldfish.diff |
patch -p1 < patches/ccs-patch-2.6.29-android-goldfish.diff |
272 |
sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs >> .config |
sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs >> .config |
273 |
|
mkdir -p security/ccsecurity/policy/ |
274 |
cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/ |
cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/ |
275 |
</pre> |
</pre> |
276 |
|
|
277 |
<p>カーネルをコンパイルします。</p> |
<p>カーネルをコンパイルします。</p> |
278 |
|
|
279 |
<pre class="command"> |
<pre class="command"> |
280 |
cd $ANDROID_HOME/tmp/common-b0d93fb/ |
cd $ANDROID_HOME/tmp/goldfish/ |
281 |
ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make -s |
ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s |
282 |
cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img |
cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img |
283 |
</pre> |
</pre> |
284 |
|
|
300 |
zcat ../ramdisk.img | cpio -id |
zcat ../ramdisk.img | cpio -id |
301 |
echo >> init.rc |
echo >> init.rc |
302 |
echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' >> init.rc |
echo 'service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000' >> init.rc |
303 |
|
echo ' class core' >> init.rc |
304 |
echo ' oneshot' >> init.rc |
echo ' oneshot' >> init.rc |
305 |
cp -p $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/ |
cp -p $ANDROID_HOME/tmp/ccs-editpolicy-agent sbin/ |
306 |
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
368 |
<p>また、保存したポリシーをカーネル内に埋め込むには以下のように行ってください。</p> |
<p>また、保存したポリシーをカーネル内に埋め込むには以下のように行ってください。</p> |
369 |
|
|
370 |
<pre class="command"> |
<pre class="command"> |
371 |
cp -p $ANDROID_HOME/tmp/policy/*.conf $ANDROID_HOME/tmp/common-b0d93fb/security/ccsecurity/policy/ |
cp -p $ANDROID_HOME/tmp/policy/*.conf $ANDROID_HOME/tmp/goldfish/security/ccsecurity/policy/ |
372 |
</pre> |
</pre> |
373 |
|
|
374 |
<p>カーネルを再コンパイルします。</p> |
<p>カーネルを再コンパイルします。</p> |
375 |
|
|
376 |
<pre class="command"> |
<pre class="command"> |
377 |
cd $ANDROID_HOME/tmp/common-b0d93fb/ |
cd $ANDROID_HOME/tmp/goldfish/ |
378 |
ARCH=arm CROSS_COMPILE=$ANDROID_TOOLCHAIN/arm-eabi- make -s |
ARCH=arm CROSS_COMPILE=$ANDROID_EABI_TOOLCHAIN/arm-linux-androideabi- make -s |
379 |
cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img |
cp -p arch/arm/boot/zImage $ANDROID_IMG/kernel.img |
380 |
</pre> |
</pre> |
381 |
|
|
404 |
|
|
405 |
<pre class="command"> |
<pre class="command"> |
406 |
sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs >> .config |
sed -e 's/# CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER is not set/CONFIG_CCSECURITY_OMIT_USERSPACE_LOADER=y/' -- config.ccs >> .config |
407 |
|
mkdir -p security/ccsecurity/policy/ |
408 |
cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/ |
cp -p $ANDROID_HOME/tmp/policy/*.conf security/ccsecurity/policy/ |
409 |
</pre> |
</pre> |
410 |
|
|
411 |
<p>という部分を</p> |
<p>という部分を</p> |
412 |
|
|
413 |
<pre class="command"> |
<pre class="command"> |
414 |
cat config.ccs >> .config |
sed -e 's:/sbin/init:/init:' -- config.ccs >> .config |
415 |
</pre> |
</pre> |
416 |
|
|
417 |
<p>に置き換えてください。このようにした場合、ポリシーローダとして /sbin/ccs-init (および /sbin/ccs-init が依存するファイルとして /system/bin/linker /lib/libc.so /lib/libm.so )もRAMディスク内にコピーしてください。( /sbin/ccs-init が実行される時点では /system/ パーティションがマウントされていないため、シンボリックリンクでの代用はできません。)</p> |
<p>に置き換えてください。このようにした場合、ポリシーローダとして /sbin/ccs-init (および /sbin/ccs-init が依存するファイルとして /system/bin/linker /system/lib/libc.so /system/lib/libm.so )もRAMディスク内にコピーしてください。 /sbin/ccs-init が実行される時点では /system/ パーティションがマウントされていないため、シンボリックリンクでの代用はできません。また、 ccs-init.c はポリシーを /etc/ccs/ から読み込むようになっていますので、適宜修正(例えば $ANDROID_HOME/tmp/policy/*.conf の内容を ccs-init.c に埋め込んでしまうなど)してください。 Android エミュレータで使用するRAMディスクに含まれている /init.rc が /etc という名前で /system/etc/ ディレクトリへのシンボリックリンクを作成するため、以下の例では、ポリシーを /ccs/ ディレクトリから読み込むように修正しています。</p> |
418 |
|
|
419 |
<pre class="command"> |
<pre class="command"> |
420 |
cd $ANDROID_HOME/tmp/ |
cd $ANDROID_HOME/tmp/ |
421 |
./agcc -o ccs-init $ANDROID_HOME/tmp/ccstools/sbin/ccs-init.c |
sed -e 's:etc/ccs:ccs:g' $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init.c > $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init2.c |
422 |
chmod 700 ccs-init |
./agcc -o ccs-init $ANDROID_HOME/tmp/ccs-tools/sbin/ccs-init2.c |
423 |
|
cd $ANDROID_IMG/tmp/ |
424 |
|
mkdir -p sbin system/bin system/lib |
425 |
|
cp -p $ANDROID_HOME/tmp/ccs-init sbin/ |
426 |
|
cp -p $ANDROID_HOME/out/target/product/generic/system/bin/linker system/bin/ |
427 |
|
cp -p $ANDROID_HOME/out/target/product/generic/system/lib/libc.so system/lib/ |
428 |
|
cp -p $ANDROID_HOME/out/target/product/generic/system/lib/libm.so system/lib/ |
429 |
|
chmod 700 sbin/ccs-init system/bin/linker system/lib/libc.so system/lib/libm.so |
430 |
|
find . -print0 | cpio -o0 -H newc | gzip -9 > ../ramdisk.img |
431 |
</pre> |
</pre> |
432 |
|
|
|
<p>また、 ccs-init.c はポリシーを /etc/ccs/ から読み込むようになっていますので、適宜修正(例えば $ANDROID_HOME/tmp/policy/*.conf の内容を ccs-init.c に埋め込んでしまうなど)してください。</p> |
|
|
|
|
433 |
</div><!-- regular-content --> |
</div><!-- regular-content --> |
434 |
|
|
435 |
</div><!-- content --> |
</div><!-- content --> |