Appendix B. sysinst を使わないインストール

目次
B.1. パーティション作成とインストール進行の考え方
B.2. インストール実習

この appendix は Wojciech Puchar による寄稿です

この appendix は NetBSD version 1.5.2 を sysinst ユーティリティーなしにインストールする手助けとなるように書かれています。 なぜこれを使わないのかと思うかもしれません。いくつか可能性として有り得るものは:

この appendix がカバーするのは i386 機で OS としてディスクに NetBSD だけを入れる場合に ついてだけです。他の場合についての記述するのに十分な情報を持っていません。しかしながら、 i386 特有部分それぞれに註解するようにしました。 (充分でない英語表現の改善を含む)どんな寄稿も歓迎で wojtek@3miasto.net までメールを送ってください。 (訳者註:日本語化関連については作業者 itomako@JP.NetBSD.org まで)

基本的な Unix の知識 ( cd, ls, cp, tar とは何か) が 必要です。

B.1. パーティション作成とインストール進行の考え方

インストールは5段階から成り:

  1. 対象ディスクへのパーティション作成

  2. ファイルシステムの作成

  3. ブートローダーのインストール (機種依存、 sparc , shark 等では無操作)

  4. 目的パーティションへの配布ファイルの展開。

  5. 最終設定 ( /dev ノード、 /etc/fstab の作成、 hostname 設定、等..)

B.1.1. パーティション作成

パーティション作成は複雑にすることもできます。このドキュメントは、 どのパーティション構成が良いか悪いかについて討議するつもりはありません。 古典的な Unix パーティション構成の、 小さいルートパーティションとスワップパーティションひとつ、 その他全部には /usr パーティション を使うという構成について記述します。

このドキュメントや多くの NetBSD マニュアルで、しばしば "label""disk label" という語を目にするでしょう。 Disk label は、単に NetBSD (または BSD 一般) でのパーティション情報を意味します。 それで、ディスクラベルの作成とはパーティション作成を意味します。

B.1.2. スワップパーティションの大きさ

もし、メモリが絶対に不足しないと自身があるなら、 スワップは必要ではなくて、この部分を省略できます。 しかしながら、 今日の巨大なドライブではスワップにいくらかの容量を 与えることは問題ではなく、一度に多くのプログラムを開始できて、 快適になります。

スワップパーティションの大きさには "魔法の法則" はありません。唯一のルールとして スワップ不足に陥る事の無いように充分な量があると良いということで、 不足すると、最後に起動したプログラムではなく、メモリー割り当てを必要とする 動作中のプロセスが殺されます。 それが /sbin/init であったりするかもしれなくて、そうするとシステムがクラッシュするでしょう。 大きな >10GB ドライブなら単に 500MB かもう少しをスワップにします。唯一の問題は、スワップを作ると i386の 1ページ (4kB) ごとに 16バイトの物理 RAM への静的割り当てがあるということで、 スワップ 256MB で 1MB のメモリーが使われます。 それで - 128 MB の機械で スワップ 512MB を割り当てるとメモリー 2MB が ロックされます。 それは悪くなくても 16MB の機械では問題だと思います。 要約すると - ドライブが大きければ単にいっぱいとればいいです。でない場合は - そのマシン上で走らせる全アプリケーションがどれだけのメモリーが 必要か考えましょう。

B.1.3. スワップパーティションの 配置

スワップはどこにおいても同じだと思うかもしれません。 (MFM のもののような)非常に古いドライブでは 違いはありません。現代の("現代" = 80-120MB とか、もっと大きい)ドライブでは、 長さの違いのために、外側のトラックは内側のトラックより多くのデータが書き込まれます。 これによって、外側のトラックではデータの I/O が速く、 - 論理ドライブのはじめのほうです。(例外があればぜひ教えてください)。 なので、スワップは後ろに置くより 始めに置くほうが高速です。

B.1.4. ファイルシステム

NetBSD では一般に "ffs" または "ufs" (Fast File System または Unix File System) というファイルシステムを使います。 "fast" は "世界一高速" ではないのですが、一般利用には適していて クラッシュに強いメカニズムを持っています。 "newfs" コマンドは 何のパラメーターを与えなくても動きますが、最適化することは価値があります。 変更する価値のあるパラメーターについて 簡単に書くと:

-m (パーセンテージ)

何パーセントを予約領域にしておくかを設定します。 標準の 10% はちょっと大きくて、 5% でも問題ありません。 しかし、 ffs ファイルシステムは、ぎっしりと詰めると遅くなります。

-b (ブロックサイズ)

1ブロックが何バイトかを設定します。大きなディスクには 8192 (8 KB) 、 本当に小さいディスク (<500MB) には、容量節約の為に 4096 にします。 より大きなブロックを使うことで高速化されるわけではなく、しかし 容量を無駄に使います。どうしても意味を見出すなら、 mp3 のような 大きなファイルばかりを入れておく場合でしょう。

-f (フラグメントサイズ)

フラグメントサイズを設定します。ブロックは 最大8つに分割され、 使わない理由はありません。なので、フラグメントサイズは ブロックサイズの 1/8 にし:4096 bytes/blocks には 512 、 8192 bytes/blocks には 1024 です。これはファイルの最小配置単位 (Windows でのクラスターのようなもの)です。

-i (data/inode バイト)

inode は記録ファイル情報のためのデータ構造です。ファイルひとつにつき 少なくともひとつ必要で、 ffs のファイルデータ付近に 置くことが望まれます。 標準の 4096 は大きなドライブには大きすぎで、 これは、 20GB のドライブに 500万のファイルという意味です。 大雑把な見積もりでは、 >2GB なドライブには -i 16384 を、 >8GB なドライブには -i 32768 を使うと良いと思います。 inode 1つは 128 バイトなので 大きな値を使うことは消費容量の節約にはなりません。

私が >10GB パーティション用に使ってるのは

newfs -m 5 -b 8192 -f 1024 -i 32768 /dev/{partition_name}

どうか、 newfs のマニュアルを時々読んでください。

B.1.5. ブートローダーのインストール

起動プロセスでは、カーネルイメージ (普通 /netbsd と言う名前) はディスクから取得されメモリに置かれなければなりません。 PC-BIOS (他のアーキテクチャーでは他のファームウェアーのコード) は ファイルシステムのような概念を知らなくて、ディスクの最初のセクターをロードして そのコードを実行することだけができます。このコードはブートローダーがドライブのどこに 置かれているかを決定してロードします。ブートローダーそれ自体がファイルシステムのことを知っていて、 ディスクからカーネルの最終的なロードができます。ブートセクターとして 位置のデータが書かれていなければならないため、 ブートローダー (/boot ファイル) を単に target パーティションにコピーすることはできなくて、 次のコマンド:

# /usr/mdec/installboot -v /usr/mdec/biosboot.sym /dev/rwd0a

とするとしてくれます。 Linux と違って、それは一回だけで なければなりません。

配布 tarball の展開とシステムの最終設定には 理屈は必要ないので、次の節を 読んでください。

B.2. インストール実習

各例で、あなたのディスクドライブの NetBSD での名前を wd0 、 (もしあれば) CD ドライブ を cd0 とし、(ついていれば) イーサネットカードを ep0 とします。実際の名前が異なるなら、例中のものを 読み替えてください。

B.2.1. Boot

インストールフロッピー CD を起動します。 sysinst メニューが 出たら "x - exit to shell" を選びます。 dmesg | more コマンドを打って、ハードウェアの名前を調べ/確認します。 例えばこうならば:

wd0 at pciide0 channel 0 drive 0: <ST320423A>
wd0: drive supports 32-sector pio transfers, lba addressing
wd0: 19536 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 40011300 sectors
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 4

これはドライブが 自分が "ST320423A" (ST は大抵 Seagate の意味) で、最初のチャンネルの IDE コントローラーのマスターにつながっていて、 512 バイトのセクター 40011300 から成っていて、大きさが約 19GB であることを示しています。 メーカーが言う大きさより少し (5-8%) 小さい値であっても 正常です。メーカーは大抵 "gigabyte" と言う語を billion (1000000000) としていて コンピューターの "giga" 、 2^30 ではありません。 2^30=1073741824 で 7.4% の違いです。

これが出たら:

ep0 at pci0 dev 10 function 0: 3Com 3c590 Ethernet
ep0: interrupting at irq 9
ep0: address 00:20:af:f7:cd:71, 32KB byte-wide FIFO, 1:1 Rx:Tx split
ep0: 10baseT, 10baseT-FDX, 10base5, 10base2 (default 10baseT)

これはイーサネットカードに ep0 と言う名前が当てられたということです。 メッセージのほとんどは自己説明的で、初級者にも読む価値が あります。

B.2.2. ディスクの初期化

NetBSD だけのシステムが欲しいので、 ディスクに作成する前に全パーティションを掃除できます。次のコマンド:

# dd if=/dev/zero of=/dev/rwd0d bs=1m count=1

でドライブの最初の1メガバイトを 0 で拭い去ります。

/dev/rwd0d の意味は: ディスク wd0 の raw パーティション d です。 d パーティションは i386 では常に、ディスク全体を示す 擬似パーティションです。 "Raw" とは、システムがバッファリングしないものを意味し、 ここではする必要がないのです。

B.2.3. パーティション作成のための disklabel 利用

# disklabel -I -i wd0

clean ドライブ上にパーティション/ラベルを書きます。既存のラベルの変更には -I を付けないでください。

プロンプトが出て:

partition> 

入力できるようになります。最も重要なコマンドは ? (ヘルプ), I (ディスク情報全般設定)と 小文字の a から h (パーティション a, b, c, ..., h の情報設定)です。

I から始めます。 disk type (標準を使います) 、 disk name (同) 、 label name を尋ねられます。 label name は何を入れても良く、 入れることは役に立ちます。 誰かがドライブを 盗んだときに見つけるのに使えます。 DOS/Windows の fdisk では 消えません。

パーティション数: 8 か、本当に必要ならそれ以上を指定します。 他のジオメトリー情報関連のオプションは現代のディスクドライブでは 偽の情報なのでそのままにしておきます。

ここで、パーティションを作ります。パーティション d と c はディスク全体を示し:

partition> d
Filesystem type [?] [unused]: 
Start offset [0c, 0s, 0M]: 0s
Partition size ('$' for all remaining) [39693.8c, 40011300s, 19536.8M]: $
partition> c
Filesystem type [?] [unused]: 
Start offset [0c, 0s, 0M]: 0s
Partition size ('$' for all remaining) [39693.8c, 40011300s, 19536.8M]: $

註: i386 ポートでは、 d パーティションはディスク全体に及び、 c パーティション はディスクの NetBSD 部分を扱います。この例では、 NetBSD はディスク全体を使い、 c パーティション d パーティションは等しくなります。

それから、ディスクの始めのほうからパーティションを作ります。 伝統的な Unix のパーティション法では、約 50MB を "a" パーティションにします。 /var/home パーティションをわけて作らずに、 スプールにたくさんのメールを入れたり /tmp or /home で何かするなどの場合は、これ("a")を大きくしてください。

partition> a
Filesystem type [?] [unused]: 4.2BSD
Start offset [0c, 0s, 0M]: 0s
Partition size ('$' for all remaining) [0c, 0s, 0M]: 100000s

100000 セクターは約 50MB (少し小さい)

2番目 (swap) は約 585MB で:

partition> a
Filesystem type [?] [unused]: swap
Start offset [0c, 0s, 0M]: 100000s
Partition size ('$' for all remaining) [0c, 0s, 0M]: 1200000s

そして、 /usr パーティション (e) はドライブの 最後まで:

partition> e
Filesystem type [?] [unused]: 4.2BSD
Start offset [0c, 0s, 0M]: 1300000s
Partition size ('$' for all remaining) [0c, 0s, 0M]: $

ここで P で、おかしなところがないことを 確認し:

partition> P
8 partitions:
#        size   offset     fstype   [fsize bsize cpg/sgs]
  a:   100000        0     4.2BSD        0     0    0   # (Cyl.    0 - 99*)
  b:  1200000   100000       swap                       # (Cyl.   99*- 1289*)
  c: 40011300        0     unused        0     0        # (Cyl.    0 - 39693*)
  d: 40011300        0     unused        0     0        # (Cyl.    0 - 39693*)
  e: 38711300  1300000     4.2BSD        0     0    0   # (Cyl. 1289*- 39693*)

註: 必ず絶対に、(c と d を除いて) パーティションが 重複しないようにしてください! 2度は確認してください。

ここでこう打って:

partition> W
Label disk [n]? y
Label written
partition> Q

ディスクラベルを書き終えます。おめでとうございます - いちばん 難しい部分が終わりました!

B.2.4. ファイルシステムの作成とブートローダーのインストール

小さいルートパーティションには:

# newfs -m 5 -b 4096 -f 512 /dev/rwd0a

大きなパーティションには:

# newfs -m 5 -b 8192 -f 1024 -i 32768 /dev/rwd0<partition name>

どうか 最初に前節の theory を読んで、 むやみにこのコマンドを繰り返さないでください。

ここで、ブートローダーをインストールします:

# /usr/mdec/installboot -v /usr/mdec/biosboot.sym /dev/rwd0a

B.2.5. インストールファイルの展開

パーティションを /mntにマウントします:

# mount -o async,noatime /dev/wd0a /mnt
# mkdir /mnt/usr
# mount -o async,noatime /dev/wd0e /mnt/usr
...
もっと作っていれば、もっと
...

async オプションと noatime オプションは必須ではありません。これは安全性よりもファイルシステムの 速度を好むというだけです。ここでは crash した場合また消すことができるので Crash 保護は重要ではありません。

次のセクションに一般的なインストール方法のいくつかを 記述します:

CDROM
FTP
NFS

B.2.5.1. CDROM からのインストール

# mount_cd9660 /dev/cd0a /mnt2
# cd /mnt2/where_distribution_files_are

大抵は i386/binary/sets です。確かではないときは 一歩一歩 cd して ls してください。

ls をし、必要なファイルを /mnt/usr に cp します。最低限でも base.tgzetc.tgzkern.tgz はインストールするべきです。大きなドライブには kern*.tgz 以外、単に全部をコピーし、 カーネルは1つだけのコピーが必要です。

ここで cd / をして umount /mnt2 すると CD を取り出すことができるようになります。

B.2.5.2. FTP サーバーからのインストール

ネットワークを動くようにします。例えば、 IP が 192.168.3.7 で ネットワークマスクが 255.255.255.0 (24 bit) ならこのように入力し:

# ifconfig ex0 192.168.3.7/24 up

カードが自動検出しなかったり、正しくなかったりする場合、必要に応じて "media 10base2" や "media 10baseT" や "media 100baseT"を付け加えてください。 より詳しいことは、 ifconfig のマニュアルページを参照してください。

(この方がよいのですが)もし FTP サーバーがローカルネットワーク上に無ければ、 デフォルトルートの追加をします:

# route add default 192.168.3.1

そして ファイルがあるサーバーに ftp します。 ここでは、名前ではなくて、 IPアドレスを使うことが 必要 なのです。

# cd /mnt/usr
# ftp 192.168.3.13

ログインし、配布ファイルのある場所へディレクトリーの移動をし、 ls をして、必要な全てのファイルを get コマンドで取得します。そしてログアウトします。

B.2.5.3. NFS を通したコピー

as in 3.e.2. でネットワークを立ち上げ、

# mount IP-of-your-nfs-server:/directory /mnt2

例えば:

# mount 192.168.3.13:/public/ /mnt2

それから CD からのインストールのように続けます。例えば:

# cd /mnt2/NetBSD-1.5.2/i386/binary/sets
# ls

そして、必要なファイルすべてをコピーします。それから

# cd /
# umount /mnt2

B.2.5.4. テープからのコピー

デスクトップ機には大抵テープドライブがついてはいませんが、 サーバーには大抵は付いていて、無駄に場所を占有するので CDROM ドライブが有りません。 テープからのインストールは非常に簡単で; 生憎にも PC はテープからの起動が できないのでフロッピーから起動しなければなりません。

インストールテープの準備にはテープドライブのついた 他の機械が必要です。

テープを巻き戻し:

# mt rewind

SCSI テープのブロックサイズ制限を解除します

# mt setblk 0

これで標準では非常に小さなブロックサイズ値をどんな値にも変えられるようになります。 ブロックを大きくすると速くなり、 DAT/DDS ドライブに便利です。

!!!警告!!! 他のテープドライブで動かなかったら、 情報の添削してください。

ここで、目的機のテープドライブが異なっていて、圧縮データを 読めないかもしれないので圧縮を止めます。圧縮は既に圧縮されたファイルには 効果が無く、それどころか、圧縮率がマイナスになることすらあります。 (HP DDS ドライブでは -15% までなりました!):

# mt compression 0

それから配布ファイルを書きこみます:

# cd /where_are_distribution_files
# tar -b64 -cvf /dev/nrst0 *.tgz

最後のコマンドはすべての tgz を、ブロックサイズ 64*512 bytes=32 kB で書きます。 これはあらゆる DAT に対して良く試行された ブロックサイズです。

/dev/nrst0 (最初に巻き戻しをしない SCSI テープドライブ) を使って、例えばエディターのような基本パッケージなど いくつか他のアーカイブも書くことができます。

# cd /where_are_packages/All
# tar -b64 -cvf /dev/nrst0 joe*.tgz screen*.tgz

これで joe テキストエディターと screen プログラムだけが書き出されます。 このファイルには、いっぱい詰めこまないでください。

ここで、システムがマルチユーザーで動作するようになった後インストールする 他のパッケージを書き出します。

# tar -b64 -cvf /dev/nrst0 all_packages_you_will_need

または、こうかもしれません

# tar -b64 -cvf /dev/nrst0 *.tgz

ここでテープを巻き戻しアンロードします:

# mt rewoffl

インストールテープができました! DDS ドライブは下位互換性があって、 おうちマシンに安い中古の DDS-1 か DDS-2 のテープドライブを買うと便利かもしれません。 そういうテープが手に入れば、もちろん、おうちマシンのバックアップができます。 非常に結構なことで - 私には $30 の価値があります :)

B.2.5.4.1. テープからのインストール

ドライブにテープを装着し:

# mt rewind
# mt setblk 0
# cd /mnt/usr
# tar -b64 -xvf /dev/nrst0

B.2.6. 配布セットの展開

vi が好きではなければ、いくつかの小型特別パッケージ、ここではとりわけ (joe 、 jed のような) vi と異なるエディターのをコピーすることは悪い考えではありません。 パッケージを /mnt/usr ではなく! /mnt にコピーします。 もちろんファイル転送法は NFS 、テープドライブ、あるいはフロッピーとあらゆる方法が選べます。

tarball を展開し:

# cd /mnt
# for x in usr/*.tgz;do tar xzpvf $x;done
# rm usr/*.tgz

あるいはこっちのほうが好きなら、一つ一つ

# tar xzpvf /usr/base.tgz

もし、ひとつの大きな /usr パーティションにしたなら、 /tmp と /var 、 /home を /usr に移動してリンクにするのは悪い考えではありません。

# cd /mnt
# tar cvf - var home tmp|(cd usr;tar xpvf -)
# rm -rf var home tmp
# ln -s usr/var .
# ln -s usr/home .
# ln -s usr/tmp .

この作業は var と home が usr に移し、リンクを作る作業です。

まだ他のパッケージを展開しないでください!

B.2.7. インストールの仕上げ

/dev ノード を全部作ります( 486 では 時間がかかります!):

# cd /mnt/dev
# ./MAKEDEV all

ここで cd /mnt/etc をし、 fstab を作ります。 vi が使えますが、使いたくないか知らない場合は、単にこうして:

# cat > fstab
# /dev/wd0a / ffs rw,softdep,noatime 1 1
# /dev/wd0b none swap sw 0 0
# /dev/wd0e /usr ffs rw,softdep,noatime 1 1
# ^D (control-D)

ここで、正確であることを確認して:

# cat fstab

良いのだったら、 CD またはフロッピーを取り出し reboot と打って、 シングルユーザーで起動するのを待ちます!

shell を手に入れて

# /sbin/mount -a

と入力し、全ファイルシステムを読み書きできるようにマウントします。 エディター等のパッケージを持っていれば、 pkg_add でインストールします。そして tarball を rm で消します。

ここで /etc/rc.conf/etc/defaults/rc.conf 、その他のファイルの編集が必要です。 標準の INSTALL ドキュメントの設定法についてを読んでください。一般的に /etc/rc.conf

rc_configured=YES
を設定し、 /etc/defaults/rc.conf に hostname を設定するだけで システムの動作には充分です。

^D (Control-D) を打つと、マルチユーザーへの移行ができます。 インストールは成功しました。