ライン

ポイント:怖いのはタイプミス

ライン

 はじめに

FreeBSD 9.0-RC2

 FreeBSD でネームサーバを久々に立ち上げます。
折角なので、年内リリースも怪しい?? 9.0のバージョンを、Root On ZFS @ FreeBSD 9 Current aisecure.net を参照し導入することにします。
 BIND は脆弱性のアナウンスがあったばかりで気が引けますが、リリースする頃には対処版も出てくるでしょう。
OSのもので動作させる予定です。

 動作環境は、ESX 4.1(無料のHypervisor)以下に作成したゲストOS環境。
手間が少なくてやっぱり便利です。

 導入

VMwareの設定

 今回もお金はかけていません。VMware Hypervisor を使います。

 こんな感じにしました。

OSの導入

 まずは、ISOイメージのダウンロードから。
ftp2.jp.freebsd.orgからFreeBSD-9.0-RC2-amd64-dvd1.iso を入手し、適当なフォルダにダウンロードしておきます。

Shell を選択します

 …のようにします。

# gpart create -s gpt da0
da0 created
# gpart create -s gpt da1
da1 created
# gpart add -b 34 -s 64K -t freebsd-boot -l boot0 da0
da0p1 added
# gpart add -b 34 -s 64K -t freebsd-boot -l boot1 da1
da1p1 added
# gpart add -s 4G -t freebsd-swap -l swap0 da0
da0p2 added
# gpart add -s 4G -t freebsd-swap -l swap1 da1
da1p2 added
# gpart add -t freebsd-zfs -l disk0 da0
da0p3 added
# gpart add -t freebsd-zfs -l disk1 da1
da1p3 added

 続いて先に進みます。

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
bootcode written to da0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
bootcode written to da1

 ここまで何もなしです。

# zpool create zroot mirror /dev/gpt/disk0 /dev/gpt/disk1
ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present ;
                        to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.
ZFS filesystem version 5
ZFS storage pool version 28
cannot mount '/zroot': failed to create mountpoint
# zpool set bootfs=zroot zroot
# zfs set checksum=fletcher4 zroot

 "cannot mount '/zroot': failed to create mountpoint" などはこの後も出ますが、無視して先に進めます。

# zfs set mountpoint=/mnt zroot
# zfs create zroot/usr
cannot mount '/mnt/usr': failed to create mountpoint
filesystem successfully created, but not mounted
# zfs create zroot/usr/home
※同じエラー
# zfs create zroot/var
※以降も同じエラーが出るので、以降は割愛して入力コマンドのみ
# zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
# zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
# zfs create -o exec=off -o setuid=off zroot/var/db
# zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
# zfs create -o exec=off -o setuid=off zroot/var/empty
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
# zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
# zfs create -o exec=off -o setuid=off zroot/var/run
# zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp

 …という、入力のミスをしないように注視しつつ先に進める作業となります。

# zpool export zroot
# zpool import -o cachefile=/tmp/zpool.cache zroot

 と、何もメッセージも出ずに戻ってきます。

# chmod 1777 /mnt/tmp
# cd /mnt ; ln -s usr/home home
# chmod 1777 /mnt/var/tmp

 同様に、ちゃっちゃと進めました。

 さて、次も元ページの通りにある通り、最小限でFreeBSDの導入作業に入ります。
※base lib32 kernelのみを入れます。

# sh
# cd /usr/freebsd-dist
# export DESTDIR=/mnt
# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
> do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done

 ここは、プロンプトが返ってくるまでに少々時間を要します。

 そろそろ終盤に入ってきました。

# cp /tmp/zpool.cache /mnt/boot/zfs/zpool.cache

 では、設定ファイル系の作成作業です。

# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
# 
cat << EOF > /mnt/etc/fstab# Device Mountpoint FStype Options Dump Pass#
/dev/gpt/swap0 none swap sw 0 0
/dev/gpt/swap1 none swap sw 0 0 
EOF

 という感じです。
 ただし、私は 101キーボード配置に慣れていないので大苦戦。
直接 vi で内容を入力してしまいました。

 こんなイメージでです。

 さて、最後のステップというところまで来ました。
書きながら作業すると、流石に1時間を超えますね…

# zfs set readonly=on zroot/var/empty
# zfs umount -a
cannot unmount '/mnt': Device busy 

 ちゃんと想定通りに、BUSY来ました。

# umount -f /mnt
# zfs set mountpoint=legacy zroot
# zfs set mountpoint=/tmp zroot/tmp
# zfs set mountpoint=/usr zroot/usr
# zfs set mountpoint=/var zroot/var

 shutdown -r nowを投入し、ディスクから正常にあがってくることを確認しましょう。

 はい、できあがりました。なるほど、FIXITなしでもできました。

 この後は、passwd でrootのパスワードをつけることや、ユーザの追加を行います。
その他の /etc/rc.conf の設定も行っておきましょう。(特にネットワーク関連)

 ネームサーバの設定

BIND 9

 結構意外だったですが、このホームページ上に公開している中で、ネームサーバ系は少ないままだったみたいです。
以前のページだと結構あったのですが、最近は機会が少なかったということみたいです。

 fkimura.com で最初にメモを公開したころは bind 4の時代でしたが、その後は Bind 8→9という時期がずっと続いています。
もちろん、これ以外のツールも出てきていますが、他に変更するだけの材料もなくそのまま使ってきています。
 …ということで、今回はFreeBSD 9.0系でBIND 9という一般的な設定のメモを記述していきます。

設定

 BIND 9は、FreeBSDに最初から導入されているので導入は不要です。

 ネームサーバなので、2つ以上(Master/Slave とか Primary/Secondaryみたいな位置づけ)のサーバが必要になります。
言い回しがコロコロ変わるのはわかりにくいので、設定が書かれているメイン側をプライマリ、それをコピー保持する側をセカンダリとここでは呼称することにします。

 セカンダリのサーバを作成するのは簡単です。named.confの記述に数行を書き加えるだけです。この部分の記述は、本ページには無関係ですが、最後に記載する予定です。
 本ページには、プライマリの設定についてを記述していきます。

 ネームサーバは、専用のマシンである必要はありません。メールサーバやウェブサーバと兼ねていても大丈夫な負荷を想定して大丈夫かと思います。ここでいうプライマリサーバは、外向けに名前を解決するサーバですので、セキュリティを保たれたサーバを構築する必要があります。そういう面でいえば、独立させたサーバである方が好ましいという意見も正しいかと思います。
 このページでは、大規模な組織のドメインを管理する話とは別に考えていただいて、参照いただくのが良いかと思います。

 いいわけを終えて本題です。
 /etc/named.conf /etc/resolv.conf がまずは中心となる設定ファイルとなります。
 /etc/resolv.conf は2行の記述程度で動作します。

domain               example.ne.jp
nameserver         192.168.50.240

のような記述が書かれているかも知れません。
 domainのレコードは、ネームサーバのメインとなっているドメインの記述としてください。
 また、nameserverのレコードは、自分がネームサーバとなるのですから、127.0.0.1 というレコードを追加するようにします。

domain               example.ne.jp
nameserver         127.0.0.1
nameserver         192.168.50.240

のようにすれば、最初の設定は終わりです。

 最後に

まだどこか勘違いあるのかも

 起動時に、カタカタっととまって動き出してという動きがまだ残っていますが、起動してしまえば普通に動作しています。
PC-BSDの導入を行った後のものがどうだったかは忘れてしまいましたが。

 もう少し、使ってみてページの追記を予定しています。
ネームサーバの設定は、後日にすることにしました。
(入力が多い分、手間が多かったです)

※現状他のマシンの面倒をみていたのでそのままこっちが作業できていません。今しばらく待ちです(11/29)


【改訂履歴】作成:2011/11/18 更新:2011/12/04

(その他の参照サイト)
ZFS, booting from - FreeBSDwiki
RootOnZFS-GPTZFSBoot - FreeBSD Wiki

デル株式会社

Copyright © 1996,1997-2006,2007- by F.Kimura,