Skip to content

Instantly share code, notes, and snippets.

@tsutsui
Created March 19, 2013 13:34
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save tsutsui/5196134 to your computer and use it in GitHub Desktop.
NetBSD/luna68k の起動ディスクの作り方メモ
■NetBSD/luna68k の起動ディスクの作り方
ブートローダー実装後の NetBSD/luna68k の起動順序は
(1)LUNAのファームウェアROMが旧FFS形式のパーティションからブートローダーバイナリを読み込む
(2)ブートローダーが任意のパーティション(普通は a パーティション)からカーネルを読み込む
という段階になります。
上記(1)で LUNA のファームウェアROMがバイナリを読み込める条件は、
(a)対象ディスクに UniOS形式のディスクラベルが書き込まれている
(b)起動パーティションが 4.3BSD の古い形式の FFS フォーマットである
の2点です。
(初代LUNAの場合は新しめのドライブだと Scsi mode select error というエラーが出る場合があるようです……)
上記(a)の要件を満たすには、今のところ
「NetBSD/luna68k 上の disklabel(8) コマンドでディスクラベルを書く」
しかありません。
# これを
# 「クロス環境の任意のホストでも UniOS ラベルを書けるようにする」
# というのは課題として上がっていますがいまだ構想段階です……。
(b)の要件を満たすには、ファイルシステム作成の newfs(8) コマンドで "-O 0" のオプションを指定すればOKです。
この (a)(b) の手順をまとめると、以下のような感じです。
(1)NetBSD/luna68k が起動する環境で起動ディスクにしたいドライブをつなぐ
(2)NetBSD/luna68k をシングルユーザーで起動する
("x -s" のように-s を指定して起動)
ここで、すでに ID 5,6 が埋まっていると ID 4 以下のディスクをつなぐことになりますが、
NetBSD/luna68k のカーネルは ID順でディスクを認識するため、 ID 4 のディスクが sd0、
ID 5 のディスクが sd1 になってしまい、sd0a に root partition がないと怒られると思います。
その場合は root partition を聞いてくるのでそこで正しいディスク(たぶん sd1)を入力してやる必要があります。
(3)disklabel を vi で編集する場合は /var や /tmp が mount されている必要があるので
# mount /dev/sd?a /
でマウントする
ここで、 sd? の数字は起動した NetBSD/luna68k が入っているディスクです。
(4)起動可能にしたいディスクのディスクラベルを編集する
# disklabel -I -e sd?
ここの sd? は mount したのとは別のこれから起動可能にしたいディスクです。
環境変数が設定されていない、というエラーが出た場合はとりあえず
# export TERM=wsvt25
などとします。
起動可能な NetBSD/luna68k のディスクを作る場合、 disklabel は
a: NetBSD/luna68k をインストールする領域
b: swap 領域
c: ディスク全体
d: ブートローダーを置くための領域
とするのが良いと思います。
c は実ディスクサイズ (起動時のメッセージで確認したほうが無難)
b (swap) はディスクサイズの余裕によりますが 32〜128MB もあれば十分
d はブートローダーが置ければいいので 10MB もあれば十分
a は残り
という感じで。
(5)各パーティションをフォーマット(newfs)する
a はオプション無しの newfs で
# newfs /dev/rsd?a
でフォーマットすればOKです。
ここで sd? の番号を間違えると意図しないディスクが消えたりするので要注意です。
d (ブートローダー用) は
# newfs -O 0 /dev/rsd?d
のようにして作ります。
(6)ディスクの中身のファイルを用意する
使う中身としてリリースバイナリから *.tgz を取ってきてもいいのですが、
ブートローダーはまだ -current にしか入っていないので、
6.1等のバイナリを使用する場合はブートローダーだけ別に取ってくる必要があります。
すでに NetBSD/luna68k が入っているディスクから起動していてその中身をコピーする場合は、
/dev/sd1a が NetBSD/luna68k の入っているディスクのルートパーティション
/dev/sd1d が NetBSD/luna68k のディスクのブートローダーが入っているパーティション
/dev/sd0a が作成する起動ディスクのルートパーティション
/dev/sd0d が作成する起動ディスクのブートローダー用パーティション
とした場合、
# mkdir -p /mnt2
# mount -r /dev/sd1d /mnt
# mount /dev/sd0d /mnt2
# cp /mnt/boot /mnt2
# umount /mnt
# umount /mnt2
のようにしてまずブートローダーをコピー。
次に
# mount -o log /dev/sd0a /mnt
# tar clf - / | (cd /mnt; tar xpf -)
# umount /mnt
のようにして a パーティションの NetBSD/luna68k 全体をコピー。
ネットワークブートの場合は、ルートパーティションとしてマウントしているところを
まるごとコピーすることになります。
# このへん全部インストーラーでできるようにすべきなんですが、
# ブートローダー用のパーティションを作るところを luna68k 用に
# 独自に実装しないといけない、というのも残ってる課題です。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment