1999/11/15 更新

OpenBSD/i386 2.5インストール日記(currentは2.6)

目次


カーネルとライブラリの再構築(しなくてもいいんでしょうが…)

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付けちゃえばいいし.

portsを使ってegcsのmake

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

cvs使いたいけど、ctm生活へ

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ファイルを当ててくださいね.

egcsベースのccへ更新

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も組み込まれないのかな?

ついでにmake build話

どうもcurrentを追っかけようとすると時々'make build'せなあかんのでしょうが、常にうまくいくとは限りません.
で、思い出したのだけでも挙げときます.

他にもあったんですけどね、後でまた書きます…

X-TT対応XFree86

OpenBSDでインストールしたXFree86、確かに問題はないんですよ.xdmも他のPC-UNIXと比べてグラフィカルでかっこいいし.
でも、X-TT対応でないのが少し残念なので自分で構築することにしました.

どうせなんでOpenBSD-src-x11を用意.…ううっ、細かいことを忘れたのでまた今度(をいをい)


木村 昌史

[戻る]