2011年04月02日

さくらのVPS512にFreeBSDをインストール

計画停電と節電により自宅サーバーも縮退運転を行っていますが、さすがにwebサーバーも停止すると色々と困ることがあった為、さくらインターネットのVPS512を契約してみました。

標準インストールOS(CentOS)

とりあえず、標準ではCentOSがインストールされていますが、意外とメモリを消費しています。

# free -k
             total       used       free     shared    buffers     cached
Mem:        510532     165264     345268          0      23288     116472
-/+ buffers/cache:      25504     485028
Swap:      2048276          0    2048276

ちなみに仮想HDDはこのような感じにパーティションが切られています。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2              17G  1.5G   15G  10% /
/dev/hda1              99M   12M   82M  13% /boot
tmpfs                 250M     0  250M   0% /dev/shm

さくらインターネットの社長が書かれた日記にカスタマイズ方法が乗っていますが、それでも150MB弱のメモリを使用しています。特にメモリにシビアなプログラムを動かすといったことはありませんが、使用メモリが少ないことに越したことはないので、FreeBSDを最小インストールしました。

FreeBSDインストール

とりあえず、FreeBSDをさくらインターネット公式のインストールガイドと同じ内容でインストールしました。
唯一違う点は、パーティションを/varや/usrに分割せずに、/に20GBと残りをswapにしたことと、sshdをインストール直後に起動させないようにしたことです。

tty

OSのインストールが終了して、無事にFreeBSDが起動したら、まず余計なttyを削りました。ttyv0とネットワーク用の物を残して、全てコメントアウト。

# vi /etc/ttys

ttyv0   "/usr/libexec/getty Pc"         cons25  on  secure
# Virtual terminals
#ttyv1  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv2  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv3  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv4  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv5  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv6  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv7  "/usr/libexec/getty Pc"         cons25  on  secure
#ttyv8  "/usr/local/bin/xdm -nodaemon"  xterm   off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
#ttyu0  "/usr/libexec/getty std.9600"   dialup  off secure
#ttyu1  "/usr/libexec/getty std.9600"   dialup  off secure
#ttyu2  "/usr/libexec/getty std.9600"   dialup  off secure
#ttyu3  "/usr/libexec/getty std.9600"   dialup  off secure
# Dumb console
#dcons  "/usr/libexec/getty std.9600"   vt100   off secure
# Pseudo terminals
ttyp0   none                    network
ttyp1   none                    network
ttyp2   none                    network
・
・
・
(略)

sendmail

sendmailもしばらく使う予定がないので停止させました。
/etc/rc.confに以下を追記します。

sendmail_enable="NONE"

firewall(ipfw)

/etc/rc.confにfirewallを有効にする設定を書きます。

firewall_enable="YES"
firewall_script="/etc/ipfw.rule"

ルールは以下のようにしました。

# less /etc/ipfw.rule
#!/bin/sh

fwcmd="/sbin/ipfw"
me="XX.XX.XX.XX"

${fwcmd} -f flush
${fwcmd} add check-state

${fwcmd} add deny tcp from any to any established
${fwcmd} add allow tcp from ${me} to any setup keep-state
${fwcmd} add allow udp from ${me} to any keep-state

${fwcmd} add allow all from any to any via lo0
${fwcmd} add deny all from 127.0.0.0/8 to any
${fwcmd} add deny all from any to 127.0.0.0/8

${fwcmd} add allow tcp from any to ${me} http,https,22222 setup keep-state

${fwcmd} add allow icmp from ${me} to any
${fwcmd} add allow icmp from any to ${me} icmptype 0,3,8,11
${fwcmd} add deny icmp from any to any

${fwcmd} add deny all from any to any

sshd

まず、/etc/ssh/sshd_configに設定を書きます。基本的には標準設定のため編集の必要のないコメントアウトされている行も、後で自分が分かりやすいように明示的に書いています。以下、抜粋。

#sshのプロトコルはversion2のみにする。
Protocol 2
#sshdが待ち受けるポートは、22から22222に変更する。
Port 22222
#rootでのログインを許可しない。
PermitRootLogin no
#公開鍵認証を行う。
PubkeyAuthentication yes
#パスワードでの認証を行わない。
PasswordAuthentication no
#チャレンジレスポンス認証を行わない。
ChallengeResponseAuthentication no

sshクライアントのid_rsa.pubをauthorized_keysに追記をしてから、/etc/rc.confに追記。これで後はVNC経由ではなくssh端末経由で操作できるようになります。

sshd_enable="YES"

ntpd

/etc/ntp.confに設定を書きます。

server ntp.nict.jp
server ntp1.sakura.ad.jp
server localhost
fudge localhost stratum 10

driftファイルの作成。

# touch /vat/db/ntpd.drift

/etc/rc.confに追記します。

ntpd_enable="YES"

動いているか確認。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-a3.nict.go. .NICT.           1 u    3   64    1   11.673  2550.90   0.004
 ntp1.sakura.ad. .GPS.            1 u    2   64    1    8.226  2549.35   0.004
 localhost       .INIT.          16 l    -   64    0    0.000    0.000   0.000

FreeBSD upgrade

さくらのVPSでインストールできるメディアはFreeBSD 8.1-RELEASEなので、FreeBSD 8.2-RELEASEへのアップグレードをしました。

#freebsd-update upgrade -r 8.2-RELEASE
(更新のあった設定ファイルのdiffとリストが表示されたあとにインストール)
#freebsd-update install
#reboot
(リブートして、もう一度実行)
#freebsd-update install

ports

portsの設定は、各言語毎のパッケージを更新しないように以下を/etc/portsnap.confに設定。

REFUSE arabic chinese french german hebrew hungarian
REFUSE korean polish portuguese russian ukrainian vietnamese

portsの展開。

# portsnap fetch extract update

ここまで来れば後は何時ものように使うだけ。portupgradeやbash、screenなどをインストール。この時点でのメモリの空き容量は450MBくらいでした。

$ top
last pid:   891;  load averages:  0.95,  0.27,  0.10  up 0+00:00:27    20:31:40
11 processes:  1 running, 10 sleeping
Mem: 5860K Active, 5752K Inact, 22M Wired, 24K Cache, 8832K Buf, 450M Free
Swap: 480M Total, 480M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  888 root        1  45    0 21700K  2040K wait    1   0:00  0.00% login
  889 root        1  44    0 10260K  2620K wait    0   0:00  0.00% bash
  760 root        1  44    0 11920K  2560K select  0   0:00  0.00% ntpd
  515 root        1   1    0  7048K  1552K select  0   0:00  0.00% syslogd
  885 root        1  76    0  5828K  1024K piperd  0   0:00  0.00% logger
  886 root        1  76    0  2764K   924K nanslp  1   0:00  0.00% sleep
  816 root        1  76    0  7976K  1600K nanslp  1   0:00  0.00% cron
  805 root        1  76    0 26260K  4576K select  0   0:00  0.00% sshd
  373 root        1  76    0  3204K   740K select  0   0:00  0.00% devd
  884 root        1  76    0  8296K  1912K wait    0   0:00  0.00% sh
  891 root        1  44    0  9372K  2100K CPU0    1   0:00  0.00% top