2006年1月31日火曜日

自転車乗りは、300円くらいの得(年間)

自転車に乗って走っていると、たまに、お金を拾います
実は、今日も、60円拾いました。



小銭ばかりですけど、だいたい1年で、合計300円くらいになるでしょうか?



20060130



車道で拾うので、どれも、自動車にひかれて、傷だらけになっています。



たいていは10円玉とか運がよければ100円玉。1円玉も、気が向けば拾います(ここ、大切だからっ!)。500円玉はまだ拾ったことはないですが、一度、千ゴニョゴニョ・・・



フツーひろわねーよ



と言われたこともありますが、視力がいいのか、それとも、金のにおいに敏感なのか・・・



路上の凸凹に注意しないと危ないので、確かに路上は、ちゃんと見ています。お金かな?と思うものが落ちていると、



その上をタイヤでひいていきます。



そのときの音で、お金かどうかを判断します。目で見ていなくても、たまたまタイヤでひいて音がして、「あ、お金だ」と気が付くこともあります。



お金だと思っても、すぐに自転車を止めてはいけません。後ろから自動車がきているかもしれませんからね。安全を確認して、自転車を停め、落ちていた場所へ引き返します。



最近、パチスロのコインを100円玉だと思って拾うことが多いです。これは、妙にくやしいです。



2006年1月30日月曜日

(VMware) FreeBSDにディスクを増設

VMware PlayerでFreeBSDをインストールした話のつづき。



今回、ports用に、ディスクを増設してみました。



なぜ、そんなことをするかというと・・・



portsは、やたらとディスク容量を食うんです。



  1. たとえば、うちのFreeBSDな自宅サーバで、/usr/portsの容量をみると・・・456MB使ってます。てゆーか、今調べてみて、自分でびっくりしました。


  2. portsで使うソースファイル類が、/usr/ports/distfilesにおかれていますが、調べてみたら・・・1.7G使っていました。ハァ・・・


  3. これ以外に、portsをコンパイルするとき、コンパイル作業用にディスク容量を食います。xorgとかは、たくさん使います。openofficeに至っては、普通の人はコンパイルしてはいけない、相当なもの好きだけかも


  4. portsnapを使うと、/usr/portsへ展開される元ファイルが、/var/db/portsnap以下に置かれています。調べてみたところ、55MB使っていました。


環境により程度の差はあるでしょうが、少なくとも500MBほどの領域が、ports関係に費やされています。こういうディスクの消費量ってのは、FreeBSDでバイナリpackageを使っていたり、Fedoraとかdebianとか使っている場合には、もともと、消費されるはずのないディスク容量です。



というわけで、portsに関するmy結論。



  • ディスク容量は気にしない、メモリたくさんのってる、CPUパワーもそこそこある、


  • もしくは、ぼけーっと長時間待てるだけの忍耐力がある、


  • すべてのソフトウェアは、俺用にカスタマイズしてコンパイルしないと、気がすまない


  • ソフトウェアの使い方を調べるために、マニュアルを読んだり、googleで情報を探すよりは、ソースコードを読んだほうがてっとりばやい


  • そういう人たちだけ、FreeBSDをインストールして、そしてportsを使ってください


ということではないかと(半分まじめな話)。



あと、VMwareでの仮想ディスクイメージのサイズも、個人的に気にしています。仮想ディスクファイルを、USBメモリにコピーしたり、WebDAVの共有フォルダにコピーして、、あちこちに持っていって使えたら便利かも?と考えているのです(実際にはやってませんけど)。そういう場合、ports関連のファイルまで持ち歩く必要はないので、通常OSを動かすのに必要なファイルだけを集めたファイルシステムと、portsのようにたまにしか使わないファイルをいれておくファイルシステムと、ディスクを分けておくといいんじゃないかな?



ちなみに、LinuxをインストールしてVMware toolsが入っていると、shrinkという操作を行うと、仮想ディスクイメージファイルの中、使われていない領域(ゲストOSでファイルを削除した場合などにできるんだと思う)をけずって、*.vmdkファイルのサイズを小さくできます。



■VMwareなFreeBSDに、仮想ディスクを増設する方法



手順は、



  1. 仮想ディスクイメージファイルの作成


  2. vmxファイルの書き換え


  3. FreeBSDで、ディスクの初期化&設定


というような流れになります。



■仮想ディスクイメージファイルの作成



いつもと同じように、QEMUの、qemu-imgコマンドで作成します。



たとえば、容量8GBの仮想ディスクを、disk-1.vmdkというファイル名で作成する場合。



qemu-img create -f vmdk disk-1.vmdk 8G



詳しくは、以下などを参照。





■vmxファイルの編集



ディスクを増やすには、「ideX:X」というのを書き足していきます。



ide0:0が、IDEのprimary master、ide0:1がprimary slave、ide1:0がsecondary master、ide1:1がsecondary slaveということのようです。



たとえば、以下は、HDDが3台、CDドライブが1台の設定です。

ide0:0.present = "TRUE"
ide0:0.fileName = "FreeBSD-Disk.vmdk"



ide0:1.autodetect = "FALSE"
ide0:1.present = "TRUE"
ide0:1.fileName = "disk-1.vmdk"



ide1:0.autodetect = "FALSE"
ide1:0.present = "TRUE"
ide1:0.deviceType = "atapi-cdrom"
ide1:0.fileName = "Q:"
ide1:0.startConnected = "TRUE"



ide1:1.autodetect = "FALSE"
ide1:1.present = "TRUE"
ide1:1.fileName = "disk-2.vmdk"

VMwareのBIOSメニューでは、こんな風に表示されます。



Freebsddisk09



ゲストOSのFreeBSDでは、dmesgでは、こんな風に表示されます。



freebsd# dmesg | grep '^ad.*VMware'
ad0: 4096MB <VMware Virtual IDE Hard Drive/00000001> [8322/16/63] at ata0-master
UDMA33
ad1: 8192MB <VMware Virtual IDE Hard Drive/00000001> [17753/15/63] at ata0-slave
UDMA33
ad3: 8192MB <VMware Virtual IDE Hard Drive/00000001> [17753/15/63] at ata1-slave
UDMA33



atacontrol listコマンドでも見ることができます。



freebsd# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master: acd0 <VMware Virtual IDE CDROM Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4





■FreeBSDで、ディスクの初期化&設定



ディスクの初期化方法は、VMwareに限った方法ではなくて、本物のFreeBSDマシンに本物のディスクを増設する場合も、同じです。



要するに、fdiskでスライスを作成し、disklabelでパーティションを作成すればOKなんですが・・・簡単な方法は、sysinstallコマンドを使う方法です。sysinstallは、FreeBSDをインストールするときに使う、あのツールです。



rootでログインして、sysintallを実行します。大昔のFreeBSDでは、sysinstallは、/stand/sysintallにありましたが、今では、/usr/sbin/sysinstallになっています。



sysinstall Main Menuで、Configureを選択します。



Freebsddisk11



Fdiskを選択します。



Freebsddisk12



初期化するディスクを選択します。間違えて、今使っているディスクを選ばないように(もしかすると、間違えて使用中のディスクを選んでしまっても、書き込み時に失敗するような気がしますが、保障はしません)。



Freebsddisk13



Cキーを押して、Create Sliceします。



Freebsddisk14



そのままOKを選び、ディスクの全容量をFreeBSDに割り当てます。



Freebsddisk15



165のままでOKです。



Freebsddisk16



こんなかんじになります。



Freebsddisk17





Qキーを押します。ここでWキーを押すと、書き込むんじゃねー、と警告メッセージが表示されます。LabelのところでWキーを押しなさい、とのことです。そうだったのか・・・知らなかった。



Freebsddisk18



boot managerはいらないので、standard MBRにしときます。



Freebsddisk19



「Select Drive(s)」に戻ってきたら、Cancelを選びます。





「FreeBSD Configuration Menu」で、今度はLabelを選びます。



Freebsddisk20



Cキーを押して、Create



パーティションの容量を指定



Freebsddisk21



partition typeには、当然FSを選びます。



Freebsddisk22





マウント先を選びます。たとえば/disk2



Freebsddisk23



こんなかんじになります。



Freebsddisk24



Wキーを押して、書き込みます。



警告メッセージがでます。Yesを選びます。



Freebsddisk25



これで、ディスクが初期化されて、すでにマウントまでされています。



CancelとかExitを選んで、sysintallを終了し、dfで見てみると、こんなかんじになります。



freebsd# df /disk2
Filesystem  1K-blocks Used   Avail Capacity  Mounted on
/dev/ad3s1d   8121778    4 7472032     0%    /disk2



● 自動的にマウントされるようにする



このままでは、FreeBSDを再起動すると/disk2はマウントされません。/etc/fstabに書き足して、/disk2が自動的にマウントされるようにします。



ちょっとマニアックな?方法。mount -pで、/etc/fstabの形式で表示されるので、こういうふうにすると・・・



freebsd# mount -p | grep /disk2 >> /etc/fstab



/etc/fstabを見てみると、/disk2の行が追加されました。



freebsd# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /               ufs     rw              1       1
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
/dev/ad3s1d     /disk2  ufs rw  2 2



以上で、ディスクの増設作業はおしまい。



あと、必要なら、/usr/portsとか/var/db/portsnapを、増設したディスクへ移動し、シンボリックリンクを張っておけばよいでしょう。





たとえば、/var/db/portsnap/を、/disk2/以下へ移動させるには、こんなかんじでできます。



freebsd# cd /var/db/
freebsd# tar cf - portsnap | tar xf - -C /disk2/
freebsd# rm -rf portsnap
freebsd# ln -s /disk2/portsnap .
freebsd# ls -l portsnap
lrwxr-xr-x  1 root  wheel  15 Jan 29 23:21 portsnap -> /disk2/portsnap



/usr/portsをtarで移動させるのは、ファイル数も多く大仕事なので、いっそのこと、すべて削除して、portsnap extractしてしまったほうがてっとりばやいかもしれません。





2006年1月29日日曜日

portsnapでwgetを使わせる

先日、



(FreeBSD) portsnapが暴走する?



と書いたように、phttpgetが暴走することはなくなりました。しかし、やはり、トラブルはまだ続いています。



どうもその場所のプロキシーサーバの動作が異常で、頻繁に、ファイルのダウンロードに失敗します。



ダウンロードに失敗しても、phttpgetってば、もう一度ダウンロードしようとしてくれません。こんなかんじでした。



  • portsは頻繁に更新されているので、1~2週間ぶりにportsnapを実行したところ、全部で1000個くらいのファイルをダウンロードしようとしました。


  • とうぜん、いくつかのファイルのダウンロードは失敗します。


  • もう一度portsnapを実行すると、すでにダウンロード済みのファイルも、もう一度ダウンロードしてるみたいです。


  • しかも、portsnapを実行すると、どのファイルをダウンロードすべきかを調べる処理をしているらしいんですが、この処理が、VMwareの中で実行するには、けっこう重い処理のようです。


というわけで、何回、何十回とportsnapを実行しても、いつまでたっても、portsnap fetchが成功しないのです。



というわけで、頭にきたので、phttpgetを改造することにしました。



・・・やめました。phttpgetってば、ソフトウェアとして完成度が低いです。



たとえば、データ読み出しのタイムアウト時間が15秒とか決めうち(hard coding)されてるんです。最近の流行で、プロキシーサーバでウイルスチェックとかやってる場合、全部プロキシーサーバまでダウンロードが終わって、ウイルスチェックが終わってから、クライアント(パソコン)へ一挙にデータ転送がはじまります(プロキシなしだと、水道からチョロチョロ水が流れるみたいなかんじになりますが、その余計なプロキシが挟まると、チョロチョロ水をバケツに一度ためて、一杯になってから一度にまく、みたいになる)。そういう場合、15秒でタイムアウトというのは、ちょっと短すぎます。



で、代替案が、ひらめきました。

phttpgetは捨てる。wgetで置き換える!

wgetというのは、HTTPやFTPでファイルをダウンロードするソフトで、昔からあるのでけっこう有名だと思います。/usr/ports/ftp/wgetとしてportsにもなっています。昔から使われているだけあって、ダウンロードに失敗したときの再実行もあるし、タイムアウト時間も自由に調整できます。



で、考えること、3分経過。こんなシェルスクリプトができあがりました。実質的に、重要な処理は最後の1行だけです。



#! /bin/sh



WGET=/usr/local/bin/wget



if [ $# -lt 2 ]
then
    echo "usage: $0 server [file ...]"
    exit 64
fi



SERVER=$1
shift



echo $* | tr ' ' '\n' | ${WGET} --base="http://${SERVER}/" --no-clobber --input-file=-



「phttpget-wget.sh」をダウンロード



phttpgetを置き換える例



  1. cp phttpget-wget.sh /usr/libexec/


  2. mv /usr/libexec/phttpget /usr/libexec/phttpget.org


  3. ln -s /usr/libexec/phttpget-wget.sh /usr/libexec/phttpget


このシェルスクリプトで、/usr/libexec/phttpgetを置き換えたところ、これまで何度やっても失敗していたportsnap fetchが、1発で成功しました。



唯一、phttpgetが優れているのは、HTTPのkeep aliveを使って、1回のコネクションで、複数のファイルをダウンロードしているところでしょうか。wgetもkeep aliveをサポートしているのですが、どうも上記のような用途では、keep aliveを使わないみたいです(リンクをたどって再帰的にダウンロードするときのみkeep aliveかな?)。



keep aliveを使うと、通信のオーバーヘッドが減るので、スループットが向上するのはわかりますが、そもそもphttpgetはそのほかの点で(エラー処理があまいなど)、ファイルをダウンロードするソフトウェアとして、致命的に欠点があります。



というわけで、その「いやがらせプロキシーサーバ」があるネットワーク環境では、phttpgetは捨てました。自宅では、phttpgetは快調に動いているんですけどね。



余談



シェルスクリプトのことを、

シェル

と省略して呼ぶ人がたまにいるんです。これ、すごく気持ち悪いです。省略するんだったら、

スクリプト

って呼ぶべきですよね。シェルと省略するのは、

ジャイアント・パンダを、ジャイアントと省略する

ようなものです。





2006年1月28日土曜日

雪がつもると なんかうれしい(BlogPet)

きのうはここまでにょほほと入試っぽい試験する?
にょほほの、試験しなかったー。
きのう、雪みたいな試験したよ♪


*このエントリは、BlogPet(ブログペット)の「pochi」が書きました。


「スヌーピーボウル」専用ポイントシール貼付台紙

今日の夕方、「スヌーピーボウル」専用ポイントシール貼付台紙を入手しました。



バレンタインデー前に一儲け、ということで急速に普及して、関東地方でも急速におなじみになりました、あの「恵方巻き」のチラシも、一緒にはさまってました。



200601271



シールは、
1月25日からが共通シールで、
2月3日から、スヌーピーボウル専用のシールに切り替わり、
2月28日で、おしまい
です。



2月28日まで、がんばれ、がんばれ



なお、スヌーピーボウルの引き換え期間は、1月27日から(おっ、今日か)、3月7日まで。



200601272



このボウルですが、

サラダに!スープに!カフェオレに!

って書いてあって、最初、

カフェオレってこんなのに入れて飲むものなの?

と思ったのですが、カフェオレボウルという食器があるんですね。1つ、賢くなりました。





2006年1月27日金曜日

スヌーピー ボウルへ

昨日、25日から、例のセブンイレブンのあのシールが、共通シールに切り替わりました。



というわけで、さきほど、これまで貯めた分を、すべて、スヌーピー マルチボックスと交換してもらい、次から、



スヌーピー ボウル



に全力を尽くすことにしました。



結局、マルチボックスは、3個、もらえました。



200601261



昨日のうちに、マルチボックスに交換してもらおうと、ちょうどいい点数の商品を買ってきたつもりだったのですが・・・な、なんとっ!



シールがついてなーい!



じゃありませんか。あー、2点、損しました。



Snoopymultibox3Snoopymultibox4



いや、別に、損はしてないですよね。うん・・・



ちなみに、小さいメロンパンは、100円未満なので、シールがついていませんでした。



以前、199円で1点のシールがついている商品を見つけたときには、笑いをこらえるのに、大変でした。



■ 関連する以前のお話









2006年1月26日木曜日

(FreeBSD) portsnapが暴走する?

某職場で、こっそりVMware Playerを使って、Windows上でFreeBSD 5-STABLEをインストールして使っています。



portsの更新にportsnapを使っているのですが、どうも、たまにというか、ときどきというか、実はけっこうひんぱんに、portsnap実行中に、パソコンのファンがものすごい騒音をたてて全力で回りだすことがありました。



topコマンドで調べてみると、phttpgetというプロセスが、ほぼ100%、CPU時間を使い切っています。どうみても、このphttpgetが暴走しているとしか思えません。



あー、もー、portsnap、使えないー



と思ったりもしましたが、あるとき、ktraceとかgdbを使ってじっくりと調べてみました。その結果、phttpgetにバグがあることを見つけました。



場所は、
src/usr.sbin/portsnap/phttpget/phttpget.c
のreadlnという関数の中にある、whileループです。



HTTPでデータをダウンロードしてくるときに、ネットワークソケットをnon-blockingにして読み出しているのですが、recv()が返すデータ読み出し量が0になるケースが、考慮されていませんでした。



つまり、データ転送の途中で、ネットワークコネクションが切れたかなんかすると、non-blocking readになっているので、そのデータ読み出し処理のループが、全力で無限ループする、いわゆるbusy loop状態になってしまうのです。



やったね、ふふーん、お手柄だね>>自分



とか思ってCVSで最新のソースコードを見たら、



2005年11月13日にすでに修正されているようですね。



なんだ、もうなおってたんですか・・・



6.0-RELEASEや、中途半端な時期に5-STABLEをインストールした人、portsnapがおかしいと思ったら、これをチェックするといいかもしれませんね。



☆ ☆ ☆ ☆ ☆ 



自宅でportsnapを使ってたときは大丈夫だったのに、その某職場でだけ、なぜ問題が起きたか・・・どうも、そこのネットワークで使っているプロキシーサーバーが非常におかしな動作をしているようなんです。昨今の情勢から、企業のネットワークでは、プロキシーサーバでウイルスチェックをやってることがあるんですが、これが、まー、なんですか、そのぉ、



余計な処理をするせいで、遅くなるわ、不安定になるわで、使えない



Windows上で使っているFirefoxも、10秒間くらい、フリーズしたかと思うくらい、ピタっと固まってしまうことが、頻繁に起きます。



なんか、正直ものが損をする、になっちゃってるわけですよ。  



個人的には、そんなウイルスチェックで守ってあげてると、いわゆる温室育ちで、やわな人間になってしまうので、いざというときの抵抗力が弱ってしまうと思うんですよね。



1度や2度、コンピューターウイルスに感染するといった失敗を経験して、人間が学習することで、未知のウイルスや、フィッシング詐欺とかに対する、心構え、ってのができるんじゃないかと思うんですよね。



というわけで、よいネットワーク管理者は、たまーに、悪影響を与えることの少ないウイルスを、無作為に選んだユーザーに送りつけて、訓練してあげるのがいいんじゃないかと思います。



☆ ☆ ☆ ☆ ☆ 



■ 追記



  • portsnapでwgetを使わせる
    • 腐れproxyサーバの呪いなのか、ファイルのダウンロードが失敗してうまくいかないので、phttpgetの代わりにwgetを使うようにしたところ、うそのように問題がなくなりました。






2006年1月25日水曜日

(FreeBSD) portsnapでportsを最新に

portsというのは、FreeBSDのソフトウェア・パッケージ管理システムのことです。事前にコンパイルされたバイナリパッケージをインストールすることもできますが、基本的には、ソースファイルをコンパイルして、インストールするようになっています。ちなみに、ソースからコンパイルするほうが、共有ライブラリのバージョン不一致とかの問題がなくて、個人的には好きです。



日々バージョンアップされてていく多くのソフトウェアにあわせて、portsも、常に更新されつづけています。そのため、portsを利用するならば、常にportsを最新の状態に更新しなければなりません。



portsを更新する方法として、これまではcvsupというツールが使われていました。しかし、cvsupは、プロキシーサーバを使ってくれないため、ファイアウォールを超えるのが容易ではありません。SOCKS5か、もしくはsshのポートフォワーディングが使えれば、cvsupを使うこともできるのですが、SOCKSやSSHが使えなくなっているネットワークでは、cvsupの利用の道は閉ざされます。FTPサイトにtar+gzでアーカイブされたports全部のファイルがあるので、それをダウンロードして展開すればいい・・・んですが、portsってファイルの個数がものすごく多くて、全ファイルの削除&展開だけで、けっこう時間がかかるんですよね。



そんな中、最近推奨されているのが、portsnapというツールです。これ、ちゃんとHTTP/FTPプロキシーサーバを使ってくれます。というのも、実際にファイルをダウンロードするのは、fetchというコマンドを使っているからのようです。



■ portsnapをインストールする



FreeBSD 6.0-RELEASEと、最近の5-STABLEでは、すでに/usr/sbin/portsnapとして最初からインストールされています。



それ以前のFreeBSD(5.4-RELEASEを含む)の場合は、portsnapをバイナリパッケージか、portsの/usr/ports/sysutils/portsnap/からインストールすればOKです。



■ portsnapの設定



portsnapの設定ファイルが、/etc/portsnap.confにあります。たぶん、何も書き換える必要はないんじゃないかと思います。



パッケージやportsでインストールしたportsnapの場合は、/usr/local/etc/portsnap.confになります。たしか最初は、portsnap.conf.sampleというファイルしかないので、portsnap.confという名前でコピーすればOKだと思います。



portsはやたらとファイルの個数が多く、ぜったいにインストールしそうもないものも多数あります。portsnapで、自分にとって不要なものをダウンロードしないように設定することができます。これは、portsnap.confでREFUSEというキーワードで指定します。たとえば、こんな感じです。

REFUSE arabic chinese french german hebrew hungarian
REFUSE korean polish portuguese russian ukrainian vietnamese

これで、/usr/ports/arabic、/usr/ports/chineseなどのファイルが展開されなくなります。



デフォルトでは、/usr/portsにportsファイルが展開されます。portsnap.confで変更することもできますが、個人的には、わかりづらい(というか忘れてしまうので)、別ディレクトリに展開したい場合は、/usr/portsからシンボリックリンクをはるようにしています。

freebsd# ln -s /disk1/ports /usr/ports

あと、portsnapが使う作業ディレクトリが必要です。portsnap.confにWORKDIRという名前で定義されているので、そのディレクトリを事前に作成しておきます。

freebsd# mkdir /var/db/portsnap



■ プロキシーサーバの指定



fetchコマンドでファイルをダウンロードするので、fetchコマンド用の設定をすればよいのですが、ちょっと独特です(昔にくらべたらましになったんですけど)。こんな感じです。

freebsd# setenv HTTP_PROXY http://192.168.0.21:3128

環境変数HTTP_PROXYに、「http://プロキシーサーバ名:ポート番号」という書式で指定します。



詳しく情報は、「man 3 fetch」を実行してマニュアルを見ることができますが・・・わかりづらいです。最後の方の、使用例を見るだけで十分かも知れませんが。





■ portsnapを実行する



まずは、「portsnap fetch」を実行します。

freebsd# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... using portsnap1.FreeBSD.org.
Fetching public key... done.
Fetching snapshot tag... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Jan 24 09:08:50 JST 2006:
5ff69d98845e7080524eea545565dee007a139eb55be1e  0% of   38 MB  140 kBps
(以下略)

次ですが、はじめてportsnapを実行した場合は、「portsnap extract」を実行します。

freebsd# portsnap extract

2回目以降は、portsnap fetchを実行したあと、「portsnap update」を実行します

freebsd# portsnap fetch
freebsd# portsnap update



と以上のようなかんじです。ほかに、cronからportsnapを実行するための「portsnap update」というのがあります。



portsnapのマニュアルやヘルプメッセージでは表示されないみたいですが「--debug」というオプション引数を指定することもできます(その名のとおりの機能ですが、1度、役に立ちました)。





2006年1月24日火曜日

FreeBSD上で玄箱用tcshをクロスコンパイル

苦労して作ったクロスコンパイラで、玄箱用のtcshをコンパイルしてみました。



FreeBSDで使っているシェルがtcshなので、やっぱりLinuxでもtcshを使いたいのです。普段から使い慣れた道具が変わってしまうと、とっても不自由しますからね。



クロスコンパイルなので、当然、コンパイル作業はFreeBSD上で行いますが、ちょっとした理由があり、面倒が少なくなるように(後述)、玄箱のディスクをNFSマウントして、玄箱のディスク上で行います。



作業ディレクトリを作成し、tcshのソースファイルを展開します。

% cd /net/kuro-box/mnt/share
% mkdir tmp
% cd tmp
% tar zxf /net/kuro-box/mnt/share/tcsh-6.14.00.tar.gz
% cd tcsh-6.14.00/

クロスコンパイラへのPATHを通しておきます。

% setenv PATH /usr/local/kuro-box/bin:$PATH

configureを実行します。

% ./configure --host=powerpc-hardhat-linux



configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking build system type... i386-unknown-freebsd6.0
checking host system type... powerpc-hardhat-linux-gnu
checking cached host tuple... ok
Tcsh will use configuration file `linux'.
checking for powerpc-hardhat-linux-gcc... powerpc-hardhat-linux-gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
(省略)
checking whether getpgrp requires zero arguments... yes
checking whether setpgrp takes no argument... configure: error: cannot check setpgrp when cross compiling

あーあ、エラーで終わってしまいました。



このエラーの原因は、configure.inでかかれている、autoconfのAC_FUNC_SETPGRPマクロというのが原因です。configure実行中に、プログラムをコンパイルし実行しようとするのですが、今は玄箱用にクロスコンパイルしようとしているので、コンパイルされたプログラムはFreeBSD上で実行できません。



おそらく礼儀正しい訂正方法としては、configure.inのなかのAC_FUNC_SETPGRPをコメントアウトして、autoconfを実行し、configureを生成しなおす、ということになると思いますが、多くの人にとって、その作業はかえって



めんどくさいので



configureを直接書き換えます。乱暴なやりかたですね。実は、別の理由があったりします。それはあとで。



書き換えるべきところは、ここです。

echo "$as_me:$LINENO: checking whether setpgrp takes no argument" >&5
echo $ECHO_N "checking whether setpgrp takes no argument... $ECHO_C" >&6

というところから

cat >>confdefs.h <<\_ACEOF
#define SETPGRP_VOID 1
_ACEOF



fi

というところまでを、削除します。



もう一度、configureを実行します。

% ./configure --host=powerpc-hardhat-linux



checking for strerror... yes
checking for strstr... yes
checking for sysconf... yes
checking for wcwidth... yes
checking whether getpgrp requires zero arguments... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h

コンパイルします。ちゃんとpowerpc-hardhat-linux-gccというコマンドでコンパイルされていますね。

% gmake
grep 'ERR_' ./sh.err.c | grep '^#define' >> sh.err.h
powerpc-hardhat-linux-gcc -E  -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'
-D_h_tc_const\
    ./tc.const.c | \
    sed -n -e 's/^\(Char STR[a-zA-Z0-9_]*\) *\[ *\].*/extern \1[];/p' | \
    sort >> tc.const.h
powerpc-hardhat-linux-gcc  -c -g -O2             -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'    sh.c
powerpc-hardhat-linux-gcc  -c -g -O2             -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'    sh.dir.c
(省略)

うまくいきそう・・・と思ったら、エラーになりました。

powerpc-hardhat-linux-gcc  -c -g -O2             -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'    tc.const.c
rm -f gethost
powerpc-hardhat-linux-gcc  -o gethost  -g -O2            -I. -I. -D_PATH_TCSHELL
='"/usr/local/bin/tcsh"'   ./gethost.c -lcurses -lcrypt



./gethost ./host.defs >> tc.defs.c
./gethost: 1: Syntax error: "(" unexpected
gmake: *** [tc.defs.c] Error 2

これは、コンパイルされたgethostというコマンドを実行しようとして、エラーになっています。gethostは玄箱で実行できるようにコンパイルされているので、FreeBSD上では実行できなくて当然です。



仕方ないので、この部分だけは、玄箱で実行します。実は、玄箱のディスク上でコンパイル作業を行ったのは、ここで、ファイルを玄箱へコピーする手間を省くためだったのです。



玄箱にログインし、先ほどエラーになったコマンド「./gethost ./host.defs >> tc.defs.c」を手で入力して実行します。



root@KURO-BOX:/mnt/share/tmp/tcsh-6.14.00# ./gethost ./host.defs >> tc.defs.c
root@KURO-BOX:/mnt/share/tmp/tcsh-6.14.00# ls -l tc.defs.c
-rw-r--r--    1 1001     1001        55160 Jan 17 09:19 tc.defs.c



どうも玄箱の時計がくるっていたようです(よくあることらしいです)。このままでは、ファイルのタイムスタンプがおかしくて、うまくmakeできないので、touchで修正します。

% touch tc.defs.c
% ls -l tc.defs.c
-rw-r--r--  1 nhh  wheel  55160 Jan 23 22:48 tc.defs.c

FreeBSD上で、つづきをコンパイルします。

% gmake
powerpc-hardhat-linux-gcc  -c -g -O2             -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'    tc.defs.c
powerpc-hardhat-linux-gcc  -c -g -O2             -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"'    tc.disc.c
(省略)





powerpc-hardhat-linux-gcc  -o tcsh  -g -O2               -I. -I. sh.o sh.dir.o sh.dol.o sh.err.o sh.exec.o sh.char.o sh.exp.o sh.file.o sh.func.o sh.glob.o sh.hist.o sh.init.o sh.lex.o sh.misc.o sh.parse.o sh.print.o sh.proc.o sh.sem.o sh.set.o sh.time.o glob.o mi.termios.o ma.setp.o vms.termcap.o tw.help.o tw.init.o tw.parse.o tw.spell.o tw.comp.o tw.color.o ed.chared.o ed.refresh.o ed.screen.o ed.init.o ed.inputl.o ed.defns.o ed.xmap.o ed.term.o tc.alloc.o tc.bind.o tc.const.o tc.defs.o tc.disc.o tc.func.o tc.nls.o tc.os.o tc.printf.o tc.prompt.o tc.sched.o tc.sig.o tc.str.o tc.vers.o tc.who.o  -lcurses -lcrypt



% ls -l tcsh
-rwxr-xr-x  1 nhh  wheel  1030571 Jan 23 22:50 tcsh*

できました!



玄箱で実行します。



root@KURO-BOX:/mnt/share/tmp/tcsh-6.14.00# ./tcsh



# echo $version
tcsh 6.14.00 (Astron) 2005-03-25 (powerpc-apple-mklinux) options wide,nls,dl,al,kan,rh,color,filec



# ls-F /sbin
/sbin:
agetty*                 install-info*           murasaki.pci*
badblocks*              ipmaddr*                murasaki.usb*
calib_time*             kallsyms@               murasaki_init.pci*
chkwebpasswd*           kernelversion*          murasaki_init.usb*
depmod*                 killall*                pmap_dump*



動いているみたいですね。





■ 玄箱ではNFS lock がうまく動かないみたい



configure.inを書き換えて、



dnl AC_FUNC_SETPGRP



autoconfを実行したところ、



% autoconf259
autom4te259: cannot lock autom4te.cache/requests with mode 2 (perhaps you are running make -j on a lame NFS client?): Operation not supported



または



autom4te259: cannot lock autom4te.cache/requests with mode 2 (perhaps you are running make -j on a lame NFS client?): No route to host



というエラーがでました。FreeBSD側でrpc.lockdを動かしているかどうかでエラーメッセージが異なるようです。



玄箱にも/usr/sbin/rpc.lockdやrpc.statdがあるので、これを動かせばいいのか、と思いきや、なんか動いていません。カーネルのサポートが必要なのかもしれませんが、よくわからないので、見なかったことにして、NFS lockのことは忘れることにしました。



2006年1月23日月曜日

FreeBSDに玄箱のクロス開発環境を構築

クロス開発環境というのは、プログラムの開発をするときに、



  • プログラムのソースコードのコンパイルやデバッグをするコンピュータ


  • 作成されたプログラムを実行するコンピュータ


の2台のコンピュータに分けて開発する、開発環境のことです。これに対して、普通は、プログラムをコンパイルするコンピュータと、プログラムを実行するコンピュータは、同じコンピュータの場合が多いです。



めんどくさそうな方法ですが、クロス開発というのは、携帯用の小型端末とか、電化製品などに組み込まれている小さなコンピュータ用にプログラムを開発する方法です。そういうコンピュータには、メモリが少ししかのっていないし、ハードディスクもないし、そもそもキーボードもディスプレイもつながらないので、そのコンピュータ上で、Cコンパイラとかデバッガとかを動かすことはできません。そのために、開発用に別のコンピュータがもう1台必要になります。



玄箱も、まさに、このクロス開発環境の適用対象にぴったりあいます。



一応、玄箱には、CD-ROMの中に、Cコンパイラやデバッガが入っているので、それらをインストールすれば、玄箱を使って、玄箱用のプログラムを開発することができます。しかし、玄箱は、CPUの処理速度はそんなに速くないしメモリも少ないので、開発効率はなかなか上がりません。



一方、そこらで5万円以下で安売りされているパソコンでさえも、玄箱よりは1桁くらい処理性能は上ですので、これを利用しない手はありません。



なお、クロスコンパイラのビルド方法に関して、以下をちょこっと参考にしました。







■ はじめに



クロス開発では、プログラムを実行する側のコンピュータをターゲット(target)、プログラムのコンパイルなどの行う側のコンピュータをホスト(host)と呼んで区別しています。



今回は、FreeBSDを動かしているパソコン側がhost、玄箱がtargetです。



クロス開発では、host側のOSとtarget側のCPUやOSが違っていてもかまいません。そのへんは開発ツールががんばってくれています(というか、それがクロス開発ツールの仕事)。



玄箱には、GNUの開発ツールのbinutils、GCC、GDBが用意されています。これらのツールは、もともとクロス開発にも使えるように作られています。今回は、FreeBSD上で、玄箱用のbinutilsとGCCをコンパイルします。デバッガのGDBは、まあ後回しでいいかな、と思ったのでまたいつか。必要なら、玄箱のGDBを使えばなんとかなるでしょう。



以下の作業は、NFSとamdの設定をすませたあとに、行っています。







■ binutilsをインストール



まず最初に、binutilsをコンパイル、インストールします。binutilsは、アセンブラ(as,gas)やリンカ(ローダ、ld)などから構成された、プログラム開発用ツール集です。



(1)ソースファイルの入手



binutilsのソースファイルは、たとえば、こんなところにあります。



ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/distfiles/binutils-2.13.2.1.tar.bz2



portsがある場合は、以下のようなかんじで、make fetchでダウンロードすることもできます。

% cd /usr/ports/devel/i386-rtems-binutils/
% make fetch

ファイルがどこからダウンロードできるのかわからない場合に、この方法は、私もよく使っています。



この場合、ダウンロードしたファイルは、とくに何もports関係の設定を変更していないなら、
/usr/ports/distfiles/binutils-2.13.2.1.tar.bz2
におかれています。



(2)ソースファイルを展開



ファイルbinutils-2.13.2.1.tar.bz2を展開します。

% cd どこか作業用ディレクトリ
% tar jxf /usr/ports/distfiles/binutils-2.13.2.1.tar.bz2
% ls
binutils-2.13.2.1/
% cd binutils-2.13.2.1

(3)configureスクリプトを実行する



こんな感じでconfigureを実行します。

% ./configure --prefix=/usr/local/kuro-box
--target=powerpc-hardhat-linux

(見やすくなるように途中で改行していますが、実行するときは改行せずに1行です)



「--prefix=ディレクトリ」で、インストール先ディレクトリを指定します。とりあえず「/usr/local/kuro-box」にします。



「--target」で、ターゲットマシンのアーキテクチャを指定します。powerpc-hardhat-linuxというのを指定していますが、これは玄箱のbinutilsがこれを指定してコンパイルされていたからです。





(4) コンパイルする

% gmake

(5)インストールする

% su
Password:
# gmake install



 (略)



# ls /usr/local/kuro-box/
bin                     lib                     powerpc-hardhat-linux
info                    man                     share



■ 玄箱からファイルをもらってくる



クロス開発を行う際に(FreeBSD上で、玄箱用のクロスコンパイラを実行する際に)、ターゲットマシンのヘッダファイル(*.h)とライブラリ(*.soとか*.a)が必要になります。



玄箱から、それら必要なファイルを、FreeBSDへコピーします。



(1)その前に、ついでに玄箱にbinutilsとgccをインストールする



本当に必要かどうかわかりませんが、ファイルをFreeBSDへコピーする前に、玄箱にbinutilsとgccをインストールしておきます。binutilsとgccでインストールされるファイルも必要になるかな?と思ったからですが、もしかするといらないかもしれません。



玄箱で以下を実行します。

root@KURO-BOX:/# cd /
root@KURO-BOX:/# tar zxf /mnt/share/binary/binutils-2.10.91.0.2.tar.gz
root@KURO-BOX:/# tar zxf /mnt/share/binary/gcc-2.95.3.tar.gz

(2)コピーするファイルをtarでアーカイブしておく



玄箱の/lib/以下のファイルと、/usr/include/以下のファイルがあれば十分だと思います。

root@KURO-BOX:/# tar cf /mnt/share/kuro-box-files.tar lib usr/include usr/lib

(3)tarアーカイブをFreeBSDで展開する



クロスコンパイル用のGCCは、ターゲットマシン用のファイルを、ディレクトリ(GCCのインストール先)/(--targetで指定したアーキテクチャ)/以下から持ってくるので、今回の場合、/usr/local/kuro-box/powerpc-hardhat-linux/以下へファイルを展開します。

# cd /usr/local/kuro-box/powerpc-hardhat-linux/
# ls
bin     lib
# tar xf /net/kuro-box/mnt/share/kuro-box-files.tar
# ls
bin     lib     usr

ファイルの置き場所を、少し変更します。

# mv lib/* ../lib/
# rmdir lib
# mv usr/* .
# rmdir usr
# ls
bin     include lib



/usr/local/kuro-box/powerpc-hardhat-linux/include/
には、玄箱の/usr/include以下にあったファイルをおいて、



/usr/local/kuro-box/powerpc-hardhat-linux/lib/
には、玄箱の/usr/lib以下にあったファイルをおきます。



/usr/local/kuro-box/lib/
には、玄箱の/lib以下にあったファイルをおきます。



それから、あとでGCCで(正確に言うとldで)エラーがでてしまうので、いくつかシンボリックリンクを作成します。

# cd /usr/local/kuro-box/powerpc-hardhat-linux/lib/
# ln -s ../../lib/libc.so.6 .
# ln -s ../../lib/libc-2.2.3.so .
# ln -s ../../lib/libc.so.6 .
# ln -s ../../lib/ld-2.2.3.so .
# ln -s ../../lib/ld.so.1 .

これは、ldがlic.so.6とld.so.1を探しにいくときに、/usr/local/kuro-box/lib/は見てくれないための措置です。これ以外に、もうすこしスマートな方法がありかもしれません。





■ GCCをインストール



玄箱用にコンパイルされたGCCがバージョン2.95なので、それにあわせてGCC 2.95.3をインストールします。



(1) gcc-2.95.3のソースファイルを展開



2.95.3は、かなーり古いバージョンなので、きっとたくさんパッチがでているはずです。パッチをあてるのがめんどくさいので、FreeBSDのportsを使ってみました。

# cd /usr/ports/lang/gcc295/
# make patch
===>  Extracting for gcc-2.95.3_2
=> MD5 Checksum OK for gcc-core-2.95.3.tar.bz2.
=> SHA256 Checksum OK for gcc-core-2.95.3.tar.bz2.
=> MD5 Checksum OK for gcc-g++-2.95.3.tar.bz2.
=> SHA256 Checksum OK for gcc-g++-2.95.3.tar.bz2.
===>  Patching for gcc-2.95.3_2
===>  Applying FreeBSD patches for gcc-2.95.3_2

これで、ソースファイルのダウンロードして、パッチをあてるところまでやってくれます。便利ですねぇ。



ソースファイルは、portsの設定をとくに変更していない場合は、/usr/ports/lang/gcc295/work/以下に展開されています。



portsのコンパイル作業ディレクトリは、環境変数WRKDIRPREFIXで変更できます。/etc/make.confでたとえば

WRKDIRPREFIX=/home2/ports.work

とか書いておくと、/home2/ports.work/なんとか/かんとか/・・・以下に展開されるようになります。



ファイルを展開したところで、こんなかんじです。

# cd /home2/ports.work/home2/ports/lang/gcc295/work/gcc-2.95.3/
# ls
.brik                   config.guess            install-sh
.cvsignore              config.guess.orig       libiberty
COPYING                 config.if               libio
COPYING.LIB             config.sub              libstdc++
ChangeLog               configure               ltconfig
FAQ                     configure.in            ltmain.sh
INSTALL                 contrib                 missing
MAINTAINERS             etc                     mkinstalldirs
Makefile.in             faq.html                move-if-change
README                  gcc                     symlink-tree
config                  include                 texinfo
config-ml.in            install                 ylwrap



(2)configureを実行



さきほどインストールしたbinutilsへPATHが通しておきます。

# setenv PATH /usr/local/kuro-box/bin:$PATH

configureを実行します。

# cd /home2/ports.work/home2/ports/lang/gcc295/work/gcc-2.95.3/

# ./configure --prefix=/usr/local/kuro-box
--target=powerpc-hardhat-linux
--with-gnu-ld --with-gnu-as --disable-nls

(3)コンパイルする

# gmake

しばらくすると・・・えーと・・・エラーでとまってしまいました。



とりあえず、エラーを無視して、インストールしてしまいます。

# gmake install

そして、GCCのファイルをすべて削除し、ソースを展開する(make patch)ところから、もう一度、同じ事をくりかえします。すると、2回目のgmakeは成功しました。



エラーメッセージを調べたところ、includeファイルを探すときに、
/usr/local/kuro-box/powerpc-hardhat-linux/lib/gcc-lib/powerpc-hardhat-linux/2.95.3
というディレクトリが作成されていないと、うまく見つけられないようなかんじでした。一度gmake installを実行すると、このディレクトリが作成されるので、2回目以降は成功する、というわけです。





■ Hello Worldを実行してみる



クロスコンパイラが、正しく動くか確認するために、Hello Worldプログラムで試してみます。



ソースファイルは、こんなかんじです。

% cat hello.c
#include <stdio.h>



int
main( int argc, char* argv[] )
{
  printf("Hello world\n");
  return 0;
}

コンパイルします。

% /usr/local/kuro-box/bin/powerpc-hardhat-linux-gcc hello.c
-o hello



% ls -l hello
-rwxr-xr-x  1 nhh  wheel  5567 Jan 22 21:40 hello*

なにやら、できたっぽいです。

% file hello
hello: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV),
for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped

玄箱へコピーします。

% cp hello /net/kuro-box/mnt/share

玄箱にログインして、実行してみます。

root@KURO-BOX:/mnt/share# ./hello
Hello world

どうやら、無事に、実行できたようです。





■ C++コンパイラ(g++)



g++も一応コンパイルされているのですが、実は、ライブラリlibstdc++がビルドされていません・・・うーむ・・・



C++コンパイラも必要な場合は、2回目のGCCのコンパイルのときに、以下のように--enable-languages=c++をつけます。

# ./configure --prefix=/usr/local/kuro-box
  --target=powerpc-hardhat-linux
  --with-gnu-ld --with-gnu-as --disable-nls
  --enable-languages=c++

以下、C++版のHello Worldでテストした例です。



まずFreeBSDでコンパイル。

% cat hello.cc
#include <iostream.h>



int
main( int argc, char* argv[] )
{
  cout << "Hello world ++" << endl;
  return 0;



% /usr/local/kuro-box/bin/powerpc-hardhat-linux-g++ hello.c
c -o hello++



% cp hello++ /net/kuro-box/mnt/share

玄箱で実行。

root@KURO-BOX:/mnt/share# ./hello++
Hello world ++



動きました。ちなみに、「bash: ./hello++: Text file busy」というエラーメッセージが表示されたことがあったのですが、なんなんでしょう???





■ トラブルシューティング



クロスコンパイラでコンパイルエラーになる場合、gccに「-v」オプションをつけて実行すると、どのようなファイルを参照しているか、ログメッセージとして表示されるようになります。玄箱からファイルをコピーしわすれていたり、コピー先の場所が違っていたりしないか、これで確認できるようになります。



ldでエラーになったケースがあって、これがやっかいでした。しかたないので、ldのラッパーを作成しました。



/usr/local/kuro-box/powerpc-hardhat-linux/bin/ld

/usr/local/kuro-box/powerpc-hardhat-linux/bin/ld.org
に名前を変えて、
/usr/local/kuro-box/powerpc-hardhat-linux/bin/ld
を、以下のようなシェルスクリプトに置き換えて、どういう引数が渡されているかを表示させました。

% cat /usr/local/kuro-box/powerpc-hardhat-linux/bin/ld



#! /bin/sh



echo =====
echo $*
echo =====
exec /usr/local/kuro-box/powerpc-hardhat-linux/bin/ld.org $*

gccへの引数で、なんとかできそうな気がしますが、調べてもすぐにわからなかったので、こういう乱暴な手を使いました。



■ 次回予告



ためしにtcshをクロスコンパイラでビルドしてみました。



2006年1月22日日曜日

雪がつもると なんかうれしい

朝おきたら、外は雪で白くなっていました。



まだまだ降りつづけています。



200601212



今日、雪に降られたセンター試験の受験生は、大変だと思いますが、あと少し、がんばれ。



受験ってのは、努力すれば努力しただけ、必ず報われるという、長い人生にはめったにないラッキーチャンスなので、どうかあと少し、がんばってください。



私は、まずめったに雪が降らない地方で育ったので、雪がつもったりすると、すごくうれしくなっちゃいます。はるか昔のこと。高校入試の日、雪が降ってきて、試験終了後、みんなで、雪の中、はしゃいだことを思い出しました。



200601211



実家では、今年になって1月5日に、めずらしく少し積もったけど、今回、雪は降らなかったそうです。



2006年1月21日土曜日

白夜行(BlogPet)

にょほほは
FreeBSDのtelnetパソコンの場合、現在のユーザー名が最初に玄箱に渡されてしまうので、「-lroot」(lは、エル)オプションで、ユーザー名を指定するといいでしょう(そうじゃないと、かならず最初の1回は認証が失敗してうざい)。
って言ってたけど…

*このエントリは、BlogPet(ブログペット)の「pochi」が書きました。


FreeBSD+amd+NFS+玄箱

amdというのは、automount、つまり、必要になったときだけファイルシステムをマウントして、使っていないときはアンマウントしてしまうデーモンさんの一種です。SunのSolarisやLinuxでは、automountautofs)というのがよく使われていますが、BSD系OSでは、昔からamdが使われています。



amdは、NFSのときによく使われます。NFSマウントしている最中に、NFSサーバ・マシンが落ちてしまうと、NFSクライアントは、NFSアクセス待ちになって、処理がとまってしまいます。amdを使っていれば、使っていないとき自動でアンマウントされるので、サーバのトラブルに引きづられることがありません。



また、マシンの起動順序にある程度融通をきかせることもできます。NFSを利用している場合、NFSサーバ・マシンを起動してから、NFSクライアント・マシンを起動させなければなりません。しかし、amdは、NFSサーバ上のファイルへのアクセスが発生した時点ではじめてNFSマウントされるので、通常状態でNFS上のファイルへのアクセスがないのなら、NFSサーバ・マシンを先に起動する必要がなくなります。2台のマシンが互いにNFSマウントしあうような場合も、amdを使えばデッドロックを防ぐことができます。



NFS以外にも、CD/DVD-ROMをマウントしたりするのにも、amdを使うことができます。



■ 準備



○NFSの設定



FreeBSDと玄箱との間でNFS



で書いてあるようにして、NFSを使えるようにしておきます。







○ /etc/hostsファイルの作成



ところで、いつまでもIPアドレスで指定するのはナニなので、/etc/hostsファイルに登録しておきます。



FreeBSD、玄箱ともに、こんなかんじで、2台分を登録しておきます。

192.168.0.21 freebsd.my.domain freebsd
192.168.0.41 kuro-box.my.domain kuro-box

左から、IPアドレス、ホスト名の順です。ホスト名のところには、複数書いておけば、別名として使えるようになります。





○ FreeBSD側でamdを動かす設定をする



amdを動かすためには、/etc/rc.confに、以下の1行を追加します。

amd_enable="YES"

/etc/defaults/rc.confを見るとわかりますが、amd_flagsという変数で、いろいろとパラメータを渡すこともできます。しかし、今回の場合とくに必要ありません。



本格的にamdを使う場合は、パラメータを渡すよりも、設定ファイルを作ったほうがいいかもしれません。man amd.confでマニュアルが表示されますが、・・・けっこう上級者向けかもしれませんね。そもそもamd.confのサンプルファイルさえ用意されていませんし。



■ FreeBSD上でamdを動かす



FreeBSDを再起動すればamdが起動しますが、とりあえず今すぐ動かすには「/etc/rc.d/amd start」を実行します。

freebsd# /etc/rc.d/amd start
Starting amd.

amqコマンドを実行すると、amdの動作状況を見たり、amdを制御す
ることができます

freebsd# amq
/      root    "root"        freebsd:(pid3232)
/net   toplvl  /etc/amd.map  /net
/host  toplvl  /etc/amd.map  /host

■ 玄箱にNFSアクセスする



amqコマンドで表示されるように、/net/hostというディレクトリが、amdの管理下にあります。



/net/玄箱のホスト名/うんたらかんたら」というパスにアクセスすると、amdによって、玄箱のファイルシステムが自動的にNFSマウントされます。



(そうなるように/etc/amd.mapに秘密の呪文が書いてあるのです)



ls /net/kuro-box」を実行すると・・・



freebsd# ls /net/kuro-box
bin             home            lost+found      root            usr
dev             home2           mnt             sbin            var
etc             lib             proc            tmp             www



前回NFSの設定をしたとき、玄箱の/etc/exportsで、大胆にもすべてのファイルシステムを公開するようにしたので、上のように、全部、みえちゃっています。



/mntだけexportするように設定した場合は、たぶん、ls /net/kuro-boxを実行すると、mntだけが見えると思います。



さて、さらに、「ls /net/kuro-box/mnt」を実行すると・・・



freebsd# ls /net/kuro-box/mnt
kuro-box.iso    lost+found      share           share-mac



どんどん、中を見ていけますよ。



freebsd# ls /net/kuro-box/mnt/share
NFS-setup.sh            hello.c                 tcsh-6.14.00
a.out                   hello.o                 tcsh-6.14.00.tar.gz
binary                  tcsh



amdで、どのようにマウントされているか、amqで見えます。



freebsd# amq
/              root    "root"                  freebsd:(pid3232)
/net           toplvl  /etc/amd.map            /net
/host          toplvl  /etc/amd.map            /host
/net/kuro-box  host    kuro-box:/net/kuro-box  /.amd_mnt/kuro-box/host



なれないとわかりにくいですが、最後の1行は、NFSサーバkuro-boxのファイルシステムをマウントしてるよん、ということです。



実際にどのようにNFSマウントされているかは、mountコマンドのほうが、見やすいでしょう。



freebsd# mount | grep kuro-box
kuro-box:/ on /.amd_mnt/kuro-box/host (nfs, nosuid)
kuro-box:/mnt on /.amd_mnt/kuro-box/host/mnt (nfs, nosuid)





■ アンマウントする



玄箱上のファイルにアクセスしないまま、数分たつと、自動的にアンマウントされます。amqコマンドやmountコマンドで、マウントされているかどうか確認できます。



amq -uコマンドで、即座にアンマウントさせることもできます。



freebsd# amq
/              root    "root"                  freebsd:(pid3232)
/net           toplvl  /etc/amd.map            /net
/host          toplvl  /etc/amd.map            /host
/net/kuro-box  host    kuro-box:/net/kuro-box  /.amd_mnt/kuro-box/host



となっているとき



freebsd# amq -u /net/kuro-box



とすると



freebsd# amq
/      root    "root"        freebsd:(pid3232)
/net   toplvl  /etc/amd.map  /net
/host  toplvl  /etc/amd.map  /host



アンマウントされました。ただし、/net/kuro-box/以下のファイルにアクセスしているプロセスがいる場合、アンマウントできません。





2006年1月20日金曜日

白夜行

冬休みに帰省したとき、ローカル新聞やテレビのローカル番組で、今度放映される「白夜行」というドラマは、地元でロケをした、というのを見ました。



ふだん、めったにドラマを見ることはないのですが、そういうネタがあるならぜひ見てみようと思い・・・第1話は、すっかり忘れていて見忘れました。再放送もやってたみたいですが、それも見忘れました。あぅ~



次こそは!ということで、先ほど、2回目の放送、生できっちりと見ました。



  重い・・・ 気分が沈む・・・



こういう内容のドラマだったんですか。予備知識なしで見たのですが、いきなり、どんよりした気分になってしまいました。でも、見ているうちに、だんだん引き込まれてきました。たぶん、次回も見るかも。



で、肝心の、地元でロケしたといわれるシーンは、どうやらこの場所かな???



20060119



ローカル新聞に掲載されていた写真は、これとは違っていたような気がしますが。



何かで、監督かだれかのコメントがのっていたのですが(ぜんぜん覚えてないな・・・もっと脳を鍛えなければ・・・)、

川と煙突のある風景が、二人の心の中をあらわすのにぴったり

とかいうことで、ロケ地にえらんだそうです。ふーん、なんとなくそうかなという気がしてきました。



ちなみに、カメラの向きを変えれば、こんな風景もあります。



200601192



2006年1月19日木曜日

無責任な仕事に憤慨

知り合いのところから、

インターネットができなくなって困ってる。助けてくれ

とのヘルプコールが入りました。その家は、技術には詳しくない老夫婦世帯です。いろいろと熱心に私に説明してくれるものの、要点のよくわからない長話になってしまうので、少々困りましたが、大体、状況が把握できました。



1. 部屋の中で、電話機の場所を移動したいので、業者に、電話線を配線しなおすなどの工事をしてもらった



2. その業者のサービスだったのだと思いますが、電話線の工事をしたさいに、これまで、ごちゃごちゃになっていた配線を、整理してくれた



3. その結果、電話は使えているが、パソコンでインターネット接続できなくなった



4. その業者は、うちは電話しかわからないので、あとのことはNTTに言ってくれ、といって帰っていった。



あまりにも無責任な対応・・・



ようするに、家の中の配線をごちゃごちゃいじくったあげく、インターネット接続できなくして、帰っていった、というわけです。



なんすかっ?そりゃぁ!?



そんな業者には、損害賠償請求したほうがいい、と強く言っておきました。少なくとも、もう出入り禁止、取引停止ですね。



さきほど、1時間以上、格闘した結果、なんとか、もとにもどすことができました。





そのうち、配線系統が、結構複雑なんですよね。



  • 電話は、ISDN。電話番号を2つ、使い分けている


  • インターネットは、光ファイバだけど、VSDLで、電話線にのっかって部屋へ到達


  • インターフォンなどをつかった、ホームテレフォンも使ってる


というわけで、



屋外からくる電話線を、まず2つに分けて、



片方には、VDSLのモデムみたいな箱に。そこから、100BaseTXでルータにいって、さらに各パソコンへ(3台あります)



もう片方は、まずVDSL用のフィルタをとおって、ISDNのTAへ(懐かしい・・・)。そこから、アナログ電話回線が2本でて、1本はファックス、もう1本は電話機(および、ホームテレフォン関係へいってるんだと思う)



そもそも、たくさんあるケーブルが、どこがどこにつながっているかもわからなくて、それを解明するのに手間取りました。ホームテレフォンになっていることに最初気づかず、配線やコネクタの処理の仕方も、非常にわかりにくくなっていました。



ケーブルの先に箱がくっついていて、その箱には、ケーブルの反対側の面に、モジュラジャックが2個くっついている。これが曲者。
ぱっとみで、1本を2本にわけていると思うじゃないですか。実は、1つのモジュラジャックは、スルーしてて、もう片面が、ホームテレフォンで分配されていく線のようでした。
つまり、前者から先は2分岐して、VDSLとTAへ。後者へはTAから1本返ってくる。
わかるか、そんなもん!箱をあけてみればすぐに気が付いたかもしれませんけど。



さらに、1本、使われていない電話線が壁からブラーンとぶらさがっている罠。なんすか、これは!あとで作業する人を欺くためのトラップですか?



配線はただしくつなげられたはずなのに、VDSLがリンクしない。これが一番の問題でした。どうも、2分岐コネクタを使っていたり、いろんなケーブルで引き回したりで、ノイズとかの関係か、アナログ信号的に、すごく微妙な状況に陥っているらしいです。いろいろ試行錯誤して、なんとかつながる配線経路の組み合わせを発見しました。



あー疲れた・・・



今の自分の業務分野とはまったく違いますが、他山の石ということわざもあるように、ぜったい自分は、こんないいかげんな仕事はしないぞ、と心の中で誓いました。





● 私が昔やった失敗



VLAN対応のスイッチングハブ。VLANを設定して、使っていました。ずっと順調にネットワークが運用されていました。



ある日、電気設備の点検で停電がありました。



その後、ネットワークがつかえなくなりました。。。VLANの設定を、不揮発メモリへ保存するのを忘れていたのが原因でした。原因がわかるまで、数時間かかりました。



「なんで、こんなアドレスのパケットが、こんなところからやってくんだぁ?!」・・・と、悩む悩む・・・



片手間のボランティアでやった仕事だから、許してちょうだい・・・なんていっちゃダメですね。反省してます。





2006年1月18日水曜日

「のび太の恐竜2006」の予習

なるほどね、みどころが1つ増えました。



よし、ついでに、大長編ドラえもん「のび太の恐竜2006」の予習でもしておきましょうか。



■公開日



公開日は、2006年3月4日土曜日。



■監督・総監督



総監督に、楠葉宏三。よく知りませんでした。「ロミオの青い空」とかもそうなんですか。



監督に渡辺歩。大人ドラ舞台挨拶で、おなじみ



■ゲスト声優



ゲスト声優に、船越英一郎、神木隆之介。あと、劇団ひとりが、一人5役。



船越英一郎さんってば、2時間ドラマの帝王とよばれていて、あの赤い運命で、痛いおっさんを演じていた方ですね。今回は、悪役のドルマンスタイン。





神木隆之介、ぜんぜん知りませんが、「皇帝ペンギン」でペンギン役をやり、今度は、恐竜のピー助。



■主題歌



スキマスイッチの「ボクノート」。



スキマスイッチって、ぜんぜん知らないのですが、ピタゴラスイッチのなんかと関係あるのかと思い、ググってみたら、みんなそうだと思っているようなので、少し安心しました。



■その他 1



ドラえもんに、歯茎をつけちゃいましたか・・・歯だけならは、昔からときどきはえていましたけど。てゆーか、まぶたまでついてるんですけど。ドラえもんって、まばたきしてましたっけ???



■その他 2



もっと!ドラえもん」No.4をにのってたことなんですが・・・

翼竜の「プテラノドン」は、翼を広げると、だいたい6~7メートル、最大で9メートルもあって、かなりでかい。



でも、体重は、たったの17キログラム以下!



だから、プテラノドンに人間がのって、空を飛ぶのは、無理

だそうです。へー
20060117



2006年1月17日火曜日

FreeBSDと玄箱との間でNFS

玄箱を有効利用するために、最初に何をしようか・・・と考えて、玄箱でNFSを使えるようにしました。



NFSの設定に関しては、以下のサイトの情報を参考にしました。







■ 玄箱にNFSを追加インストール



デフォルトでは、玄箱でNFSは使えません。NFSを使うために、プログラムを追加インストールしなくてはいけないそうです。それくらい、最初から入れておいてもよさそうな気もしますが・・・逆に使わないかもしれないものは入れておくな、というポリシーもありますが・・・



NFSのプログラムは、玄箱添付のCD-ROMのなかの、binaryというフォルダに入っています。なんだか、いろいろはいってますねぇ。

autoconf-2.13.tar.gz
automake-1.4p4.tar.gz
binutils-2.10.91.0.2.tar.gz
bison-1.28.tar.gz
bzip2-1.0.2.tar.gz
diff-2.7.tar.gz
flex-2.5.4.tar.gz
g++-2.95.3.tar.gz
gcc-2.95.3.tar.gz
gdb-5.1.tar.gz
gettext-0.10.35.tar.gz
glibc-2.2.3.tar.gz
libgdbm-1.7.3.tar.gz
libstdc++2.10-2.95.3.tar.gz
m4-1.4.tar.gz
make-3.79.1.tar.gz
nfs.tar.gz
ntp-4.0.99g.tar.gz
openssh-3.0.2p1.tar.gz
openssl-0.9.6e.tar.gz
openssl.tar.gz
patch-2.5.4.tar.gz
perl-5.6.1.tar.gz
portmap-5beta.tar.gz
python-2.0.tar.gz
texinfo-4.0b.tar.gz
textutils-2.0.tar.gz
xinetd-2.3.3.tar.gz

このうち、つぎの2つをインストールします。

nfs.tar.gz
portmap-5beta.tar.gz

インストールといっても、tar.gzファイルをルートディレクトリから展開するだけです。



(1) Windowsパソコン上で、CD-ROMの内容をごっそりと玄箱の共有フォルダ「share」へコピーしておきます。



このshareというフォルダは、玄箱にログインすると、/mnt/shareに見えます。



(2) 玄箱にログインします。



(3) 以下のようなコマンドで、ファイルを展開します。

cd /
tar zxvf /mnt/share/binary/nfs.tar.gz
tar zxvf /mnt/share/binary/portmap-5beta.tar.gz

■ 玄箱をNFSサーバにする



まずは、玄箱をNFSサーバにしてみました。



● /etc/exportsの設定



どのフォルダを公開するかを指定する/etc/exportsファイルを作成します。



よい子はマネをしてはいけませんが、私は、こんな大胆なことをしてしまいました。

root@KURO-BOX:/# cat /etc/exports
/       192.168.0.0/255.255.255.0(rw,no_root_squash)
/mnt    192.168.0.0/255.255.255.0(rw,no_root_squash)

すべてのファイルがLAN側のすべてのマシンから、NFSアクセスできるようになっていて、しかも、クライアントのroot権限でファイルを読み書きできてしまいます。



ノーガード戦法みたいな?



セキュリティ面で非常に危険なので、管理の腕に自信がある人以外は、絶対にやっちゃいけません。



それにしても、exportsファイルの書式って、OSごとに少しずつ違っていて、とくにLinuxは独特な感じで、かなりわかりづらいですね・・・



あ、そうそう、書き忘れていましたが、玄箱のファイルシステムは、こんな感じになっています。

root@KURO-BOX:/# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1              2063504    178864   1779820  10% /
/dev/hda3             76462784    213140  76249644   1% /mnt

//mntという2つのパーティションがあります。



● NFSサーバのデーモンが自動起動するようにする



上記に示した、参考にしたウェブサイトのとおりにしました。



以下の一連のコマンドを実行します。

ln -s /etc/init.d/portmap /etc/rc.d/rcS.d/S41portmap
ln -s /etc/init.d/portmap /etc/rc.d/rc0.d/K10portmap
ln -s /etc/init.d/portmap /etc/rc.d/rc6.d/K10portmap
ln -s /etc/init.d/nfs-common /etc/rc.d/rc2.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc3.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc4.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc5.d/S19nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc0.d/K81nfs-common
ln -s /etc/init.d/nfs-common /etc/rc.d/rc6.d/K81nfs-common
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc2.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc3.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc4.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc5.d/S25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc0.d/K25nfs-user-server
ln -s /etc/init.d/nfs-user-server /etc/rc.d/rc6.d/K25nfs-user-server

これで、玄箱の電源を入れなおせば、自動でNFS関連のデーモンが起動します。



電源を入れなおさずに、今すぐにNFSサーバを動かすには、以下のコマンドを実行します。

/etc/init.d/portmap start
/etc/init.d/nfs-common start
/etc/init.d/nfs-user-server start



■ FreeBSDをNFSクライアントにする



FreeBSDでは/etc/rc.conf

nfs_client_enable="YES"

と書いてあれば、FreeBSDマシンはNFSクライアントになれます。書かれていなければ、書いて、

/etc/rc.d/nfsclient

を実行すればOKなはずです。このシェルスクリプトを読んでも、とくに重要そうな処理はやっていないので、もしかすると、なんにもしなくても、NFSマウントはできるのかもしれません。



● 玄箱のNFSサーバの確認



玄箱がNFSサーバとして使えるようになっているかは、showmount -eコマンドで確認できます。



showmount -eは、FreeBSDでも玄箱でも実行できます。



FreeBSD # showmount -e 192.168.0.41
Exports list on 192.168.0.41:
/                                  192.168.0.0/255.255.255.0
/mnt                               192.168.0.0/255.255.255.0





root@KURO-BOX:/# showmount -e 192.168.0.41
Export list for 192.168.0.41:
/mnt 192.168.0.0/255.255.255.0
/    192.168.0.0/255.255.255.0



トラブル発生時は、rpcinfo -pでも、手がかりとなるいろいろな情報が得られます。



FreeBSD # rpcinfo -p 192.168.0.41
   program vers proto   port  service
    100000    2   tcp    111  rpcbind
    100000    2   udp    111  rpcbind
    100024    1   udp   1024  status
    100024    1   tcp   1024  status
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100005    1   udp    781  mountd
    100005    2   udp    781  mountd
    100005    1   tcp    784  mountd
    100005    2   tcp    784  mountd



● 玄箱をNFSマウント



「mount -t nfs 玄箱のIPアドレス:/パス」というコマンドでマウントできます。

FreeBSD# mount -t nfs 192.168.0.41:/mnt /mnt

これで、玄箱の/mntディレクトリが、FreeBSDの/mntディレクトリにマウントされます。別に両者が同じパス名である必要はないです。



うまくいかない場合、たとえば、こんな風になってしまう場合もありました。

FreeBSD# mount -t nfs 192.168.0.41:/mnt /mnt
[udp] 192.168.0.41:/mnt: RPCPROG_MNT: RPC: Timed out
(おなじメッセージが続く)

これの原因は、玄箱で名前引きができていないのが原因でした。たぶんNFSサーバが/etc/exportsで、アクセス許可をチェックするときに、IPアドレスから名前を引くはずなので、そこでうまくいっていなかったのでしょう。



名前引きが失敗していたのは、/etc/resolv.confファイルが原因でした。最初、玄箱をDHCPでIPアドレスを取得するようにして動かしていたときに、自動で/etc/resolv.confファイルが作成されていました。しかし、そこに指定されていたDNSサーバは、プロバイダのDNSサーバのアドレスで、そんなので192.168.0.???のようなプライベートネットワークアドレスがひけるわけがないので、タイムアウト処理か何かしていたみたいです。



とりあえず、玄箱では、/etc/resolv.confファイルは削除してしまいました。必要ならば、玄箱の/etc/hostsにかけばいいんじゃないでしょうか。ちなみに玄箱の/etc/nsswitch.confでは、

hosts:          files dns

となっていました。





● 使い終わったらアンマウントする



玄箱の電源を落とす前に、FreeBSDで、

umount /mnt

を実行してアンマウントします。そうしないと、いわゆるNFSがささった状態におちいります。

kernel: nfs server うんたら:/mnt: not responding

みたいな、メッセージを延々とみせられることになり、いくつかのコマンドが反応しなくなったり、いろいろ問題がおきます。



こうなってしまったら、もう一度玄箱の電源をいれるのがよいでしょう。



★ 玄箱がFreeBSDをNFSマウントする



今度は逆に、FreeBSDをNFSサーバにして、玄箱からNFSマウントしてみます。



■ FreeBSDをNFSサーバにする



たいていはおまじないで、/etc/rc.confにこんなのを書いてあります。

nfs_client_enable="YES"
nfs_server_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
rpcbind_enable="YES"

statd、lockdは、なくても動くし、ないと問題が起こる場合もあるし、あると問題がある場合もあります(笑)。NFSって、むずかしいですね。





rc.confを書き換えたあとは、できれば再起動したほうが安全だと思いますが、たぶん、

/etc/rc.d/rpcbind start
/etc/rc.d/nfsd start

を実行すれば、うまくいけるかもしれません。



● /etc/exportsファイルの作成



FreeBSDでも、/etc/exportsファイルを作成します。
書式は/etc/exportsファイルに例が載っているので、参考になるでしょう(わかりにくいかな?)。たとえば、こんなかんじ。

/home -alldirs -maproot=root 192.168.0.41

/etc/exportsファイルを書き換えたときは、おまじないとして、こんなのを実行します。

FreeBSD# kill -HUP `cat /var/run/mountd.pid `

これは、mountdプログラムに/etc/exportsファイルを再読み込みさせるためのおまじないです。



■ 玄箱でNFSマウント



こんなかんじになります。



root@KURO-BOX:~# mount -t nfs 192.168.0.21:/home /home



192.168.0.21は、FreeBSDのIPアドレスです。



同様に、使い終わったらアンマウントしましょう。





☆ ☆ ☆ ☆ ☆ 



autofs、amdを使った方法は、また後日。





2006年1月16日月曜日

玄箱で遊ぶ

年末に買ったけど、動作確認しただけで、ほったらかしていた玄箱。この週末、ちょこっとだけいじってみました。



20051218-3



世の中には、玄箱の情報がいろいろあふれているようでありがたいです。ですが、今回は、自分流のやり方で、少しあがいてみました。



玄箱でホームサーバを構築、とかされているようですが、私にとっては、やっぱりFreeBSDが好き、玄箱は少し賢いNAS、というスタンスで、玄箱を使っていきたいと思います。



■ 玄箱のIPアドレスを調べる



玄箱は、Internet ExplorerなどのWebブラウザ経由で設定ができるようになっています。ブラウザで玄箱の設定ページを開くためには、玄箱のIPアドレスを知る必要があります。



玄箱は、デフォルトではDHCPでIPアドレスを取得するようになっているので、どのIPアドレスになるか、状況次第です。どうやって調べましょうか?



一番簡単な方法は、玄箱付属のCD-ROMに入っている「KuroBoxSetup.exe」を実行することです。



そのほかにも、いろいろ一般的な手段が使えます。



とりあえず、ブロードキャストアドレスにpingすれば、応答が返ってくるようです。FreeBSDマシンから、pingしてみました。うちのLANのブロードキャストアドレスは192.168.0.255なので、こんなかんじ。

FreeBSD# ping 192.168.0.255
PING 192.168.0.255 (192.168.0.255): 56 data bytes
64 bytes from 192.168.0.41: icmp_seq=0 ttl=255 time=0.363 ms
64 bytes from 192.168.0.1: icmp_seq=0 ttl=155 time=0.476 ms (DUP!)

返事を返してきた元のうち、見覚えの無いIPアドレスが、玄箱のIPアドレスのはずです。



ふむ、all-0のアドレスにpingしても、返事を返してくるようです。

FreeBSD# ping 192.168.0.0
PING 192.168.0.0 (192.168.0.0): 56 data bytes
64 bytes from 192.168.0.41: icmp_seq=0 ttl=255 time=0.429 ms

よくわかりませんが、これをWindowsでやったら、うまくいかなかったので、Windows専用の方法を、1つみつけました。



スタートメニューの[ファイル名を指定して実行]を選び、「cmd」と指定して、コマンドプロンプトを実行しておきます。



スタートメニューの[ファイル名を指定して実行]を選び、「\\kuro-box」と指定します(kuro-boxは、デフォルトで設定されているコンピュータ名)。すると、玄箱で共有されているフォルダなどが表示されるはずです。



即座にコマンドプロンプトで「netstat -n」を実行すると、こんなふうに、玄箱との間のネットワークセッションが表示されます。

C:\Documents and Settings\名前>netstat -n



Active Connections



  Proto  Local Address          Foreign Address        State
  TCP    192.168.0.26:445       192.168.0.24:1208      ESTABLISHED
  TCP    192.168.0.26:4181      192.168.0.41:139       ESTABLISHED

Foreign Addressのほうで「:139」がついているもの(複数あればそのうちのどれか)が、玄箱です。



■ 玄箱のIPアドレスを固定IPアドレスにする



ブラウザで、「http://玄箱のIPアドレス/」を開きます。



ユーザー名とパスワードを尋ねるダイアログボックスが現れたら、ユーザー名は「root」と入力、パスワードは何も入力しません。



これで、玄箱の設定メニューが現れます。



DHCPでコロコロIPアドレスが変わってしまうのは不便なので、固定IPアドレスにしてしまいました。



「ネットワーク設定」の「IPアドレス設定」で、「DHCPクライアント機能」を「使用しない」にして、「IPアドレス設定」で空いている適切なアドレスを指定します。



Kurobakoip



■ 玄箱にログインする



玄箱では、最初からtelnetでログインできるようになっています。



Windowsだったら、スタートメニューの「ファイル名を指定して実行」を選び、「telnet 玄箱のIPアドレス」で、ログインプロンプトが現れます。



初期状態では、ユーザー名は「root」、パスワードは「kuro」でログインできるはずです。



FreeBSDのtelnetコマンドの場合、現在のユーザー名が最初に玄箱に渡されてしまうので、「-l root」(lは、エル)オプションで、ユーザー名を指定するといいでしょう(そうじゃないと、かならず最初の1回は認証が失敗してうざい)。

FreeBSD% telnet -l root 192.168.0.41
Trying 192.168.0.41...
Connected to kuro-box.my.domain.
Escape character is '^]'.
Password: (kuroと入力)
Linux (none) 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc unknown
root@KURO-BOX:~#

なお、「Password:」というプロンプトが帰ってくるまで、数秒かかります。ただ単純に玄箱が遅いのか、何かのタイムアウトまちなのか、よくわかりませんが、まあいいでしょう。



(追記) 原因は、名前引きのタイムアウトのようでした。/etc/resolv.confで指定されているネームサーバが、DHCPで使っていたときにADSLルータから渡された、プロバイダのDNSサーバアドレスになっていました。/etc/resolv.confを削除したところ、待ち時間がなくなりました。プライベートアドレスを逆引きしようとしていたんですかね。









■ 玄箱をシャットダウンする



玄箱にログインして、poweroffコマンドを実行しても、なんだか、勝手にOSが起動してしまうようです。



ググってみたら、情報が見つかりました。

LinkStation/玄箱 FAQ

echo -n EEEE >/dev/ttyS1」というおまじないを唱えてから、shutdownを実行すればよいようです。
AVRというマイコンがいろいろな制御をしているようで、シャットダウンするときにも、AVRにコマンドを送ってやる必要があるとのことです。



ちなみに、shutdownコマンドではなくpoweroffコマンドを実行したのでは、シャットダウンできませんでした。むむむ。

root@KURO-BOX:~# echo -n EEEE >/dev/ttyS1
root@KURO-BOX:~# shutdown -h now



Broadcast message from root (pts/0) Mon Jan  9 06:38:22 2006...



The system is going down for system halt NOW !!
root@KURO-BOX:~# Connection closed by foreign host.



■ Wakeup On LAN(WoL)で玄箱の電源を入れられるの?



ほかのパソコンから、玄箱の電源を入れることができたらいいなぁ・・・と思ったのですが。



だめっぽいです。



玄箱をシャットダウンすると、イーサネットデバイスの電源も落とされているようなので(スイッチングハブ側でLINK LEDが消灯します)、それじゃぁ、マジックパケットを玄箱が受信するはずがありません。



まえに、WoLできるNASがあると聞いたことがあります。今後、そういう製品が増えていくかもしれませんね。



■ 過去の記事







2006年1月15日日曜日

ドラえもん のび太とロボット王国

ドラえもん のび太とロボット王国(キングダム)のパンフレット



20060114





パンフレットを見て思い出したんですが、このとき、主題歌をKONISHIKIが歌ってたんですね・・・



200601142



大人だけのドラえもんオールナイトのパンフレットから転載。



2002年3月8日(金)
開場 21:00 開演 21:30
池袋HUMAXシネマズ4



  • 21:30~22:00
    舞台挨拶 第1弾 声優さん大集合!! 
    大山のぶ代/小原乃梨子/野村道子/たてかべ和也/肝付兼太


  • 22:00~22:45
    予告編大会
    第1作から最新作まで長編ドラを一挙公開!


  • 22:45~23:15
    新作短編上映
    「ドラえもんズ ゴール!ゴール!ゴール!」
    「ぼくの生まれた日」


  • 休憩


  • 23:35~00:05
    舞台挨拶 第2弾 芝山努監督 登場!!


  • 00:05~1:25
    新作長編上映
    「映画 ドラえもん のび太とロボット王国」


  • 休憩


  • 1:40~3:15
    芝山努監督第1回監督作品
    「のび太と海底鬼岩城」


  • 休憩


  • 3:30~5:10
    芝山努監督第10回監督作品
    「のび太の雲の王国」


200601143



あれ?この2002年に、大人ドラの1万人目の入場者があったんでしたっけ?



☆ ☆ ☆ ☆ ☆ 



パンフレットに、ドラバイザーという、紙でできていて組み立て式のサンバイザーがついています。こういうの、むかーし、リアルにちっちゃいお友達だったころ、全員に配っていたような気がします。今でもやってるのかな?



■ 参考記事







2006年1月14日土曜日

昭和57年の あきはばら地図(BlogPet)

今、ビルの建て替え中万世橋の警察署は、秋葉原へ行くことが夢でした?
ビルの建て替え中万世橋の警察署は、お店は閉鎖されている
お店は閉鎖されたの?
ビルとかを拡大しなかった


*このエントリは、BlogPet(ブログペット)の「pochi」が書きました。


SHARP MZ-1200の広告

どうせなので、雑誌 I/O にのっていたMZ-1200の広告も紹介。興味のないひとには、ぜんぜんどうでもいい話ですね。逆に、昔の人にとっては、何をいまさら、って話ですけど。



20060113



先進の思想がハイパフォーマンスを手に入れた。



気軽にスキンシップ。



気軽に愉しくコンピュータとスキンシップ――。シャープMZシリーズに待望の新機種MZ-1200が登場します。

21世紀の現代でも、あんまり手軽にスキンシップできない人がいますが・・・あの当時からは、格段に使いやすくはなっています



先進の「クリーン思想」を受け継いだフリーメモリー重視の本格派設計。

前回のMZ-2000のときにも触れましたが、当時のパソコンは、ROMに、BASICというソフトが記録されていて、電源を入れると、すぐにそのBASICというソフトが実行されます。ROMは読み出し専用メモリのこと。つまり書き換えができません。そのため、BASICは不要っていう人にも、否応無くくっついてきます。



64KBという限られたメモリ空間の一部がBASICに占有されてしまうので、BASICがいらないのに、使えるメモリ空間が減ってしまう、という弊害があります(のちに、いろいろと回避する方法が考案されましたが・・・)。



それに対して、MZシリーズのクリーン思想というのは、ROMの容量を極力減らして、ほとんどはRAMにして、ユーザーが好きなプログラムをRAMにロードして自由にいろんなプログラムを実行できるようにする、というものです。ほとんどぜんぶのアドレス空間がRAMのため(プログラムロード後に、ROMを切り離せるようになっていて、全アドレス空間RAMにできたはずです)、(当時としては)大容量のメモリを自由自在に使うことができました。BASICじゃなくて、マシン語でプログラムを開発するんだ、PASCALを使いたい、CP/M使いたい、という人には、とても大きなメリットがあったはずです。



逆にBASICが使いたいという人は、カセットテープから、2~3分かけて、BASICをメモリにロードしないと、BASICが使えない、というデメリットもありました。フロッピーディスクがあれば、待ち時間はかなり短くなりましたが、フロッピーディスクは当時とても高価で、気軽に買えるようなものではありませんでした。



シャープクリーンコンピュータ・・・先見性が確かにありましたが、あまりにも時代の先を行き過ぎていたかな、という気がします。



フロッピーはもう現在では衰退してしまいましたが、ハードディスクが安価になった現在、クリーンコンピュータなんてわざわざ言うまでもなく、ROMにソフトを格納するのではなく、RAMにロードして実行する方式が、あたりまえになっています。



ちなみに、詳しいことはよく知りませんが、パソコンじゃなくて、おっきなコンピュータの世界では、クリーンコンピュータなのは大昔からあたりまえだったんじゃないかと思います。



もちろん、手にしたその日から即パソコンライフが楽しめる“オールインワン”タイプです。

オールインワンとは、パソコン本体に、ディスプレイとカセットテープレコーダーが内蔵されていて、本体だけ買えば、一応一通り使えるようになっている、という意味です。ある意味、現在のノートパソコンみたいな感じですかね?



カセットをなんに使うか、今の人はわからないと思いますが、昔は、コンピュータのデータを音に変換してテープに録音していたんです。ファックスのピーヒョロロ~という音を録音したようなかんじ、っていえばわかりやすいでしょうか。

加えてMZ-80K/Cシリーズの豊富なアプリケーションソフトや周辺機器もそのまま使えるという、うれしい汎用性。

MZ-80K/Cは、本当に、初期の名機ですね・・・実物は見たこと無いです。そのMZ-80が、数年前、こんなところで再登場しています。



シャープ、液晶ガラス基板上に8bit CPU「Z80」を形成 -- シートテレビの実現へ向け、システム液晶のロードマップを公開

ホビーからビジネスまで、そして身近な入門機として存分に活用していただけます。

これは、昔よく使われた、広告の決り文句ですね。実際はおもちゃみたいな機械ですが、何十万円もするので、仕事にも使えます、という言い訳がないと、なかなか購入が許されない、というような事情も配慮してのことでしょう。



新製品
MZ-1200
パーソナルコンピュータ 標準価格 148,000円
〈10型グリーンCRT・カセットデッキ標準装備〉





〈主な特徴〉



●32KバイトRAM標準実装(ボード内で最大48Kバイトまで拡張可能)

アドレス空間は64KBあるので、16KはROMだったんですかね?

●204種の豊富なデータ入力が可能な高信頼度タイプライターフェイスキーボード

いまあるごく普通のキーボードみたいなキーボードだよ、ってことです。MZ-80K/Cのキーボードが、いまあるキーボードとはちょっと違っていたんで、そこんとこ改善したから!って宣伝したかったんでしょう。

●高度なプログラミングが駆使できるハイスピードBASICをテープモードで装備

昔は、BASICのプログラムの実行速度がどれだけ速いか、とか競っていましたね・・・いまでも速度競争は、別のところでやってますけど。



ちなみに、BASICは、何種類か提供されていたはずです。改良版のBASICが開発されると、そのテープを買ってくれば、新しいBASICが使えるようになるので、そういう点も、ROMではない、クリーンコンピュータのメリットでした。

●クロック・サウンド回路内蔵

えーと、よくわかりませんが、たぶんですね、タイマICを搭載している、ということを言いたいのではないかと思います。タイマで発生した信号をスピーカーへ入れれば、音がなるし、タイマーの周期を変えることでメロディーを奏でられます。



タイマーは、時刻を計測することもできます。そういや、今のパソコンには時計やカレンダーの機能が内蔵されていてバッテリで動作していますが、昔は、時計なんてなくて、電源をきると、時刻が初期状態にもどってしまう、というのもありました。

●拡張性オプションデバイス:
  160桁多機能プリンタ
  136桁プリンタ
  フロッピーディスク、シングルフロッピーディスク
  マークカードリーダ他

何度も言うように、昔は、フロッピーディスクドライブが高かったですが、プリンタも高かったです。これくらいだと10万円はしてましたかね?





☆ ☆ ☆ ☆ ☆



64KBがどんなに少ないかが実感できる一例。



C言語のプログラムの1行。

int tmp[16384]; 

はい、これだけでもう64KB使っちゃいました。64ビットマシンだと、128KBですかね。







■関連記事





2006年1月13日金曜日

昭和57年の あきはばら地図

SHARP MZ-2000の広告は、往年のパソコン雑誌「I/O」(工学社)の昭和57年(1982年)10月号に掲載されていたものです。



その雑誌には、「あきはばら地図(マップ)」というコーナーがあったのですが、当時の秋葉原の地図がのっていました。



20060112大きい画像



変化の激しいアキハバラの街で、今でも残っている名前が、ちらほらあるようです。



  • アキハバラデパートラジオ会館石丸電気などは、おなじみの名前


  • 九十九は、場所がコロコロ移転してる?


  • 本多通商の名前が見えます。後の「ぷらっとほーむ」ですが、2005年末に、お店は閉鎖されてしまいました。


  • ロケットは・・・まだ、何かありますよね


  • 亜土電子って、T-ZONEのことですよね。急拡大したり、急に縮小したり・・・


  • 角田無線ってのは、今の、カクタソフマップのところですよね?


  • ヤマギワは、今、ビルの建て替え中


  • 万世橋の警察署は、数百メートルほど移転しちゃいました


  • ビットイン(Bit-INN)も、いつだったか、おしまれつつ、なくなっちゃいました。パソコン文化発祥の地みたいな碑が残されているんでしたっけ?


  • 「牛丼や」ってのがありますが、たしかに、いまでもありますよね?


小学校の修学旅行で、交通博物館へ行ったのですが、そのころは、そこが、秋葉原のすぐ近く(というか片隅?)だったとは知りませんでした。あのころは、秋葉原へ行くことが夢でした。でも、東京にある大学に入ったものの、秋葉原へはじめて行ったのって、だいぶたってからでした。本格的に行くようになったのは、ママチャリじゃない自転車を買って、「なんだ、秋葉原って、自転車でもいける距離じゃん」と発見してから。



交通博物館も、まもなく、閉館、移転するそうですね。





■関連記事






2006年1月12日木曜日

ドラえもん のび太の太陽王伝説

別のものを探していたら、これが発掘されました。



ドラえもん 「のび太の太陽王伝説」のパンフレット



200601111



大人だけのドラえもんオールナイトのパンフレットから引用:



大人だけのドラえもん Special All Night 2000
30th Anniversary



  • 声優さん大集合!! 22:30~23:00
    大山のぶ代さん、小原乃梨子さん、野村道子さん、たてかべ和也さん、肝付兼太さん、豪華5名の声優陣による舞台挨拶


  • 予告編大会 23:00~23:30
    過去1作目から21作目までの長編予告を一挙公開


  • 新作上映1 23:45~0:30
    「ザ・ドラえもんズ ドキドキ機関車」
    「おばあちゃんの思い出」


  • 芝山監督、舞台挨拶 0:30~1:00
    映画ドラえもん長編の監督を担当されて今年18年目を迎える監督のお話です。


  • 新作上映2 1:15~2:45
    「ドラえもん のび太の太陽王伝説」


  • 旧作上映 3:00~5:41
    「ドラミちゃん アララ少年山賊団」 (3:00~3:40)
    「ザ・ドラえもんズ ムシムシぴょんぴょん大作戦!」 (3:40~3:56)
    「帰ってきたドラえもん」 (3:56~4:21)
    「ザ・ドラえもんズ 怪盗ドラパン謎の挑戦状!」 (4:30~5:01)
    「チンプイ エリさま活動大写真」 (5:01~5:41)


■昔の記事





200601112 200601113



「おばあちゃんの思い出」も、感動的な名作ですね。



うちのおばあちゃんは、80歳をすぎてもまだまだ達者ですが、「脳を鍛える大人のDSトレーニング 」をやらせたところ、80歳代という結果が出て、

あらいい結果。若いよ

と満足げです。いや、それ以上、悪い結果はでないのではないかと・・・



ところで、母と祖母が「脳を鍛える大人のDSトレーニング 」をやっているとき、ともに共通の間違いをしていました。それは、

ゼロの掛け算を間違える。たとえば、5x0を5と答える

これって、暗記した九九には、ゼロはでてこないし、日常生活で、0を掛け算するなんてことはないからですかね?



ちなみに、nのゼロ乗は1になることを、理系以外の人も、ちゃんと覚えているかな?



2006年1月11日水曜日

スヌーピー「マルチボックス」 1個め

スヌーピー マルチボックスですが、とりあえず、1個めを、引き換えてもらってきました。このペースだと、今回は、2個だけになりそうな予感がします。共通シール期間も使って3個いくかもしれませんが、共通シールは、次のボウルに回したほうがいいかな、とも思います。



20060110



で、タッパーなんですよね・・・夏のお皿とくらべると、ちょっと物足りません。無料でもらえる販促グッズに、過度に期待してはいけないことはわかっていますが。



それと、今回も



  • 値段が390円の商品でも、シールは3点


  • 600円以上でも、シールは5点(6点のシールはないの?5点と1点の2枚とかは?)


  • 100円、200円、300円、・・・という、半端がない、きりのいい値段の商品は、あんまりないのですね


というところが、うまく計算されていますね。導入が予定されている電子マネー(ただしセブン&アイ専用になるらしい。ほかと同じFelicaなんだろうに・・・)になると、半端の額も加算されるようになるといいな



・・・と一瞬思ったのですが、こういうのって、シールを集めること自体がおもしろいんですよね。電子マネーとかカードのポイントだと、おもしろみが半減するかもしれませんね(すでに、セブンで、携帯電話でなんかするやつもやってた気がします)。







2006年1月10日火曜日

SHARP MZ-2000の広告

シャープのMZがでてこないのもさびしいので、古いパソコン雑誌で、シャープのMZの広告を探してきました。



20060109

MZ-2000
パーソナルコンピュータ
標準価格218,000円 〈新製品〉
〈10型グリーンCRT・電磁メカカセットデッキ標準装備〉



先見のクリーンコンピュータが新しい可能性を手に入れた。



将来性を考えるならMZです。日進月歩のコンピュータ世界では、より優れた新しいプログラム言語や周辺機器が続々と開発されています。MZクリーンコンピュータはこうした進化に対応できる独創的な設計。応用自在のメモリー構成で、各種言語の変換、システムチェンジを可能にしました。時代を読めば、未来のアプリケーションへの可能性を秘めたMZです―――。MZ-2000は、こうした「クリーン思想」を秘めた上で、さらにカラーグラフィック対応など一段と充実したグラフィック機能(オプション)を誇る高度に洗練された新鋭機。磨きぬかれたその性能は、まさに未来対応設計と呼ぶにふさわしい新たな次元をひらいています。

非常に残念なことですが、あえて言えば、考えていた未来、読んでいた時代が、製品寿命よりも、ちょっと数年先すぎたかな・・・という気がします。クリーン思想が世間に受け入れられるには、まだまだ状況の整備が十分ではなかったのです。





  • 先進のクリーンコンピュータにふさわしい種々の特徴
    [当時のパソコンはソフトがROMにはじめから記録されていたのに対して、電源を入れてソフトウェアをロードしてはじめて使えるようになることを、クリーンコンピュータと呼んだ。そういう意味では、今あるパソコンは、みんなクリーンコンピュータ]


  • 高機能・高速CPU Z-80A(4MHz)搭載
    [だいたい、携帯電話に入っているCPUの百分の一くらいの性能だと思います。]


  • アドレス空間64Kバイト、オールRAM、応用自在のクリーンメモリーシステム
    [64Kバイトという容量は、英数字で6万5千字記憶できる容量。↑の写真は、入りきらないと思います(計算してみてないけど)]


  • 鮮やかな8色カラー表示、白黒時3画面を駆使できる協力なグラフィック機能(各オプション)
    [カラーといっても、赤、青、緑、シアン、マゼンタ、黄色、白、黒、の8色だけ。しかも、別売りのグラフィック用メモリと、カラーディスプレイを別途買わないとダメ。さらに10万円くらいの出費ですかね]


  • 2000文字表示の高解像度グリーンCRT、ソフトコントロールも可能な電磁メカカセットデッキ標準装備
    [コスト削減のためにカラーではなくモノクロ、しかも目にやさしいという伝説に基づく緑1色(麻雀とは関係ない)のディスプレイ。高解像度といっても640×200ドット。超電磁ヨーヨーみたいな名前のやつは、たんに、プログラムで、カセットテープを動かせるよん、というもの]


  • MZ-80Bの豊富なベーシックソフト(ベーシックだけを使用したプログラム)やフロッピーディスク、プリンタも使える優れた汎用性
    [昔は互換性なんてあんまりなかったので、パソコンの機種ごとにそれ専用のソフトしか使えなかった]


  • PASCAL、システムプログラムなど多彩なソフトウェアサポート。(発売予定)
    [PASCALって懐かしいな。プログラミング言語の一種]


以下、やや不鮮明なデジカメの写真から読み取ったので、もしかすると、間違っている数字があるかもしれません。



MZ-2000 ペリフェラルファミリー



拡張ユニット                 MZ-1U01  標準価格 32,000円
グラフィックボード(ページ1・コントローラ) MZ-1R01  標準価格 39,000円
グラフィックメモリ(ページ2または3)    MZ-1R02  標準価格 8,000円
ユニバーサルI/Oカード           MZ-8BI01 標準価格 16,700円
RS-232Cシリアルインターフェイスカード MZ-8BI03 標準価格 50,000円
GP-IBインターフェイスカード       MZ-8BI04 標準価格 45,000円
136桁多機能ドットプリンタ         MZ-80P4B 標準価格 281,000円
80桁ドットプリンタ             MZ-80BP5 標準価格 142,000円
80桁多機能ドットプリンタ          MZ-80P6  標準価格 155,000円
フロッピーディスク              MZ-80BF  標準価格 298,000円
拡張用フロッピーディスク           MZ-80BFK 標準価格 301,000円
マークカードリーダ              MZ-80MCK 標準価格 198,000円

各オプション機器との接続には、I/Oカード、接続ケーブル等のアダプタ類(別売)が必要です。



MZ-1D01 RGB方式14型カラーディスプレイ
標準価格124,000円 〈新製品〉



鮮明2000文字表示、640ドットの高解像度カラーディスプレイ。黒・赤・緑・青・黄・シアン・マゼンタ・ホワイトの鮮やかな8色表示。より完全なコンピュータとの対話をめざしたビジュアル時代の新鋭機です。



☆ ☆ ☆ ☆ ☆ 



広告の隅に、パソコンサンデーというテレビ番組の紹介が小さくのっていて、司会が、萩尾みどり小倉智明、となっていました。へぇ~・・・と思ったらWikipediaに書いてあった。



私が住んでいたところでは、当時パソコンサンデーは放送していませんでした。だいぶあとになって、日曜深夜(実際には日付変わって月曜日)に放映していましたが、下条アトムが司会をしてました。



■関連記事



  • SHARP MZ-1200の広告


  • 昭和57年の あきはばら地図


  • NHKのミュージックボックス