Macintosh で NetBSD |
「Macintosh でアラビア語」の延長として当然考慮す べき話題だが、アラビア語を受け付けてくれるシェルやコンソールがあるのか どうか、まだよくわからない。
というわけで、ここでは、万能エディタ Mule でアラビア語を読み書きするた めの方法を略述。必要なものは基本的にアラビア語のフォントだけなので、簡 単だ。
Mule でアラビア語
フォントを入手する。筆者が利用したのは「ftp.iij.ad.jp/pub/misc/mule/fonts/ETL/」。 ダウンロードしたのは以下の6種類(16ポイントだけでも足りると思うが、ど れもサイズは小さいから、この際まとめてダウンロード)。
「gunzip」で解凍し、「bdftopcf」というコマンドで「pcf」 形式に変換する。
# gunzip etl16-arabic0.bdf.gz # bdftopcf etl16-arabic0.bdf > etl16-arabic0.pcf
「gzip」で再び圧縮し、Xがフォントパスとして参照している ディレクトリ(コマンド「xset q」で調べられる)へコピーする。わざわざ 「gzip」する必要はないのかもしれないが、他のフォントがすべてそうなって いたので、それに倣う。
# gzip etl16-arabic0.pcf # cp etl16-arabic0.pcf.gz /usr/X11R6/lib/X11/fonts/misc
「mkfontdir」というコマンドで、フォントをコピーしたディ レクトリの中身を fontset として読み込ませる。そして、フォントパスを張 り直す。これで準備は完了。
# mkfontdir /usr/X11R6/lib/X11/fonts/misc # xset fp rehash
Mule を起動し、「M-x arabic-mode」でアラビア語モードを
呼び出す。「C-]」で arabic-mode とアスキーモードを切り換えられる。
arabic-mode を終了するには、「C-c C-c」をタイプする。
同サイトには、ギリシア文字やキリル文字のフォントもある。 それらを上と同様の手順で追加すれば、ギリシア語やロシア語も読み書きでき るようになる。
NetBSD には適当なWWWブラウザがないようだ。日本語が不要なら Lynx でも構わないのだが、そうもいかない。「三浦本」のおまけCD-ROMにはバイナリ版の mozilla(Netscape Navegator + Composer)が収録されてたので試してみたけれど、遅くて重くてエラーメッセージの連続で不安定。「神山本」の「WWWは Mac でやるべき」という現実的な忠告に従うべきかもしれない、と思う。
ある日、本屋で FreeBSD 関連の本を立ち読みしていたら、Mule はWWWブラウザとしても使える、という記述が目に留まる。Mew との組合せでメーラーになるのと同様、W3 というプラグインを追加してやればいいらしい。Mule 愛好家としては、聞き捨てならない話。
しかしこの W3、NetBSD 周辺では見つからないのである。「駄目か」とあきらめかけたのだが、FreeBSD の ports の中にあった。ports は移植可能性ありという話なので、挑戦する。
Mule でWWW
FreeBSD の ports は、NetBSD の package を pkgsrc からインストールする場合と同じような要領で利用できる。「三浦本」の143ページ以下、「神山本」の248ページを参照。
W3 の ports(ftp.freebsd.org/pub/FreeBSD/ports-current/www/w3)をダウンロードして、「/usr/pkgsrc/www/」に置く。つまり「/usr/pkgsrc/www/w3/」以下に、4つのファイルおよびディレクトリ(Makefile、files、patches、pkg)が入ることになる。
インターネットに接続してダウンロード可能な状態でmakeすれば、必要なファイルは勝手に取りに行ってくれるけれど、必要なソース(ftp.freebsd.org/pub/FreeBSD/distfiles/w3-2.2.26.tar.gz)を前もってダウンロードして、「usr/pkgsrc/distfiles/」以下に置いといてもいい。
Makefile の書き換え。試行錯誤の結果、効果があったと思われる変更は以下のようなもの。
BUILD_DEPENDS?= mule RUN_DEPENDS?= mule EMACSCMD?= mule ELISPDIR?= /usr/local/lib/mule/site-lisp .include "../../mk/bsd.pkg.mk"
「.include "../../mk/bsd.pkg.mk"」は、末尾の「.include <bsd.port.mk>」と置き換える。「三浦本」145ページ参照。
make。make install。成功すれば、Mule から「M-x w3」で呼び出せる。
試用してみた W3(2.2.26)の特徴。
PC系の雑誌ではLinux等の特集や連載を見かけることが珍しくもなくなった。Mac雑誌でもフリーUNIXの話題をもっと取り上げて欲しいもんだ。と思ってたら、『MACLIFE』(エクシードプレス)にはちゃんとそういう連載があったのだ(まえだひさこ「まえだひさこのMac the BSD」)。単なる筆者の無知でした。そういえば『MACLIFE』はMkLinux関連の連載もやってたっけ。
1999年2月号はオールドMac活用法の特集で、そちらの方でもNetBSDが取り上げられており、偉いことに付録CD-ROMにNetBSD/mac68kの1.3.2が収録されている。こんなおまけを付けられたらインストールしてみたくなる人も結構いるでしょう。特集の方には簡単な紹介があるだけなので、連載の方を参考にしながら、ということになる。
で、「まえだひさこのMac the BSD」第2回「SE/30へのNetBSDインストール〜前編」を読んでみる。ツールを揃えて、パーティションを切って、フォーマット(ファイルシステムの作成)して、起動。というところで以下次号(4ページしかないから)。
これは辛い。インストールに成功して無事に起動できたとしても、その後何すればいいかわからないまま、来月まで待たなきゃならないなんて。再起動の仕方も書いてないんだけど、1カ月間そのままの状態でいろってことなんでしょうか。
CD-ROMに収録されているのは、
NetBSD-1.3.2/mac68k
INSTALL
binary
kernel
netbsd-GENERIC.gz
netbsd-GENERICSBC.gz
sets
base.tgz
comp.tgz
etc.tgz
kern.tgz
kern_sbc.tgz
man.tgz
misc.tgz
xserver.tgz
installation
misc
Booter1.11.1.sea
Mkfs_1.45.sea
NetBSD/Mac68k Installer.sea
README.Booter
README.Installer
src
Booter1.11.1-src.sea
Installer 1.1g.sea
Mkfs_1.45src.sea
X関連のファイルは「xserver.tgz」のみ。「三浦本」には「1.3.2(5/30にダウンロードした)のインストールには注意して下さい。kern.tgz、kernsbc.tgzがインストーラからインストールできません」(19ページ)とあるんだけど、問題なかったのかな。
「今回のインストールでは、思っていたよりもトラブルが多く、フォーマットとインストールの繰り返しでした」(273ページ)。どんなトラブルだったのか知りたいです。上の「kern.tgz、kernsbc.tgzがインストーラからインストールできません」という事態は発生しなかったのでしょうか(してたら書いてくれるよね)。
注意書き。
なお、インストール作業はUNIXに関してきわめて高度な知識を要求されますので、初心者読者もしくは自信のない読者は決してインストール作業を行なわないでください。
同時に、NetBSD/mac68kは無保証のフリーソフトウェアであるため、そのインストール作業によって読者が被ったあらゆるデータ損失/ハード損害に関しましては、筆者およびMACLIFE編集部は一切の責任を負いません。各自の責任で作業してください(『MACLIFE』1999-02、270ページ)。
読者に慎重を訴えるのは適切な配慮とは言え、「UNIXに関してきわめて高度な知識を要求されます」てのは少々大袈裟。インストールするだけなら、UNIXの知識なんか全然必要ない(Macに関する知識があればいい)。
「NetBSD/mac68kは無保証のフリーソフトウェアであるため」って、どういう意味なんでしょう。フリーソフトじゃなかったら「筆者およびMACLIFE編集部」は責任を負ってくれるんですかね?
率直に言って、この連載記事だけを参考にインストールを行うのはかなり難しいと思うんだけど、「NetBSDに関して、筆者や月刊MACLIFE編集部は技術的なサポートを一切いたしません」(273ページ)。
その一方、「SE/30のEthernetカードがまだ手に入りません。……「テストに使ってもいいよ」という殊勝な心の持ち主の方を募集しております」(273ページ)。読者の技術的なサポートは期待しておられるのですね。
何だか文句ばかり書いてしまったけれど、それは期待の裏返しということで。こういう連載があるってのはうれしいことですから。3月号では1.3.3へのアップデート方法についても触れられるらしいので、楽しみに待ちましょう(CD-ROMには何か収録されるんでしょうか)。
『コンピュータ 悪のマニュアル 2』(backrs編著、データハウス、1988年)に掲載されていた「UNIX-like Mac はいかが?」(Una Bomer ●~ *)という短い記事。NetBSDと直接の関係はないのだけど、いかにしてMacをUNIXに近づけるか、って話で、
GUI 面よりもむしろ directory tree の階層構造とか各種ツール類とか、つまり作業環境をUNIXに近づけるっていうまにあっくなカスタマイズです(48ページ)。
いいですね、これ。
NetBSDと共存していると、Macとの間でファイルをやり取りする機会も何かと増えるし、ファイル名なんかはUNIX風にしておいた方が便利だったりする。階層構造までは考えなかったけど、かっこよさそう(合理的でもある)。早速、真似してみた(執筆者の「Una Bomer ●~ *」氏は、「.」「..」というエイリアスを作って各フォルダに入れたそうで、さすがにそこまでは真似できません)。NetBSDのディレクトリ構造きちんと理解できてなくて、作ってはみたものの、中に何を入れればいいのやら戸惑うことも多いんだけど。
そして何といっても一番のツールは MacShell。
これも名前通りのもので C shellベースの UNIX-likeな CUI(Command line User Interface)環境を提供してくれる(49ページ)。
MacShellは筆者も以前に試したことがある。NetBSDを導入する前で、UNIXのコマンドなんてものに興味のかけらもなかったし、日本語は化けるし、なかなか使い勝手が悪くて実用にまでは至らなかった。しかしNetBSDを使い始めると、MacでもCUIのシェルを使いたくなるのが人情。でないと、階層構造やファイル名をUNIX風にした意味もない。
他にも探してみたら、Msh (Mac Shell) というのがあった。これも Csh風のシェルプログラム。作成者が日本人であるおかげか、日本語も通るし、コマンドも豊富だし、カスタマイズの余地も大きい。パス表記にMac風の「:」じゃなくUNIX風の「/」が使えるし。他のアプリを起動・終了させることも可能。
MshとMacShellの比較表を作ってみた。改めて試用してみると、使いにくいという記憶しかなかったMacShellも、機能は豊富なのだった。カスタマイズもいろいろ出来るし。ファイルのタイプとクリエータを変更できるのは案外便利。Tabキーでファイル名の補完もしてくれる。
が、Mshが有利なのはFinder操作が可能(ゴミ箱を空にしたり、システムの再起動や終了まで。ついでにFinder自体の終了と起動も可)なのと、他のアプリをコマンドラインから呼べること。例えば、ミミカキエディットのエイリアスに「mimi」とか名前を付けて、「set path」したフォルダ(「/usr/local/bin」とか)に入れとけば、コマンドラインから、
mimi foo.txt
で、ミミカキエディットがfoo.txtを開いてくれる(foo.txtをエイリアスにドロップしたことになる)。AppleScriptのスクリプトも、アプリケーション形式で保存すれば実行可能。こうなると、本当にFinderなしでもやっていけるんじゃないかと思う。
MshはTabでファイル名の補完ができないし、画面のコピー&ペーストもできない(MacShellはどちらも可能)。だからファイル名を入力するのが結構面倒くさい。その代わり、Finder上で見えているフォルダやファイルをコンソールにドロップしてやると、そのパス名がコマンドラインに入る。
MacShellは、現在居るディレクトリ(cwd)のファイル及びディレクトリしか操作できない。ディレクトリ間の移動も、一段階ずつしかできない。これはかなり不便。Mshにはそういう制約はない。
今はMshを「Startup Items」フォルダに入れて使ってます。
『UNIX C SHELL フィールドガイド』(G・アンダーソン+P・アンダーソン、パーソナルメディア、1987年)を適当にめくりながら、簡単なシェルスクリプトを試してみる。
ファイル名をまとめて付け替える必要に迫られたのがきっかけ。perlとかを使ってもいいのだろうが、この程度のことならシェルに任せられるはず。目を付けたのは、端末からのループ。
その1:まとめて接尾辞を付けるスクリプト。
「bar***」を「bar***.old」に変える。 # set foo = (bar*) # foreach f ( $foo ) foreach? mv $f $f.old foreach? end
「foreach」構文を使った。最後に「end」を入力してリターンを押すと処理が始まる。
その2:次に試したのは、上と逆のパターン。
「bar***.old」を「bar***」に変える(接尾辞を削除)。 # set foo = (bar*.old) # foreach f ( $foo ) foreach? mv $f $f:gr foreach? end
これは少し迷った。ファイルの名前を削る方法が、すぐには思い付かない。パス名から接尾辞を除いたものを表現するためのオプション(「$f:gr」のところの「r」)が見付かったので、それを利用する。「g」オプションは、「foo」に set された単語のリストそれぞれに対して処理を行うためのもの。
その3:番号順にリネーム。
「bar***」で始まるファイルを、「new.1」「new.2」「new.3」……に変える。 # set $foo = (bar*) # @ goo = $#foo + 1 # while ( $#foo ) while? @ n = $goo - $#foo while? mv $foo[1] new.$n while? shift foo while? end
「while」ループ。
「$#foo」は、foo に含まれる単語の個数。
「@」は、数値の代入用符号(後ろにスペースが必要)。
「$foo[1]」は、リスト foo の一番目の単語。
「shift foo」で、リスト foo の最初の要素を削除。