SPARCstation の NetBSD-1.2.1 を NetBSD-1.3 にアップグレードする 1997/03/26 nsasaki@da2.so-net.ne.jp (sasaki@thinkfree.co.jp is closed) NetBSD-1.3 が予定より少し遅れてリリースされました。 また、つい最近 NetBSD-1.3.1 がリリースされました。 # 1.3 の SOURCE_DATE は Fri Jan 2 14:11:41 GMT 1998 # 1.3.1 の SOURCE_DATE は Thu Mar 12 17:54:11 GMT 1998 いままで NetBSD-1.2.1 で動いていた SPARCstation IPX を、 NetBSD-1.3.1 にアップグレードしてみました。 # 但しアップグレードインストールをしたのではなく、クリアインストールです。 基本的なインストール手法については、NetBSD-1.2 と変わりありません。 今回はインストールでの注意すべき点と、 インストール後のアプリケーション導入について書いてみることにしました。 私は未だに NetBSD に関連するコミュニティには、なんら参加していません。 ここに書かれていることについては NetBSD に関連するコミュニティには、 なんの関係もないことをご理解ください。 この文書は次の目的のためにコピーしないでください。 ・この文書を営利目的のために使う ・営利を伴う出版物に引用・紹介する それ以外でしたらご自由にどうぞ。 なお、ここに書かれていることを実践することによっていかなる事態になっても、 著者は何の責任も負いません。 この文書だけでなく、netbsd121.txt もご覧下さい。 なお、この文書を書いているのは、1998/3 下旬です。 1. NetBSD-1.3.1 のインストール NetBSD の配布ファイルと、サポートされている SPARC システムを用意します。 今回は以前 NetBSD-1.2.1 で運用していたマシンのアップグレードなので、 SPARCstation IPX がそのままターゲットマシンです。 1.1. 配布しているところ 今回インストールした時点 ( 1998/3 下旬 ) での最新は NetBSD-1.3.1 です。 また、NetBSD の公式 WWW サイトには、NetBSD の 配布 CD の入手方法もあります。 こちらは、 http://www.netbsd.org/ をご覧下さい。 また、国内の ISP が運用する anonymous ftp サイトにもあります。 私は ftp://ftp.iij.ad.jp/pub/NetBSD/NetBSD-1.3.1 からバイナリを取得してインストールしました。 ftp://ftp.dti.ad.jp/pub/OS/NetBSD/NetBSD-1.3.1 にも 1998/03/25 現在存在することは確認しています。 1.2. 配布ファイルのコピー 今回はアップグレードインストールということで、 配布物はすべてどこかのファイルシステムにコピーしてしまうことにしました。 幸いにも使用していたファイルシステム中には 100MB 以上の空きがあります。 すべてのバイナリ配布を取得しても、30MB くらいなので全く問題はありません。 今回はパーティションを切り直す予定もないので、 単純にアップグレードすることにしました。 但し、インストール自体はアップグレードインストールにはしません。 /etc 配下のファイルの扱いがちょっと変更されているからです。 NetBSD-1.3 では、/etc 配下のスクリプトに対し、*.conf という形で 動作の設定ファイルが用意されるようになりました。 例えば rc に対しては rc.conf daily に対しては daily.conf 等と、スクリプト内で動作するする、しないや、そのためのフラグ値等を *.conf で設定するようにしてあります。 そこで、現在のところたいしたものが動作しているわけではないので、 クリアインストールにしてしまいたかったのです。 /export ファイルシステムに NetBSD-1.3 というディレクトリを作り、 そこにすべての配布ファイルをコピーしてしまうことにしました。 ディレクトリ配下の構造は ftp サイトにあるものと同一としました。 2.3. インストールの計画 さて、インストールとなるわけですが、 基本的には NetBSD-1.2.1 での手順と変わりません。 そこで、今回注意した点を記述することにとどめておきます。 1) 現在あるファイルシステムで、データしかない部分は保存する これは簡単で、インストール途中のファイルシステム指定部分で、 保存するパーティションを指定しなければいいわけです。 ちなみに NetBSD-1.2.1 のときは次のように構成していました。 /dev/sd0a / ffs rw 1 2 /dev/sd0b swap /dev/sd0g /usr ffs rw 1 2 /dev/sd0d /usr/local ffs rw 1 2 /dev/sd0e /var ffs rw 1 2 /dev/sd0f /export ffs rw 1 2 /dev/sd0h /home ffs rw 1 2 このうち、/export と /home は以前のデータを残したいので、 インストール対象に指定しません。 (/export には NetBSD-1.3.1 の配布ファイルも入れてありますし) また、/usr/local も保存してもよいのですが、 アプリケーションを再構成する予定でいたので、保存しないことにしました。 2) /etc 配下の変更したデータは、すべて保存する あとでシステム情報を回復するために必要です。 ついでにプリントアウトしておくとなにかの拍子に消してしまっても安心です。 これらの点に注意を払いながら、インストールしていきます。 2.4. インストールのキモ 手順について重要と思われるちょっとだけ書きます。 1) fstab の指定時 ここで選択したものが newfs の対象になります。 よって、先に保存する予定にしていたパーティションを fstab に記述しては いけません。 ----------------------------------------------------------------------- The fstab is configured as follows: /dev/sd0a / ffs rw 1 2 /dev/sd0g /usr ffs rw 1 2 /dev/sd0d /usr/local ffs rw 1 2 /dev/sd0e /var ffs rw 1 2 /dev/sd0f /export ffs rw 1 2 /dev/sd0h /home ffs rw 1 2 You may wish to edit the fstab. For example, you may need to resolve dependencies in the order which the filesystems are mounted. Note that this fstab is only for installation purposes, and will not be copied into the root filesystem. Edit the fstab? [n] y (vi 上で /dev/sd0f の行をコメントアウトする) ----------------------------------------------------------------------- 2) 配布ファイルのあるディスク newfs 終了後、各ファイルシステムが /mnt 配下にマウントされ、 インストール対象となります。 そのあと、インストール元とするものをどうするかを訊かれます。 ディスクにすべて格納してあるので d を選択します。 ----------------------------------------------------------------------- Checking filesystem integrity... /dev/sd0h ** /dev/rsd0h ** File system is already clean ........ ** Phase 5 - Check Cyl groups 708 files, 13061 used, 18906 free (58 frags, 2356 blocks, 0.2% fragmentation) Done. exec: mount_ffs /dev/sd0a /mnt /dev/sd0a on /mnt type ffs (local) exec: mount_ffs /dev/sd0g /mnt/usr /dev/sd0g on /mnt/usr type ffs (local) exec: mount_ffs /dev/sd0d /mnt/usr/local /dev/sd0d on /mnt/usr/local type ffs (local) exec: mount_ffs /dev/sd0e /mnt/var /dev/sd0e on /mnt/var type ffs (local) Are the upgrade sets on one of your normally mounted (local) filesystems? [y] n It is now time to extract the installation sets onto the hard disk. Make sure the sets are either on a local device (i.e. tape, CD-ROM) or on a network server. Install from (f)tp, (t)ape, (C)D-ROM, (N)FS or local (d)isk? d ----------------------------------------------------------------------- このあと、先に配布ファイルをコピーしてあるパーティションを指定します。 今回おいてある場所は sd0f なので、次のような入力になります。 ----------------------------------------------------------------------- The following disk devices are installed on your system; please select the disk device containing the partition with the installation sets: sd0 Which is the disk with the installation sets? [abort] sd0 Partition? [d] f The following filesystem types are supported: 1) ffs Which filesystem type? [ffs] ----------------------------------------------------------------------- このファイルシステムは /mnt2 に新たにマウントされ、 そこに存在するディレクトリがリストされます。 ここで先にコピーしたパス名をカレント (/mnt2) からの相対パスで指定します。 今回は NetBSD-1.3/sparc/binary/sets になるはずです。 ----------------------------------------------------------------------- The directory at the mount point, "/mnt2", contains: 2.1.7.1-RELEASE/ NetBSD-1.3/ src/ tmp/ Enter the subdirectory relative to the mountpoint, that contains the savesets: [try this directory] NetBSD-1.3/sparc/binary/sets ----------------------------------------------------------------------- パスがうまくみつかれば、次のようにリストされるでしょう。 ----------------------------------------------------------------------- The following sets are available for extraction: (marked sets have already been extracted) base.tgz comp.tgz etc.tgz games.tgz man.tgz misc.tgz text.tgz Continue extraction [y]? y ----------------------------------------------------------------------- このあとは指示に従ってインストールを続けましょう。 3) 環境の回復 インストールが無事終了し、正常にブートすることが確認できたら、 保存してある /etc 配下のファイルを見ながら以前の動作環境を戻しましょう。 group passwd 等に関してはそのまま戻してもちゃんと動作します。 rc 等については扱いが変わっていますので、以前のファイルを参照しながら、 見合うように修正していくほうがよいでしょう。 そして、/etc/fstab にデータを残しておいたファイルシステムを記述することを 忘れないようにしましょう。 3. アプリケーションのインストール NetBSD も 1.3 になって、package が揃ってきているようで、 一から構築する必要はなくなってきています。 今後もこのようなうれしいサービスは増えると思いますが、 私がやってみたものを記述しておきます。 あくまで、私が 「そうか、こうすれば動くのか、しめしめ」 と思うためのもので、もっと正しい対処法があるのかもしれません。 そういうのを知っていらっしゃる方は教えて頂けると喜びます。 3.1. X11R6.3 (fix02) IPX で make World すると時間が掛かりますので、あんまり失敗したくないですね。 ちなみに、 make World >& World.log に記録されたところによると、 開始: Wed Mar 25 21:57:20 JST 1998 終了: 608779 Mar 26 03:03 World.log とのことなので、5 時間は掛かります。 1) site.def X11R6.3 では、xc/conf/cf/NetBSD.cf には NetBSD-1.2 のことしか書いてませんでした。 また、コンパイラ cc はどうせ gcc なので、 最初っから gcc でいってもらうように記述します。 site.def に次の行を足しておきます。 ---- #ifndef HasGcc2 #define HasGcc2 YES /* コメント扱いされているので外します */ #endif #define NetBSDArchitecture #ifndef OSName #define OSName NetBSD 1.3.1 #endif #ifndef OSMajorVersion #define OSMajorVersion 1 #endif #ifndef OSMinorVersion #define OSMinorVersion 3 #endif /* 1 = A, 2 = B, 3 = C */ #ifndef OSTeenyVersion #define OSTeenyVersion A #endif ---- 2) xc/programs/xdm/Imakefile xdm の make 環境が -lcrypt を認識してくれませんでした。 そこで、xc/programs/xdm/Imakefile を見てみると次のようになっていました。 xc/programs/xdm/Imakefile:62 ---- #if (defined(XFree86Version) && HasLibCrypt) SYS_LIBRARIES = -lcrypt #endif ---- これでは SPARC 上の NetBSD では認識してもらえそうもありません。 そこで、次のように変更してしまいました。 ---- #if (defined(XFree86Version) && HasLibCrypt) || \ defined(NetBSDArchitecture) SYS_LIBRARIES = -lcrypt #endif ---- 3.2. Canna32p2 FreeBSD や NetBSD での注意点 (_BSD_WCHAR) についての通りにやれば 特に問題はありません。 私はシステムの stddef.h 等を書き換えることをためらったので、 make includes 後に cp /usr/include/stddef.h /usr/include/stdlib.h ./include する方法を取りました。 3.3. mule-2.3 お決まりの手順で ./configure --オプションづらづら とやると、src/gmalloc.o でエラーを起こします。 調べて見ると、mule にバンドルされる getpagesize() を使おうとして、 そのためのシンボルがみつからない、と言われている様子です。 システムに getpagesize() がありますので、 configure のあと、src/config.h に次の行を足して make しました。 src/config.h:37 ---- /* Define GNU_MALLOC if you want to use the *new* GNU memory allocator. */ #define GNU_MALLOC 1 #define HAVE_GETPAGESIZE 1 /* これを追加 */ ---- 3.4. kinput2-v2 単純に xmkmf -a make install ですね。 但し Canna のみの設定にしていますので、Wnn, sj3 については知りません。 3.5. kterm-6.1.0 なんでいまさら kterm-6.1.0 なのかというと、手近にあったのがそれだから。 で、 misc.c: 768 ---- extern char *sys_errlist[]; extern int sys_nerr; ---- が余計です。 /usr/include/errno.h に ---- #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) extern __const int sys_nerr; extern __const char *__const sys_errlist[]; #endif ---- のような define がありますので、これの逆を定義して回避します。 ---- #if defined(_ANSI_SOURCE) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) extern char *sys_errlist[]; extern int sys_nerr; #endif ---- あとは xmkmf -a make make install で OK です。 多分 kterm-6.2.0 であれば、こんなことも必要ないでしょう。 3.6. perl-5.004_04 Configure をすべてデフォルトの定義にして make すると、 make test でいくつかのエラーが発生しました。 で、単純に -O を外したら make test が正常に動くようになりました。 オプティマイズになにかまずいところがあるのでしょうか? ちなみに NetBSD-1.3.1 に含まれる cc は、 gcc version 2.7.2.2+myc1 だそうです。 3.7. elvis-18 + e18p4j10.dif NetBSD 標準の /usr/bin/vi では日本語を扱うことができませんので、 日本語を扱えるエディタとして elvis を入れました。 elvis は elv18p4 + 日本語パッチです。 日本語パッチを当て、Makefile 中の 386BSD の項を有効にすれば 特に問題なく構築できます。 3.8. oneko-2.0b-pop Pop な Oneko もいれてみました。 基本的にはパッチを当て、そのまま make できるようです。 私の場合はビットマップを入れるディレクトリを変更しているため、 Imakefile を少し書き直しましたが。 また、これであらためて気がついたのですが、 ocha*xbm 等がこのままではインストールされないのですね。 NetBSD とはぜんぜん関係がない oneko の問題を発見してしまいました。 とりあえず、おしまい。