これまで何度か取り上げましたが、FreeBSD 9.0から「bsdinstall」というセットアップツールが登場しました。
これを使用すると、非常に簡単にFreeBSDを自動インストールできます。ここでは、

1
bsdinstall script <スクリプト>

を使った自動インストールでの、引数に渡すスクリプトについて調べてみます。

基本形

マニュアルに記載されているサンプルは以下の内容となっています。

1
2
3
4
5
6
7
8
PARTITIONS=ada0
DISTRIBUTIONS="kernel.txz base.txz"

#!/bin/sh
echo "ifconfig_em0=DHCP" >> /etc/rc.conf
echo "sshd_enable=YES" >> /etc/rc.conf
pkg install puppet

このスクリプトは、シバン行(#!/bin/sh)によって、前半(preamble)と後半(setup script)に分かれます。

前半(preamble)

1
2
3
PARTITIONS=ada0
DISTRIBUTIONS="kernel.txz base.txz"

前半では、インストールで使用する環境変数の設定を行います。このサンプルで設定されている内容としては、以下の通りです。

  • PARTITIONS=ada0
    • インストール先のパーテイションはada0
    • ※PARTITIONSはscriptedpartターゲットで使用する環境変数
  • DISTRIBUTIONS="kernel.txz base.txz"
    • インストールするディストリビューションは kernel と base

後半(setup script)

1
2
3
4
5
#!/bin/sh
echo "ifconfig_em0=DHCP" >> /etc/rc.conf
echo "sshd_enable=YES" >> /etc/rc.conf
pkg install puppet

後半は、インストールが終わった状態から、新環境で実行されるシェルスクリプトです。
サンプルではrc.confの設定とpuppetのインストールを行っています。
風雨のシェルスクリプトなので、パスワードの設定や他の設定ファイルへの書き込みなど色々することができます。

任意のパーティション分割してインストールする

前半(preamble)で定義している環境変数「PARTITIONS」に、基本形では「ada0」のみを定義していますが、ここにscriptedpartで使用するパーティション定義を記述すれば、任意の形でパーティション分割することができます。

前半(preamble)

1
2
3
PARTITIONS="ada0 { 512M freebsd-ufs /, 1G freebsd-swap, 512M freebsd-ufs /var, auto freebsd-ufs /usr }"
DISTRIBUTIONS="base.txz kernel.txz"

上記の設定では以下のようにパーティション分割されます。

  • ufs / 1G
  • swap 512M
  • ufs /var 512M
  • ufs /usr 残り

パスワードの設定やユーザーの追加などを行う

後半(setup script)は普通のシェルスクリプトになっているので、そこに初期設定を行うコマンドを記述すればOKです。

後半(setup script)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
echo 'vagrant' | pw usermod root -h 0 -s /bin/tcsh
echo 'vagrant' | pw useradd -n vagrant -h 0 -m -s /bin/tcsh

export ASSUME_ALWAYS_YES=yes
cat < | xargs pkg install
  sudo
  curl
  bash
EOS

上記の設定では以下の設定を行っています

  • rootユーザーにパスワード「vagrant」を設定
  • 一般ユーザー「vagrant」を作成。パスワードは「vagrant」、ログインシェルは「tcsh」
  • pkg installを使って、sudo・curl・bashをインストール
その他、普通に各種設定ファイルの編集なども行えます。

参考URL