このページは「24環境」の情報です

第15回 パッケージのビルド・追加実践編(CAT709)

海老原祐太郎
2003/7/2

第11回 nfsルートで大規模UNIX環境第12回 Debianパッケージのセルフビルド を参考にしていただいて、
CAT709 と NFS-ROOTの組み合わせでパッケージのビルドができるようになったと思います。

今回は実際にパッケージをビルドして、CAT709のユーザーランドイメージに組み込む作業を実践してみます。

例題として 送信専用メールソフト ssmtp、ファイル添付メール送信プログラム mpack を導入してみます。
(mpack が sendmail に依存していて、sendmailはデカイのでssmtpで代用します)

NFS-ROOTで立ち上げる

第11回 nfsルートで大規模UNIX環境の通り、CAT701の電源を入れてROMモニターから c をタイプして
カーネルコマンドラインを以下のように入力します。

>c
console=ttySC0,115200 root=/dev/nfs nfsroot=192.168.7.123:/SOMEWHERE/cat709-root-dir (実際には改行入れずに1行)
ip=192.168.7.100:192.168.7.123:192.168.7.1:255.255.255.0:supercat

s を押してNFS-ROOT環境で立ち上げます。

パッケージのビルド

以下の操作はすべてCAT709で行います。
開発機はNFSのdiskスペースを提供しているだけですのでi386でなくても何でもかまいません。

ssmtp パッケージのソースをダウンロードします。

~/# cd build
~/build# apt-get source ssmtp
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 160kB of source archives.
Get:1 http://ftp.jp.debian.org sid/main ssmtp 2.60.3 (dsc) [510B]
Get:2 http://ftp.jp.debian.org sid/main ssmtp 2.60.3 (tar) [159kB]
Fetched 160kB in 15s (10.5kB/s)
dpkg-source: extracting ssmtp in ssmtp-2.60.3

ssmtp パッケージをビルドします。

~/build# cd ssmtp-2.60.3/
~/build/ssmtp-2.60.3# dpkg-buildpackage -uc -us -B
dpkg-buildpackage: source package is ssmtp
dpkg-buildpackage: source version is 2.60.3
dpkg-buildpackage: source maintainer is Matt Ryan <mryan@debian.org>
dpkg-buildpackage: host architecture is sh3
: 【略】
dpkg-deb: building package `ssmtp' in `../ssmtp_2.60.3_sh3.deb'.
dpkg-genchanges -B
dpkg-genchanges: arch-specific upload - not including arch-independent packages
dpkg-genchanges: binary-only upload - not including any source code
dpkg-buildpackage: binary only upload (no source included)
~/build/ssmtp-2.60.3#

ssmtp_2.60.3_sh3.deb パッケージが出来上がりました。

同様にして mpack パッケージも作ります。

~/build# apt-get source mpack
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 160kB of source archives.
Get:1 http://ftp.jp.debian.org sid/main mpack 1.5-9 (dsc) [703B]
Get:2 http://ftp.jp.debian.org sid/main mpack 1.5-9 (tar) [155kB]
Get:3 http://ftp.jp.debian.org sid/main mpack 1.5-9 (diff) [4077B]
Fetched 160kB in 10s (15.8kB/s)
dpkg-source: extracting mpack in mpack-1.5
Not setting time of file decode.c (time mismatch)
Not setting time of file unixos.c (time mismatch)
Not setting time of file unixpk.c (time mismatch)
Not setting time of file unixpk.man (time mismatch)
Not setting time of file unixunpk.man (time mismatch)
Not setting time of file uudecode.c (time mismatch)

mpack パッケージをビルドします。

~/build# cd mpack-1.5/
~/build/mpack-1.5# dpkg-buildpackage -uc -us -B
dpkg-buildpackage: source package is mpack
dpkg-buildpackage: source version is 1.5-9
dpkg-buildpackage: source maintainer is Richard Braakman <dark@xs4all.nl>
dpkg-buildpackage: host architecture is sh3
: 【略】
dpkg-deb: building package `mpack' in `../mpack_1.5-9_sh3.deb'.
dpkg-genchanges -B
dpkg-genchanges: arch-specific upload - not including arch-independent packages
dpkg-genchanges: binary-only upload - not including any source code
dpkg-buildpackage: binary only upload (no source included)

mpack_1.5-9_sh3.deb パッケージが出来上がりました。

パッケージのインストール

(私の環境では メール送信に exim が動いているので exim をアンインストールしてから ssmtp を入れています)

~/build# dpkg -r exim
~/build# dpkg -i ssmtp_2.60.3_sh3.deb
~/build# dpkg -i mpack_1.5-9_sh3.deb

ちなみに、ssmtp は /etc/ssmtp/ssmtp.conf に設定ファイルがあり、重要なのはmailhub= の行になります。
ここにSMTPサーバを記述します。

# The person who gets all mail for userids < 1000
root=postmaster

mailhub=YOUR_SMTP_SERVER(ipaddress or hostname)

hostname=supercat.si-linux.co.jp

動作試験をします。

~# mail ebihara@si-linux.com
Subject: test1
test1
.
Cc:
~# mpack -s サブジェクト ファイル ebihara@si-linux.com

動作確認がとれました。
この段階で上手くいかなかったら設定ファイルを見直すなど修正を行ってください。

さてこの段階では NFS-ROOT上で動いているので動いて当然というか、
これからFLASHメモリーに組み込んで組込み装置として動作させます。

まず、ssmtpパッケージの構成ファイル一覧を取得し、覚えておきます。 (dpkg --contents コマンド)

~/build# dpkg --contents ssmtp_2.60.3_sh3.deb
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./etc/
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./etc/ssmtp/
-rw-r--r-- root/root   200 2003-07-02 15:51:09 ./etc/ssmtp/revaliases
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./usr/
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./usr/lib/
drwxr-xr-x root/root     0 2003-07-02 16:34:36 ./usr/sbin/
-rwxr-xr-x root/root 22292 2003-07-02 16:34:35 ./usr/sbin/ssmtp
drwxr-xr-x root/root     0 2003-07-02 16:34:36 ./usr/share/
drwxr-xr-x root/root     0 2003-07-02 16:34:36 ./usr/share/doc/
drwxr-xr-x root/root     0 2003-07-02 16:34:37 ./usr/share/doc/ssmtp/
-rw-r--r-- root/root  2259 2003-07-02 15:51:10 ./usr/share/doc/ssmtp/README
-rw-r--r-- root/root  1619 2003-07-02 15:51:10 ./usr/share/doc/ssmtp/CHANGELOG_OLD.gz
-rw-r--r-- root/root   664 2003-07-02 15:51:10 ./usr/share/doc/ssmtp/README.Debian
-rw-r--r-- root/root   605 2003-07-02 15:51:10 ./usr/share/doc/ssmtp/copyright
-rw-r--r-- root/root  4726 2003-07-02 15:51:10 ./usr/share/doc/ssmtp/changelog.gz
drwxr-xr-x root/root     0 2003-07-02 16:34:35 ./usr/share/man/
drwxr-xr-x root/root     0 2003-07-02 16:34:36 ./usr/share/man/man8/
-rw-r--r-- root/root   422 2003-07-02 15:51:09 ./usr/share/man/man8/newaliases.8.gz
-rw-r--r-- root/root  2710 2003-07-02 15:51:08 ./usr/share/man/man8/ssmtp.8.gz
-rw-r--r-- root/root   381 2003-07-02 15:51:09 ./usr/share/man/man8/mailq.8.gz
lrwxrwxrwx root/root     0 2003-07-02 16:34:35 ./usr/lib/sendmail - > ../sbin/sendmail
lrwxrwxrwx root/root     0 2003-07-02 16:34:36 ./usr/sbin/mailq -> ssmtp
lrwxrwxrwx root/root     0 2003-07-02 16:34:35 ./usr/sbin/newaliases -> ssmtp
lrwxrwxrwx root/root     0 2003-07-02 16:34:35 ./usr/sbin/sendmail -> ssmtp
lrwxrwxrwx root/root     0 2003-07-02 16:34:36 ./usr/share/man/man8/sendmail.8.gz -> ssmtp.8.gz

この中から察するに、/usr/share/doc と /usr/share/man は組み込み機器には不要そうです。
またいくつかのシンボリックリンクも見当たります。主になる実行ファイルは /usr/sbin/ssmtp ということがわかります。

同様に mpack パッケージも構成ファイル一覧を調べておきます。

~/build# dpkg --contents mpack_1.5-9_sh3.deb
drwxr-xr-x root/root     0 2003-07-02 16:27:38 ./
drwxr-xr-x root/root     0 2003-07-02 16:27:37 ./usr/
drwxr-xr-x root/root     0 2003-07-02 16:27:37 ./usr/bin/
-rwxr-xr-x root/root 20176 2003-07-02 15:44:11 ./usr/bin/mpack
-rwxr-xr-x root/root 32664 2003-07-02 15:44:11 ./usr/bin/munpack
drwxr-xr-x root/root     0 2003-07-02 16:27:38 ./usr/share/
drwxr-xr-x root/root     0 2003-07-02 16:27:38 ./usr/share/doc/
drwxr-xr-x root/root     0 2003-07-02 16:27:38 ./usr/share/doc/mpack/
-rw-r--r-- root/root  7111 1995-02-17 06:39:41 ./usr/share/doc/mpack/README.unix.gz
-rw-r--r-- root/root  1858 2003-07-02 09:00:00 ./usr/share/doc/mpack/copyright
-rw-r--r-- root/root  1117 2003-07-02 09:00:00 ./usr/share/doc/mpack/changelog.Debian.gz
drwxr-xr-x root/root     0 2003-07-02 16:27:37 ./usr/share/man/
drwxr-xr-x root/root     0 2003-07-02 16:27:38 ./usr/share/man/man1/
-rw-r--r-- root/root   932 2003-07-02 16:25:41 ./usr/share/man/man1/mpack.1.gz
-rw-r--r-- root/root  1569 2003-07-02 16:25:41 ./usr/share/man/man1/munpack.1.gz

こちらは /usr/bin/mpack だけがあればokそうですね。
また必要なライブラリも調べておきます。

~/build# ldd /usr/sbin/ssmtp
libnsl.so.1 => /lib/libnsl.so.1 (0x29579000)
libc.so.6 => /lib/libc.so.6 (0x2959d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x29556000)

libc とダイナミックリンカー(ld-linux)の 他には/lib/libnsl.so.1 が必要だということがわかりますが、
これはCAT709に最初からインストールされているので大丈夫です。

~/build# ldd /usr/bin/mpack
libc.so.6 => /lib/libc.so.6 (0x29579000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x29556000)

mpack には libc だけあればokですね。

CAT709をFLASH ROMで起動する

CAT701を再起動してROMモニターから c をタイプしてカーネルコマンドラインを
以下のように入力し、FLASH ROMを rootファイルシステムに戻してLinuxを起動します。

>c
console=ttySC0,115200 root=1f02 ro

root でログインして、flashメモリーに書き込めるようにします。
またNFS mount を使って、先ほどNFS-ROOTにしていた開発機のディレクトリを /mnt 等にマウントします。

# rommode rw
# mount 192.168.7.123:/home/ebihara/cat709-root-dir/ /mnt

先ほど調べて必要だと思われたファイルと設定ファイルなどを開発機のNFSからコピーしてきます。
cp の -a オプションはアーカイブオプションといって、コピー元の日付・オーナーなどを保持したまま
サブディレクトリも含めてコピーするときに使用します。ファイル単体なら -p オプションでもokです。

~# cp -a /mnt/etc/ssmtp /etc
~# cp -a /mnt/usr/sbin/ssmtp /usr/sbin/
~# cd /usr/sbin/
/usr/sbin# ln -s ssmtp mailq
/usr/sbin# ln -s ssmtp newaliases
/usr/sbin# ln -s ssmtp sendmail
/usr/sbin# cd ..
/usr# cd lib/
/usr/lib# ln -s ../sbin/sendmail sendmail

同様に mpack もコピーしてきます。

~# cp -a /mnt/usr/bin/mpack /usr/bin/

最後に ライブラリが足りているか確認をしてみます。
ldd コマンドが無いので ld-linux の --list で代用しています。
ちなみに、ライブラリファイルが不足しているときはこの段階でエラーが出るのでわかります。

~# /lib/ld-linux.so.2 --list /usr/sbin/ssmtp
libnsl.so.1 => /lib/libnsl.so.1 (0x29559000)
libc.so.6 => /lib/libc.so.6 (0x2957d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x52aaa000)
~# /lib/ld-linux.so.2 --list /usr/bin/mpack
libc.so.6 => /lib/libc.so.6 (0x29559000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x52aaa000)

さっきと同様に動作試験をします。

~# mail ebihara@si-linux.com
Subject: test1
test1
.
Cc:
~# mpack -s サブジェクト ファイル ebihara@si-linux.com

動作しましたか?これで無事 CAT709単体で動作する装置の完成です。

ユーザーランドイメージファイルを作る

では量産に向けて、ユーザーランドイメージファイルを作ります。
CDROM内にユーザーランドファイルの構成ファイル target.tar.gz がありますので
これを開発機で展開してイメージファイルを作成します。

今度は開発機で操作します。CAT709はしばらくお休みです。

ユーザーランドイメージファイルを展開します。

~# mkdir project/shtips_rensyu
~# cd project/shtips_rensyu
project/shtips_rensyu# tar xzfv /CDROM/userland/target-2003-06-17.tgz

先ほど、NFS-ROOT → CAT709のFLASHROM にファイルをコピーしたのと同じやり方で
必要なファイルを NFS-ROOT のディレクトリから target ディレクトリにコピーします。

project/shtips_rensyu# cp -a /home/ebihara/cat709-root-dir/etc/ssmtp  target/etc/
project/shtips_rensyu# cp -a /home/ebihara/cat709-root-dir/usr/sbin/ssmtp  target/usr/sbin/
project/shtips_rensyu# cp -a /home/ebihara/cat709-root-dir/usr/bin/mpack target/usr/bin/
project/shtips_rensyu# cd target/usr/sbin/
project/shtips_rensyu/target/usr/sbin# ln -s ssmtp mailq
project/shtips_rensyu/target/usr/sbin# ln -s ssmtp newaliases
project/shtips_rensyu/target/usr/sbin# ln -s ssmtp sendmail
project/shtips_rensyu/target/usr/sbin# cd ../lib
project/shtips_rensyu/target/usr/lib# ln -s ../sbin/ssmtp sendmail
project/shtips_rensyu/target/usr/lib# cd ../../../
project/shtips_rensyu#

次にイメージファイルを作成します。

project/shtips_rensyu# mkfs.jffs2 -r target/ -p -l -e 0x10000 -o rootfs.img
project/shtips_rensyu# ls -l
合計 5377
-rw-r--r--    1 root     root      5505024  7月  2 16:59 rootfs.img
drwxr-xr-x   18 root     root          432  4月  5 04:55 target

これで JFFS2 ファイルシステム形式の rootfs.img が出来上がりましたので
CAT709にダウンロードします。第13回(CAT709 カーネルダウンロード mini TIPS)が参考になると思います。

開発機で kermit を立ち上げます。すでに kermit が立ち上がっているときは ctrl+\ , C で
C-Kermit> プロンプトに抜けます。

(/home/ebihara/project/shtips_rensyu/) C-Kermit>cd project/shtips_rensyu
(/home/ebihara/project/shtips_rensyu/) C-Kermit>ls
合計 5377
-rw-r--r--    1 root     root      5505024  7月  2 16:59 rootfs.img
drwxr-xr-x   18 root     root          432  4月  5 04:55 target
(/home/ebihara/project/shtips_rensyu/) C-Kermit>rootfs rootfs.img
 

rootfs download mode. send 'rootfs.img' file via xmodemdownload_and_write (start=80100000,len=00700000) buffer
=8cSending rootfs.img, 43008 blocks: Give your local XMODEM receive command now.
Xmodem sectors/kbytes sent:  79/ 9k

rootfs を転送するマクロを使って rootfs.img ファイルをダウンロードします。
これで無事に立ち上がり、機能することを確認して終了です。