できればlisperって呼んでもらえるとすごくうれしい!へ

NetWalkerにGentoo linuxを載せてCUIな「ノート型ワークステーション」を仕立ててみる

参照 http://bizboard.nikkeibp.co.jp/kijiken/summary/20100215/LIN0126H_1655663a.html
Gentoo linuxでCUIな「ノート型ワークステーション」を仕立ててみるで説明したことを,NetWalkerで実現すれば,「いつもポケットにlisp」になるじゃないですか?
真のlisperならこうありたいよね?ってなわけで。
準備するものは,
NetWalker
とりあえずキーボード付の方が面倒くさくなさそうなので。
外付けキーボード必須でよければキーボードなしでもできそうだけど。
microSDカード
ちなみにgentooのインストール直後の使用ブロック数は1692180で1ブロック1kbyteですからおおむね1.7GBが最低必要ですし,そこにlispとか入れていくことを考えると,2GBでもおそらく支障が発生すると思います。
私は簡単に入手できる最大のものとして32GBのものを用意しました。
うまくいったら激しく使い倒すつもりなので。
LANケーブルをUSBに接続するための変換ケーブル
gentooは有線LANを割と簡単に認識してくれます。
NetWalkerのUbuntuは付属の無線LANを簡単に動かしています。
というので,Ubuntuで有線LANの接続をしておいて無線と有線と両方動くようにしてその設定を移行すれば,gentooでも簡単に両方動かせるんじゃないかと予想しました。
実際ネットワーク接続ができないと大変ですし……。
ところでNetWalkerには有線LANの端子がないので,普通のUSBとminiUSBのどちらかを使い有線LAN接続することになるので,その変換ケーブルを用意します。
では,はじめましょう。
カーネル名を確認しておく
/boot/vmlinuz(なんとか)という名称です。後で/boot/boot.confに記入するのでメモしておきます。
ちなみに日経linuxの特集では,「vmlinuz-2.6.28-15-araneo」と決め打ちして,そうでなければアップデート・マネージャでカーネルのアップデートをせよとしています。
再インストール用microSDの作成
何か不測の事態が生じても,少なくともUbuntuの方は初期状態に戻せるように,再インストール用microSDを作っておきます。
詳細はhttp://www.sharp.co.jp/support/mit/doc/recovery.htmlのとおり。
ちなみに,これとは別に,現状のバックアップを別のmicroSDにとっておくとなお安心です。いくつかやり方があるようなので検索してもらうこととして……。
(例としてhttp://webos-goodies.jp/archives/system_wide_backup_tool_for_netwalker.html
Stage3ファイルを入手する
http://mirrors.kernel.org/gentoo/releases/arm/current-stage3/armv7a-unknown-linux-gnueabi/の中に,stage3-armv7a-YYYYMMDD.tar.bz2という形式のファイルがありますので,それを入手します。
Ubuntuのホームディレクトリに置くとあとあと便利です。(以下その前提で進めます。)
用意したmicroSDに入れ替える
念のため電源を落としてmicroSDを入れ替え,電源を再度入れます。
microSDのマウントを解除する
Ubuntuは便利なのでmicroSDをオートマウントして使えるようにしてくれるのですが,右クリックしてマウントを解除してください。この「一旦オートマウントを解除してマウントし直す」という手順はちょくちょく出てきます。
領域確保
マウントを解除したらまずは領域確保です。
「端末」を起動して
「sudo fdisk /dev/mmcblk0」
と打ってください。パスワードが要求されますから,Ubuntuにおけるrootのパスワードを入れてください。
おそらくmicroSD全体を「mmc」の「block」「0番」として扱うって意味なのでしょうな。
なお,sudoを使っていますので,毎度rootのパスワードが要求されますのでそのつもりで。
あとはfdiskの要領でして,「t」でパーティションタイプの変更を選び
「16進コード」を入れるところでext3を示す「83」を入力し
「w」で書き込んで終了です。
ファイルシステム作成
領域確保の次はファイルシステム作成です。
「sudo mkfs.ext3 /dev/mmcblk0p1」及びrootパスワード入力です。
microSDのマウント
microSDをマウントします。
前にも書きましたが,たとえばgentooだけではどうしても処理できない場合,Ubuntu側から操作することになりますが,この場合,microSDがオートマウントされますので,前にも書いたとおり,右クリックでマウント解除→所定の場所にあらためてマウントし直すのが基本的な手順になります。
具体的には
「sudo mount /dev/mmcblk0p1 /mnt」及びrootパスワード入力です。
stage3ファイルの展開
以下の作業は,Ubuntuで端末(たとえば「アプリケーション」→「アクセサリ」→「端末」)を起動して,コマンドラインで操作します。
なんかUbuntuのウインドウからファイルをダブルクリックで修正できそうなものですが,Ubuntuの親切心が仇となって,そういう危険なことは許してもらえません。端末から全てsudoで作業します。
「sudo tar xvlpf stage3-armv7a-YYYYMMDD.tar.bz2 -C /mnt/」及びrootパスワード入力です。
YYYYMMDDの所は落としてきたファイル名を入れてください。
/etc/fstabの書き換え
端末からnanoを起動して/mnt/etc/fstabを書き換えます。
「sudo nano -w /mnt/etc/fstab」及びrootパスワード入力です。
shmの行以外は全て冒頭に「#」を打ってコメントアウトします。
その上で「/dev/mmcblk0p1」の行を書き加えます。
「/dev/mmcblk0p1 / ext3 noatime 0 1」です。
終わったら「control-o」で保存し「control-x」でnanoを終わらせます。
boot.confの作成
「sudo nano -w /mnt/boot/boot.conf」及びrootパスワード入力です。
中身は
「/boot/vmlinuz-2.6.28-15-araneo noinitrd ubi.mtd=4 root=/dev/mmcblk0p1 rw rootfstype=ext3 rootdelay=3 nosplash」
「control-o」で保存し「control-x」でnanoを終わらせます。
/etc/conf.d/keymapsの書き換え
「sudo nano -w /mnt/etc/conf.d/keymaps」及びrootパスワード入力です。
内容中「KEYMAP」の行を「KEYMAP="jp106"」に書き換えます。
「control-o」で保存し「control-x」でnanoを終わらせます。
Ubuntuのファイルをいくつかコピーする
Ubuntuのファイルのいくつかをgentooでも利用するためにコピーします。
カーネル
「sudo cp /boot/vmlinuz-2.6.28-15-araneo /mnt/boot/」
resolv.conf
「sudo cp /etc/resolv.conf /mnt/etc/」
モジュール
「sudo cp -a /lib/modules /mnt/lib/」
ファームウェア
「sudo cp -a /lib/firmware /mnt/lib/」(カーネル標準)
「sudo cp -a /etc/sdio /mnt/etc/」(NetWalker無線LAN)
chroot
「sudo chroot /mnt/」
パスワード設定
gentooのrootのパスワードを設定します。
「passwd」
/procのマウント
「mount -t proc proc /proc」
portageツリーの更新
「emerge --sync」
※ちなみにここで再起動かけても動いちゃうのですが,LANが使えないなど結構不具合があるので,以下の作業もやっておきましょう。
glibcのlocaleの指定
「nano -w /etc/locale.gen」
英語関係と日本語関係を活かす場合
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP
について冒頭の#を消します。
編集が終わってファイルを保存したら
「locale-gen」を実行。
TIMEZONEの設定・クロックオプションの設定
日本時を設定する前提です。
「ls /usr/share/zoneinfo」で日本時がなんという名前になっているか確認します。たぶん「Japan」だと思います。
「Japan」だとすれば
「cp /usr/share/zoneinfo/Japan /etc/localtime」
とします。
次に「nano -w /etc/conf.d/clock」でclockファイルを開き
「CLOCK=なんとか」の部分を「CLOCK="UTC"」と変え
(NetWalkerは標準では内部時計もUTC設定のようです。)
「TIMEZONE=なんとか」の部分を「TIMEZONE="Japan"」と変えてファイルを保存します。
行頭に#がついていたら,この2行については必ず消しておくように。
ネットワーク設定
DHCPで自動設定することを前提にします。
「nano -w /etc/conf.d/net」
で,netファイルの中に
「config_eth0=( "dhcp" )」
という記述を加えます。
保存して終了した後,
「rc-update add net.eth0 default」
です。
※流動的な話
無線LANと有線LANの両方を活かすべく奮闘中なのですが,
ubuntuではeth0(無線LAN)とeth1(有線LAN)として認識・作動していることに鑑み
「cp /etc/init.d/net.eth0 /etc/init.d/net.eth1」
としておき
/etc/conf.d/netには
「config_eth1=( "dhcp" )」
も加え,
「rc-update add net.eth1 default」
も実行しています。
ただ現在のところこれでも有線LANをeth0として認識していて無意味なので,さらに調整を続けるつもりです。
※流動的な話終わり
最後に
「emerge dhcpcd」
で,dhcpのためのプログラムをインストールしておきます。
/etc/inittabの設定
シリアルコンソールが接続できないってエラーを何回も出してきてうっとうしいので,使えなくしておきます。
「nano -w /etc/inittab」
# SERIAL CONSOLE以下の2行のうち,s0ではじまる方の冒頭に#がついていないので,つけておいて,保存です。
終了
「umount /proc」
「exit」
「umount /mnt」
「sudo reboot」
これで普通に電源を入れれば従前のUbuntuが動き,
電源を入れた直後に左右のマウスボタンを同時押し→数秒後に離すで,sharpの白い画面の途中でgentooの起動の時の文字列が始まります。
ちなみに……
microSDからの起動は,公式には今書いたとおりなんですが,どうもタイミングがつかみにくいので,私はだいたいこういう手順でやっています。
・左右のマウスボタンを同時に押す
・電源ボタンを押し続ける
・電源ランプが一旦消えてまたついたら電源ボタンから手を離す
・左右のマウスボタンから手を離す
……将来的には,本体にgentoo入れて,もともと本体に入っているUbuntuをmicroSDで運用したい……。
再起動してうまく動いていたらさらに環境整備に走りましょう。
設定ファイルの書き換えとemergeです。
portage自身を最新のものに変える
emergeでいろいろ入れていくのですが,
portage自身が最新ではないがゆえにmaskされちゃってインストールできないものがありますので
ここで最新のものに変えておきます。
「emerge portage」
autounmaskのインストール
「emerge autounmask」
これが入りますと,その後はemergeがmaskされててできないと言われても
「autounmask パッケージ名(x/yの形式)」
の後でもう一度emergeすればインストールされます。
ちなみに,ARMだってだけで拒否されるのもしゃくなので
「nano -w /etc/make.conf」
で,/etc/make.confを開き
「ACCEPT_KEYWORDS="~arm"」
を加えて保存します。
.bash_profileの設定
念のため「cd」でホームディレクトリに戻ってから
「nano -w .bash_profile」とします。
「LANG=ja_JP.eucjp
 export LANG」
を加えておいて保存・終了します。
linksのインストール
「emerge links」
jfbterm本体のインストール
「emerge jfbterm」
jfbterm用フォントの追加
「emerge intlfonts」で追加したあと
「nano -w /etc/jfbterm.conf」で一部書き換えます。
「fontset:iso646-1973irv.pcf,L,/usr/share/fonts/misc/8x16.pcf.gz」とあるのを
「fontset:iso646-1973irv.pcf,L,/usr/share/fonts/intlfonts/8x16rk.pcf.gz」に変更し
保存・終了します。
jiskan16.pcf.gzをどこかから見つけてきて
/usr/share/fonts/misc/に置きます。
#1つのやり方としてUbuntuに戻ってUbuntuからファイルを操作するという手があると思います。
emacsのインストール
「emerge emacs」
SKKのインストール
「emerge skk」
既にemacsで漢字の入力が可能になっているのでskkをあえていれる理由は全くないのですが,まあ惰性で。
w3mのインストール
「emerge w3m」
ちなみに「w3m URIで示された場所」で起動します。
emacs-w3mのインストール
「emerge emacs-w3m」
ちなみに「emacs -f w3m http://www.lufimia.net/」でも起動。
ncursesのインストール
「emerge ncurses」
libcacaのインストール
「emerge libcaca」
ちなみに「cacaview ファイル名(bmp)」で起動。
guileのインストール
schemeの処理系としてguileを入れます。
「emerge guile」
起動も「guile」です。

……これで,「いつもポケットにlisp」が一応完成!

今後の課題

※情報捜索中ですので,何か情報をいただける方,
mailto: ram@ram.forum.jp まで御一報いただけると幸いです。
lispのインストール
emergeだとひっかかる処理系ばかり。ARMってCPUのせい?でもCPUの違いを吸収するのがOSの仕事じゃないの?
具体的には……
cmucl……途中で「GEN pt_BR.UTF-8/Compose」と出てフリーズしてしまう。
gcl……エラーが出てインストール失敗
clisp……エラーが出てインストール失敗
gauche……エラーが出てインストール失敗
文字を大きく
今のままでは小さい……(泣)
jfbtermで心持ち大きくなったけど……。
無線LANを使えるようにしたい
ポケットに入るlispマシンって発想なら必ずしも必要ではないんだけど,さりとてUSB経由の有線LANしかないのも中途半端。
ちなみにhttp://d.hatena.ne.jp/grafi/20091007/1254922427の中にある
「cp -pr /etc/sdio /media/etc/sdio」
のコマンドは,私が上で紹介した手順の後にやると非常に危険。立ち上がらなくなるという。
まだ原因をつきとめてないけど,このコマンドでなくても大丈夫のはずなんだ。必要なのはもうcpしているはずで……
ちなみに
「echo "alias ks79xx_sdio eth0" >> /etc/modprobe.conf
 echo "alias ks79xx_sdio eth0" >> /etc/modules.conf」
もだめでした。
正確に言うと,もともと上のファイルがなかったこともあって
「nano -w」で上記内容のファイルを作ったんだけど,
認識してくれないことに変わりはない……。
日本語入力
実はまだ試していないだけなんだけど
(2011.4.24.最終改訂)

できればlisperって呼んでもらえるとすごくうれしい!へ