JyAM's BSD: NetBSD-1.5 System on AT Installation, Leg #3
日本語文章を処理するために必要なソフトウェアをインストールする。 Wnnは定番となっている「かな漢字変換サーバー」である。 Muleは「たまご」からWnnを利用して日本語の入力を行う. 日本語の表示や編集が可能になるように機能が拡張されたEmacsである。 Wnnはソースコード修正したtarballを使用したので手間いらずだが, コンパイル作業は省略不可.
ソースコードを展開.
tar zxvf Wnn.4.2.tar.gz
Xsiディレクトリに入って,FreeBSD用のpatchを当てる.
zcat Wnn42.patch.gz | patch -p0
configディレクトリへ入り,Wnn4.2をX11R6.3でコンパイルするためのX11.tmplを作成する.
Project.tmplの1088行目以降を切り出し,`$$imakefprefix'を `$(IMAKEPREFIX)'と修正する(4箇所). /usr/X11R6/lib/X11/config/X11/X11.tmplをconfigディレクトリにコピーし, 修正した内容を末尾に付け加える. cp /usr/X11R6/lib/X11/config/X11/X11.tmpl . chmod 644 X11.tmpl INSTAPPFLAGSの上に3行追加.FreeBSD用のpatchを当てたProject.tmplから 該当行をコピーしてくるのが簡単. BuildJlibV3をYESに変更する.
Wnn/jlib.V3/Imakefileを修正する.
SRC4= $(WNNETCSRC)/xutoj.c OBJ4= xutoj.o SRCS= ..... $(SRC4) OBJS= ..... $(OBJ4) InstallNonExecFileの`$(WNNINCLUDESRC)/'を削除する. WnnSpecialObjectRule($(OBJ4), $(SRC4), $(WNNETCSRC))を追加する.
uumディレクトリのImakefileを修正.
SRC1= .... OBJ1= ....
の部分からsetutmp.cとsetutmp.oを削除する.
Xsi/Wnn/uum/jhlp.c
次の部分をコメントアウトする. 265 - 269行 #if defined(BSD42) && !defined(DGUX) if (saveutmp() < 0) { puts("Can't save utmp\n"); } #endif /* BSD42 */ 1143-1146 行 if (setutmp(ttypfd) == ERROR) { puts("Can't set utmp."); } 1565-1567 行 if (resetutmp(ttypfd) == ERROR) { printf("Can't reset utmp."); }
Xsi/config/X11.tmpl
1250行付近 WNNINCDIR = $(INCROOT) WNNLIBDIR = $(USRLIBDIR) を次のように変更 WNNINCDIR = /usr/local/include WNNLIBDIR = /usr/local/lib
Xsi/Wnn/jlib/js.c
221行 if (connect(sd,(caddr_t)&saddr, strlen(saddr.sun_path)+sizeof(saddr.sun_family)) == ERROR){ を if (connect(sd,(caddr_t)&saddr,SUN_LEN(&saddr)) == ERROR) { に変更
Xsi/Wnn/jserver/de.c
66行め #include <sys/ioctl.h> を #include <sys/ioctl.h> #include <sys/param.h> と追加. 266行目 if(!noisy){ fclose(stderr); } に if(!noisy){ int fd; if ((fd = open("/dev/null", O_WRONLY)) < 0) { xerror("Cannot open /dev/null\n"); } dup2(fd, 2); close(fd); } と追加
Xsi/Wnn/jserver/readfile.c
425行 jt2 = (struct JT *)malloc(sizeof(struct JT)); *jt2 = *jt1; に jt2 = (struct JT *)malloc(sizeof(struct JT)); *jt2 = *jt1; jt2->node = 0; を追加
Xsi/Wnn/jserver/b_index.c
100行目 /** For each tuple in ri1[0] create b_nodes */ for (i=0; imaxri1[0]; i++){ serial = (jt->ri1[0]+i)->pter; yomi = KANJI_str(jt->ri2[serial].kanjipter + jt->kanji,0); b_index_add(jt, yomi, serial); } を /** For each tuple in ri1[0] create b_nodes */ for (i=0; imaxri1[0]; i++){ serial = (jt->ri1[0]+i)->pter; yomi = KANJI_str(ntohs(jt->ri2[serial].kanjipter)+ jt->kanji, 0); b_index_add(jt, yomi, serial); } 133行目 int serial; { w_char *yomi; yomi = KANJI_str(jt->ri2[serial].kanjipter + jt->kanji,0); delete_b_node(jt, yomi, 0, 0 ); } を int serial; { w_char *yomi; yomi = KANJI_str(ntohs(jt->ri2[serial].kanjipter) + jt->kanji, 0); delete_b_node(jt, yomi, 0, 0 ); } に変更. 162行 yo_kanji = KANJI_str( jt->ri2[jt->bind[tmp_node].pter].kanjipter+jt->kanji,0); を yo_kanji = KANJI_str( ntohs(jt->ri2[jt->bind[tmp_node].pter].kanjipter)+jt->kanji,0); に変更. 218行 yo_kanji = KANJI_str( jt->ri2[jt->bind[tmp_node].pter].kanjipter+jt->kanji, 0); を yo_kanji = KANJI_str( ntohs(jt->ri2[jt->bind[tmp_node].pter].kanjipter)+jt->kanji,0); に変更.
Xsi/config/X11.tmplを/usr/X11R6/lib/X11/config/にコピーする.
Xsiディレクトリでgmake World -f Makefile.instを実行する. エラーが出るのでjserver/Makefileとuum/Makefile,jutil/Makefileの739行目を
LDPRELIBS=-L$(USRLIBDIR) -lcrypt
と修正する.
ユーザwnnを登録する.
su vipw wnn:*:9000:7::0:0:Jserver::
suでgmake install; gmake install.manを実行する.
/etc/rc.local に追加します。
if [ -f /usr/local/bin/Wnn4/jserver ]; then /usr/local/bin/Wnn4/jserver echo 'jserver started.' fi
jserverの終了はwnnkillコマンド。
jserverのホスト名を環境変数JSERVERに設定しておく.
setenv JSERVER ホスト名
termcapを修正し,ktermでuumを起動し,jserverが正常に動作しているかを確認する.
Mule-2.3 (最終版?)をインストールした.Mule-2.2とくらべて,
という特徴があるのでMule-2.2から上げる価値大.
必要なtarballその他.
emacs-19.34b.tar.gz mule-23-1934-alpha01.diff.gz mule-2.3-19.34.patch-981002.tar.gz netbsd.h.patch
ソースコードを展開.
tar zxvf emacs-19.34b.tar.gz gzip -d mule-23-1934-alpha01.diff.gz tar zxvf mule-2.3-19.34.patch-981002.tar.gz takana-19.34.tar.gzが出てくるのでこれも展開. tar zxvf takana-19.34.tar.gz
パッチを当てる.
cp lisp/its/* emacs-19.34/lisp/its cd emacs-19.34 patch -p1 < ../mule-23-1934-alpha01.diff patch -p0 < ../patch-19.34 patch -p0 < ../Mule-2.3.19.34.patch
lipsディレクトリでもパッチを当てる.
cd lisp patch -p1 < ../../mew/egg.el-19.34.patch-for-katayama cd .. patch -p0 < ../netbsd.h.patch
WNN 4.2のlibwnn.aがライブラリパスに含まれていることと, /usr/local/lib/wnnがインクルードパスに含まれていることを確認する. それぞれを/usr/lib, /usr/includeにコピーするのが手っ取り早い:-)
./configure i386--netbsd --with-x-toolkit --wnn
--with--wnn4 としてはだめ.gmake MAKE=gmakeを実行する.約3分かかる。
/usr/local/binでemacsをEmacsにmv.suでgmake installを実行.
このままではネットワークに接続されていない時muleの起動が遅いので、 namedによる名前の検索がタイムアウトするまで待たなくても 自分のホスト名とアドレスがわかるように/etc/hostsに記述する。
ネットワークに接続されていない時、muleがwnnを起動にいって固まる場合が有るので、 wnn-serverが自ホストで動いている場合``jserver"というホスト名を/etc/hostsに記述する。