TOMOYO Linux on MeeGo 1.1
このページでは、 TOMOYO Linux を MeeGo で使う方法について説明します。
ステップ1:エミュレータ環境の構築
MeeGo handset UI イメージファイルをダウンロードして展開してください。
$ cd $ wget http://download3.meego.com/sep03/meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.tar.bz2 $ tar -jxf meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.tar.bz2 --strip 1
このイメージファイルに含まれている root ユーザのパスワードは meego です。
このイメージファイルを QEMU 上で利用する場合には、 http://wiki.meego.com/MeeGo_SDK_with_QEMU の指示に従って qemu-gl パッケージをダウンロードしてインストールしてください。
$ wget http://download3.meego.com/qemu-gl_0.12.4-3_i386.deb $ sudo dpkg -i qemu-gl_0.12.4-3_i386.deb $ wget http://download3.meego.com/qemugl_cmd.sh $ chmod 755 qemugl_cmd.sh
以下のようにして QEMU を実行してください。
$ ./qemugl_cmd.sh meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.raw
MeeGo 環境が正常に開始された場合、ステップ2へと進んでください。
このイメージファイルを VMware 上で利用する場合には、若干の修正を行う必要があります。
まず、4GBの仮想ハードディスクを持った VMware 仮想マシンを作成してください。
次に、 http://releases.ubuntu.com/lucid/ubuntu-10.04.2-desktop-i386.iso (MD5: 477350cbea8936c63d587cf2be69181b) などの LiveCD を利用して仮想マシンを起動してください。この ISO ファイルから起動した場合には、 gnome 端末を起動して root ユーザになってください。
$ sudo bash
仮想ハードディスクのデバイス名を確認してください。以下の例では /dev/sda が仮想ハードディスクです。
# fdisk -l
Disk /dev/sda: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sda doesn't contain a valid partition table
SSHや curl や wget などを利用してこのイメージファイルを取得して、仮想ハードディスクに書き出してください。以下の vmwarehost という文字列は VMware を動作させているホスト側のIPアドレスに置き換えてください。
# ssh root@vmwarehost 'cat ~/meego-handset-ia32-1.0.80.9.20100706.1-sdk-pre0901.raw' > /dev/sda # fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
次に、その仮想ハードディスクの最初のパーティションを /mnt/ にマウントしてください。
# fdisk -l
Disk /dev/sda: 4294 MB, 4294967296 bytes 186 heads, 61 sectors/track, 739 cylinders Units = cylinders of 11346 * 512 = 5809152 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00097211 Device Boot Start End Blocks Id System /dev/sda1 * 1 517 2929687+ 83 Linux Partition 1 has different physical/logical endings: phys=(364, 185, 61) logical=(516, 79, 21)
# mount /dev/sda1 /mnt/
マウントしたパーティション内にある /etc/X11/xorg.conf-handset をテキストエディタで開いてください。
# gedit /mnt/etc/X11/xorg.conf-handset
Device セクションにある Driver および BusID 行をコメントアウトしてください。以下に diff 形式の差分を示します。
--- a/etc/X11/xorg.conf-handset +++ b/etc/X11/xorg.conf-handset @@ -32,10 +32,10 @@ #Option "DefaultRefresh" # [<bool>] #Option "ModeSetClearScreen" # [<bool>] Identifier "Card0" - Driver "vesa" + #Driver "vesa" VendorName "Technical Corp." BoardName "Unknown Board" - BusID "PCI:0:2:0" + #BusID "PCI:0:2:0" EndSection Section "Screen"
ファイルを保存してエディタを終了してください。そして、パーティションをアンマウントしてください。
# umount /mnt/
IPアドレスを確認してください。このIPアドレスはSSHを用いて MeeGo 環境にログインするときに使用します。このページでは以後、このIPアドレスを参照するために meegohost という文字列を使用します。
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0c:29:99:19:08 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2001:c90:301:ba9:20c:29ff:fe99:1908/64 Scope:Global inet6 addr: fe80::20c:29ff:fe99:1908/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2210718 errors:39 dropped:40 overruns:0 frame:0 TX packets:270495 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3299820248 (3.2 GB) TX bytes:19256240 (19.2 MB) Interrupt:19 Base address:0x2000
システムを再起動します。
# reboot
MeeGo 環境が正常に開始された場合、ステップ2 へと進んでください。問題が生じた場合、以下の内容を確認してください。
SSHを使って MeeGo 環境にログインしてください。パスワードは meego です。
$ ssh root@meegohost
次に、 /var/log/Xorg.log.0 に含まれている (EE) という文字列を含む行を確認してください。例えば、以下のように ioctl EVIOCGNAME failed: Inappropriate ioctl for device というエラーが記録されている場合、 X に対してそのデバイスを無視するように伝える必要があるかもしれません。
[ 35.030] (II) XKB: reuse xkmfile /var/lib/xkb/server-D378AD8F86E560F712A83EE36E4E5E92C595B9BD.xkm [ 35.093] (II) config/udev: Adding input device AT Translated Set 2 keyboard (/dev/input/event1) [ 35.094] (**) AT Translated Set 2 keyboard: Applying InputClass "default" [ 35.094] (**) AT Translated Set 2 keyboard: always reports core events [ 35.094] (**) AT Translated Set 2 keyboard: Device: "/dev/input/event1" [ 35.094] (II) AT Translated Set 2 keyboard: Found keys [ 35.094] (II) AT Translated Set 2 keyboard: Configuring as keyboard [ 35.094] (II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD) [ 35.094] (**) Option "xkb_rules" "evdev" [ 35.094] (**) Option "xkb_model" "evdev" [ 35.094] (**) Option "xkb_layout" "us" [ 35.096] (II) config/udev: Adding input device ImPS/2 Generic Wheel Mouse (/dev/input/event2) [ 35.096] (**) ImPS/2 Generic Wheel Mouse: Applying InputClass "default" [ 35.096] (**) ImPS/2 Generic Wheel Mouse: always reports core events [ 35.096] (**) ImPS/2 Generic Wheel Mouse: Device: "/dev/input/event2" [ 35.096] (II) ImPS/2 Generic Wheel Mouse: Found 3 mouse buttons [ 35.096] (II) ImPS/2 Generic Wheel Mouse: Found scroll wheel(s) [ 35.096] (II) ImPS/2 Generic Wheel Mouse: Found relative axes [ 35.096] (II) ImPS/2 Generic Wheel Mouse: Found x and y relative axes [ 35.096] (II) ImPS/2 Generic Wheel Mouse: Configuring as mouse [ 35.097] (**) ImPS/2 Generic Wheel Mouse: YAxisMapping: buttons 4 and 5 [ 35.097] (**) ImPS/2 Generic Wheel Mouse: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200 [ 35.097] (II) XINPUT: Adding extended input device "ImPS/2 Generic Wheel Mouse" (type: MOUSE) [ 35.098] (**) ImPS/2 Generic Wheel Mouse: (accel) keeping acceleration scheme 1 [ 35.098] (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration profile 0 [ 35.098] (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration factor: 2.000 [ 35.098] (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration threshold: 4 [ 35.098] (II) ImPS/2 Generic Wheel Mouse: initialized for relative axes. [ 35.099] (II) config/udev: Adding input device ImPS/2 Generic Wheel Mouse (/dev/input/mouse0) [ 35.100] (**) ImPS/2 Generic Wheel Mouse: Applying InputClass "default" [ 35.100] (**) ImPS/2 Generic Wheel Mouse: always reports core events [ 35.100] (**) ImPS/2 Generic Wheel Mouse: Device: "/dev/input/mouse0" [ 35.100] (EE) ioctl EVIOCGNAME failed: Inappropriate ioctl for device [ 35.100] (II) UnloadModule: "evdev" [ 35.100] (EE) PreInit returned NULL for "ImPS/2 Generic Wheel Mouse"
X に特定のデバイス(上記の例の場合は ImPS/2 Generic Wheel Mouse (/dev/input/mouse0) )を無視するように指示するには、以下のようなセクションを追加してシステムを再起動してください。
--- a/etc/X11/xorg.conf-handset +++ b/etc/X11/xorg.conf-handset @@ -23,6 +23,13 @@ ModelName "Monitor Model" EndSection +Section "InputClass" + Identifier "ImPS/2 Generic Wheel Mouse" + MatchProduct "ImPS/2 Generic Wheel Mouse" + MatchDevicePath "/dev/input/mouse0" + Option "Ignore" "on" +EndSection + Section "Device" ### Available Driver options are:- ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
次のステップに進む前に、現時点までで起きている問題を解決しておいてください。
ステップ2:カーネルおよびツールの構築
カーネルおよびツールのコンパイルに必要な環境を用意してください。このセクションでは rpmbuild コマンドを利用できるようにするために Fedora 13 を利用しています。
まず、コンパイルに必要なパッケージをインストールします。
$ su - # yum -y install wget gcc rpm-build elfutils-libelf-devel binutils-devel newt-devel ncurses-devel # exit
次に、カーネルのソースパッケージをダウンロードします。
$ cd $ wget https://repo.meego.com/MeeGo/builds/1.0.99/1.0.99.2.20101019.1/core/repos/source/kernel-2.6.35.3-10.3.src.rpm
次に、ソースパッケージをインストールして、準備段階の処理を実行します。
$ rpm -ivh kernel-2.6.35.3-10.3.src.rpm $ rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec $ cd ~/rpmbuild/BUILD/kernel-2.6.35.3/linux-2.6.35/
このカーネルを QEMU 上で動作させようとしている場合、カーネルパッチをダウンロードして適用してください。このカーネルを VMware 上で動作させようとしている場合にはパッチを当てる必要はありません。
$ wget http://meego.gitorious.org/meego-developer-tools/meego-emulator-virtiogl-x86/blobs/raw/master/linux-2.6.35-virtio-for-qemu-gl-acceleration.patch $ patch -p1 < linux-2.6.35-virtio-for-qemu-gl-acceleration.patch
次に、カーネルコンフィグを作成します。 QEMU 上で動作している MeeGo 環境から取得するには以下のようにしてください。
$ scp -p -P 6666 root@127.0.0.1:/boot/config-\* .config
VMware 上で動作している MeeGo 環境から取得するには以下のようにしてください。
$ scp -p root@meegohost:/boot/config-\* .config
次に、カーネルコンフィグをアップデートします。このカーネルを QEMU 上で動作させようとしている場合には、 Virtio userspace memory transport という項目に対して y または m と回答することを忘れないでください。
$ make -s oldconfig
MeeGo カーネルは ext3 ファイルシステムイメージをマウントする際に writeback モードを使用しています。しかし、 writeback モードを使用した場合、 QEMU や VMware が突然終了してしまった場合にファイルが損傷(例えば既に削除されたファイルに含まれていたデータが暗黙のうちに直前に書き込まれたファイルの中に取り込まれる)する可能性があります。 ext3 ファイルシステムイメージをマウントする際に ordered モードを使用したい場合には以下のようにカーネルコンフィグを変更してください。
$ sed -i -e 's/# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set/CONFIG_EXT3_DEFAULTS_TO_ORDERED=y/' -- .config
カーネルのデバッグを行うつもりが無いのであれば、コンパイルに要する時間とディスクスペースを節約することができます。カーネルのデバッグを行うつもりが無いのであれば、以下のようにカーネルコンフィグを変更してください。
$ sed -i -e 's/CONFIG_DEBUG_INFO=y/# CONFIG_DEBUG_INFO is not set/' -- .config
次に、 TOMOYO Linux パッチをダウンロードして適用してください。
$ wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.8/ccs-patch-1.8.11-20240715.tar.gz $ wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.8/ccs-patch-1.8.11-20240715.tar.gz.asc $ gpg ccs-patch-1.8.11-20240715.tar.gz.asc $ tar -zxf ccs-patch-1.8.11-20240715.tar.gz $ patch -p1 < patches/ccs-patch-2.6.35.diff $ cat config.ccs >> .config
次に、カーネルをコンパイルしてください。
$ make -s
ツールをダウンロードしてコンパイルしてください。
$ cd ~/rpmbuild/BUILD/ $ wget https://sourceforge.net/projects/tomoyo/files/ccs-tools/1.8/ccs-tools-1.8.9-20210910.tar.gz $ wget https://sourceforge.net/projects/tomoyo/files/ccs-tools/1.8/ccs-tools-1.8.9-20210910.tar.gz.asc $ gpg ccs-tools-1.8.9-20210910.tar.gz.asc $ tar -zxf ccs-tools-1.8.9-20210910.tar.gz $ make -sC ccs-tools/
一時的にカーネルおよびツールを保持しておくためのディレクトリを作成して、そこにコピーしてください。
$ su # mkdir -p /tmp/meego/boot/extlinux/ # make -sC ccs-tools/ INSTALLDIR=/tmp/meego/ install # cd kernel-2.6.35.3/linux-2.6.35/ # make -s INSTALL_MOD_PATH=/tmp/meego/ modules_install vdso_install # make -s INSTALL_PATH=/tmp/meego/boot/extlinux/ install # chmod -R go-w /tmp/meego/ # chown -R root:root /tmp/meego/ # exit
カーネルおよびツールをコピーしてください。 QEMU 上で動作している MeeGo 環境へコピーするには以下のようにしてください。
$ cd /tmp/meego/ $ tar -zcf - | ssh root@127.0.0.1 -p 6666 'cd / && tar -zxf -'
VMware 上で動作している MeeGo 環境へコピーするには以下のようにしてください。
$ cd /tmp/meego/ $ tar -zcf - | ssh root@meegohost 'cd / && tar -zxf -'
ステップ3: TOMOYO Linux の初期化
SSH経由で MeeGo 環境にログインしてください。
TOMOYO Linux の初期設定を行います。
# /usr/lib/ccs/init_policy --use_profile=1
ブートローダの設定を変更します。
# vi /boot/extlinux/extlinux.conf
extlinux.conf を以下のように編集してください。
--- extlinux.conf +++ extlinux.conf @@ -18,7 +18,7 @@ menu color timeout 0 #ffffffff #00000000 menu color cmdline 0 #ffffffff #00000000 label meego0 - menu label MeeGo (2.6.35~rc6-134.1-qemu) - kernel vmlinuz-2.6.35~rc6-134.1-qemu - append ro root=/dev/sda1 quiet vga=current quiet + menu label MeeGo (2.6.35.3) + kernel vmlinuz-2.6.35.3 + append ro root=/dev/sda1 vga=current menu default
ファイルを保存して MeeGo 環境を再起動してください。
# reboot
ステップ4: MeeGo 環境の解析
SSHセッションから操作することができます。 /boot/extlinux/extlinux.conf から quiet オプションを削除すると、 ALT + F1 キーを押すとコンソール画面に、 ALT + F2 キーを押すとグラフィカル画面に切り替えることができるようになります。また、以下のようにするとグラフィカル画面上に xterm を配置することもできます。
# export DISPLAY=:0 # xterm -into `xwininfo -root -tree -int | awk ' { if ( index($2, "duihome") > 0) print $1; } '`
以下の動画では TOMOYO Linux を用いて MeeGo 環境の振る舞いを解析しています。
- ポリシーエディタの使い方:ポリシーエディタの詳細な使い方