私のメモです。参考になればいいですが、間違っていたらごめんなさい。
○戯れ言
上はおもいっきり間違いが多いです。下を参考にしてください!
○戯れ言2
コピー機やルーターなど、組み込み用途に使用されることの多い
NetBSD。
最近、Debianのパッケージ管理システム
「apt」を採用することを表明し、ports collectionよりも楽にパッケージ管理が出来るかも知れないと、
最近はちょっと注目されている。空きスペースを見つけたので、
早速NetBSD-1.5.2をインストールしてみることにした。
まず、ftpサイトからisoイメージをゲットしてきてCDに焼いた。 これを使ってインストールしようとしたが、拡張領域からBSD OSは起動できないことから、 次のような移動を行った(Debianの移動方法はLinuxの備忘録を参照)。
パーティション 移動前 移動後
1 FreeBSD(/ ) 同左
2 FreeBSD(/home) OpenBSD(予約)
3 Debian NetBSD
4 拡張(Kondara) 拡張(Kondara、Debian)
第2のパーティションにFreeBSDの/homeディレクトリがあった。
これを第1のパーティションに移動させる方法は下の通りである。
XOSLに付属する
SBMを使ってCD-ROMから起動する。
FreeBSDのように/stand/sysinstallのような画面が出る。
そこの一番上にある「Installなんたらかんたら」を選択してインストール開始した。
まず、パーティションを選択するところが出てくるが、すでにDebianのfdiskで
NetBSDパーティション(a9)を作成したため、ここは適当に流す。
ちなみにKondara(Asumi)のfdiskではNetBSDのパーティションがまだサポートされていないようだ。
次に第3のパーティションにスライスを切る。
インストーラのおすすめのスライスのサイズと僕が選択したスライスのサイズは下の通りである。
スライス おすすめ 僕の選択 マウントポイント
a 1024MB 1024MB /
b 2024MB 512MB swap
c ここは第3パーティション全体を示すため編集しない
d 使われていない ←
e 1432MB 2500MB /usr
f 使用しない 344MB /home
ここでビックリしたのは、NetBSDのパーティション操作は全てバイト(又はMB)単位で行うことである。
あらかじめfdiskでシリンダー番号などを控えておいたのだが、
シリンダーで入力するところはパーティション作成のところだけであった。
次にインストールするパッケージの選択へ行くのだが、その前にマスターブートレコードに
ブートセレクタを入れろとか、起動するシリンダが1024を越えているとか言われるが、
ブートマネージャーを使っているので全てNoを選択した。
すると今度は「もう一度MBRとスライスを編集する」or「スライスを編集する」or
「どうしてもインストールする」のどれかを選択することになる。
ここで「どうしてもインストールする(Install it anway)」を選択してようやくパッケージの選択になった。
パッケージの選択肢は4つしかないので、Xを含むものをインストールした。
そして無事インストールは終了し、再起動後にNetBSDが立ち上がった
さて、インストールも終わったのでパッケージをインストールしようと思ったが、
インストールCDには
ホントにbaseシステムしか入っていない。そこでWebで調べてみると、FreeBSDのports collectionと同じものがあり、
名前がpkgsrcというらしいことが分かった。
まずはpkgsrc.tar.gzをダウンロード。
しかし、この時点でNetBSDでの拡張領域のマウント方法を知らないため、
いったんFreeBSDで拡張領域とNetBSDをマウントして/etcにコピーした。再びNetBSDで立ち上げて、
# cd /etc
# mv pkgsrc.tar.gz /usr
# cd /usr
# tar zxvf pkgsrc.tar.gz
で/usrディレクトリ以下にpkgsrcが展開された。
まずは慣れないcshをやめてbashをインストールする。
(参考:NetBSDパッケージコレクションの使用)
# cd /usr/pkgsrc/shells/bash2 # make fetch-list | sh ----依存のあるファイルのダウンロード # make ----パッケージのmake # make install ----makeしたパッケージのインストール # make clean CLEANDEPENDS=YES ----依存するものも含めて作業ファイルの削除
とりあえず、bashの他にlynxも入れた。
NetBSD-1.5.2のアナウンスに よると、1.5.2ではXFree86バージョン3.36と4.1.0の両方がサポートされているらしい。 アナウンスページを頼りに、をダウンロードしてくる。 このインストール方法は、同じディレクトリにある READMEファイルに 書かれていて、以下の通りである。
# tar plzxvCf / xfree410.tgzうーん、これって単に/以下に展開しているだけなんだが。。。
上記のようにXをインストールした気になっていたが、
どうみてもagpデバイスが見付からない。そこでネットで検索すると、
やはりカーネルにagpの使用を明記する必要があるようだ。
そこで次の1行をカーネルコンフィグレーションファイルに追加してコンパイルした。
# agp* at pchb?
アップグレードの方法は下の通り。
僕は間違えてa,bを放置したまま再起動してしまったので、見事マルチユーザモードに入れなかった。
仕方無いのでFreeBSDの方からrc.confを編集して何とか無事に再インストール完了した。
agpデバイスの組み込み方を調べていると、どうやらpkgsrcやカーネルソース
(/usr/src/sys)とは別にXのソースツリーがあることが分かった(恐らくXFree86-4のためのツリー)。
そこでそれらのソースを一挙にアップデートするsupを用いることにした。
これはFreeBSDのCVSupに対応するもののようだ。
supの設定ファイルは、/usr/share/example/supfiles以下に各supサーバーごとのサンプルがある。
もちろん日本語のsupファイルサンプルもあったので、それをコピーしてsupを実行した。
# cp /usr/share/example/supfiles/sup.jp.netbsd.org /etc/supfile # sup -v /etc/supfile
-vは詳細な出力をするためのオプションである。
で、これを実行したんだけど、延々とsupを続けていてなかなか終わらない(^^;;;;
(初めては変更点が多いから)
supで更新までしたのだが、1.5.2のagpのロード方法を調べていたら、 loadable kernel moduleを使うとデフォルトでagpがロードできることが分かった。 そうとも知らず、いろいろ余計なものをインストールしてしまったので、 もう一度クリーンインストールしようとして、パーティションを壊してしまった。 と言うわけで、もう一度振出に戻る。 パーティションを壊す前にXの起動手順は分かったので、まぁ、良としましょう。
今回は、NetBSDのパーティションをセカンダリの第二パーティションにした。 fdiskの結果は下のとおりである。

上記のa9がNetBSDのパーティションである。
今回のスライスは下の通り。
前回、MB単位でしか指定できないと思っていたが、実はちゃんとシリンダでも入力できた。
(どの単位でパーティションを切るかを聞かれるところで指定すれば良い)
NetBSDではスライスを切る際には、注意が必要である。(そしてこれがパーティションを破壊した原因である)
FreeBSDやOpenBSDでは、そのOS用に指定したパーティション内でしかスライスを切れないようになっているが、
NetBSDはNetBSD用のパーティションを越えてスライスを切れてしまう。
このようにして切ったスライスにインストールしても、パーティションテーブルを破壊するのか、
起動はできないのだが。。。
具体的に今回作成したスライスを例に説明する。
スライスcがNetBSDパーティションを表し、これはセカンダリディスクのオフセットが
9767520位置から始まり、1861640(=始点9767520+サイズ9767520)で終っているを示す。
この範囲内でスライスを切らなくてならないため、スライスaのオフセットは0ではなく9767520である。
スライスaのサイズを2048256にしたならば、swap(スライスb)を作成する際のオフセットは、
スライスaの終点11815776(=aのオフセット9767520+サイズ2048256)を始点にする必要がある。
スライスe,fに関しても同様である(スライスdはセカンダリディスク全体を示す)。
要するに、NetBSDでのスライス作成は、必ずディスク全体でのオフセットをいれなくてはならないということである。
# size offset fstype [fsize bsize cpg/sgs] a: 2048256 9767520 4.2BSD 1024 8192 16 # (Cyl. 9690 - 11721) b: 1228752 11815776 swap # (Cyl. 11722 - 12940) c: 9767520 9767520 unused 0 0 # (Cyl. 9690 - 19379) d: 90069840 0 unused 0 0 # (Cyl. 0 - 89354) e: 5119632 13044528 4.2BSD 1024 8192 16 # (Cyl. 12941 - 18019) f: 1370880 18164160 4.2BSD 1024 8192 16 # (Cyl. 18020 - 19379)
これは前回と同じなので割愛。
前回のインストール時にはxfree-4を入れたが、それは大きな間違いであった。
i815でXを起動するには、次の手順を踏めば良い。
# path options entry postinstall output when /lkm/agpgart.o - - /lkm/agpgart_install - -
NetBSD AGP GART interface v0.03 (c) Jeff Hartmann -- Experimental distribution, only i810 enabled Got pages for a 64 megabyte mapping for the agp aperature. i810_configure
Xの設定は、XF86Setupで普通に行えば良いのだが、ホイールマウスを有効にするには Pointer Sectionを次のようにはする。
Section "Pointer" Protocol "wsmouse" Device "/dev/wsmouse0" ZAxisMapping 4 5ちなみにNetBSDでの僕の設定は、次のリンク先の通りである。
ハードディスクが戻ってきても、日本語環境の構築が面倒なので 暫くはNetBSD、OpenBSDともインストールする気にならなかった。でも、他のOSが 一段落付いたら”退屈の虫”がうずきだし、再びNetBSDを入れてしまった。
どこまで出来るかは不明だが、Xで日本語環境を整えてみようと言う 初心者には壮大な計画を進行することにした。
これはWebで検索したら一発で見つかった。 tackさんのウェブページ のキーボードが変 によると、次のコマンドでjp106キーボードに変更できる。
# wsconsctl -w encoding=jp
これを/etc/rc.localに記述すると、起動時に日本語キー配列になる。
インストールして放置されていたNetBSD1.5.2は、 USBデバイスを動かそうとした際に、 VineLinuxをインストールするために削除してしまった。「日本語環境を構築するぜ!」と 大見得を切ってみたが、かなり面倒そうであったのでいっそのことmultilingauge 対応の1.6のスナップショットを入れてみることにした。しかも、1.6ではagpgartに対応にもagcデバイス が対応しているのでXをi815で使うのにも苦労はなさそうだ。
NetBSD1.6はまだリリースされていないので、NetBSD-Currentのスナップ ショットとして入手する。Currentのスナップショットは、一般的には次の場所にある。
{ftpサーバ}/pub/NetBSD/arch/{CPU名}/snapshot
僕のPCはPentiumIIIで1.6のスナップショットが欲しいので具体的には 次の場所になる。
{ftpサーバ}/pub/NetBSD/arch/i386/snapshot/20020807-1.6E
上記のftpディレクトリに行くと、binary、installation、sourceという 3つのサブディレクトリが見える。インストールに必要なものは、installation/floppyに あるboot*.fsというファイル(bootイメージ)である。 PC環境によってどれを落とすかが決まるのだが、普通のデスクトップPCなので 僕はboot1.fs、boot2.fsを落とした。
落としたbootイメージをフロッピーに書き込むには、Windowsならば installation/miscにあるRawrite32(rawr32.zip)を使うと楽である。rawr32.zipを ダウンロード後、解凍して出来るRawrite32.exeをダブルクリックするとRawrite32が 起動する。起動したRawrite32のウィンドウに、boot1.fsをドラッグ&ドロップし、 フロッピードライブにフロッピーを入れて「Write to Disk」ボタンを押すとインストール フロッピーができあがる(もちろんboot2.fsも同様)。
bootフロッピーができたので、次にインストールである。領域の作成は
1.5.2とほぼ同様である(参照:前々回、
前回)。インストールCDを使ったインストールは、パッケージ
をCDから読みとるので楽だが、bootフロッピーを使った場合はネットワークを介して
インストールすることになる※。
※ハードディスクなどの記録メディアにbinary/sets以下のファイルをコピーしておけば、
その記録メディアをマウントしてそこからインストールすることも出来ると思われる。
1.6Eのインストーラでは、ブートセレクタをインストールするかと聞かれるが、 マルチブートにしているのでどちらも”No”を選択した。また、normalとserialどちらの ブートローダを使うかと聞かれたが、意味は知らないけどnormalを選択した。
パッケージの選択では、全てを選択した。1.5.2ではXFree86が3.3.6だったり、 agpgartをカーネルがサポートしていなかったりでi815では苦労したが、 1.6ではagpgartが標準でサポートされ、XFree86は4.2.0なので僕のi815でもすぐにXが 使えるからである。
さて、次のネットワークの設定→ネットワークインストールになる (設定の詳細は割愛)。NetBSDのインストールで特徴があるのは、ネットワークの設定の 確認を、設定されたDNSサーバにpingを打って確認することである。 僕はYahoo!BBのADSLなのだが、 このDNSサーバはpingに応答しないため、前記の確認では必ずエラーになる。そのような DNSサーバを使っている人は、他のOSなどでネットワークが正常に動いているようなら 無視して進めば良い。
ネットワークの設定が終わると、ftpサーバの設定になる。 今回はDTIの ftpサーバを使ったので、次のように設定した。
Host: ftp.dti.ad.jp
Directory: pub/NetBSD/arch/i386/snapshot/20020807-1.6E/binary/sets
これでネットワークからインストールが開始する。
インストール中にタイムゾーンを設定するのだが、カーネルが PCのCMOSの時間をUTCと認識しているため、JSTを選択すると+9時間になってしまう。 これは次の方法で修正可能である。
|
# cp /netbsd /netbsd.bak # gdb --write /netbsd (gdb) set rtc_offset=-540 (gdb) quit |
また、カーネルの再構築を行うなら、次のオプションを付ければ良い。
options RTC_OFFSET=-540
NetBSD 1.6系ではagpgartに対応しているので、パッケージでXを入れて しまえば、i815でもXの設定をするだけでXが起動する。僕は面倒なので設定が終わっている FreeBSDのXF86Configを持って来た。NetBSD固有の設定として、wsmouseを使って いるならばPointerセクションを下のようにする必要がある。
|
Section "InputDevice" # Identifier and driver Identifier "Mouse1" Driver "mouse" Option "Protocol" "wsmouse" Option "Device" "/dev/wsmouse" Option "ZAxisMapping" "4 5" EndSection |
これは前々回に書いたとおり、pkgsrc.tar.gzを 用いた(別の方法では、pkg_addコマンドにURLという方法もある)。pkgsrc.tar.gzを /usrディレクトリで展開すればインストールされる。※
# mv pkgsrc.tar.gz /usr
# tar zxvf pkgsrc.tar.gz
また、カーネルソースsyssrc.tgzはルートディレクトリ/でインストールする。
# mv syssrc.tgz /
# tar zxvf syssrc.tgz
※とは言っても、先にpkgsrc.tar.gzをダウンロードしなくてはならない。
そのため、まずpkg_addコマンドでwgetをインストールした後、wgetでpkgsrc.tar.gz、syssrc.tgzを
落とすことになる。
# wget {ftpサーバ}/pub/NetBSD/packages/pkgsrc.tar.gz
# wget {ftpサーバ}/pub/NetBSD/arch/i386/snapshot/20020807-1.6E/source/sets/syssrc.tgz
pkgsrcをインストール後、bash、xfce、mozilla、sylpheed、kinput2、 canna-serverをインストールした。cannaserverをOS起動時に起動するため、/etc/rc.localに 次の行を書き加えた。
if [ -f /usr/pkg/sbin/cannaserver ]; then
/usr/pkg/sbin/cannaserver
fi
もし、cannaserverの起動で「Initialize failed」というメッセージが でるようなら、pkgsrc/inputmethod/canna-dictをインストールすれば無事に起動する。
カーネルがmultilingualeをサポートしているので、後はLinuxやFreeBSDと 同じである。xfceの日本語化は、Gentoo Linuxの場合 と同様に.xinitrcに下の行を書き加えることで可能であった。
|
# Setting locale export LANG=ja_JP.eucJP export LANGUAGE=ja # Setting kinput2 and Canna if [ -f /usr/X11R6/bin/kinput2 ]; then kinput2& export XMODIFIERS=@im=kinput2 fi |
これは簡潔且つ必要十分なガイドがNetBSDにあるのでそれを 参考にしてやった。
# cd /usr/src/sys/arch/i386/conf
# cp GENERIC MYKERNEL
# vi MYKERNEL
もしGENERICカーネルで問題なく動いているようなら、MYKERNELの不要箇所
をコメントアウトすればいい。コメントアウトして良いかどうか分からなけ
れば、
# dmesg |grep 文字列
でデバイスがカーネルに認識されているかどうか確認すれば良い。
また、時間の修正で述べたように、rtc_offset=-540 を付けた方が日本の場合は良いと思われる。
options RTC_OFFSET=-540
PS/2キーボードで日本語106を使うなら、次のオプションを 付けておくと、コンソールでのキーボードが日本語キーボードになる
options PCKBD_LAYOUT=JP
但し、これはUSBキーボードではちゃんと働かないようだ。。。
# config MYKERNEL
# cd ../compile/MYKERNEL/
# make depend
# make
# mv /netbsd /netbsd.bak
# cp netbsd /netbsd
# reboot
Xを上記のように設定していれば、マウスも問題なく
挿抜できる(SANWAの5つボタンマウス
MA-5UPOSもOK)。
但し、1.5.3のXの設定のようにwsmouse0とすると、 活線挿抜できなくなるので注意が必要である (最初これにはまった。。。たぶんPS/2マウスの場合に0が付くようだ)。
さらに、Nikon coolpix E775の活線挿抜を行ったところ、 messegeでは”could not 〜”とか言っているが、/dev/sd1と認識しているようだ。 そこで、次のコマンドを実行したところ、無事にマウント出来た。
# mount -t msdos /dev/sd1e /mnt/nikon
マウントできたので、デジカメから画像ファイルを移動したところ、ちゃんと Gimpで画像が表示された。FreeBSDと違って活線挿抜まで出来るとは、NetBSD恐るべし!
マウントしたいFAT領域がNetBSDと同じハードディスクにあれば、 NetBSDのFAQ が参考になる。もし、同じハードディスクになかったら?僕はマウント出来なかった。 以下、やったことを参考までに書いておくことにした。
ウェブを検索すると、 K's PageのNetBSDに関する記述 が見つかる。その中の、BSD パーティションの作成・変更 が、NetBSDが入っていないハードディスクのパーティションをマウントする方法である。
結論から書くと、前記の方法でやるとdisklabelを編集したハードディスクの mbr(たぶんパーティションテーブル)が上書きされる。データしか入っていないディスクなら あまり問題無いが、マルチブート環境のプライマリディスクのマスタディスクの場合(=僕の場合) 、ブートセレクタも消えることになる。
これはLinuxのfdiskなどでパーティションの情報を保存しておけば復旧は可能 だが、今度はせっかく作ったdisklabelが消えてしまう。結局、NetBSDがプライマリのマスタの ディスクにインストールされていなければ、マルチブートを保ったままハードディスクの FAT領域をマウントすることはできないと思われる。これはおもいっきり不便だなぁ。。。
以下、作業内容
まず、RamFloppyなど のLinuxでfdiskを実行し、復元用に各領域のシリンダなどを控えておく。 また、Windowsの起動ディスクも必要になるかも知れない。これらを準備した上で 実行する。
# mbrlabel wd0 > wd0.mbrlabel
# disklabel wd0 >original.disklabel
# cp original.disklabel temp.label
# vi temp.label (wd0.mbrlabelを参考に編集)
# disklabel -R -r wd0 temp.label
ここでYesと答えると書き込まれる。
上記の設定が終われば、マウントしたい領域に対応するデバイスを mount -t msdosでマウントできるようになる。 そして、リブート後はブートセレクタが消えていて立ち上がらない。。。
上の状態では、パーティションテーブルにdisklabelが書き込まれている。 そのため、BSDパーティションを有効にしたLinuxのfdiskでは、disklabelが見えてしまい 編集しようとするとエラーになってしまう。disklabelを無効にするには、Windowsの 起動ディスクのfdiskを使えばいいように思われるがそれは危険である。というのは、 Windows版のfdiskではパーティションが見つからない。この状態では、何かパーティションを 作成しない限りパーティションテーブルが上書きされることはない。 そこで、パーティションを作ればいいのだが、復元したいパーティションとパーティションの 位置、大きさ、タイプが合わないと、Linuxのfdiskで復元しても壊れている可能性がある からだ(Windowsのfdiskもパーティションテーブル以外をいじらないなら問題ないのだが、 僕にはどうなのかは不明である)。そこで、次のようにNetBSDで元のdisklabelを書き戻し て復元する。
# disklabel -R wd0d original.disklabel
# disklable wd0
0: (unused)
1: (unused)
2: (unused)
3: (unused)
0から3がunusedになっていれば、後はLinuxのfdiskでメモっておいた 元々のパーティションになおして上げれば良い。
NetBSDドキュメントの NetBSD-currentの追跡を参考に、カーネルだけではなくシステム全体のアップデートを行った。 NetBSD-currentの追跡を見れば済むことだが、僕なりの解釈(誤解かも?)を交えて書いてある。
まず、ソースファイルを取得しなくてはならない。CVSなどでCVSツリーに 変更を加えるのではなく、単にCVSツリーを自分のPCに取り込みたいだけなら、一緒にpkgsrc も更新できるsupが楽だと思う。 currentのソースを/usr/src以下に取り込むには、設定ファイル(supfile)を /usr/local/example/sup/以下にあるファイルを適当なディレクトリにコピーすれば良い。
# cp /usr/share/examples/supfiles/sup.netbsd.org
/etc/supfile
# sup -v /etc/supfile
これで/usr/src以下に配布物のソースツリーがCVSサーバからコピーされる。
supが終了したら、 NetBSD-currentの追跡の通り、次のようにして配布物を構築する。
# cd /usr/src
# ./build.sh -d -D DESTDIR -R RELEASEDIR
もし、以前に./build.sh〜を実行していると、途中でエラーになるようだ。 そんなときは、先に/usr/src/DESTDIRと/usr/src/RELEASEDIRを削除してから ./build.sh〜を実行すると良い。
新しいカーネルにしてから配布物をインストールするのだが、 新しいカーネルは”現在”のシステムではコンパイルできないかも知れない。 そのため、新しいカーネルをコンパイルするためのtoolを構築する。
# cd /usr/src
# ./build.sh -t
この際にエラーが出てコンパイルが止まるようなら、/usr/obj/*を 削除してから上記を実行すると良い(/usr/src/objは/usr/objへのシンボリックリンク)。
これで新しいカーネルのコンパイル準備が出来たので、次のようにして 新しいカーネルを作る。
# cd /usr/src/sys/arch/i386
# /usr/src/tools/tools.i386-NetBSD1.6J/bin/nbconfig GENERIC
# cd ../compile/GENERIC
# /usr/src/tools/tools.i386-NetBSD1.6J/bin/nbmake-i386
# cp /netbsd /netbsd.back
# cp netbsd /netbsd
# reboot
再起動して新しいカーネルで立ち上がった後、次のようにして配布物を インストールし、システム全体をアップデートする。
# cd /usr/src
# ./build.sh
これまででシステム、カーネルはアップデート出来たのだが、 /etc、/devなどはアップデートされない。これをやってくれるのが、etcupdateである。 といっても、NetBSDの配布物に入っているのでは無いので pkgsrcからインストールする必要がある。
# cd /usr/pkgsrc/sysutils/etcupdate
# make install clean
etcupdateのインストールが終了した、次のようにして/etc、/devなどを アップデートする。
# cd /usr/src
# etcupdate
etcupdateで、元ファイルと新規フィアルに差があると、元ファイルの 記述は”-”で、新しいファイルのは”+”で示される。単に+しか無いなら、”i”を選択 してインストールすればよい。やばいかな?と思ったら、何も入力せずにリターンキーを 押して、元ファイルをそのままにしておけば良い。新しいファイル群は/tmp/temproot以下 にあるので、後からじっくり見てどうするかを決めればいいからである。(但し、etcupdate を実行する前に再起動してしまうと/tmp以下が削除されてしまうので注意)
せっかくシステムを更新したのだから、pkgsrcでインストールした ものもアップデートしたくなる。そんなときに便利なのが、pkglintである。 これはpkgsrcから次のようにしてインストール出来る。(参考: NetBSDパッケージコレクション)
# cd /usr/pkgsrc/pkgtools/pkglint
# make install clean
pkglintがインストール出来たら、次のコマンドでバージョンアップ しているpkgsrcを知ることが出来る。
# lintpkgsrc -i
これで表示されたパッケージをアップデートしていけばよい。 例えば、gimp-baseが表示されたら、次のようにしてアップデートする。
# cd /usr/pkgsrc/graphic/gimp-base
# make update
アップデートする数が多いとちょいと面倒だが、これでpkgsrcも アップデート出来る。ちなみに2002年10月26日現在ではNetBSD-1.6Jである。