Help us understand the problem. What is going on with this article?

bsdinstallを使用したFreeBSDの自動インストールについて

More than 5 years have passed since last update.

bsdinstallについて最近ブログでいろいろ書いてたので、Qiitaにもまとめて書き残しておきます。

bsdinstallとは???

FreeBSD 9.0から登場した、FreeBSDのインストーラです。
Linuxで言うところのAnacondaのようなものでしょうか。

「FreeBSDのインストール」というと、Gentoo LinuxやArch Linuxのような難しいものを想像されるかもしれませんが、bsdinstallを使用すると非常に簡単にインストールできます。

自動インストールする場合の呼び出し方は、以下のようになっています。

bsdinstall script スクリプトファイル

このポストでは、この呼び出しで使用するスクリプトファイルについて書きます。

基本形

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

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)

前半では、インストールで使用する環境変数の設定を行います。

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

後半(SETUP SCRIPT)

後半は、インストールが終わった後、新環境で実行されるシェルスクリプトです。

#!/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)

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)は普通のシェルスクリプトになっているので、そこに初期設定を行うコマンドを記述すれば自由にプロビジョニングできます。

後半(SETUP SCRIPT)

vagrant用のマシンを作成したときの設定の一部です。

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 <<EOS | xargs pkg install
  sudo
  curl
  bash
EOS

上記の設定では以下の設定を行っています
- rootユーザーにパスワード「vagrant」を設定
- 一般ユーザー「vagrant」を作成。パスワードは「vagrant」、ログインシェルは「tcsh」
- pkg installを使って、sudo・curl・bashをインストール

ZFSへ、自動レイアウトでインストールする

前半(PREAMBLE)へ、環境変数 PARTITIONS の代わりに ZFSBOOT_DISKS を記述すればZFSへインストールすることができます。

ただし、以下の2点の注意が必要です。
- 自動インストールする場合は、環境変数 nonInteractive の設定も行う
- 環境変数 ZFSBOOT_DISKSnonInteractive はexportする

特に2点目については注意が必要です。

(scriptターゲットのソースを見てみた感じではおそらく、 DISTRIBUTIONS はexportされていたのに ZFSBOOT_DISKS などはexportされていなかったので、それが原因かと……)

前半(PREAMBLE)

export ZFSBOOT_DISKS=ada0
export nonInteractive="YES"
DISTRIBUTIONS="base.txz kernel.txz"

上記の設定では、デフォルト設定でZFSパーティションが作成されました。
- ディスク:ada0
- デバイスタイプ:stripe
- プール名:zroot
- パーティションスキーム:GPT
- スワップサイズ:2G
- マウントポイント

zroot none
zroot/ROOT none
zroot/ROOT/default /
zroot/tmp /tmp
zroot/usr /usr
zroot/usr/home /usr/home
zroot/usr/ports /usr/home
zroot/usr/src /usr/home
zroot/var /var
zroot/var/crash /var/crash
zroot/var/log /var/log
zroot/var/mail /var/mail
zroot/var/tmp /var/tmp

ZFSへ、カスタムレイアウトでインストールする

環境変数 ZFSBOOT_DATASETS を設定することで、自由にZFSレイアウトを作成できるようです。

とりあえず、/・/tmp・/usr・/varで分割してみます。

前半(PREAMBLE)

export ZFSBOOT_DISKS=ada0
export ZFSBOOT_DATASETS="
    /ROOT                mountpoint=none
    /ROOT/default        mountpoint=/

    /tmp        mountpoint=/tmp,exec=on,setuid=off
    /usr        mountpoint=/usr,canmount=off
    /var        mountpoint=/var,canmount=off
" 
export nonInteractive="YES"
DISTRIBUTIONS="base.txz kernel.txz"

上記の設定では、以下の設定でZFSパーティションが作成されました。
- マウントポイント

zroot none
zroot/ROOT none
zroot/ROOT/default /
zroot/tmp /tmp
zroot/usr /usr
zroot/var /var

※ZFSへの自動インストール時に使用する環境変数については、zfsbootのソースコードにわかりやすく記述されているので、確認してみるのも良いと思います。

軽いまとめ

見てきたように、bsdinstallを使用すると非常に簡単な記述でもってFreeBSDをインストールすることができます。

FreeBSDはGUI環境を作るのは難しいですがCUIでしか使用しないのであればとても素直でいい子ですし、また、最近はpkgngなど、入門者でも使いやすくなってきています。

この機会に是非入れて使って遊んでみる人がふえてくれればなぁ…なんて思って〼。

参考URL

kunst1080
Play + Javaで小規模WEBサービス作ってるかも
http://kunst1080.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした