1999/11/15 更新
Open/NetBSD
Japanese Environment Setup Guide(FreeBSD's locale)よりsetlocale.tar.gzを使ってlocale関係のサポートを行ないました.
…単にjPerlやらktermでのlocale関連のエラーメッセージがうっとおしいのでやっちゃいました(笑)
そうだ、思い出しました.タイムゾーンを合わせたかったんですよ.
/etc/localtimeでJapan関係を使うと9時間ずれるので標準で9時間ずらせばつじつまがあうかなと.
/usr/src 以下でsrc.tar.gz、srcsys.tar.gz、setlocale.tar.gzを展開します.
locale/README.jp を参考に(以下README.jp)、
rune.h, runetype.h /usr/src/include にコピー
stdlib.h.diff /usr/src/include/stdlib.h にパッチをあてる
locale/* /usr/src/lib/libc/locale にコピー
locale.diff /usr/src/lib/libc/locale/Makefile.inc
/usr/src/lib/libc/locale/setlocale.c へのパッチ
mklocale/* /usr/src/usr.bin/mklocale/ としてコピー
上記URLに追記のかたちで書かれている変更も行ないます.
sys/include/machine/limits.h のMB_LEN_MAXを1を6
このままでもカーネルの再構築はできます.きっとパッチの影響がないんでしょう.
お好みでカスタマイズしましょう.
% cd sys/arch/i386/conf
% cp GENERAL MYKERN
% vi MYKERN
(カスタマイズ! いつもはI386_CPUとI486_CPU、GPL_MATH_EMULATE外してるだけです)
% vi ../../../GENERIC
(TIMEZONE=-540 で9時間ずれます)
% /usr/sbin/config MYKERN
% cd ../compile/MYKERN
% make depend
% make
(待つこと数十分)
% mv /bsd /obsd
% mv bsd /bsd
% reboot
うまく起動したでしょうか?以前の/bsd は/obsd
に変更しましょう.
/bsd がbootに失敗した場合、/obsd でbootしてくれます.
ライブラリの更新ですが、どうやらOpenBSDでは、このパッチで用意されているmblen()等は実装されているらしく、そのままではlibcのmakeができません.問題はlib/libc/locale/ansi.cとlib/libc/stdlib/multibyte.cです.
OpenBSDのソースを尊重する意味でパッチの方を無効にします.でも、どっちが日本語環境にとっていいのかな?
% cd lib/libc/locale/
% vi ansi.c
(私は"#if 0"、"#endif"で囲っちゃいました)
% cd ../../..
% make includes
% cd lib
% make
(待つこと2-3時間)
% make install
% reboot (念のため)
ktermをmakeしなおせば、エラーメッセージが消えます.
ん?でもPerlは前のまんま?tcshもだ./usr/lib/libnls.aってないです.
追記:
一応、パッチの方を使った方が正解のようです.
あと、Makefileが更新されていないのでmklocaleがmakeされていません.
自力でmakeしておきましょう.必要です.
これでperlのエラーも解消しました.
更に追記:
CGIでhtmllintを使おうとすると、別段jPerlである必要がないみたいですね.ならlocale対応に無理やりしなくてもいいかなー.
ktermならXfree86でX_LOCALE付けちゃえばいいし.
ftpサイトにports.tar.gzって置いてありますよね.いくつかのsourceは"mktemp()じゃなくってmkstemp()を使え"ってメッセージがでるのでportsにあるpatchを使った方がよさそうです.
特にegcsはopenbsd関係のconfigが無いので助かります.
まずは/usr の下でports.tar.gzを展開します.
% cd /usr
% tar xvzf ports.tar.gz
このままだと検索しにくいのでindexを作りました.
これでgrepコマンドでports内を探せるようになります.
% find ports -print > ports.index
このままmakeを実行するとftpサイトからソースファイルをとってくるのですが、そういう環境でないのでdistfilesを用意します.
置く場所は/usr/ports/distfiles
のようです.必要なファイルはそれぞれのディレクトリでfile/md5を見て確認してください.
egcs-stable(egcs-core-1.1.1.tar.gz他)だと/usr/ports/distfiles/egcsです.
% cd ports/lang/egcs-stable
先にMakefileでdejagnuをmakeしにいかないようにコメントアウトします.なぜかその前にMAKE_TESTS=noが効いていない気が.
あ、良く考えたらdefined(MAKE_TESTS) なんだから、MAKE_TESTS
の方をコメントアウトするのか(後で気が付く).
--- Makefile : #.if defined(MAKE_TESTS) #BUILD_DEPENDS+= runtest:${PORTSDIR}/devel/dejagnu #.endif :
で、快調にmakeを実行したのですが、configureが通りません.しばらく"何で?"と首を傾げていたのですが、ようやくわかりました.
gcc/configure.inへのpatchがrejectしていました.手動ではあたるんですが…
それと、gcc/configure.in だけでなく、gcc/configure
にもpatchが必要です.
gcc/configure.in を参考にi386環境だけ追加しました.他のアーキテクチャもいっしょでしょうが.
"i[[34567]]86"を"i[34567]86"とするのがみそみたいです.
--- work/source/gcc/configure : fixincludes=fixinc.wrap tmake_file=t-netbsd ;; i[34567]86-*-openbsd*) tm_file=i386/openbsd.h xm_file="xm-openbsd.h ${xm_file}" # On OpenBSD, the headers are already okay. fixincludes=Makefile.in tmake_file=t-openbsd use_collect2=yes ;; i[34567]86-*-coff*) tm_file=i386/i386-coff.h :
ということで、pre-patchのあたりでこけます.後は手作業でしました.
% make pre-patch
% vi work/source/gcc/configure
(上の修正をします)
% make pre-configure
% make do-build
% make install
中断しながらの作業だったのでこのまますんなりとmakeが通るのかは謎ですが、だいたいこんな感じです.
追加:
egcs-1.1.2がリリースされましたね.OpenBSDもconfigure一発になりました.
mkstemp()対応もされているようです.
% ./configure --enable-shared --with-gnu-ld --with-gnu-as i586-pc-openbsd2.4
--program-transform-name=s,^,e,
% make bootstrap-lean
% make install
LANが自由に使えるならCVSを使えば便利なんでしょうが、自宅ISDNで実行するとえらく時間がかかってしまいました.
常に大学にいるわけでもないのでCTMという方法で最新カーネルなどを追いかけることにしました.
使い方はWebページに細かく紹介されていますが、MLに参加することで週に3-4回程度mailが届きます.
通常ならOpenBSD-srcとOpenBSD-portsで十分ではないでしょうか.
受信したmailをそのままctm_rmailを使って、
% ctm_rmail -p. -d. ~/Mail/inbox/110
などとすることでOpenBSD-src.0800.gz
などといったファイルを作成することができます。
あとはOpenBSD-src.*なら/usr/srcに移動して、
% ctm ~/OpenBSD-src.0800.gz
のようにして最新状態に更新します.
ファイル名に0800といったシリアル番号が付けられているので順番通りに実行しないと更新しません.
現在までの状態は、/usr/src/.ctm_status
といったファイルで確認できます.
あ、その前にftpサイトでOpenBSD-ctm/baseにあるファイルを取ってきてtar展開とこれまでのctmファイルを当ててくださいね.
OpenBSD-current追いかけるようになってからしばらくして、Cコンパイラがgcc-2.8.1ベースからegcsベースへ移行するとOpenBSD若草友の会MLで連絡頂きました(鴨先生Thanksです).
どうということはないのですが、ライブラリの更新だけはいろいろとしないといけないようです.
http://www.tryc.on.ca/archives/obsd/tech/1999_5/0181.html からだと、
% cd /usr/src % make obj
ここで、gasとldをmakeした方がいいようです.
% cd /usr/src/gnu/egcs/libiberty % make -f Makefile.bsd-wrapper clean % make -f Makefile.bsd-wrapper depend % make -f Makefile.bsd-wrapper % make -f Makefile.bsd-wrapper install
gccを更新して、gccでgccをmakeして…というパターンですね.
cd /usr/src/gnu/egcs/gcc make -f Makefile.bsd-wrapper clean make -f Makefile.bsd-wrapper depend make -f Makefile.bsd-wrapper make -f Makefile.bsd-wrapper install cd /usr/src/gnu/egcs/gcc make -f Makefile.bsd-wrapper clean make -f Makefile.bsd-wrapper depend make -f Makefile.bsd-wrapper make -f Makefile.bsd-wrapper install cd /usr/src/include make includes cd /usr/src/gnu/egcs make -f Makefile.bsd-wrapper clean make -f Makefile.bsd-wrapper depend make -f Makefile.bsd-wrapper make -f Makefile.bsd-wrapper install
最後にcppをinstallします.
cd /usr/src/usr.bin/cpp make install
ということなのですが、少々問題発生.
不思議なことにgnu/egcs/move-if-change
のパーミッションに実行権限がないのでmakeが通らないみたいです.
gnu/egcs/gcc/move-if-changeだったような…とりあえず、`chmod
+x`してあげてください.
この後、個別にmakeしているとcppを使うものに失敗するものが出てきました./usr/bin/cppかと思いきや、これってスクリプトファイルなんですね.
使っているのは/usr/libexec/cpp.で、このcppがなぜか更新されないんで/usr/lib/gcc-lib/i386-unknown-openbsd2.5/gcc-2.95/cppをcpしてしまえば解決します.
不思議なことに`make build`じゃ問題でないんですよねぇ.どこのmakeが足りなかったのか…
補足
current のgccは2.95.1になりました.libgcjも組み込まれないのかな?
どうもcurrentを追っかけようとすると時々'make
build'せなあかんのでしょうが、常にうまくいくとは限りません.
で、思い出したのだけでも挙げときます.
他にもあったんですけどね、後でまた書きます…
OpenBSDでインストールしたXFree86、確かに問題はないんですよ.xdmも他のPC-UNIXと比べてグラフィカルでかっこいいし.
でも、X-TT対応でないのが少し残念なので自分で構築することにしました.
どうせなんでOpenBSD-src-x11を用意.…ううっ、細かいことを忘れたのでまた今度(をいをい)