Permalink: 2015-08-23 21:45:00+09:00 by ruy@ainoniwa.net in technical tags: freebsd bsdinstall social:

今日のお話

つい最近、ファイルサーバを新しくした のですけど、その時bsdinstallを使ったインストールも試したので、メモを残しておきます。

bsdinstall用のファイルを書く

前半にbsdinstallが使う変数指定、後半にインストール後の追加スクリプトと言うフォーマットで書きます。

今回作成したbsdinstallスクリプトは、こんな感じ。

export ZFSBOOT_DISKS="ada0"
export ZFSBOOT_POOL_CREATE_OPTIONS="-O compress=lz4 -O atime=off -O copies=2"
export nonInteractive="YES"
DISTRIBUTIONS="base.txz kernel.txz doc.txz"

#!/bin/sh
sysrc keymap="jp"
sysrc hostname="nas04.example.com"
sysrc ifconfig_igb0="up"
sysrc ifconfig_igb1="up"
sysrc cloned_interfaces="lagg0"
sysrc ifconfig_lagg0="laggproto loadbalance laggport igb0 laggport igb1"
sysrc ifconfig_lagg0_alias0="inet 192.168.0.34 netmask 255.255.255.0"
sysrc ifconfig_lagg0_ipv6="inet6 2001:db8::34 prefixlen 64"
sysrc defaultrouter="192.168.0.1"
sysrc ipv6_defaultrouter="2001:db8::1"
sysrc sshd_enable="YES"
sysrc local_unbound_enable="YES"

echo '$6$SALT$8AqhaFOMQZeP1y8APzP.N5ZdnpcG6yJaVStv1EKg8pT5h7n1/adC9k.rsGiS0fpaSYhv6ioW0xZq9f8/iZun7.' | pw usermod root -H 0
echo '$6$SALT$OCQItPkHG6Uo.njyHdFTaaSiAYzw82fgUdvwV2cCRpsdC/73j44tpDHlhHygR30m1mLzSoV9EQv5KsMKU6xPo.' | pw useradd user -H 0 -m -G wheel

echo 'kern.vty="vt"' >> /boot/loader.conf
echo 'if_lagg_load="YES"' >> /boot/loader.conf

echo 'nameserver 127.0.0.1' > /etc/resolv.conf
echo 'search example.com' >> /etc/resolv.conf
echo 'options edns0' >> /etc/resolv.conf

tzsetup Asia/Tokyo

poweroff

ルートシステムも全てZFSにして、ユーザも最初に作ってしまいます。

bsdinstallでインストールした場合の、デフォルトスライスは https://github.com/freebsd/freebsd/blob/master/usr.sbin/bsdinstall/scripts/zfsboot#L136 で確認しました。

個人的に、システムディスクは速度より壊れてほしくない感じなので、copies=2とかを追加している程度です。

デフォルトの compress=lz4 も中々驚きですけど、まぁシステムディスクだし構わないかな。

ZFSに関するパラメータは、bsdinstallがスクリプト中でexportしてくれないらしい(http://kunst1080.hatenablog.com/entry/2015/05/30/181955)ので、自分でexportしています。

FreeBSD 10-RELEASEになったら、自動でexportされるかと思ったけど、そんなことはなかった。

ユーザ追加に関するパスワードの事前生成については、別のマシンでこんな感じで先に取得しておいた。:

$ perl -e 'print crypt("password-example", "\$6\$SALT");'
$6$SALT$xXrpU2TfLmpwiZiw3a/ayN0OPO3pkNvs5v5q01hroRCycddUApGtEI2FQlR1fqgfPlVotW.6xVuSZ2MZcJo4//

参考: http://april.fool.jp/blogs/2013/09/freebsd-%E7%84%A1%E4%BA%BA%E3%81%A7%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E8%BF%BD%E5%8A%A0/

実行手順

CD(FreeBSD-10.1-RELEASE-amd64-disc1)を使用した場合で進行します。

先程のbsdinstallスクリプトをnas04.shとして、適当なWebサーバに置きます。(この辺の方法は各自で好きなようにして良いと思います。gistに貼るとか)

インストーラが起動後、 <SHELL> に入り、以下のように叩いて完了です。:

# dhclient igb0
# fetch -o /tmp/setup http://192.168.0.42/nas04.sh
# bsdinstall script /tmp/setup

ちなみに僕は学習しない馬鹿なので、Windowsで編集して改行コードを間違えて「あれれー?エラーが出るよー?」とか言ってました。死にたい。

おしまい

ちゃんと書けていれば、インストールしてシャットダウンまで自動的に進むので、事前のテストを踏まえて実機でインストールと言う流れも綺麗になるはずです。

もちろん、デバイス名(em0とかada0とか)は合わせる必要があるので、今のFreeBSDであればGUIのインストーラと会話した方が楽かもしれませんけどね。

おしまい。