ちょっと迷った瞬間。¶
Linuxの高いスキルを持った数少ない内の一人がとうとう今月末で辞めるというのを偶然会った際に聞かされた。一緒にどう?と言われてちょっと迷った。どこに行くのかはまだ聞かなかったが、そっちの方が確かに面白そうなんだよなぁ。とりあえず現時点ではやる事・やってない事があるので、結局は辞めるつもりは無いのだが、その後の飲み会でそんな話 1 をしたら、前の上長に「お前、バカ言ってんじゃないよ。これから結婚するんだろ?」と言われた。まぁその通りなのだが、結婚後の事を考えてと言われると、むしろ安月給なので 2 別に今の会社にこだわる理由は全くないし、むしろ会社変えた方が結婚後の事を考えると良いかなぁと思った。
居眠り。¶
月曜はちょっと忘れ物をしてオフィスに戻って、さっさとやって帰ろうとしたら居眠りしてしまい、残っていた最後の人に声をかけられて起きた。0:05!そんな時間じゃ終電に間に合わん、ということでタクシーに乗って新宿まで行き、そこから高速深夜バスに乗って帰った。
今日は寝ちゃアカンよ、と言われたのに、大江戸線乗って起きたら練馬だった…。幸い、新宿に出たらまだ京王線の終電に間に合ったので終電で帰れたのだが。何をやっとるんだワシは。
Windows隔離計画¶
Armadillo-JにDHCPサーバーを移行完了したので、これで晴れて24/365で自宅内でどこのEthernetポートに挿しても自動的にIPアドレスを割り当てられるようになった 1 。でだ、籍入れて嫁が越してくるとWindowsが我が家に復活する。嫁にLinuxを、しかもDebianを使わせるようにしようと企てているものの、一朝一夕ではどうにもならん。なのでWindowsは確実に自宅内に入ってくる。ならば自宅内で知らんMACアドレスの機器やWindowsと分かっている機器には別のセグメントのIPアドレスを割り当てられないだろうか。ちょっとudhcpの仕様を調べてみるか。自宅内の内部セグメント用ファイアウォールにはOMS 2 を使っているのでタグVLANを使えるのだが、その下のスイッチがタグVLANに対応しとらん 3 。空きポートも少なくなってきたし、タグVLAN使えるスイッチの購入を検討しようかな。んで、自宅内で検疫ネットワークを実現すると。w
無線LANはFONルータで構築してみるかな。 4
僕の彼女はサイボーグ見てきた。¶
綾瀬はるかは可愛いのだけど、どうも「ドラえもんニセ最終回」と被ってる。ニセ最終回を見たことが無ければ、あーなるほどね、という印象を持つかもしれないが、アレを見ていると二番煎じかなぁという感想。サイボーグであることは序盤明かさないという脚色の方が良かったのではないかなぁと思ってみたり。伏線が全て開かされてしまったのが物足りなさを感じるのか、話の流れにちょっと無理があるのかイマイチなのか、まぁどちらにしても、ちょっと不満足。
armadillo-JにDHCPサーバを移行。¶
やる暇無くて、ずっとPendingしていた、玄箱で稼働させていたISC DHCPサーバからArmadillo-JにDHCPサーバを移行する計画を昨日今日で重い腰上げてやっとこさ完了。Debian Sidのudhcpのソースパッケージを持ってきて、ソースツリーをArmadillo-J用のツリーに突っ込んでクロスコンパイルしてarmadillo-Jに突っ込んだ。
環境構築¶
アットマークテクノのサイトにある通り。 Armadillo-Jのダウンロードサイト から下記を取得。
ソースコード展開¶
Kernelソースのリンクのやり方を間違えていたので最初、ちゃんとビルドできずにハマった。シンボリックリンクの名前が、”linux-2.4.22.x”という形式でないとちゃんとビルドできなかったので、そのまんま、その形でリンクを張った。
$ tar zxf atmark-dist-20060801.tar.gz
$ tar zxf linux-2.4.22-uc0-aj5.tar.gz
$ cd atmark-dist-20060801
$ ln -s ../linux-2.4.22-uc0-aj5 linux-2.4.22.x
クロスツールチェーンの導入¶
$ cd ../
$ sudo sh ./arm-elf-tools-20030314-fix20060808.sh
ビルド¶
現在、Armadillo-Jは、ブート後も簡単に変更分を反映できるように普通のBaseイメージにせずに、JFFS2ファイルシステムにしているのだが、プロダクトの選択時 1 に、Armadillo-J.JFFS2を選択すると、ビルドに失敗する。なので、プロダクト選択時には”Armadillo-J.Base”を選択した。Baseで作成されたイメージを固める前のファイルをJFFS2を使っているArmadillo-Jに持っていってもちゃんと動く。make configの選択肢は ユーザマニュアル に沿ってやれば良し。
取り合えず、ちゃんとビルド出きることを確認する。
$ cd atmark-dist-20060801
$ make config
$ make dep all
udhcpのソースパッケージ取得¶
確認を取れたら、Sidのudhcpのソースパッケージを取得する。今回、udhcpdを選択したのは下記理由。
後者はソースツリーに含まれてはいるもののデフォルトではビルドができない。そもそもデカすぎる。ということで、Debianから組込システム向けのDHCPサーバであるudhcpを取得してビルドしたわけである。
$ cd ..
$ apt-get source udhcp
$ cp -i udhcp-0.9.8cvs20050303/ atmark-dist-20060801/user/udhcp
ビルド用設定ファイルの修正¶
atmark-dist-yyyymmdd/user/ディレクトリ以下に、ソースコードを突っ込んだだけではビルドできない。なので、以下のファイルを修正する。ncursesのメニュー形式でコンパイルするので、選択出きるようにするわけである。
atmark-dist-20060801/config/config.in
$ diff -u config.in.org config.in
--- config.in.org 2006-08-16 19:11:04.000000000 +0900
+++ config.in 2008-06-01 19:29:43.000000000 +0900
@@ -291,6 +291,7 @@
bool 'brcfg' CONFIG_USER_BRCFG_BRCFG
bool 'bridge utils' CONFIG_USER_BRCTL_BRCTL
bool 'dhcpcd' CONFIG_USER_DHCPCD_DHCPCD
+bool 'udhcp' CONFIG_USER_DHCPD_UDHCP
if [ "$CONFIG_USER_DHCPCD_DHCPCD" = "y" ]; then
bool ' dhcpcd link-local support' CONFIG_USER_DHCPCD_LLIP
fi
atmark-dist-20060801/user/Makefile
$ diff -u Makefile.org Makefile
--- Makefile.org 2006-06-10 19:52:27.000000000 +0900
+++ Makefile 2008-06-01 19:30:05.000000000 +0900
@@ -72,6 +72,7 @@
dir_$(CONFIG_USER_DHCPCD_DHCPCD) += dhcpcd
dir_$(CONFIG_USER_DHCPCD_NEW_DHCPCD) += dhcpcd-new
dir_$(CONFIG_USER_DHCPD_DHCPD) += dhcpd
+dir_$(CONFIG_USER_DHCPD_UDHCP) += udhcp
dir_$(CONFIG_USER_DIALD_DIALD) += diald
dir_$(CONFIG_USER_DISCARD_DISCARD) += discard
dir_$(CONFIG_USER_DISCARD_ECHO) += discard
これで後はビルド時 4 に上記を選択するようにする。その辺はユーザガイドを参照のこと。
実行ファイルをアップロード¶
udhcpは実はちゃんと最後までビルドできないのだが、実行ファイル自体はatmark-dist-20060801/user/udhcp/以下にちゃんとできる。なので、ファイルをArmadillo-JへFTPでアップロードする。
udhcpdの設定¶
udhcpdは/binディレクトリ以下に配置し、アクセス権を変更する。
# mv -i /home/guest/pub/udhcpd /bin/
# chown root:root /bin/udhcpd
# chmod 755 /bin/udhcpd
udhcpdの設定ファイルを作成する。udhcp/sample/udhcpd.confを使うのが楽。以下のように設定する 5 。
start 192.168.0.20 #default: 192.168.0.20
end 192.168.0.254 #default: 192.168.0.254
interface eth0 #default: eth0
max_leases 254 #default: 254
remaining yes #default: yes
auto_time 7200 #default: 7200 (2 hours)
decline_time 3600 #default: 3600 (1 hour)
conflict_time 3600 #default: 3600 (1 hour)
offer_time 60 #default: 60 (1 minute)
min_lease 60 #defult: 60
lease_file /var/lib/misc/udhcpd.leases #defualt: /var/lib/misc/udhcpd.leases
pidfile /var/run/udhcpd.pid #default: /var/run/udhcpd.pid
opt dns 192.168.0.2 192.168.0.3
option subnet 255.255.255.0
opt router 192.168.0.254
option domain hoge.org
option lease 864000 # 10 days of seconds
static_lease xx:xx:xx:xx:xx:xx 192.168.0.100
static_lease xx:xx:xx:xx:xx:xx 192.168.0.101
static_lease xx:xx:xx:xx:xx:xx 192.168.0.102
static_lease xx:xx:xx:xx:xx:xx 192.168.0.103
static_lease xx:xx:xx:xx:xx:xx 192.168.0.104
static_lease xx:xx:xx:xx:xx:xx 192.168.0.105
起動してみる¶
今回、ライブラリはuClibsを指定してコンパイルしていたのだが、バックグラウンドジョブは対応していないらしく、フォアグラウンドで実行させねばならん。なので、一番最後に実行される起動スクリプトとして下記を用意した。
# cd /etc/rc.d/rc.start/
# ls
rc.40.network rc.70.inetd rc.80.thttpd rc.89.sntp rc.99.ledctrl
# cp -ip rc.80.thttpd rc.99.udhcpd
# vi rc.99.udhcpd
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
echo -n "Starting udhcpd: "
mkdir -p /var/lib/misc/
exec udhcpd /etc/udhcpd.conf
if [ $? = 0 ]; then echo "done"; else echo "failed"; fi
# mv -i rc.99.ledctrl rc.98.ledctrl
これでhalt後に起動かければDHCPサーバとして動く。停止させる時は、”kill -9”で無理やり停止させないといけないのがイケてなくてアカンなぁ。この辺は改善余地アリだなぁ。