玄箱でNetBSDを動かす USBmem-install

自由編集可能

ブート可能イメージの作成とそれを使用してのブート、インストール(工事中)

概要

  • ハードディスクにインストールしなくとも、このイメージを入れたUSBメモリがあれば(最小限の)NetBSDが動きます。
    • Linux側(HDD)にはNetBSDカーネルとブートローダ(&ブートセレクタ)を入れる必要が有ります。
      • ブートセレクタは必須ではありませんが有ったほうがより安全にブートできます。
      • ハードディスクを取り出してPC上で書き込んでもOKです。この場合はLinux側にrootでログイン出来るようにする必要はありません。
    • USBメモリのDOS領域からのnbloaderの起動も「アリ」かもしれません。
  • ハードディスクへ入れる土台(足がかり)にもなります。
  • シリアルコンソールが無くとも大丈夫なはずです。
(まだ脳内妄想段階:一部実験中)

ここにあるイメージは全てbzip2で圧縮されています。bzip2コマンドは http://www.bzip.org/ で(windows版バイナリも)入手可能です。


全体の流れ

  • 玄箱/LinkStation/TeraStationにrootでログイン出来るようにしておきます。
  • パーティションを切りなおし、NetBSD用の領域となる所を空けます。
  • 各ファイル(下記)をダウンロードします。
    • 少なくともカーネル、ブートローダ-、ブートイメージファイルは必要です。
    • ブートイメージファイルは必要に応じて(再)作成して下さい。
  • ブートイメージファイルをUSBメモリ等へ書き込みます。
  • NetBSDカーネルとブートローダーをLinuxパーティションへコピーします。
    • ここでブートセレクタをインストール&設定しておくと良いです。
  • USBメモリ等を本体に接続します。
  • ブートローダ-を使ってUSBメモリ等からブートします。
  • USBメモリ上のNetBSDへログインします。
  • ハードディスクへUSBメモリの内容をコピーします。
    • fdiskコマンドでハードディスク上にNetBSD用の領域を作成します。
    • disklabelコマンドでBSDパーティションテーブルを作成し、書き込みます。
    • newfsコマンドでフォーマットします。
    • パーティションをマウントし、dump/restoreコマンドでコピーします。
    • ハードディスクのetcディレクトリ以下を修正します。
  • 一回シャットダウンします。
  • ブートローダーを使ってハードディスク側からブートします。
  • 後は色々設定します。


ディスクイメージ作成用スクリプトとスケルトンイメージ、中身入りイメージ(DOS+NetBSD合体版)

(2005-11-14 スケルトンイメージ, スクリプト, 中身入りイメージを差替えました _o_)
(2005-12-07 スクリプト, 追加/上書きファイル群, 中身入りイメージを差替えました _o_)
(2006-01-28 NetBSD 3.0ベースのスクリプト,追加/上書きファイル群, 中身入りイメージを追加しました)
(2006-05-27 バグについて追記しました _o_)
(2006-05-28 中身入りイメージ(2.1/3.0)、スクリプト(2.1/3.0)を入れ替えました。)
(2008-02-29 NetBSD 4.0ベースのスクリプト, 追加/上書きファイル群, 中身入りイメージを追加しました。)



  • ディスクイメージ作成用シェルスクリプト説明
    • スケルトンイメージの作成にはNetBSD固有動作のコマンドを使っていますのでNetBSDが必要です。これは不便なので作成済みのものをダウンロード可能にしておきます。
    • 既にイメージが存在するならば、スケルトンイメージの作成は行いません。FFSの中身のみ操作したい場合に有効です。
    • スケルトンイメージへのFFSイメージの埋め込みはNetBSD以外のOSでも(ツールを準備すれば)可能です。このツールはsrc.tgz&syssrc.tgz&sharesrc.tgz&gnusrc.tgzから作られるものです(下のメモを参照して下さい)。
      • コンパイル済みツールの提供は(リクエストが有ったら)検討します。
        • 近所(^_^;)からリクエストを貰ったので、玄箱Debian(sarge)用のバイナリを置きました。
        • FreeBSD/i386 4.11-STABLE上で作ったものも置きました。
    • NetBSD/sandpointのbase.tgz, etc.tgzと、ここで配っているkuro_annex*.tgzと共に使います。あらかじめダウンロードして同じディレクトリへ置いてください。
    • root権限が必要ですので、suでrootになってください。
    • スクリプト先頭にあるフラグ変数を操作することで、スケルトンイメージの構築、もしくはFFSイメージの埋め込みの実行を選択可能です。
      • NEED_xxxMBとSETUP_FFSを"YES""NO"で書き換えて下さい。NEED_xxxMBが"YES"なサイズのものだけ作成します。(そのままだと全部作成しますので注意)
    • ダウンロードしたスケルトンイメージは圧縮を伸張すると 約1000倍に太ります ので、ディスク残容量に注意してください。
    • FFSイメージの構築時も、スケルトンイメージに匹敵するディスクを一時的に消費しますので、これも残容量に注意してください。
    • あらかじめコンパイラを入れたい、などはスクリプトを適当にいじって下さい。base.tgzを展開するあたりに入れると良いでしょう。
  • スケルトンイメージ説明
    • 上のスクリプトで NEED_xxxMB="YES" 、SETUP_FFS="NO" として作成したものです。
    • 各々のイメージは DOSパーティション + NetBSDパーティションの構成になっています。
      • 64MB: 4 + 60
      • 128MB: 8 + 120
      • 256MB: 16 + 240
      • 512MB: 32 + 480
      • 1024MB: 64 + 960
    • NetBSDパーティションの中身は1つ(sd0a)のみです。NetBSD/i386でも触れるように、Little-Endianにしています。
    • DOSパーティションは空です。カーネルやnbloaderを入れると、どこでもNetBSD化が可能になるかも知れません :-)
    • 構成比率を変えたい場合は、スクリプトを修正して下さい。
    • 手抜きにより、スクリプト内部は非常に複雑になってしまっていますので比率を変えるだけでかなりの部分を操作する必要が有ります。
      • makefsのバグ?により、FFSのサイズは16セクタ(1ブロック)単位で指定しないとビルドしてくれないようです。ご注意ください。
  • 2005-11-14版変更点
    • disktabのエントリの一部が間違って入れ替わっていたのを修正しました。
    • 64MB*以外*のイメージの空きinodeの数を増やしました。
    • 作業後に"live"ディレクトリを削除するのをやめました。liveディレクトリの中身を操作して再度build.shを実行するとその内容がイメージへ反映されます。
    • build.sh, 256M_BSD.imgを入れ替えました。念のためスケルトンイメージも入れ替えました。
  • 2005-12-07版変更点
    • MAKEDEVを置き換えました。(pstat/vmstat等対応のため)
    • fsck_ext2fsを追加しました。(ext2fs magic 0xef54対応版)
  • 2006-01-28版説明
    • NetBSD 3.0ベースです。
      • MAKEDEVも3.0ベースにしてあります。
      • 容量の都合で64Mのイメージは作成できませんでしたので、スクリプトから削除してあります。
    • パッケージのstandalone-tcshを追加してあります。
      • "bsduser" のshellは "/bin/tcsh"にしてあります。
  • 2008-02-29版説明
    • NetBSD 4.0ベースです。
      • sandpoint版、evbppc版があります。お好きなほうをどうぞ。
      • "bsduser" のshellは "/bin/ksh"にしてあります。
      • fsck_ext2fsは標準のものに戻してあります。ext3fsのfsckをされる場合は pkgsrcのsysutils/e2fsprogsにあるe2fsckをインストールしてお使い下さい。
      • 先頭にあるDOSパーティションにブートローダ/ブートセレクタ/カーネルのアーカイブを入れてあります。

  • 既知の問題点と対策
    • USBディスク自身のDOSパーティションのマウントは?
      • /etc/fstabに、"/dev/sd0e /dos msdos rw,noauto 0 0"を追加し、"mkdir /dos"をしておいて下さい。その後、"mount /dos"を行うとマウントできます。
      • fstabを触らずとも"mount /dev/sd0e /mnt"等を実行してもマウント出来ます。
    • timezoneがUTCだが...
      • /etc/localtimeのシンボリックリンクが/usr/share/zoneinfo/UTCに向いているためです(デフォルト)。これを/usr/share/zoneinfo/Japanに向けるとJSTになります。
      • (rm /etc/localtime; ln -s /usr/share/zoneinfo/Japan /etc/localtime)
    • /devのパーミッションが444だ
      • おもいっきりバグなのですが、とりあえずの対応としてrootでログインしてから"chmod 755 /dev" を実行してください。
      • (2006-05-28) 現在のスクリプトと中身有りイメージは直っています。


ディスクイメージのUSBメモリへの書き込み

(書き込み対象を間違えると壊します。注意して指定してください。)

NetBSD/i386の場合

  • USBメモリを挿します。sd*として認識することを確認します。
  • sd0として認識した場合には、以下のコマンドを入力します。
dd if=****.img of=/dev/rsd0d bs=1m

Linuxの場合

  • USBメモリを挿します。sd*として認識することを確認します。
  • sdaとして認識した場合には、以下のコマンドを入力します。
dd if=****.img of=/dev/sda bs=1MB

FreeBSD/i386の場合

  • USBメモリを挿します。da*として認識することを確認します。
  • da0として認識した場合には、以下のコマンドを入力します。
dd if=****.img of=/dev/rda0 bs=1m

Windowsの場合

  • Silicon Linuxから、"DDforWindows"をダウンロードしてください。
    • ("DDforWindows"で検索するとすぐに見つかると思います。)
  • USBメモリを挿し、リムーバブルディスクとして認識させておきます。
  • DDforWindowsを実行します。
    • 『ファイル選択』ボタンを押し、****.imgを選択します。
    • 『ディスク選択』ボタンを押し、先ほどのUSBメモリを選択します。
      • 一覧に出てこなければリムーバブルディスクとして認識していないので書き込めません。
    • 『書込』ボタンを押します。
    • サイズが小さいと言われて怒られますが、そのまま続けます。
    • プログレスバーで進捗が表示されます。
    • 最後まで行けば終了です。


とりあえずブートさせるには

  • Linuxへrootでログイン出来るようにしてください。
    • シリアルコンソール、またはtelnetd等が必要と思います。
    • ハード改造が嫌ならば改造ファームを使用することになります。
      • 玄箱はtelnetが開いていますので問題ありません。もちろんハックキットやDebian化したものもOKです。
      • LinkStationならば linkstationwiki.orgで配っているopenlinkやfreelinkのアーカイブを使うのが良いでしょう。
      • TeraStationならば Buffalo Extrasで配っているアーカイブが良いと思います(未確認)。
    • 手順の詳細はgoogle等で検索して下さい _o_
    • 下のメモ書きにもちょっとだけ書いてあります。検索時のキーワードとして使って下さい。
  • 次のものを用意してください。
    • イメージを書き込んだUSBメモリ
    • サンプルカーネル:Downloadにおいてあります。
    • ブートローダー(nbloader_v2):Download(旧版)に置いてあります。
      • もちろんnbloader_v3も使えます。(ブートセレクタを使う場合はkuro_boot.confを正しく書き換えるのを忘れずに!)
  • ブートローダーは機種依存です。間違えないようにして下さい。
    • LinkStationの方は、HD-HLANv1なら玄箱、(昔の)HD-HGLANなら玄箱/HG用を選んでください。
    • 最近のHD-HGLAN(uname -rが2.4.20_mvl31-ppc_linkstation)はTeraStation用でうまくいくようです。
  • 用意したものをLinuxから見えるところへ伸張(解凍)の上で置いてください。
    • USBメモリ上のDOSパーティションが見えるならば、そこへ置くと良いでしょう。
    • Linuxパーティションの/bootへ置くのも良いと思います。
  • USBメモリを本体に挿しておきます。
  • シリアルコンソールからのブート指示
    • linux上から、insmodで起動します。 (本当はブートセレクタの使用がおすすめです)
    • カーネルとブートローダーが有るディレクトリで、次のコマンドを実行します。
      • LinkStationの方は "insmod -f" として強制読み込みにしてみてください。
umount -a; sync; insmod nbloader_v2.o kernel=*******.bin bootdev=0xa0000004
  • telnetからのブート指示
    • 基本的にはシリアルコンソールと同じですが、telnetのセッションが切れるように細工します。
    • これで30秒後にinsmodしますので、30秒以内にlogoutしてセッションを終了させて下さい。
(sleep 30; umount -a; sync; insmod nbloader_v2.o kernel=*******.bin bootdev=0xa0000004) &
  • ブートセレクタを導入されると、このあたりの面倒さは軽減されます。ご検討ください。


ブートセレクタの導入とそこからのブート

  • まず次のものをザーっと読んでおいてください。
  • シリアルコンソールの有無にかかわらず、現状ではタイプ2がおすすめです(タイプ2は初代のスーパーセットとなっています)。
    • 内部使用コマンド(kuro_morse, kuro_swread)が動作しない場合には再コンパイルするか、初代をお使いください。
    • TeraStationな方もtype2は(まだ)使えませんので初代をお使い下さい。 TeraStationは専用版で対応しました。
  • カーネルやブートローダー、ブートセレクタをLinuxパーティションの所定の位置にコピーします。
    • uname -rを行い、Linuxのカーネルバージョンを確認しておきます。
    • カーネルは"/boot/netbsd.bin"としてコピーします。
    • ブートローダーは"/lib/modules/[uname -rの結果]/kernel/nbloader_v2.o"としてコピーします。
      • (例)玄箱の場合は、"/lib/modules/2.4.17_kuro-box/kernel/nbloader_v2.o"となります。
    • ブートセレクタのファイルをコピーします。
      • 基本的にはmake installで全て所定の位置にコピーします。
  • まとめると次のような形にコピーすることになります。
/boot/netbsd.bin (カーネル)
/boot/tools/kuro_morse (type2のみ:内部コマンド)
/boot/tools/kuro_swread (type2のみ:内部コマンド)
/etc/kuro_boot.conf (ブートセレクタ用設定ファイル)
/etc/init.d/kuro_bootsel.sh (初代のみ)
/etc/init.d/kuro_bootsel2.sh (type2のみ)
/etc/rcS.d/S15kuro_bootsel.sh (初代のみ:シンボリックリンク)
/etc/rcS.d/S15kuro_bootsel2.sh (type2のみ:シンボリックリンク)
/lib/modules/[uname -rの結果]/kernel/nbloader_v2.o (ブートローダー)
  • /etc/kuro_boot.confの設定
    • USBメモリ(sd0)から起動する選択肢を有効にするため、"Menu entry No.4"のところのコメントアウトを外します。
    • AVRのポートを指定します。/devの下にAVR00が有れば変更は不要です。無ければ"AVR=/dev/ttyS1"として下さい。
  • こんな形になると思います。
# kuro_bootsel config file (2005-11-07)
#
# "bootdefault"
# 1: Linux, 2-5: See below
#bootdefault=1

#
# "timeout"
# prompt timeout (in secs)
#timeout=3

#
# "AVR"
# AVR port name
#AVR=/dev/AVR00

# Menu entry No.2
#
menu2="NetBSD(HDD:wd0)"
loader2=/lib/modules/`/bin/uname -r`/kernel/nbloader_v2.o
kernel2=/boot/netbsd.bin
option2="bootdev=0xa0000000"

# Menu entry No.3
#
#menu3="NetBSD(EM-boot)"
#loader3=/lib/modules/`/bin/uname -r`/kernel/nbloader_v2.o
#kernel3=/boot/emergency.bin
#option3=

# Menu entry No.4
#
menu4="NetBSD(USB:sd0)"
loader4=/lib/modules/`/bin/uname -r`/kernel/nbloader_v2.o
kernel4=/boot/netbsd.bin
option4="bootdev=0xa0000004"

# Menu entry No.5
#
#menu5="Linux(New-kernel)"
#loader5=/lib/modules/`/bin/uname -r`/kernel/loader.o
#kernel5=/boot/linux.bin
#option5="cmdline=\"root=/dev/hda1\""
  • 設定が終わったならば、USBメモリを挿してからリブートします。
    • シリアルコンソールが有る場合は、メニューが出ます(初代、type2共)。
      • シリアルコンソールからは"4"を入力してください。
      • type2でシリアルコンソール無しの方は、DISK FULL LEDが点灯している間に電源スイッチを4回押してください。
        • TeraStation用は、代わりにDIAG LEDが点灯します。
    • これでうまくいけばNetBSDがブートしてくると思います。
  • 放っておいたり、なにか設定に問題が有るとLinuxが起動してくると思います。キーを入力したのにブートしない場合は再度設定を確認して下さい。


NetBSDブート後の操作

  • ブート後しばらくするとログインが可能になります。"bsduser"でログインしてください。(パスワード無し)
    • telnetからは、DHCPで取得したアドレス、または192.168.200.200(初代玄箱), 192.168.200.210(玄箱HG/TeraStation)のどちらかに接続してください。
      • DHCPで取得したアドレスは、DHCPサーバのログを見るか、pingで探してください。
        • ブロードキャストping(ping 192.168.0.255等)に返答するようにしていますので比較的簡単に見つかると思います。
      • 固定アドレス(192.168.200.*)側のネットマスクは24ビット(255.255.255.0)です。
  • "bsduser"でのログイン後は、suにてrootになれます。(これもパスワードはありません)
    • 安全のため、rootへのパスワード付与、およびbsduserの削除や他ユーザの追加を行ってください。
      • /etc/groupの修正も忘れずに行ってください。(suが使えなくならないように注意!)
  • その他操作
    • "shutdown -h now"で(しばらくすると)電源が切れます。
    • "shutdown -r now"で(しばらくすると)リブートします。
    • 電源スイッチの長押しでshutdown -hの動作に入ります。
    • 設定初期化スイッチの長押しでshutdown -rの動作に入ります。
      • POWERのLEDが点滅を始めたら、スイッチを離してください。(特に設定初期化スイッチの押しっぱなしは危険です)
    • shutdown動作をせずに電源を切ったり、USBメモリを抜くとファイルシステムが壊れることがあります。
      • 壊れるとブートしないことがありますので、その際は再度イメージから書き込んでください。
  • バグ情報
    • /devのパーミッションが444になっています。このため、root以外での動作に支障がでている状態です。
      • rootでログインしてから、"chmod 755 /dev"を一回実行して下さい。
      • (2006-05-28) 現在のスクリプトと中身有りイメージは直っています。


(書きかけ)

ハードディスクへのインストール

  • 内蔵ハードディスクに、NetBSDをインストールするための場所を確保します。
    • fdiskコマンドでhda4を削除します。
    • GNU partition editor (parted)等を使って、hda3を縮めます。
      • 中身が小さい場合は、一旦tar等でバックアップを取った上で削除→再確保が良いでしょう。
  • NetBSDをUSBメモリからブートします。
  • ログオンし、rootユーザになります。
  • fdiskコマンドで、NetBSDのスライス(パーティション)を確保します。
    • この時にLinux側のswapのオフセットとサイズを確認しておきます。
  • disklabelコマンドでNetBSDパーティションを分けます。
    • 一般には/(root),/usr, /var, /home等々に分けますが、Linuxのように/だけでも良いかもしれません。/はaパーティションとします。
    • swap(bパーティション)はLinuxと共用にすると良いでしょう。オフセットを+8, サイズを-8したものをwd0bとして書きます。
  • newfsコマンドで各々のパーティションをフォーマットします。
    • サイズによってはinodeの数が極端に少なくなることが有るようです。マウントした状態で、"df -i"で確認してください。
  • USBメモリの/mnt以下にツリー構造通りにマウントします。
    • /(root)を/mnt, /usrを/mnt/usr、等とマウントします。
  • /mntへ移り、"dump 0af - | restore rf -"でUSBメモリの構造をコピーします。
    • マウントポイント (/mnt/usr, /mnt/var等)で警告メッセージが出ますが、無視してかまいません。
    • 終了したら "rm restoresymtable"でシンボルテーブルファイルを削除しておきます。
  • ハードディスク側の設定を行います。
    • /mnt/etc/rc.confを修正します。
      • ホスト名、IPアドレス等々を設定します。DHCPの無効化、swapの有効化等も適宜行ってください。
    • /mnt/etc/fstabを修正します。
      • ハードディスク側の構造に合わせて書き直します。/がwd0a, swapがwd0b等になるはずです。
  • 設定が一通り終了しましたら、shutdownコマンドで電源を切ります。
    • 電源が切れたらUSBメモリを外しておいて下さい。


(書きかけ)

ハードディスクからのブートと追加設定

ハードディスクからのブート

  • ブートセレクタが準備してあるならば、"2"を選択することでwd0aからブートします。
    • ブートセレクタが準備出来ていないならば、"(sleep 30; sync; sync: insmod nbloader_v2.o kernel=********.img bootdev=0xa0000000) &"として起動します。
  • ブートしたならば、USBメモリと同様にログイン可能になります。bsduserでログインして下さい。

追加設定

  • ユーザの追加と削除を行います。bsduserは安全のため、削除されることをお勧めします。
    • ユーザの追加は"useradd -u"で行います。suコマンドでrootユーザへ切り替えたい場合には、/etc/groupのwheelグループへの追加も行います。
    • ユーザの削除は"userdel"で行います。また、vipwを使って直接削除しても大丈夫でしょう。
  • 不足している基本バイナリ/ソースを追加インストールします。必要に応じて以下のものを用意してください。
    • comp.tgz
    • (games.tgz)
    • man.tgz
    • misc.tgz
    • text.tgz
    • (xbase.tgz)
    • (xcomp.tgz)
    • (xetc.tgz)
    • (xfont.tgz)
    • (xserver.tgz)
    • gnusrc.tgz
    • sharesrc.tgz
    • src.tgz
    • syssrc.tgz
    • (xsrc.tgz)
  • これらは/から展開します。この際、tarのpフラグをつけて展開することを忘れないようにして下さい。
    • 例: "tar zxvpf /var/tmp/comp.tgz -C /"
  • pkgsrc.tgz(パッケージコレクションのアーカイブ)は、/usrの下などで展開します。

  • お疲れ様でした。これで全ての作業が終了です。後はがんばってカスタマイズして下さい。
    • 問題が発生した場合には、USBメモリからブートすることで解決可能だと思われます。USBメモリ(イメージ)は大切に取っておいて下さい。



(以下は自分用のメモ書き(下書き)です。ご参考まで。)

準備

  • NetBSD/sandpoint 2.1 配布物
    • base.tgz
    • etc.tgz
    • src.tgz((nb)makefs等を作るために必要:既に有れば不要)
    • syssrc.tgz(同上)
    • sharesrc.tgz(同上)
    • gnusrc.tgz(同上)
    • (他?)
  • ローカル配布物
    • kuro_annex.20051102.tgz(新規:内容は以下のとおり)
      • dev/MAKEDEV
      • etc/rc.d/kuro_avrd
      • etc/master.passwd
      • etc/fstab
      • etc/inetd.conf
      • etc/passwd
      • etc/spwd.db
      • etc/pwd.db
      • etc/rc.conf
      • etc/gettytab
      • etc/ttys
      • etc/dhclient.conf
      • etc/group
      • sbin/fdisk
      • sbin/disklabel
      • usr/local/sbin/kuro_avrd
      • home/bsduser/以下(ログイン環境:.cshrc等)
  • 玄箱/LinkStation/TeraStation
    • CPUがMPC8241なもの(IDTは不可)
    • 玄箱/寺箱ならハードディスクも必要(寺箱は一時的に4台必要)
  • USBメモリ等(sdとして認識するもの)
    • 公称128MB以上
      • 64MBでも可能だけれど、もう入手性が悪いので...

Linux側の準備

  • ブートローダーの起動のために、Linux (ext2fs/xfs)へのアクセスとrootユーザでの実行権(insmodのため)が必要。
    • 玄箱(/HG)の場合
      • Telnetで入れ、rootになれることの確認のみ。(標準ファーム)
      • 玄箱うぉううぉう♪で配っているDebian化キット(debian_2005_08_21_dist.tgz)も簡単で良い。(debian_2005_04_09_dist.tgzは実証済み)
    • LinkStationの場合(HD-HLANv1, HD-HGLAN)
      • linkstationwiki.orgで配っているopenlinkかfreelinkのファームを入れるのが簡単。(freelink_powerpc-hdhlan-1.11.zipは実証済み)
      • または、一旦箱を開け、ディスクを取り出して改造するのでも可。(fix_ext2_magicが必要)
    • TeraStationの場合
      • Buffalo Extrasで配っている改造ファーム(tera_112a_full.zip)を入れるのが簡単(らしい)。
      • ディスクを取り出すのも良いが、xfsなので注意が必要。
        • 取り出す場合は『標準モード』(4台バラバラ)にしてからにすること。
      • 取り出したディスクを戻すのはとりあえず1台(hda)のみでOK。
        • 4台全てで運用したい場合は、2,3,4台目のNetBSDパーティションはDOSパーティションテーブルの最後(4番目)に作成すると良い。
        • (1,2番目ではLinuxが触りに来るのであまり良くない)


ブートイメージ構築(DOS+NetBSDハイブリッド版)


  • 基本的にbuild.shを修正して起動するだけ。
    • 修正ではNEED_xxxMBとBUILD_FFSを"YES""NO"で指定する。
  • NEED_xxxMBがYESならばそのサイズの空ファイルを作成し、fdisk, disklabelを行う。
    • disklabelの元ネタはdisktabファイルに書かれている。スクリプト内蔵(カレントに無ければ書き出す)。
  • BUILD_FFSがYESならば、liveツリーを作成してイメージ化(単独版と同じ)。
    • ツールがあれば、ここの作業はNetBSD以外でも可能。
    • この場合はご所望のサイズのファイルをダウンロードしておく。
    • liveツリーは削除しないようにしたので、変更を加えて再度構築も可能(なはず)。


ブートイメージ構築(NetBSD単独版)

live.img作成

  • 配布物を1箇所に置く。
  • 以下を順に実行。
    • tar zxvf src.tgz
    • cd usr/src/; sh build.sh tools
  • 出来たツールが実行できるようにパスを通す。
  • 以下を順に実行。
    • mkdir live
    • cd live
    • tar zxvpf ../base.tgz
    • tar zxvpf ../etc.tgz
    • tar jxvpf ../kuro_annex.YYYYMMDD.tar.bz2
    • (必要ならばここで中身を操作する)
    • (nb)mtree -c > ../live.mtree
    • cd dev
    • sh MAKEDEV -s all usbs | sed -e 's,^\.,./dev,' >> ../../live.mtree
      • (ここの出力で/devのパーミッションが変わってしまう。要対応。)
    • cd ../..
    • (nb)makefs -B be -s 249968b -F live.mtree -o minfree=0 live.img live
    • (249968 = (128 * 1000 * 1000 / 512 - 32)) (ディスク屋さんの言う128MB相当 - 32セクタ)
  • 出来たlive.imgはffsなイメージ(Big Endian)。環境によってはマウントして修正が可能。
    • vnconfig vnd0 live.img
    • mount /dev/vnd0a /mnt
    • (操作)
    • umount /mnt
    • vnconfig -u vnd0

ブートイメージ化(NetBSD(Big-Endian)環境のみ有効な手順)

  • DOSパーティションテーブル相当を付与する。
    • dd if=/dev/zero of=dospart.img count=32
    • cat dospart.img live.img > disk.img
    • vnconfig vnd0 disk.img
    • fdisk -u vnd0
    • パーティション0(先頭)をsysid 169(NetBSD)、オフセット32、サイズ249968にする。
  • ディスクラベルを書く("disklabel -e -I vnd0")。主な修正点は以下のもの。
total sectors: 250000
a:    249968        32     4.2BSD      0     0     0  
c:    249968        32     unused      0     0        
d:    250000         0     unused      0     0         
  • 修正後、"vnconfig -u vnd0"を実行。
  • これでdisk.imgが出来た。

ブートイメージ化(配布バイナリ使用)

  • バイナリ配布(以下)を用意。
    • dospart.img(16384バイト)
    • disklabel.img(1024バイト)
  • live.imgを用意した上で以下の手順を踏む。
    • dd if=disklabel.img of=live.img conv=notrunc
    • cat dospart.img live.img > disk.img
  • これで完了。(128000000バイトのイメージが出来る)

配布バイナリの作り方(NetBSD(Big-Endian)上)

  • ブートイメージ(disk.bin)を作っておく。当然fdisk&disklabelを実行しておく。
  • dospart.imgの作成
    • dd if=disk.bin of=dospart.img count=32
  • disklabel.imgの作成
    • dd if=disk.bin of=disklabel.img skip=32 count=2


USBメモリへのイメージの書き込み

  • 書き込み先のデバイス名に注意。他のディスクを壊さないように!
  • Linuxの場合:
    • dd if=disk.img of=/dev/sda
  • NetBSDの場合:
    • dd if=disk.img of=/dev/rsd0d (or of=/dev/rsd0c)
    • ちゃんとrawパーティションを選択すること。(i386なら"d") なんでarch毎に違うのか...
  • FreeBSDの場合
    • dd if=disk.img of=/dev/rda0
  • その他(Windows?)
    • (例)DDforWindows
      • Silicon Linuxから"DDforWindows"をダウンロードする。(このキーワードで検索すると簡単に見つかるはず)
      • (日本語なので簡単)
      • イメージよりもディスクが小さいと言われるが、そのまま続行。
      • プログレスバーで進捗が表示される。
      • 書き込みが終わればOK。


USBメモリからのブート

  • 作ったUSBメモリを本体に挿し、電源ON。
  • ブートローダーからカーネルをブートさせる。ブートセレクタが有るとなお良い。
    • bootdev=0xa0000004 を指定。(sd0aの場合)
  • うまくいけばこれでブートし、DHCPでアドレスを取り、telnetが開いた形となる。
    • DHCPでアドレスが取れなくとも、192.168.200.200/24、または192.168.200.210/24も開いている(緊急ブートイメージと同様)。
    • "bsduser"でログイン。パスワード無し。
    • suコマンドでrootへ切り替え。パスワード無し。
  • あとはご自由に...
    • /devのパーミッションがおかしい場合はこの時点で修正されたし。
      • "chmod 755 /dev"
      • (2006-05-28) イメージとスクリプトは修正済みに置き換えたのでこの操作は不要。


ハードディスクへのインストール(脳内手順)

  • Linux側でGnu partedを使って領域を空けて置く。hda4も消しておく。
    • もしかしたら領域バックアップ→削除→再生成とするほうが良いかもしれない。(どちらにせよバックアップを必要ならば取っておくべし)
  • 先ほどのUSBメモリでブート。
  • fdiskコマンドを実行。(0から数えて)3番目のパーティションをNetBSD用に確保する。
    • コマンドプロンプトから、"fdisk -u wd0[リターン]"
    • "Do you want to change our idea of what BIOS thinks [n]"には、"n[リターン]"
    • "Which partition do you want to change:[none]"には、"3[リターン]"
    • "sysid: [0..255 default:169]" には、"[リターン]"
    • "start: [xxxx..xxxx cyl default xxxx, xxxx cyl, xxxx MB]"には 、"[リターン]"
    • "size: [0..xxxx cyl default xxxx, xxxx cyl, xxxx MB]"には "[リターン]"
    • "Which partition do you want to change:[none]"には、"[リターン]"
    • "Should we write new partition table? [n]"には、"y[リターン]"
  • disklabelコマンドを実行。 ここはインタラクティブモードのほうが良いかも知れない
    • disklabel -e -I wd0[リターン]でエディット開始。
    • パーティション分割はwd0a(/), wd0b(swap), wd0h(/var), wd0i(/usr), wd0j(/home)くらいか?(以下は一例)
      • wd0a: /(root): 256MB (524288ブロック)
      • wd0b: swap : 256MB (524288ブロック)
      • wd0c: (NetBSDパーティション全体)
      • wd0d: (ディスク全体)
      • wd0e: Linux root : ??? MB (玄箱: 2GB, LinkStation: 384MB, TeraStation: 376MB?)
      • wd0f: Linux swap : ??? MB (玄箱: 250MB, LinkStation 512MB, TeraStation: 133MB)
      • wd0g: Linux /mnt : ??? MB (縮めた後のサイズ)
      • wd0h: /var : 1GB (2097252ブロック)
      • wd0i: /usr : 残り
      • wd0j: /home : 4GB (8388608ブロック)
    • /usrに残り全てを割り当てる都合上、a→b→h→j→iの順にディスクに割り当てる。
      • aのオフセットはNetBSDパーティション全体(c)と同じ。aのサイズは上記(524288)。タイプは"4.2BSD"。fsize, bsize用のダミーとして " 0 0 "も書いておく。
      • bのオフセットはaのオフセット+aのサイズ。bのサイズは上記(524288)。タイプは"swap"。ここはダミー不要。
      • c,d,e,(f,)gは既に埋まっているはずなのでそのまま。
        • f(Linux swap)は入っていないかも。(とりあえずそのまま)
      • hはNetBSDパーティション全体が入っているので全体を消して書き直し。オフセットはbのオフセット+bのサイズ。サイズは上記(2097152)。タイプは"4.2BSD"。" 0 0 "も忘れずに。
      • jのオフセットはhのオフセット+hのサイズ。サイズは上記(8388608)。タイプは"4.2BSD"。" 0 0 "も。
      • iのオフセットはjのオフセット+jのサイズ。iのサイズはd(ディスク全体)のサイズ-iのオフセット。タイプは"4.2BSD"。" 0 0 "も。
      • iまで使ったので、"9 partitions"に書き換える。(上限の"16 partitions"でも良いかも)
    • 修正が終わったらば書き込み。その後、もう一回"disklabel -e wd0"で開くと、右端にシリンダ番号が出ているので間違って重なっていないかを確認する。
    • (要追記)

  • newfsコマンドを実行。
    • newfs /dev/wd0a
    • newfs /dev/wd0h
    • newfs /dev/wd0i
    • newfs /dev/wd0j
  • 順次マウント
    • mount /dev/wd0a /mnt
    • mkdir /mnt/var
    • mount /dev/wd0h /mnt/var
    • mkdir /mnt/usr
    • mount /dev/wd0i /mnt/usr
    • mkdir /mnt/home
    • mount /dev/wd0j /mnt/home
  • USBメモリの内容をコピーする。
    • cd /mnt
    • dump 0af - / | restore rf -
      • ここで、"warning: ./usr: File exists"等と言われるが問題無いので無視。
    • rm restoresymtable
  • /mnt/etc/fstabを修正する。こんな感じ。
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
/dev/wd0h /var ffs rw 1 2
/dev/wd0i /usr ffs rw 1 2
/dev/wd0j /home ffs rw 1 2
/dev/wd0e /Linux ext2fs rw,noauto 0 0
  • /mnt/etc/rc.conf.d/*や、/mnt/etc/rc.confも必要に応じて修正する。特に"no_swap=NO"(またはコメントアウト)を忘れずに。


ハードディスクからのブート(脳内手順)

  • USBメモリと同様に、ブートローダーからカーネルをブートさせる。やはりブートセレクタが有るとなお良い。
    • bootdev=0xa0000000 を指定。(wd0aの場合)
  • 後は同様。
    • ブートセレクタからハードディスクとUSBメモリ、(非常用ブートイメージ)を選択できるように準備するのが望ましい。

ハードディスクブート後の整備(脳内手順)

  • その他配布物を/で展開しておく。
    • comp.tgz
    • (games.tgz)
    • man.tgz
    • misc.tgz
    • text.tgz
    • (xbase.tgz)
    • (xcomp.tgz)
    • (xetc.tgz)
    • (xfont.tgz)
    • (xserver.tgz)
    • gnusrc.tgz
    • sharesrc.tgz
    • src.tgz
    • syssrc.tgz
    • (xsrc.tgz)
  • カーネルパッチやユーザランドパッチ(配布物)も当てておく。
  • pkgsrc.tgzは、/usrの下で展開しておく。
  • 余力があればバイナリパッケージをインストールする。もちろんpkgsrcを元にコンパイルするのも良し。
  • 後はご自由に...。


43609