はじめまして、ニフティ入社一年目の蓮沼です。

ニフティクラウドではWindows Serverはもちろん、CentOSやUbuntu、DebianなどLinux系のパブリックイメージを提供しています。

しかし*BSDのOSイメージが提供されていない!ということで今回FreeBSDのパブリックイメージを作成し、公開しました!

提供するFreeBSDのイメージは以下の通りです!

FreeBSD10.0-Release 64bit
FreeBSD10.0-Release-p6 64bit (2014年6月24日時点の最新パッチ)
ipfirewallによるFirewall設定済み
VMware Toolsインストール済み

インストール済みパッケージリストは記事最下部を参照

今回はFreeBSDのご紹介と、イメージリリースまでの裏話として使用したツールをご紹介したいと思います!

はじめに

ニフティクラウドの基盤はVMwareの製品を採用しています。

そのためニフティクラウドではVMware Toolsのインストールが必須になっております。

今回ニフティクラウドでご利用いただけるFreeBSDのイメージをリリースしましたが、VMware製品はFreeBSD10.0を正式にサポートをしておりません。 (VMware Compatibility Guide: Guest/Host Search:2014年7月2日現在)

加えてVMware Toolsのインストールではパッチを当ててインストールを行っています。

そのため本イメージのご利用に関してはVMware, Inc.ならびにニフティ株式会社ではサポート対象外であり、ご利用はお客様の自己責任でお願いいたします。

FreeBSDのご紹介

皆さんはFreeBSD、使っていますか?

私は学生のころからFreeBSDを使い続けています。と言っても8.*系からの新参者ですが…。

最近ではLinux OSをサーバで使用することがポピュラーと言うか、当たり前な世の中ですが、今FreeBSDが熱いんです!!

FreeBSD10.0では後述するデフォルトコンパイラがclangになったり、ネットワーク周りに様々な機能が追加されたりと抜群の安定感を保ちつつ、新しい機能がふんだんに追加されています!

今回はFreeBSDの大きな特徴として以下の5点についてご紹介したいと思います。

1. 大規模な環境、企業が利用しやすいライセンス

実はFreeBSDは至る所で利用されていることはご存知でしょうか?

例えば日本最大級のオークションで有名なヤフーオークション。ヤフー最大級のサービスインフラは数千台のFreeBSDのサーバで構成されています。

引用元 オークションシステムの簡単紹介

日本最大級と言えば他にも2ch.netのインフラもFreeBSDですし、海外で言えば映像ストリーミングで有名なNetflix, Inc.もFreeBSDを利用しています。

引用元 Wikipedia - FreeBSD

さらには「プレイステーション 4」(PS4™)のOrbis OSはFreeBSD9.0をベースにしており、商用利用が許可されているBSDライセンスから多くの組み込み機器にも採用されています。

引用元 Wikipedia - プレイステーション 4

他にも昔大学で使っていた方やPC-98で動かしてた!という方、jailがあることからレンタルサーバで使ったことがあるという方もいらっしゃると思います。

大規模なインフラ環境で使われてきた実績、チューニングで化け、そして企業ユースにやさしいOS…何かこう惹かれるものがありませんか?(笑)

2. Ports Collection

FreeBSDではパッケージソースがPorts Collectionに集約されています。

例えばapacheをインストールしたい場合、/usr/ports/www/apache24に最新のソースコードがあるので、make installでインストールすることが可能です。

特にapacheなどは多くのオプション指定が可能であり、バイナリインストールではなくソースコードをビルドしてインストールする機会があると思います。

その時にいちいち最新のソースコードを探してwgetし…という手間がかかりません。

以下のコマンドですぐに最新のソースコードを取得し、makeすることが出来ます。

portsnap fetch && portsnap update

またFreeBSD10.0では新しくパッケージ管理ステムのpkgコマンドが利用可能です。

yumやapt-getのようにバイナリインストールはもちろん、アップデートも簡単に行うことが可能です。

3. 簡単なipfw

Linuxのファイアウォールはiptablesを使う機会が多いと思いますが、FreeBSDはipfirewallというパケットフィルタリング型のファイアウォールがあります。

例えばパブリックイメージのデフォルト設定ではVM側から外への通信と、外側からのsshのみの通信を許可しています。設定コマンドは以下の通りです。

ipfw add allow all from me to any keep-state
ipfw add allow tcp from any to me 22
ipfw add 65000 deny log all  from any to any

iptablesに比べ、allow,denyやany to meなど設定がシンプルで分かりやすいです。

この設定では拒否したパケットのlogを取るように設定しています。logは/var/log/securityに保存されます。

上記はコマンドで設定する場合であり、公開イメージでは/etc/ipfw.confの設定ファイルを参照するようにしています。

この/etc/ipfw.confは/etc/rc.conf内で”firewall_type=”で指定されており、ipfwコマンドなしのaddから設定を記述します。

Webサーバを構築した際に必要な設定を/etc/ipfw.confに記述した例は以下の通りです。

add allow all from me to any keep-state
add allow tcp from any to me 22
add allow tcp from any to me 80
add allow tcp from any to me 443
add 65000 deny log all  from any to any

このように簡単にファイアウォールの設定が行えます。初めてでも分かりやすく、楽ですね!

4. コンパイラがgccからclangへ

FreeBSD10.0からデフォルトコンパイラがgccからclangへ変更されました。

以前までFreeBSDのデフォルトコンパイラはgccでしたが、gccのライセンスがver4.21以降GPLv3へ変更されたと同時にコンパイラのバージョンアップが停止しました。

なぜならばFreeBSDはBSDライセンスの元配布されているため、ベースシステムにGPLv3であるgccのマージは見送られていました。

その中で開発されたのがclangです。clangはバックエンドにLLVMを使用したBSDライセンスで配布されているコンパイラです。

今熱いLLVMですよ!GPLv3なコンパイラなんて使わずにclang使いましょうclang!

5.ネットワーク周りの強化

FreeBSDは昔からネットワークに強いと言われていましたが、最近ではLinux系も速いです。

FreeBSDも負けてられない!ということで、FreeBSD10.0 ReleaseではnetmapMPTCPなどネットワーク周りの機能がより強化されています。

詳しくは、@ITの「いま知っておくべきWebサービスのための高速ネットワーク技術」という記事をご参照ください。

ページ最下部にFreeBSDとLinux、パケットドライバ、10/40GbEの違いを比較した結果が記載されており、10GbEの条件では、FreeBSD 10.0とnetmapの組み合わせで、Linux 3.7よりも性能が良いことが分かります。

今回公開したイメージにはnetmap、MPTCPの組み込みは行っていませんが、検証やチューニングしてみる価値は十分あると思います。何より大規模なインフラで利用され続けてきた実績もありますし、sysctlやカーネルのチューニングをしてみると面白いOSだと思います!

ニフティクラウド×FreeBSDで最強サーバ

ニフティクラウドの強みとして、10GbpsのNICをグローバルとローカルで用意し、太いネットワーク回線を提供しています。

特に昨今のWeb業界ではnode.jsとWebSocketのリアルタイム通信に注目が集まっており、小さなパケットを大量に処理できるインフラが求められています。

Packet Per Sec(一秒当たりに処理できるパケット数)に注目してみると、IaaSとOS選択としてニフティクラウドとFreeBSDの組み合わせは最適です!

今回ご紹介しましたFreeBSDのネットワークの強さと、ネットワークキャパシティの強いニフティクラウドで最強のインフラを構築しませんか?

ぜひFreeBSDイメージ、ご利用ください!

リリース裏話

FreeBSDにVMware Toolsをインストールする

FreeBSD10.0にVMware Toolsをインストールするには以下の手順でパッチを当て、インストールする必要があります。

emulators/open-vm-toolsを入れたいところですが、ニフティクラウドの利用規約では禁止行為に該当してしまうため、公式のVMware Toolsを利用するようお願いいたします。

mount -t cd9660 /dev/cd0 /mnt
tar xzf /mnt/vmware-freebsd-tools.tar.gz -C /tmp
cd /tmp/vmware-tools-distrib
fetch -o /tmp http://ogris.de/vmware/vmware-tools-distrib.diff
fetch -o /tmp http://ogris.de/vmware/vmblock-only.diff
fetch -o /tmp http://ogris.de/vmware/vmmemctl-only55.diff

pkg install perl5.18
pkg install misc/compat6x
pkg install subversion

svn co http://svn.freebsd.org/base/release/10.0.0/sys/ /usr/src/sys

patch -p1 < /tmp/vmware-tools-distrib.diff
cd lib/modules/source/
tar xf vmblock.tar
tar xf vmmemctl.tar
cd vmblock-only
patch -p1 < /tmp/vmblock-only.diff
make
make install
cd ../vmmemctl-only
patch -p1 < /tmp/vmmemctl-only55.diff
make
make install
/tmp/vmware-tools-distrib/vmware-install.pl -d

パッチ引用元

Packerでイメージ作成を自動化

今回のFreeBSDのパブリックイメージを公開するに当たり、Packerというツールを使用しました。

Packerというのは、VagrantSerfConsulで有名なHashicorp, Inc.のゴールデンイメージ作成ツールです。

ニフティクラウドでは、Packerを用いてスタンダードイメージ、パブリックイメージのビルドを自動化しており、今回のFreeBSDのパブリックイメージ作成時もPackerを用いて自動ビルドしています。

JSONに書いた定義の通りのイメージを作成できるため、複数人で同じ構成のイメージを利用したい場合のイメージ作成に最適です。他にもJenkinsなどCIツールからキックして常に最新のVMイメージを用意するという使い方も出来ます。

FreeBSDのインストール自動化ではbsdinstallが使えるため、比較的簡単にPackerで自動化できました。

FreeBSDのVMが自動生成される過程は見ていて面白いので、興味のある方は是非ご自身でビルドしてみてください。

Packerのテンプレート、ビルド手順はGithubに公開しております。

インストール済みパッケージリスト

root@:~ # pkg info
apr-1.5.1.1.5.3_1              Apache Portability Library
bind99-9.9.5P1_3               BIND DNS suite with updated DNSSEC and DNS64
compat6x-amd64-6.4.604000.200810_3 Convenience package to install the compat6x libraries
db48-4.8.30.0_1                The Berkeley DB package, revision 4.8
expat-2.1.0_1                  XML 1.0 parser written in C
gdbm-1.11_2                    GNU database manager
gettext-0.18.3.1_1             GNU gettext package
libxml2-2.9.1_1                XML parser library for GNOME
perl5.18-5.18.2_4              Practical Extraction and Report Language
pkg-1.2.7_3                    Package manager
serf-1.3.6_1                   Serf HTTP client library
sqlite3-3.8.4.3                SQL database engine in a C library
subversion-1.8.9_4             Version control system
本コラムは、ニフティ株式会社HPに掲載されている「ニフティクラウド ユーザーブログ」より転載したものです。