Info: Version 1.8.x is available.

English Page

Last modified: $Date: 2024-04-01 00:45:12 +0900 (Mon, 01 Apr 2024) $

TOMOYO Linux on CAT760

このページでは、 TOMOYO Linux を CAT760 上で動作させる手順について説明します。ホスト環境として x86 上で動作している Debian Sarge を使用します。


基本編:コンパクトフラッシュ上のカーネルと rootfs を使って動作させる
応用編:フラッシュROM上のカーネルと rootfs を使って動作させる

基本編:コンパクトフラッシュ上のカーネルと rootfs を使って動作させる

ステップ1:ホスト環境を構築する

Debian Sarge は既に End Of Life であるため、パッケージのダウンロードサーバを書き換える必要があります。 root としてログインし、 /etc/apt/sources.list の内容を以下のように書き換えてください。

deb http://archive.debian.org/debian-archive/debian/ sarge main contrib non-free
deb http://archive.debian.org/debian-archive/debian-security/ sarge/updates main contrib non-free

次に、 fdisk コマンドの -l オプションでデバイスの一覧が表示されるようにするために、 2.6 カーネルをインストールします。

# apt-get update
# apt-get -y install kernel-image-2.6.8-4-686-smp

2.6.8-4-686-smp カーネルで再起動します。

# reboot

ステップ2:コンパイルに必要なパッケージをインストールする

開発用CDROMのマウントポイントとして /mnt/cdrom を作成し、そこにマウントします。

# mkdir -p /mnt/cdrom
# mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/

CDROM内にあるクロスツールパッケージが依存するパッケージをインストールします。

# apt-get -y install gcc-3.4-base libreadline4

CDROM内にあるクロスツールパッケージをインストールします。ただし、 binutils パッケージと競合するファイルを含んでいる gdb-sh4-linux パッケージはアンインストールします。

# dpkg -i /mnt/cdrom/cross-tools/debian-sarge/sh4/*.deb
# dpkg --purge gdb-sh4-linux

カーネルおよびツールのコンパイルに必要なパッケージをインストールします。

# apt-get -y install patch make gcc libc6-dev libncurses5-dev help2man libreadline5-dev

ステップ3:カーネルをコンパイルする

カーネルのソースを展開します。

# cd
# tar -zxf /mnt/cdrom/kernel/linux-2.6.15-cat_20080502.tgz
# cd linux-2.6.15-cat

TOMOYO Linux パッチをダウンロードして適用します。

# wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.7/ccs-patch-1.7.4-20240401.tar.gz
# wget https://sourceforge.net/projects/tomoyo/files/ccs-patch/1.7/ccs-patch-1.7.4-20240401.tar.gz.asc
# gpg ccs-patch-1.7.4-20240401.tar.gz.asc
# tar -zxf ccs-patch-1.7.4-20240401.tar.gz
# patch -p1 < patches/ccs-patch-2.6.15-cat-760.diff

カーネルコンフィグを作成します。

# make cat760_defconfig

コンパイルを行います。

# make
# make modules_install

make modules_install によりカーネルモジュールが /home/ebihara/tmp/lib/modules/2.6.15-sh/ 以下にインストールされるので、カーネル本体を /home/ebihara/tmp/ 以下にインストールします。

# mkdir -p /home/ebihara/tmp/
# cp -p arch/sh/boot/zImage /home/ebihara/tmp/

ステップ4:ツールをコンパイルする

ツールのソースをダウンロードします。

# cd
# wget -O - 'https://osdn.jp/projects/tomoyo/svn/view/trunk/1.7.x/ccs-tools/ccstools.tar.gz?root=tomoyo&view=tar' | tar -zxf -

CAT760 向けにクロスコンパイルを行います。クロスコンパイルされたツールは /home/ebihara/tmp/sbin/ および /home/ebihara/tmp/usr/ 以下にインストールされます。

# make -C ccstools/ CC=sh4-linux-gcc INSTALLDIR=/home/ebihara/tmp/ install clean

man ページは使わないので削除します。

# rm -fR /home/ebihara/tmp/usr/share/

ホスト環境から操作を行うので、ホスト環境向けにもコンパイルを行います。コンパイルされたツールは /sbin/ および /usr/ 以下にインストールされます。

# make -sC ccstools/ install clean

ステップ5:コンパクトフラッシュをフォーマットする

CAT760 で / パーティションとして使用するためのコンパクトフラッシュを、ホスト環境のドライブに差し込んでください。

fdisk コマンドを使ってコンパクトフラッシュのデバイスファイル名を確認します。

# fdisk -l

Disk /dev/sda: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         522     4192933+  83  Linux

Disk /dev/sdb: 251 MB, 251658240 bytes
8 heads, 60 sectors/track, 1024 cylinders
Units = cylinders of 480 * 512 = 245760 bytes

Disk /dev/sdb doesn't contain a valid partition table

このページでは、以降、ホスト環境に於けるコンパクトフラッシュのデバイスファイル名が /dev/sdb であるものと仮定します。

fdisk コマンドを使ってコンパクトフラッシュのパーティションを分割します。

# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1024, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1024, default 1024):
Using default value 1024

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

コンパクトフラッシュを / パーティションとしてマウントできるように ext2 でフォーマットします。

# mke2fs /dev/sdb1
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
61440 inodes, 245728 blocks
12286 blocks (5.00%) reserved for the super user
First data block=1
30 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

ステップ6:コンパクトフラッシュにコピーする

マウントポイントとして /mnt/cfcard を作成し、そこにマウントします。

# mkdir -p /mnt/cfcard
# mount /dev/sdb1 /mnt/cfcard/

CDROM内にあるイメージファイルの内容をコンパクトフラッシュに展開します。

# cd /mnt/cfcard/
# tar -zxf /mnt/cdrom/rootfs/files/target_cat760_20060722.tgz --strip 2

クロスコンパイルしたカーネルとツールをコンパクトフラッシュにコピーします。

# cp -a /home/ebihara/tmp/* /mnt/cfcard/

コンパクトフラッシュをアンマウントし、 CAT760 に挿入します。

# cd
# umount /mnt/cfcard/

ステップ7:ポリシーの初期化を行う

SH4-7760 と書かれている基板の SW1 が全て OFF 側になっていることを確認して、 CAT760 の電源を入れると、以下のようなプロンプトが表示されます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 16:44:36
 command line = console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

管理者モードに移ります。パスワードは silinux です。

admin

デフォルトのコマンドラインを設定します。 CAT760 環境に於いては、コンパクトフラッシュには /dev/hda でアクセスできます。

setparam zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2

ポリシーの初期化が済んでいないため、 TOMOYO Linux を無効にした状態でブートします。

boot zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 ccsecurity=off

ユーザ名 root 、パスワード root でログインします。

SiliconLinux for CAT709/760 supercat ttySC0

supercat login: root
Password:
Unable to change tty /dev/ttySC0: Read-only file system
supercat:~#

/ を読み書き可能な状態にします。

supercat:~# mount -o remount,rw /

ポリシーの初期化を行います。(ホスト環境と実機が同一の構成であれば、ホスト環境内で chroot /mnt/cfcard/ /usr/lib/ccs/init_policy を実行すればよいのですが、異なる構成であるため、正しい結果を得るために実機で /usr/lib/ccs/init_policy を実行します。)

supercat:~# /usr/lib/ccs/init_policy
Creating policy directory... OK
Creating exception policy... OK
Creating domain policy... OK
Creating manager policy... OK
Creating default profile... OK
Creating memory quota policy... OK
Creating module loader... OK

/ を読み込み専用の状態にします。

supercat:~# mount -o remount,ro /

シャットダウンして、コンパクトフラッシュを抜きます。

supercat:~# halt

ステップ8:ポリシーの調整を行う

コンパクトフラッシュをマウントします。(ホスト環境と実機が同一の構成であれば chroot /mnt/cfcard/ を実行すればよいのですが、異なる構成であるため cd を使用しています。以下、 /etc/ ではなく etc/ であることに注意してください。)

# mount /dev/sdb1 /mnt/cfcard/
# cd /mnt/cfcard/

シャットダウン時にポリシーを自動的に保存されるようにするために etc/init.d/halt の halt -d -f -i $poweroff $hddown の直前に以下の内容を追加します。

halt --help > /dev/null 2>&1
mount -o remount,ro /
mount -o remount,rw /
/usr/sbin/ccs-savepolicy
/usr/sbin/ccs-savepolicy
mount -o remount,ro /

ccs-savepolicy コマンドは ccs-savepolicy コマンドが実行された時点のポリシーしか保存できません。そのため、 ccs-savepolicy コマンド自身が必要とするアクセス許可を学習させるために、 ccs-savepolicy コマンドを2回実行しています。また、 ccs-savepolicy コマンドが実行されるタイミングでは既にファイルシステムが読み込み専用モードになってしまっているため、そのままではポリシーディレクトリに書き込みができません。そのため、一時的に読み書きモードに変更するためのアクセス許可と読み込み専用モードに戻すためのアクセス許可を学習させるために、 mount コマンドを ccs-savepolicy コマンドの実行前に2回実行しています。同様に halt コマンドのアクセス許可も学習させるために、 halt コマンドを ccs-savepolicy コマンドの実行前に1回実行しています。

同様に、 etc/init.d/reboot の reboot -d -f -i の直前に以下の内容を追加します。

reboot --help > /dev/null 2>&1
mount -o remount,ro /
mount -o remount,rw /
/usr/sbin/ccs-savepolicy
/usr/sbin/ccs-savepolicy
mount -o remount,ro /

リモートからポリシーの操作ができるようにするために、 etc/init.d/ccs-editpolicy-agent を作成します。

# echo '#! /bin/sh' > etc/init.d/ccs-editpolicy-agent
# echo 'exec /usr/lib/ccs/ccs-editpolicy-agent 0.0.0.0:10000 &' >> etc/init.d/ccs-editpolicy-agent
# chmod 700 etc/init.d/ccs-editpolicy-agent

etc/init.d/ccs-editpolicy-agent が起動時に実行されるようにします。(ホスト環境と実機が同一の構成であれば、ホスト環境内で chroot /mnt/cfcard/ update-rc.d ccs-editpolicy-agent defaults を実行すればよいのですが、異なる構成であるため、手作業により行います。)

# ln -s ../init.d/ccs-editpolicy-agent etc/rcS.d/S60ccs-editpolicy-agent

ポリシーの変更を許可するプログラムの一覧である etc/ccs/manager.conf に /usr/lib/ccs/ccs-editpolicy-agent を追加します。

# echo /usr/lib/ccs/ccs-editpolicy-agent >> etc/ccs/manager.conf

起動時から学習モードになるように、 etc/ccs/domain_policy.conf を更新します。

# cat > etc/ccs/domain_policy.conf << EOF
<kernel>
use_profile 1
EOF

etc/ccs/meminfo.conf でメモリ使用量の上限を設定します。 CAT760 の搭載メモリは64MBなので、ポリシー用に5MB/アクセスログ用に1MB/対話的処理用に1MBを上限として割り当てます。

# cat > etc/ccs/meminfo.conf << EOF
Policy:      5242880
Audit logs:  1048576
Query lists: 1048576
EOF

コンパクトフラッシュをアンマウントします。

# cd
# umount /mnt/cfcard/

ステップ9:ポリシーを作成する

電源を入れてブートローダに進みます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 17:14:20
 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

ブートします。

boot

ログインして、好きなように操作します。

CAT760 のIPアドレスを xxx.xxx.xxx.xxx とした場合、ホスト側から

# ccs-editpolicy xxx.xxx.xxx.xxx:10000

のように実行することにより、ホスト側からポリシーの編集を行うことができます。同様に、ホスト側から

# ccs-auditd xxx.xxx.xxx.xxx:10000 /tmp/grant_log.conf /tmp/reject_log.conf

のように実行することにより、CAT760 で生成されたアクセスログをホスト側に保存することができます。その他にも、

# ccs-savepolicy xxx.xxx.xxx.xxx:10000 /tmp/ d

のように実行することにより、CAT760 側の /proc/ccs/domain_policy の内容をホスト側の /tmp/domain_policy.conf に保存することができ、

# ccs-loadpolicy xxx.xxx.xxx.xxx:10000 /tmp/ d

のように実行することにより、ホスト側の /tmp/domain_policy.conf の内容を CAT760 側の /proc/ccs/domain_policy に追加することができます。

操作を間違えて起動できなくなった場合には、 boot のコマンドラインで boot zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2 ccsecurity=off のように指定することで TOMOYO Linux を無効にした状態で起動できます。

補足:工場出荷時の状態に戻す

ステップ7で書き換えたコマンドラインを復元するには以下のように行います。

電源を入れてブートローダに進みます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 17:44:10
 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

管理者モードに移ります。パスワードは silinux です。

admin

コマンドラインを設定します。

setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2

応用編:フラッシュROM上のカーネルと rootfs を使って動作させる

ステップ1:ホスト環境を構築する

基本編のステップ1と同じです。

ステップ2:コンパイルに必要なパッケージをインストールする

基本編のステップ2と同じです。

ステップ3:カーネルをコンパイルする

コンパクトフラッシュに保存されたカーネルから起動する場合にはカーネル本体のサイズを気にする必要はありませんが、フラッシュROM内のカーネル用パーティションに保存されたカーネルから起動する場合にはカーネル本体のサイズに注意が必要です。 CAT760 のデフォルトのパーティション設定では、カーネル用のパーティションサイズは 1245184(0x130000)バイトです。デフォルトのカーネルコンフィグでコンパイルした場合のカーネルサイズは 1212416(0x128000)バイトですので、デフォルトでは32キロバイトしか空き領域がありません。(なお、 CAT760 の新製品である CAT760A ではフラッシュROMのセクタサイズが64キロバイトから128キロバイトに変更されたのに伴い、カーネル用のパーティションサイズが 1179648(0x120000)バイトに縮小されているため、デフォルトで空き領域が不足しますのでご注意ください。)

TOMOYO Linux の機能をカーネル本体に組み込んだ場合、カーネル本体のサイズがおよそ48キロバイト増加するため、 rootfs 用のパーティションサイズを小さくしてカーネル用パーティションサイズを大きくするか、カーネルコンフィグで幾つかの機能をローダブルカーネルモジュールとしてコンパイルする必要が生じます。

TOMOYO Linux の機能の殆どはローダブルカーネルモジュールとして切り出すことが可能です。 TOMOYO Linux の機能をローダブルカーネルモジュールとして切り出した場合、カーネル本体のサイズ増加はおよそ4キロバイトで済みます。

手順は基本編のステップ3と同じですが、 TOMOYO Linux をローダブルカーネルモジュールとして切り出す場合には、「カーネルコンフィグを作成する」( make cat760_defconfig )と「カーネルをコンパイルする」( make )の間に以下の手順を行います。

# make menuconfig

Security options セクションの CCSecurity support グループにある Compile as loadable kernel module という項目を選択します。

[ ] Enable access key retention support
[ ] Enable different security models
[*] CCSecurity support
[*]   Compile as loadable kernel module
[ ]   Disable by default
(2048) Default maximal count for learning mode
(/sbin/ccs-init) Default policy loader
(/sbin/ccs-start) Alternative activation trigger
(/sbin/modprobe /sbin/hotplug) Built-in domain initializer programs
[*]   Auditing interface support
(1024)  Default maximal count for grant log
(1024)  Default maximal count for reject log

Exit を2回選択し、カーネルコンフィグを保存するかどうかの質問に Yes と答えてください。

ステップ4:ツールをコンパイルする

基本編のステップ4と同じです。

ステップ5:コンパクトフラッシュをフォーマットする

基本編のステップ5と同じです。ただし、ブートローダは ext2 ファイルシステムへの書き込みをサポートしていないので、 ext2 ファイルシステムではなく fat ファイルシステムでフォーマットする必要があります。 mke2fs の箇所は mkfs.vfat に読み替えてください。

# mkfs.vfat /dev/sdb1

ステップ6:バックアップを取得する

コンパクトフラッシュを CAT760 に挿入後、電源を入れてブートローダに進みます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 17:14:20
 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

フラッシュROMに記録されているカーネルと rootfs のバックアップを取得します。

cp rom:zImage cf0:zImage-orig 
cp rom:rootfs cf0:rootfs-orig 

シャットダウンして、コンパクトフラッシュを抜きます。

ステップ7: rootfs を編集する

ホスト環境にコンパクトフラッシュを挿入し、マウントします。

# mount /dev/sdb1 /mnt/cfcard/

mkfs.jffs2 のためのパッケージをインストールします。

# apt-get install mtd-tools

mtdblock モジュールをロードします。

# modprobe mtdblock

mtdram モジュールをロードします。

# modprobe mtdram total_size=16384

rootfs となるデバイスファイルを作成します。

# mknod /dev/mtdblock2 b 31 2

rootfs となるデバイスファイルに書き込みます。

# cat /mnt/cfcard/rootfs-orig > /dev/mtdblock2

rootfs をマウントします。

# mkdir -p /mnt/rootfs
# mount -t jffs2 /dev/mtdblock2 /mnt/rootfs/
# cd /mnt/rootfs/

必要に応じて編集します。(基本編のステップ7~ステップ9に対応する作業です。) 忘れずに /sbin/ccs-init と /etc/ccs/ccs-load-module と /lib/modules/2.6.15-sh/ 以下をコピーしてください。コピーを忘れると、 TOMOYO Linux の機能が有効になりません。その他には、 /etc/ccs/ ディレクトリ以下にポリシーを用意することが必要です。

rootfs の内容を固めます。

# cd
# mkfs.jffs2 -p -o /mnt/cfcard/rootfs -r /mnt/rootfs/

rootfs をアンマウントします。

# umount /mnt/rootfs/

コンパクトフラッシュをアンマウントし、 CAT760 に挿入します。

# umount /mnt/cfcard/

ステップ8:フラッシュROMを書き換える

電源を入れてブートローダに進みます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 17:44:10
 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

管理者モードに移ります。パスワードは silinux です。

admin

カーネルと rootfs をコピーします。

cp cf0:zImage rom:zImage
cp cf0:rootfs rom:rootfs

デフォルトのコマンドラインを設定します。

setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2

ブートします。

boot

以上で完成です。

うまくブートできなかった場合には、 boot のコマンドラインで boot console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2 ccsecurity=off のように指定することで TOMOYO Linux を無効にした状態で起動できます。

補足:工場出荷時の状態に戻す

ステップ6で取得したバックアップをリストアするには以下のように行います。

電源を入れてブートローダに進みます。

 CAT BOOT for CAT760  Version: 1.07 Feb 27 2007 17:45:59
 RTC clock :2010/05/04 17:44:10
 command line = zimage=cf0:zImage console=ttySC0,115200 root=/dev/hda1 ro rootfstype=ext2
 Mac address  = 00:03:82:03:03:C8
 Boot size    = 0x10000
 Kernel size  = 0x130000
>>

管理者モードに移ります。パスワードは silinux です。

admin

カーネルと rootfs をコピーします。

cp cf0:zImage-orig rom:zImage
cp cf0:rootfs-orig rom:rootfs

コマンドラインを設定します。

setparam console=ttySC0,115200 root=/dev/mtdblock2 ro rootfstype=jffs2

目次へ戻る

sflogo.php