NetBSDに限らず、他のディストロでもインストールするにあたっては、インストーラ(NetBSDの場合、sysinst)を使うのが手軽かつ妥当な状況が多いかとは思いますが、ここでは、敢えて、これを使わずにNetBSDをインストールする方法について記します。
と言っても既にAppendix B. sysinst を使わないインストールや移植性の高いNetBSDらしく"netbsd" "sysinst" "使わ(ない|ず)"をキーにぐぐるといくつか情報も見つかるわけですが、例えば、NetBSDをディスク全体にインストールする場合、fdiskを使わず、disklabel、はたまた、newfsをいきなり実行とか、tarballの展開にpaxを使うとか、数通りの微妙に異なる方法がある模様。
そこで、ここでは、NetBSD単独でディスク全体を使うなら、また、NetBSDの標準ブートセレクタしか使わないならまだしも、とは言え、ここでは使いませんが、マルチブートでGRUBなど他のブートローダを使う可能性なども考慮し、fdiskを使い、ftpコマンドでリポジトリからtarballを取得、展開には、tarを使用する前提でその方法について書いてみようかと。
あとは、04. NetBSDの起動....という流れになります。
尚、再起動後、中身を確認したいなどの理由がなければ、既に展開済みであれば、ダウンロードした各種tarballは削除しても構いません。
『インストールの流れ』に沿った実作業が以下。
NetBSDのインストーラ(sysinst)やNetBSDインストール済みのLive CD、Live USBなどを起動(当ページ末尾各種リンク参照)、sysinstの場合、使用する言語、キーボード設定後、メニューから、もしくは、[Ctrl]+[C]などでシェルに抜けます。
シェル上の操作性は、いつもの環境に合わせたいという場合、set -oで確認するなどして必要に応じて設定。
個人的には、好みのエディタはviも、シェル上の操作は、履歴も利用できるemacsモードでタブ補完も欲しいのでtabcompleteもONに設定(逆か?とも思えるが、setは、[-o]でon、[+o]でoff)。
fdiskコマンドでBIOS/MBRパーティションを作成。
この後設定するブートローダにNetBSD標準のブートセレクタを使う場合には、ここでラベル名を設定しておきます。
ディスク全体にNetBSDのみインストールするのであれば、/usr/mdec/mbrを書き換えるべく[install default bootfile instead ?[n]]で[y]、MBRをアップデートすべく、[Update the bootcode from /usr/mdec/mbr_bootsel? [n]]で[y]しておきますが、そうでなければ、これらを[n](デフォルト)としておき、後にでもGRUB 2など好みのブートローダをインストールするなど適宜設定、何れにしても変更を反映させたいなら、最終的に[Should we write new partition table ? [n]]で[y]とします。
仮にここでmbrやmbr_bootselのところで[y]とした場合でも他のブートローダをインストールするのであれば、その際にこれらは書き換えることができます。
マルチブート構成において既定で起動するOSとして、また、ディスク全体に1つだけOSをインストールする場合には、デフォルトで起動するパーティションであるとわかるようにfdisk -aでアクティブパーティション([Active]を付与するパーティション)を明示的に設定しておきます。
disklabelコマンドでBSDパーティションを作成。
[-I](大文字のアイ)は既存のラベルがなかった(ディスクから読み込むことができなかった)場合にカーネルから要求したデフォルト値を使用するオプション。
[-i]オプションは組み込みエディタで対話的に設定(実行後、[partition >]がプロンプトとして表示される)、本来は、代わりに[-e]オプションを付けると$EDITORに設定済みのエディタで設定できるはずですが、sysinstを使った場合、edはあるもviやemacsはないので実質使えません。
設定は、BSDパーティションとしてa,c,dが必須、bは慣例としてswapとして確保するのが賢明なので結果、ここでは、a,b,c,dが必要。
少なくともNetBSD/i386においては、aはNetBSDのルートパーティション、bはスワップ領域、cは、NetBSD(用のパーティション)全体、dは(NetBSDの他マルチブートしているものがあるならそれも含めた)ディスク全体を表わします。
対話形式で設定することになり、[?]とタイプすると操作方法の一覧が表示されますが、パーティションの内容を追加・変更する場合は、a,c,d,e...などを指定、[Partition size]は、[$]と入力することで空き領域の末尾まで設定することができます。
操作方法の内、PやEとしてBSDパーティションを列挙した時、aがなくeがある場合、eの削除はできませんが、これはインストール後にでも削除するとして、とりあえず、aとタイプしてルートパーティションの開始位置とサイズを、続いてbと入力してスワップの開始位置(aのoffset+size以上)とサイズを用意したBIOSパーティションのサイズの範囲内で設定、この時、cのサイズはBIOSパーティションサイズと異なる場合、開始位置をaと同様にしてサイズを指定・編集(NetBSDのパーティションがルートのみならサイズはc=a、加えてスワップがあればc=a+b、他にもあれば...)。
newfsコマンドでファイルシステムを作成。
newfsのデフォルトのファイルシステムはFFSv1で、これをFFSv2にしたい場合には、[-O]オプションを付けて[-O 2]とします。
ブートローダをインストール。(ちなみに、この時、当該デバイスをマウントしていると失敗する。)
例では、マルチブート構成を想定しており、NetBSDのルートパーティションa(/dev/rwd0a)にinstallbtootしていますが、man installbootのEXAMPLESによれば、ディスク全体にNetBSDだけをインストールする場合には、aではなくディスク全体であるd(i386の場合。一部アーキテクチャでは、cの場合もあり。)としてもよいようです。
installbootコマンドでwd0上でファイルシステムFFSv1としてフォーマットされたマウント済みルートパーティションに(セカンダリブートローダを呼ぶことになる)新たなブートブロックをインストールする。
よってファイルシステム設定時、newfs -O 2とした場合には、bootxx_ffsv1ではなく、bootxx_ffsv2とします。
尚、/usr/mdec以下には、他にもいくつかあります。
ここでは、基本パーティションにインストールすることを想定していますが、man fdiskやman mbrによるとLBA機能がサポートされていれば、ここで、その内の1つ/usr/mdec/mbr_extを使うとNetBSDが論理パーティションにあっても起動できるとのことです。
必要なパーティション(ここではルートパーティションのみ)をマウント。
この後、セカンダリブートローダのコピー、各種tarballをダウンロードしたり、ブートローダをインストールしたりするにあたって、このタイミングでマウントしておく必要があります。
セカンダリブートローダ/usr/mdec/bootをルートパーティションにコピーしておきます。
ここでは、ftpを使ってtarballを入手することを想定しているのでdhclient(or dhcpcd)コマンドで既存のネットワークインタフェースにIPを自動割り当てし、ネットワークに接続、インターネットを利用できるようにしておきます。
認識されているネットワークインタフェース(この例ではmsk0)は、[ifconfig]または、[ifconfig -l]として表示される中から[lo0]以外の適切なものを選びます。(複数あって迷うような状況があった場合は、dhclient/dhcpcdに順次渡して試してみる。)
なんならpingなどで疎通を確認、pingなら[0.0% packet loss]というフレーズがあればOK。
マウントしておいたマウントポイント(必要ならdf -hなどで確認)に移動、ftpコマンドでリポジトリに接続(ちなみにftpサイトの場合、anonymousでもftp://を付けないとパスワードを求められ適当に打って失敗した後ログインとなってしまう)。
目的のtarballのパスである[pub/NetBSD/NetBSD-`uname -r`/`uname -m`/binary/sets](`uname -r`と`uname -m`は例示であってftp中はたぶん自動展開されないので明示的に指定すること)にcdで移動、lsでディレクトリ内を確認、1つずつならgetサブコマンド、複数指定するならmgetサブコマンドで必要なtarballをダウンロード、終わったら、quit。
tarballについては、少なくともbase.tgz、etc.tgzとカーネル(例では、無難なkern-GENERIC.tgz)が必要となります。(全てダウンロードするならftp > mget *.tgzで可)
tarで先にマウントしたルートパーティションのマウントポイントに各種tarballを展開します。(ここでは、/mntは先にマウントした対象ディスク上のルートパーティションのマウントポイント)
尚、[x]はアーカイブの展開、[z]はgzipの圧縮・伸長(ここでは伸長)、[f]はファイル名指定、[v]は詳細情報表示。
複数ある場合は、もちろん、for文などを使ったワンライナーとしてもよいでしょう。
例ではルートディレクトリにダウンロード、そこに展開することを想定していますが、展開したいディレクトリが異なる場合は、[-C dir]としてdirに展開したいディレクトリパスを指定。
展開後は、tarballは必要ありませんが、再起動後に起動を確認してから削除してもよいでしょう。
必要なデバイスを生成する為、/mnt/devに移動して./MAKEDEV allを実行。
/mnt/etc/fstabファイルを新規作成し、例えば、このように追記・編集。
前述の通り、sysinstを使っている場合、edはある一方、viやemacsは入っていない為、edに不慣れなら例のようにcatを使うとよいでしょう。
base.tgz、etc.tgz以外の何らかのtarballをダウンロード・展開すれば/mnt/usr/share/examples/fstabにサンプルがいくつかあるはずですが、これらだけだとパスはあれど中身はありませんでした。
更に(既存のマシンで確認したところ)/mnt/etc/fstabファイルには、最低でも、これら3行は必要なようです。
ptyfsの行がないとXを起動後、ディスプレイが足りないとかで端末1つは起動できますが、複数起動させることができません。
kenrfs・procfs(Rewrite kernfs and procfs)は主にファイルシステムのマウントに使われるとのことで/kernと/procは(インストーラを使わない場合、存在しないと思いますが)なければ共にディレクトリとして作成しておきます。
記述後は、mount -a、もしかするとマシンの再起動が必要かもしれません。
ここでreboot、CDやUSBを抜くなり、HDDの起動順を優先するなどしてHDD(wd0)からマシンを再起動、ブートローダからNetBSDを選択、NetBSD標準のブートメニューが表示され、そこから起動し、初回はシングルユーザーモードの/bin/shにたどり着き、必要な設定を行ない、exit後、login:プロンプトが表示され、root、[Enter]でログインできれば、インストール完了。
起動時の詳細は、04. NetBSDの起動に続きますが、ここでdisklabel wd0に余分なeパーティションがある場合、初回起動時にdisklabel -e wd0として削除しておくと良いでしょう、また、ここでは、sysinstを使わなかったこともあり、rootのパスワード設定はしていない為、初回起動及びログイン時、rootアカウントのパスワードはなくroot、[Enter]でログイン可能、また、ここでのインストール時も特に設定することなく英語キーボードを使用、そうであれば、ログイン後も同様なので必要ならログイン後、コンソール上の日本語キーボード設定も行なっておくとよいでしょう。