気の向くままに辿るIT/ICT/IoT
システム開発

インストーラを使わないNetBSD/i386のインストール

ホーム前へ次へ
インストーラを使わないNetBSDのインストール/NetBSD/i386 6.1.x編

インストーラを使わないNetBSD/i386のインストール

インストーラを使わないNetBSD/i386のインストール

2016/11/23

 NetBSDに限らず、他のディストロでもインストールするにあたっては、インストーラ(NetBSDの場合、sysinst)を使うのが手軽かつ妥当な状況が多いかとは思いますが、ここでは、敢えて、これを使わずにNetBSDをインストールする方法について記します。

 と言っても既にAppendix B. sysinst を使わないインストールや移植性の高いNetBSDらしく"netbsd" "sysinst" "使わ(ない|ず)"をキーにぐぐるといくつか情報も見つかるわけですが、例えば、NetBSDをディスク全体にインストールする場合、fdiskを使わず、disklabel、はたまた、newfsをいきなり実行とか、tarballの展開にpaxを使うとか、数通りの微妙に異なる方法がある模様。

 そこで、ここでは、NetBSD単独でディスク全体を使うなら、また、NetBSDの標準ブートセレクタしか使わないならまだしも、とは言え、ここでは使いませんが、マルチブートでGRUBなど他のブートローダを使う可能性なども考慮し、fdiskを使い、ftpコマンドでリポジトリからtarballを取得、展開には、tarを使用する前提でその方法について書いてみようかと。

インストールの流れ

  1. NetBSDのインストーラを含むLive CD/Live USBNetBSDインストール済みLive USBなどを起動(コマンドラインシェルを使う為)
  2. fdisk:BIOSパーティションの作成
  3. disklabel:BSDパーティション(スライス・ディスクラベル)の作成
  4. newfs:ファイルシステムの作成
  5. installboot:ブートローダのインストール(GRUBなどを使う場合にはそれで代替も可)
  6. mount:ルートパーティションをマウント
  7. cp:セカンダリブートローダをコピー
  8. ifconfig:ネットワーク接続
  9. cd:マウントポイントに移動
    1. ftp:リポジトリに接続
      1. get:各種tarballのダウンロード
  10. tar:ルートパーティションのマウントポイントに各種tarballを展開
  11. cd /mnt/dev;./MAKEDEV all:/devノードの生成
  12. vi:/mnt/etc/fstabの追記・編集
  13. passwd:rootアカウントのパスワード設定
  14. reboot:マシンの再起動

 あとは、04. NetBSDの起動....という流れになります。

 尚、再起動後、中身を確認したいなどの理由がなければ、既に展開済みであれば、ダウンロードした各種tarballは削除しても構いません。

実作業

 『インストールの流れ』に沿った実作業が以下。

ライブメディアの起動

 NetBSDのインストーラ(sysinst)やNetBSDインストール済みのLive CD、Live USBなどを起動(当ページ末尾各種リンク参照)、sysinstの場合、使用する言語、キーボード設定後、メニューから、もしくは、[Ctrl]+[C]などでシェルに抜けます。

# set -o
...
# set -o emacs
# set -o tabcomplete
#

 シェル上の操作性は、いつもの環境に合わせたいという場合、set -oで確認するなどして必要に応じて設定。

 個人的には、好みのエディタはviも、シェル上の操作は、履歴も利用できるemacsモードでタブ補完も欲しいのでtabcompleteもONに設定(逆か?とも思えるが、setは、[-o]でon、[+o]でoff)。

BIOSパーティションの作成

# fdisk -u wd0
...
#

 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]とした場合でも他のブートローダをインストールするのであれば、その際にこれらは書き換えることができます。

# fdisk -a wd0
...
#

 マルチブート構成において既定で起動するOSとして、また、ディスク全体に1つだけOSをインストールする場合には、デフォルトで起動するパーティションであるとわかるようにfdisk -aでアクティブパーティション([Active]を付与するパーティション)を明示的に設定しておきます。

BSDパーティションの作成

# disklabel -i -I /dev/rwd0a
...
# disklabel wd0
...
#

 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 /dev/rwd0a
#

 newfsコマンドでファイルシステムを作成。

 newfsのデフォルトのファイルシステムはFFSv1で、これをFFSv2にしたい場合には、[-O]オプションを付けて[-O 2]とします。

ブートローダのインストール

# installboot -v /dev/rwd0a /usr/mdec/bootxx_ffsv1
...
#

 ブートローダをインストール。(ちなみに、この時、当該デバイスをマウントしていると失敗する。)

 例では、マルチブート構成を想定しており、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が論理パーティションにあっても起動できるとのことです。

パーティションをマウント

# mount /dev/wd0a /mnt
# cp /usr/mdec/boot /mnt
#

 必要なパーティション(ここではルートパーティションのみ)をマウント。

 この後、セカンダリブートローダのコピー、各種tarballをダウンロードしたり、ブートローダをインストールしたりするにあたって、このタイミングでマウントしておく必要があります。

セカンダリブートローダをコピー

# cp /usr/mdec/boot /mnt
#

 セカンダリブートローダ/usr/mdec/bootをルートパーティションにコピーしておきます。

ネットワーク接続

# ifconfig -l
msk0 lo0
# dhclient msk0
...
# ping google.com
... 0.0% packet loss ...
#

 ここでは、ftpを使ってtarballを入手することを想定しているのでdhclient(or dhcpcd)コマンドで既存のネットワークインタフェースにIPを自動割り当てし、ネットワークに接続、インターネットを利用できるようにしておきます。

 認識されているネットワークインタフェース(この例ではmsk0)は、[ifconfig]または、[ifconfig -l]として表示される中から[lo0]以外の適切なものを選びます。(複数あって迷うような状況があった場合は、dhclient/dhcpcdに順次渡して試してみる。)

 なんならpingなどで疎通を確認、pingなら[0.0% packet loss]というフレーズがあればOK。

tarballの取得

# df -h
...
# cd /mnt
# ftp ftp://ftp_repository_url
...
ftp > cd pub/NetBSD/NetBSD-`uname -r`/`uname -m`/binary/sets
ftp > ls
...
ftp > mget base.tgz etc.tgz kern-GENERIC.tgz...
...
ftp > quit
#

 マウントしておいたマウントポイント(必要なら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で可)

tarballの展開

# pwd
/mnt
# tar xzfv base.tgz
# tar xzfv etc.tgz
# tar xzfv kern-GENERIC.tgz
...
#

 tarで先にマウントしたルートパーティションのマウントポイントに各種tarballを展開します。(ここでは、/mntは先にマウントした対象ディスク上のルートパーティションのマウントポイント)

 尚、[x]はアーカイブの展開、[z]はgzipの圧縮・伸長(ここでは伸長)、[f]はファイル名指定、[v]は詳細情報表示。

# for i in /mnt/*.tgz;do tar xzfv $i;done
...
#

 複数ある場合は、もちろん、for文などを使ったワンライナーとしてもよいでしょう。

 例ではルートディレクトリにダウンロード、そこに展開することを想定していますが、展開したいディレクトリが異なる場合は、[-C dir]としてdirに展開したいディレクトリパスを指定。

 展開後は、tarballは必要ありませんが、再起動後に起動を確認してから削除してもよいでしょう。

/devノードの生成

# cd /mnt/dev
# ls
...
# ./MAKEDEV all
# ls
...
#

 必要なデバイスを生成する為、/mnt/devに移動して./MAKEDEV allを実行。

/etc/fstabの初期設定

# cat > /mnt/etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
([Ctrl]+[d])
#

 /mnt/etc/fstabファイルを新規作成し、例えば、このように追記・編集。

 前述の通り、sysinstを使っている場合、edはある一方、viやemacsは入っていない為、edに不慣れなら例のようにcatを使うとよいでしょう。

 base.tgz、etc.tgz以外の何らかのtarballをダウンロード・展開すれば/mnt/usr/share/examples/fstabにサンプルがいくつかあるはずですが、これらだけだとパスはあれど中身はありませんでした。

[追記:2017/01/24]
# cat >> /mnt/etc/fstab
...
kernfs /kern kernfs rw
ptyfs /dev/pts ptyfs rw
procfs /proc procfs rw
([Ctrl]+[d])
#

 更に(既存のマシンで確認したところ)/mnt/etc/fstabファイルには、最低でも、これら3行は必要なようです。

 ptyfsの行がないとXを起動後、ディスプレイが足りないとかで端末1つは起動できますが、複数起動させることができません。

# mkdir /kern /proc
#

 kenrfs・procfs(Rewrite kernfs and procfs)は主にファイルシステムのマウントに使われるとのことで/kernと/procは(インストーラを使わない場合、存在しないと思いますが)なければ共にディレクトリとして作成しておきます。

 記述後は、mount -a、もしかするとマシンの再起動が必要かもしれません。

PCの再起動

 ここで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]でログイン可能、また、ここでのインストール時も特に設定することなく英語キーボードを使用、そうであれば、ログイン後も同様なので必要ならログイン後、コンソール上の日本語キーボード設定も行なっておくとよいでしょう。

ホーム前へ次へ