FreeBSDでサーバ運用を始める(1)

最近FreeBSD使いの学生が増えそうな感じなので、FreeBSD での「サーバ運用」に必要な初歩的知恵をまとめることにした。 第一段はインストールとインストール後の設定について。

本文書はFreeBSD10.3時点のものである。

インストールでの設定

ファイルシステム

インストーラで最初の方に聞かれる「ファイルシステム」は、 FreeBSD/amd64 でメモリが4GB以上あるならまよわず「ZFS」にする。 それ以外はデフォルトの「UFS」であよい。UFSの場合、デフォルトでは 単一(/)パーティションになっているが、書き込みの激しい /var にトラブルが出たときを考えるとやっぱりまだ分けた方がよい。 経験的には最低

/4GB(以上)
/var4GB(以上)
/usr残り全部

くらいは分けた方がよい。

ユーザ

インストーラで聞かれる初期ユーザについて、 自分自身を追加することになるがこのときのグループは wheel と operator にしておく。前者はスーパーユーザが属するグループ、 後者はシャットダウン可能ユーザが属するグループであり、 最初からそこに入っていた方が面倒がない。とくにFreeBSDはデフォルトでは sudo がないので最初に wheel グループに入っておかないといちいち root でログインしないといけない。

OSアップグレードのための設定

FreeBSDインストール後に考えるべきは、 その後のOSアップグレードをどうするか、である。 巷には freebsd-update コマンドの説明があり、確かに楽ちんだが「遅い」。 *BSD はソースレベルで追いかける方が全体的にやりやすい。

FreeBSDのどのブランチを追いかけるか、 https://www.freebsd.org/releng/ にあるが、 「FreeBSDサーバ運用」という観点ではズバリ、stable/MAJOR ブランチを追いかけるのがよい。STABLE ブランチはFreeBSDの各メジャーバージョンにおける安定的開発版といえる。

cd /usr/src
svnlite co svn://svn.freebsd.org/base/stable/10
mv 10/* 10/.??* .
svnlite info
Path: .
Working Copy Root Path: /usr/src
URL: svn://svn.freebsd.org/base/stable/10
Relative URL: ^/stable/10
Repository Root: svn://svn.freebsd.org/base
Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Revision: 299060
Node Kind: directory
Schedule: normal
Last Changed Author: ngie
Last Changed Rev: 299059
Last Changed Date: 2016-05-04 16:39:23 +0900 (Wed, 04 May 2016)

これで、/usr/src に FreeBSD10 の STABLE ブランチソースが得られる。 あとは、Makefile の中程に書いてある手順書を見る。

/usr/src/Makefile より

# For individuals wanting to upgrade their sources (even if only a
# delta of a few days):
#
#  1.  `cd /usr/src'       (or to the directory containing your source tree).
#  2.  `make buildworld'
#  3.  `make buildkernel KERNCONF=YOUR_KERNEL_HERE'     (default is GENERIC).
#  4.  `make installkernel KERNCONF=YOUR_KERNEL_HERE'   (default is GENERIC).
#       [steps 3. &4. can be combined by using the "kernel" target]
#  5.  `reboot'        (in single user mode: boot -s from the loader prompt).
#  6.  `mergemaster -p'
#  7.  `make installworld'
#  8.  `mergemaster'            (you may wish to use -i, along with -U or -F).
#  9.  `make delete-old'
# 10.  `reboot'
# 11.  `make delete-old-libs' (in case no 3rd party program uses them anymore)

とくにカスタムカーネルを使っているのでなければ以下のような感じ。

cd /usr/src
make -j3 buildworld && make -j3 kernel
shutdown -r now
   : リブートして上がって来たら
shutdown now
   : としてシングルユーザモードに落とす
cd /usr/src
mergemaster -p
   : /etc/group と /etc/master.passwd の更新を聞かれるので d を選ぶ
make installworld
mergemaster -iFU
   : 様々な /etc ファイルの更新を聞かれるので自分がいじったファイルでなければ
   : i を入力して最新版に置き換えてもらう。
yes | make delete-old
shutdown -r now
   : delete-old-libs は個人的にはしていない(古いプログラムを保持したいため)

時が経ち、あるいは何かのセキュリティパッチが出てきたら、更新する。 その場合は /usr/src ディレクトリでソースのアップデートを行なう。

svn up

がーああー、っと新しいソースが入って来るので上記のビルド手順を行なう。

さらに時が経ち、FreeBSDの新しいメジャーバージョンが出た。 メジャーバージョンを上げたくなったとする。 経験的には、FreeBSD X.1 が出たら「その時」である(X.0は「まだ早い」)。 以下の例はFreeBSD10からFreeBSD11に変えるときが来た場合である。

svnlite switch svn://svn.freebsd.org/base/stable/11

その後のビルド手順はおそらく同じ。念のため /usr/src/Makefile を確認して進めよう。え、switch サブコマンドの後を忘れちゃったらどうするか? なら svnlite info だけ覚えておこう。svnlite info によって現在のリポジトリのパスが表示されるのでそこにある 10 ってのを 11 に変えるだけだ。"info" サブコマンドを忘れないように。

最初にいれるべきソフトウェア

とくにこだわりがないのなら、もう FreeBSD なら ports じゃなくて pkg 使おう。

pkg install パッケージ名

でFreeBSD対応アプリケーションはさくっと入る。まずは sudo を入れよう。

pkg install sudo

一発めの起動では、pkgそのものの環境更新をするか聞かれるので y で答える。入れたいアプリケーションの正式なパッケージ名が分からなかったら search サブコマンドを使う。

pkg search virtualbox
phpvirtualbox-4.3.2            AJAX Web Interface for VirtualBox
virtualbox-ose-4.3.38_1        General-purpose full virtualizer for x86 hardware
virtualbox-ose-additions-4.3.38 VirtualBox additions for FreeBSD guests
virtualbox-ose-kmod-4.3.38     VirtualBox kernel module for FreeBSD

このくらい分かればあとはぐぐれば何とかなるレベル。

さあ、では、Webサーバを立ててみよう。