この appendix は Wojciech Puchar による寄稿です
この appendix は NetBSD version 1.5.2 を sysinst ユーティリティーなしにインストールする手助けとなるように書かれています。 なぜこれを使わないのかと思うかもしれません。いくつか可能性として有り得るものは:
非標準のディスクラベルや fs オプションにすることができる
簡単だから (はい、そうです!)
システムについて全部自分で把握して制御したい人 がいるから(私のように)
インストールフロッピーに他の便利なツールを入れるために ディスクの空きが欲しくて sysinst を抜くかもしれない
この appendix がカバーするのは i386 機で OS としてディスクに NetBSD だけを入れる場合に ついてだけです。他の場合についての記述するのに十分な情報を持っていません。しかしながら、 i386 特有部分それぞれに註解するようにしました。 (充分でない英語表現の改善を含む)どんな寄稿も歓迎で wojtek@3miasto.net までメールを送ってください。 (訳者註:日本語化関連については作業者 itomako@JP.NetBSD.org まで)
基本的な Unix の知識 ( cd, ls, cp, tar とは何か) が 必要です。
インストールは5段階から成り:
対象ディスクへのパーティション作成
ファイルシステムの作成
ブートローダーのインストール (機種依存、 sparc , shark 等では無操作)
目的パーティションへの配布ファイルの展開。
最終設定 ( /dev ノード、 /etc/fstab の作成、 hostname 設定、等..)
パーティション作成は複雑にすることもできます。このドキュメントは、 どのパーティション構成が良いか悪いかについて討議するつもりはありません。 古典的な Unix パーティション構成の、 小さいルートパーティションとスワップパーティションひとつ、 その他全部には /usr パーティション を使うという構成について記述します。
このドキュメントや多くの NetBSD マニュアルで、しばしば "label" や "disk label" という語を目にするでしょう。 Disk label は、単に NetBSD (または BSD 一般) でのパーティション情報を意味します。 それで、ディスクラベルの作成とはパーティション作成を意味します。
もし、メモリが絶対に不足しないと自身があるなら、 スワップは必要ではなくて、この部分を省略できます。 しかしながら、 今日の巨大なドライブではスワップにいくらかの容量を 与えることは問題ではなく、一度に多くのプログラムを開始できて、 快適になります。
スワップパーティションの大きさには "魔法の法則" はありません。唯一のルールとして スワップ不足に陥る事の無いように充分な量があると良いということで、 不足すると、最後に起動したプログラムではなく、メモリー割り当てを必要とする 動作中のプロセスが殺されます。 それが /sbin/init であったりするかもしれなくて、そうするとシステムがクラッシュするでしょう。 大きな >10GB ドライブなら単に 500MB かもう少しをスワップにします。唯一の問題は、スワップを作ると i386の 1ページ (4kB) ごとに 16バイトの物理 RAM への静的割り当てがあるということで、 スワップ 256MB で 1MB のメモリーが使われます。 それで - 128 MB の機械で スワップ 512MB を割り当てるとメモリー 2MB が ロックされます。 それは悪くなくても 16MB の機械では問題だと思います。 要約すると - ドライブが大きければ単にいっぱいとればいいです。でない場合は - そのマシン上で走らせる全アプリケーションがどれだけのメモリーが 必要か考えましょう。
スワップはどこにおいても同じだと思うかもしれません。 (MFM のもののような)非常に古いドライブでは 違いはありません。現代の("現代" = 80-120MB とか、もっと大きい)ドライブでは、 長さの違いのために、外側のトラックは内側のトラックより多くのデータが書き込まれます。 これによって、外側のトラックではデータの I/O が速く、 - 論理ドライブのはじめのほうです。(例外があればぜひ教えてください)。 なので、スワップは後ろに置くより 始めに置くほうが高速です。
NetBSD では一般に "ffs" または "ufs" (Fast File System または Unix File System) というファイルシステムを使います。 "fast" は "世界一高速" ではないのですが、一般利用には適していて クラッシュに強いメカニズムを持っています。 "newfs" コマンドは 何のパラメーターを与えなくても動きますが、最適化することは価値があります。 変更する価値のあるパラメーターについて 簡単に書くと:
何パーセントを予約領域にしておくかを設定します。 標準の 10% はちょっと大きくて、 5% でも問題ありません。 しかし、 ffs ファイルシステムは、ぎっしりと詰めると遅くなります。
1ブロックが何バイトかを設定します。大きなディスクには 8192 (8 KB) 、 本当に小さいディスク (<500MB) には、容量節約の為に 4096 にします。 より大きなブロックを使うことで高速化されるわけではなく、しかし 容量を無駄に使います。どうしても意味を見出すなら、 mp3 のような 大きなファイルばかりを入れておく場合でしょう。
フラグメントサイズを設定します。ブロックは 最大8つに分割され、 使わない理由はありません。なので、フラグメントサイズは ブロックサイズの 1/8 にし:4096 bytes/blocks には 512 、 8192 bytes/blocks には 1024 です。これはファイルの最小配置単位 (Windows でのクラスターのようなもの)です。
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 のマニュアルを時々読んでください。
起動プロセスでは、カーネルイメージ (普通 /netbsd と言う名前) はディスクから取得されメモリに置かれなければなりません。 PC-BIOS (他のアーキテクチャーでは他のファームウェアーのコード) は ファイルシステムのような概念を知らなくて、ディスクの最初のセクターをロードして そのコードを実行することだけができます。このコードはブートローダーがドライブのどこに 置かれているかを決定してロードします。ブートローダーそれ自体がファイルシステムのことを知っていて、 ディスクからカーネルの最終的なロードができます。ブートセクターとして 位置のデータが書かれていなければならないため、 ブートローダー (/boot ファイル) を単に target パーティションにコピーすることはできなくて、 次のコマンド:
# /usr/mdec/installboot -v /usr/mdec/biosboot.sym /dev/rwd0a
とするとしてくれます。 Linux と違って、それは一回だけで なければなりません。
配布 tarball の展開とシステムの最終設定には 理屈は必要ないので、次の節を 読んでください。
各例で、あなたのディスクドライブの NetBSD での名前を wd0 、 (もしあれば) CD ドライブ を cd0 とし、(ついていれば) イーサネットカードを ep0 とします。実際の名前が異なるなら、例中のものを 読み替えてください。
インストールフロッピー 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 と言う名前が当てられたということです。 メッセージのほとんどは自己説明的で、初級者にも読む価値が あります。
NetBSD だけのシステムが欲しいので、 ディスクに作成する前に全パーティションを掃除できます。次のコマンド:
# dd if=/dev/zero of=/dev/rwd0d bs=1m count=1
でドライブの最初の1メガバイトを 0 で拭い去ります。
/dev/rwd0d の意味は: ディスク wd0 の raw パーティション d です。 d パーティションは i386 では常に、ディスク全体を示す 擬似パーティションです。 "Raw" とは、システムがバッファリングしないものを意味し、 ここではする必要がないのです。
# 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
ディスクラベルを書き終えます。おめでとうございます - いちばん 難しい部分が終わりました!
小さいルートパーティションには:
# 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
パーティションを /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 |
# mount_cd9660 /dev/cd0a /mnt2 # cd /mnt2/where_distribution_files_are
大抵は i386/binary/sets です。確かではないときは 一歩一歩 cd して ls してください。
ls をし、必要なファイルを /mnt/usr に cp します。最低限でも base.tgz と etc.tgz 、 kern.tgz はインストールするべきです。大きなドライブには kern*.tgz 以外、単に全部をコピーし、 カーネルは1つだけのコピーが必要です。
ここで cd / をして umount /mnt2 すると CD を取り出すことができるようになります。
ネットワークを動くようにします。例えば、 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 コマンドで取得します。そしてログアウトします。
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
デスクトップ機には大抵テープドライブがついてはいませんが、 サーバーには大抵は付いていて、無駄に場所を占有するので 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 の価値があります :)
ドライブにテープを装着し:
# mt rewind # mt setblk 0 # cd /mnt/usr # tar -b64 -xvf /dev/nrst0
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 に移し、リンクを作る作業です。
まだ他のパッケージを展開しないでください!
/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) を打つと、マルチユーザーへの移行ができます。 インストールは成功しました。