JyAM's BSD: NetBSD-1.3 System on AT Installation, Leg #3
日本語文章を処理するために必要なソフトウェアをインストールする。WnnはBSDで定番となっている「かな漢字変換サーヴァ」である。MuleはWnnを利用して日本語の入力を行う「たまご」を装備し,日本語の表示や編集が可能になるように機能が拡張されたEmacsである。Wnnはソースコードの修正に時間がかかる。
ソースコードを展開.
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からヴァージョンアップする価値は大いにある.
ソースコードを展開.
tar zxvf mule-2.3.tar.gz
src/s/netbsd.hを修正する.
-lutil -lcryptを-lcryptへ
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分かかる。
suでgmake installを実行する.
このままではネットワークに接続されていない時muleの起動が遅いので、 namedによる名前の検索がタイムアウトするまで待たなくても 自分のホスト名とアドレスがわかるように/etc/hostsに記述する。
ネットワークに接続されていない時、muleがwnnを起動にいって固まる場合が有るので、 wnn-serverが自ホストで動いている場合``jserver"というホスト名を/etc/hostsに記述する。