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

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
bsdinstall script <スクリプト>
```を使った自動インストールでの、引数に渡すスクリプトについて調べてみます。<br/>
<br/>


<div class="section">
    ### 基本形
    マニュアルに記載されているサンプルは以下の内容となっています。
```sh
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)に分かれます。

<div class="section">
    #### 前半(preamble)
    ```sh
PARTITIONS=ada0
DISTRIBUTIONS="kernel.txz base.txz"

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

<ul>
<li>PARTITIONS=ada0
<ul>
<li>インストール先のパーテイションはada0</li>
<li>※PARTITIONSはscriptedpartターゲットで使用する環境変数</li>
</ul></li>
<li>DISTRIBUTIONS="kernel.txz base.txz"
<ul>
<li>インストールするディストリビューションは kernel と base</li>
</ul></li>
</ul>
</div>
<div class="section">
    #### 後半(setup script)
    ```sh
#!/bin/sh
echo "ifconfig_em0=DHCP" >> /etc/rc.conf
echo "sshd_enable=YES" >> /etc/rc.conf
pkg install puppet

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


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

<div class="section">
    #### 前半(preamble)
    ```sh
PARTITIONS="ada0 { 512M freebsd-ufs /, 1G freebsd-swap, 512M freebsd-ufs /var, auto freebsd-ufs /usr }"
DISTRIBUTIONS="base.txz kernel.txz"

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

<ul>
<li>ufs / 1G</li>
<li>swap 512M</li>
<li>ufs /var 512M</li>
<li>ufs /usr 残り</li>
</ul>
</div>
</div>
<div class="section">
    ### パスワードの設定やユーザーの追加などを行う
    後半(setup script)は普通のシェルスクリプトになっているので、そこに初期設定を行うコマンドを記述すればOKです。

<div class="section">
    #### 後半(setup script)
    ```sh
echo &#39;vagrant&#39; | pw usermod root -h 0 -s /bin/tcsh
echo &#39;vagrant&#39; | pw useradd -n vagrant -h 0 -m -s /bin/tcsh

export ASSUME_ALWAYS_YES=yes
cat &lt; | xargs pkg install
  sudo
  curl
  bash
EOS

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

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


</div>
</div>
<div class="section">
    ### 参考URL
    
<ul>
<li><a href="https://wiki.freebsd.org/BSDInstall">BSDInstall - FreeBSD Wiki</a></li>
<li><a href="https://www.freebsd.org/cgi/man.cgi?bsdinstall(8)">bsdinstall(8)</a></li>
<li><a href="http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man8/bsdinstall.8.html?l=ja">BSDINSTALL(8) - システム管理コマンド - YOS OPENSONAR</a></li>
<li><a href="https://github.com/freebsd/freebsd/blob/master/usr.sbin/bsdinstall/scripts/script">freebsd/script at master · freebsd/freebsd · GitHub</a></li>
<li><a href="https://github.com/freebsd/freebsd/blob/master/usr.sbin/bsdinstall/partedit/scripted.c">freebsd/scripted.c at master · freebsd/freebsd · GitHub</a></li>
</ul>
</div>