PalmTop PC110 UNIX化計画
UNIX on PalmTop PC110

 IBM PalmTop PC110(モデルYD1)をIMAP端末とするためUNIX化すべく試行錯誤の末256MBのコンパクトフラッシュ(以下CF)にFreeBSD 4.3-RELEASEをインストールしました(UNIXは初心者同然だというのに)。以下はその顛末。

達成編

  1. FreeBSD 4.3-RELEASEのインストールには16MBのメモリが必要なため8MBしかないYD1ではインストーラが起動できません。そこでまずメモリが16MB以上でPCカードを利用できるPCを用意します。以後このPCをベースPCと呼びます。
  2. ベースPCにFreeBSDがインストールされていなければインストールします。このときインストールするのは最小構成でかまいません。インストールベースとするだけなら200MB程度のディスクの余裕があれば充分です。
  3. お好みに応じてkernelを再構築しておきます。PCIだのUSBだのPC110に縁のないデバイスをごりごり削除するとkernelのサイズを1MBくらいちいさくすることができます。
  4. ベースPCでインストーラを起動します。
  5. インストールにPCカードを利用するかたずねられたところでPCカードアダプタにセットしたCFを差しこみ"YES"を選択します。
  6. パーティション作成前に対象デバイスをたずねられるので内蔵のHDDではないデバイスのみを選択します。
  7. あとは普通にインストールします。
  8. インストールが終了したら再起動します。このとき再起動の直後にCFをPCカードスロットから引き抜いてベースPCのFreeBSDを起動するようにします。
  9. rootでログインしてCFを差しこみインストールしたスライスをマウントします(以後のディレクトリはマウントしたCFのディレクトリです)。
  10. PC110のスマートピコフラッシュスロットはIDEのPrimary Slaveとして認識されます。そこで/devに移動し、対応するスライスのデバイスファイル ad1s[1-9][a-z] をMAKEDEVで作成します(後半二文字はインストール時のパーティションの分割やスライスの作成方法で変わります。/etc/fstabを参照してください)。
  11. /etc/fstabをエディタで開き、デバイスとして指定されている"ad[2-9]"(6.で指定したものです)を"ad1"に修正して保存します。
  12. kernelを再構築していたときはCFのルートにコピーし、/boot/kernel.confをエディタで開いてkernelから削除したデバイスドライバをこのファイルからも削除します。ついでに"enable apm"という一行を追加するとAPMサポートが有効になります(もしかしたらデバイスファイルapmをMAKEDEVで作成しなければならないかもしれません)。
  13. アンマウントしてCFを引き抜き、PC110のスマートピコフラッシュスロットに差しこんでブートします。

 これでPC110でFreeBSDが起動します。あとは普通に設定できます。ちなみにインストール後のディスク占有量はは最小構成で100MBすこし、X-Usersで140MBほどでした。

挫折編

PCカードからのブートは可能か?

 同じ方法でPCカードからブートすることもできそうですが実際に試してみたところカーネル起動後次のメッセージが表示されてファイルシステムのマウントに失敗しました :

ad2 : READ command timeout tag=0 serv=0-resetting

 知識不足ゆえ回避方法はわかりませんでした……

大容量ATA PCカードの憂鬱

 1.8型モバイルディスク 2GBの説明書でも触れられているように、パーティション編集プログラムの一部は大容量ATA PCカードを正しくあつかうことができません。実際に試した結果は次のとおりです。

正しく動くもの

正しく動作しないもの

生活環境編

Ngのカスタマイズ

 単体で40MBもディスクを消費するEmacs 20と心中する勇気はなく、かといってviですべてを行う自信もなく……というわけでエディタには軽量EmacsクローンのNgを導入しました。このNg、由緒正しいクローンなので標準の状態では"Backspace"がヘルプのためのキーとなっています。また"PageDown""PageUp"なども使えません(tcshのおかげかカーソルキーは使えますが)。そこでキーと操作ができるだけ近づくようドットファイルで次のように設定しました :

; "\ooo" is octet code
; set "Backspace" to delete backward char("\^h"="\010") (global-set-key "\^h" 'delete-backward-char) ; set "ESC-h" to help (global-set-key "\^[h" 'help-help) ; set "Del" to delete char("\^?"="\177") ; (It can't use on 'kon2') (global-set-key "\^?" 'delete-char) ; "Ins" ; for X terminal (global-set-key "\E[2~" 'overwrite-mode) ; "PageUp" and "PageDown" ; for console (global-set-key "\E[I" 'scroll-down) (global-set-key "\E[G" 'scroll-up) ; for X terminal (global-set-key "\E[5~" 'scroll-down) (global-set-key "\E[6~" 'scroll-up) ; "Home" and "End"(for console only) (global-set-key "\E[H" 'beginning-of-line) (global-set-key "\E[F" 'end-of-line)

 いまや本家Emacsを動かすのに困るマシンも少なくなったせいかこれらの情報を調べるのはなかなかたいへんでした。

Xターミナルあれこれ

 Emacsを入れないおかげで余裕のできたCFの空きスペースには見栄と洒落と若干の実用的目的(やはり仮想コンソールを切り換えるよりは同時に表示しているターミナルを切り換えるほうが楽)でXFree86を導入しました。ターミナルにxtermやktermよりコンパクトで軽いrxvtの日本語化版を導入してそれなりに使える環境を整えた……と思ったらkinput2を実行してもrxvt上で日本語の入力ができません。試行錯誤の結果判明したのは次の事実でした :

 rxvtは環境変数LANGにja_JP.EUCが設定されたシェルから起動しないと変換モードを開始できない。

 たしかにパッケージに含まれるファイルREADME.jaにもそう書かれていますがコンソールではあまり設定されない環境変数だろうしktermだと変換モードの開始そのものはLANGと関係なしに可能だし(正しく表示するにはLANGや文字コードの設定が不可欠ですが)、でちょっとした盲点になっているように思います。
 他にも日本語化rxvtについては次の現象を確認しています :

 さすがにこれではちょっとつらいので次のようにして使うことにしました :

 ……しかしいまどきこんなことが気になる環境はそうはないんでしょうねえ。

参考資料

 FreeBSDのインストールや設定には主に次の資料を参考にしました :

 この他にもさまざまなWebサイトのページを参考にしました。有益な情報を公開されている諸氏に感謝します。


Produced by D.B.C.