2008/05/21(水)ML115 G1/Ubuntu 8.04 LTS Serverセットアップメモ

C3サーバからまともなサーバに変更するため、ML115 G1を導入してセットアップをしました。そのときのメモです。

ハードウェアの選択

本体HP ProLiant ML115
CPUAthlon BE-2350 (2.1GHz)
メモリ4GB (DDR2-800 2GB×2)
HDDHitachi Deskstar P7K500 500GB×2
LANGbE-PCI2(玄人志向)

ML115は送料入れて18Kぐらい。まともなケースと安物でも電源とマザーボードと思えば安いものです。

CPUはディアルコアに載せ替え。2400BEにしておけばよかったかな……とも思いましたが。メモリは多めの4GB。

HDDは日立のSATA500GB。色々悩んだ挙げ句、ソフトウェアRAID(ミラー)にしました。

オンボードのLANは Broadcom(PCI Express接続)のまっとうなものですが、ジャンボフレーム非対応のため泣く泣く増設しました*1。GbE-PCI2ですが、2~3Wぐらいで性能もそこそこ、値段も安いし満足しています。

*1 : クライアント側に非力マシンがあるため、ジャンボフレーム対応ではないと色々とつらい

サーバの選択 / Ubuntu Server 8.04LTS

慣れているFreeBSD、定番Debian、間違っても使いたくないFedoraなど考えましたが、Ubuntu Serverにしました。完成度はUbuntuデスクトップほどではないようですが、Xをいれればデスクトップとしても使えるのでいいかなと。設定等々は良くも悪くもほぼDebianと一緒でした。

インストール時にソフトウェアRAIDを構築できるのですが、ケーブルが1本しか付属してなかったため後から構築することに……。

root と wheel

Ubuntu は sudo によって root 権限作業を行う仕組みですが、これでサーバにするとどうかしてるので root にパスワードを設定。

$ sudo passwd root
$ su -

sudo を無効化します。/etc/sudoersから次の行をコメントアウト。

#%admin ALL=(ALL) ALL

ついでに、wheelを導入。

# shadowconfig off
# vigr
# shadowconfig on
# vi /etc/pam.d/su  ←pam_wheel.so を有効化
# vi /etc/sudoers   ←sudo を無効化

/etc/pam.d/su の該当部
auth       required   pam_wheel.so group=adm

wheel(ホイール)とは、wheelグループに所属する場合のみ su でrootになれる機能。FreeBSDではこれが標準で、他の一般ユーザーが不当にrootのパスワードを入手してもrootになれないようにします。この場合、adm が wheel グループとなります。(wheelというグループを作る場合は、group指定は不要です。)

ロケール

デフォルトのロケールは /etc/default/locale 。標準では "ja_JP.UTF-8" だけになってしまうのでロケールを追加。

/var/lib/locales/supported.d/local を編集
ja_JP.UTF-8 UTF-8
ja_JP.eucJP EUC-JP
en_US.UTF-8 UTF-8
en_US ISO-8859-1

編集結果を反映させるため以下を実行。

# dpkg-reconfigure locales

日本語マニュアル

日本向けパッケージの追加をしてから。

# apt-get install manpages-ja
# mandb

EUC-JP でマニュアルを表示させる場合は、jless を導入の上で以下の環境変数を設定のこと。

JLESSCHARSET=japanese-euc
PAGER=jless
LANG=ja_JP.eucJP

Jumboフレーム設定

/etc/network/interfaces を編集

iface eth1 inet static
        mtu 9000

ついでにWindows側は、デバイスの詳細設定からジャンボフレームを有効に。TCPのWindowsSizeを増やしておく。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TCPWindowSize
(9000-40)*64=573440
(9000-40)*128=1146880

"-40"はTCPのヘッダサイズを引いている。それぞれ64パケット分、128パケット分のバッファの設定。

numlockをオンにする

/etc/console-tools/config という設定ファイルがあり、ここに記述することでコンソールのnumlockをonにできるはずなのですが、なぜか有効にならない。どうやら起動スクリプト(/etc/init.d/console-screen.sh)が組み込まれていない模様。

# update-rc.d -f console-screen.sh remove
# update-rc.d console-screen.sh defaults

スクリーンフォントが指定されていないと動作があやしいバグがあるので、スクリプト中の次の3行を「if [ "$SCREEN_FONT" ]」の手前に移動するとよい。

NUM_CONSOLES=`/bin/fgconsole --next-available`
NUM_CONSOLES=$(($NUM_CONSOLES - 1))
[ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6

メモ

  • aptitude …… パッケージ管理
  • update-rc.d …… 起動/非起動の管理
  • lsof …… プロセスが開いているファイルの一覧
  • sudo apt-get install ubuntu-desktop-ja …… X環境。まだ入れてない。
  • Apache 実行ユーザの変更
    /etc/apache2/envvars の変更。APACHE2_RUN_USER を追加のこと。*2
  • /etc/ssh/sshd_config "PermitRootLogin" が有効になっていて危険すぎるので、noに設定。
  • logwatch …… ログの環視
  • /etc/console-tools/config …… コンソールの設定、スクリーンシャッター(ブラックアウト時間)など

*2 : /etc/sbin/apache2ctl で問題が起きる

Cool'n'Quiet (powernow-k8) の設定

Linuxは元々CnQに対応していますが、残念ながら電圧可変は使用出来ません。カーネルにパッチを充てて再構築する必要があります。

# sudo apt-get install build-essential kernel-package libncurses5-dev
# sudo apt-get install linux-source
# cd /usr/src/linux-source-2.6.xx

パッチはこのサイトからリンクされています

# make menuconfig
# make
# make modules_install
# make install

Ubuntuのカーネルはinitrdを使っているので標準状態では、ほぼすべてのデバイスがモジュールになっています。ですので、このままでは再起動してもHDDを認識できず、途中で必ず止まります。HDDとファイルシステムを認識するのに必要なデバイスをカーネルに組み込んでしまえばいいのですが、initrd-xxx.img というイメージを再構築しても構いません。

# update-initramfs -u

してから、構築された initrd-xxx.img を grub 側で正しく指定するという作業が必要になります。以上、蛇足。

Cool'n'Quietで電圧可変の設定

パッチを充てたモジュールですが、今回は自動可変ではなく手動可変にしました。自動可変にする際は以下のデーモン等からお好みで導入・設定してください。

  • cpufrequtils
  • cpufreqd
  • powernowd

これらを入れると、カーネルモジュール(powernow-k8)のインストールなども自動で行われるようです。

電圧可変を有効にするためには、モジュールインストール時に引数を与える必要があります。/etc/modprobe.d/options に例えば以下のように指定します。

powernow-k8 -freq_list=2100,2000,1800,1000 vcore_list=950,900,850,825

この場合 2000MHz→0.95V、1800MHz→0.90V という対応になります。電圧はmV単位です。powernow-k8の制限で指定出来る周波数は限られています。不便ですが仕方ありません。どの周波数なら指定可能かは、modprobe powernow-k8 を実行した際の dmesg をご覧下さい。

周波数の手動可変

デーモン等は一切導入せず、/etc/modprobe.d/options にも書かないで、/etc/rc.local に次のように設定しました。

modprobe powernow-k8 freq_list=2100,2000,1800,1000 vcore_list=950,950,925,800
echo "userspace" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

あとは echo だけで周波数を変更できます。

●1GHzへ
# echo "1000000" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
●2GHzへ
# echo "2000000" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
●現在の状態表示
# cat /proc/cpuinfo

apt-getで自動更新させない方法

パッケージ管理外のモジュール*3依存関係やLinuxカーネルなどパッケージを更新させたくないときには、特定パッケージを hold します。

  • dpkg で hold させる方法がある。
  • apt.conf に hold を設定する方法がある。
  • aptitude の hold は、aptitude でしか有効ではない。

dpgkによる方法

man dpkg(8)

ホールド
# echo package hold    | dpkg --set-selections
ホールドの解除
# echo package install | dpkg --set-selections
インストール済パッケージリスト
# dpkg -l
  ii  インストール済
  hi  hold and インストール済
  rc  削除済

....aptは扱いやすいのに、dpkgの扱いにくさはどうにかならないものか……

apt.confによる方法

apt.conf.d/05aptitude に次のような設定。

aptitude::Keep-Unused-Pattern "^linux-image.*$ | ^linux-restricted-modules.*$ | ^linux-ubuntu-modules.*$";

*3 : 主にeAccelerator。Debian系ではパッケージされない不遇のモジュール。

ローカールパスワードと Samba パスワードを一致させない

ローカルパスワードは passwd コマンドで、sambaパスワードは smbpasswd で変更する約束になっていますが、最近は一元管理化の流れか、どちらかでパスワードを変更すると片方のパスワードも自動的に変更されるようになっています。

要するにデフォルトのままだと、Sambaパスワードとローカルパスワードが常に一緒になってしまう*4

セキュリティ上若干気持ち悪いので、2つのパスワードを分離するための方法。

/etc/pam.d/common-password

以下をコメントアウト
# password   optional	pam_smbpass.so nullok use_authtok use_first_pass missingok

/etc/pam.d/common-auth

以下をコメントアウト
# auth  optional        pam_smbpass.so migrate missingok

/etc/pam.d/samba

# @include common-auth
# @include common-account
# @include common-session

auth       requisite    pam_smbpass.so migrate missingok
account    required     pam_unix.so
session    required     pam_unix.so

*4 : これに気付かずローカルログインできなくなって焦りました……

その他

おまけ/省電力への挑戦

電源は力率改善機能(PFC)搭載らしく常時99%でした。この構成でアイドル時60W。CD-ROMの電源を引っこ抜いて59W。個別に見ていくとこんな感じ。

  • HDD 1個 5W×2=10W
  • GbE-PCI2 3W

非力でないクライアントマシンで試したところ、PCIe(内部接続)のBCM5721(JamboFrame非対応)がSamba共有で70MB/s、GbE-PCI2は30MB/sで頭打ちだったのでそこが限界速度らしいです。CPU負荷があがったり、CPUが遅いマシンでパフォーマンスが極端に低下したけど(汗) とりあえずGbE-PCI2を抜いて、BCM5721をギガでリンクさせました。……消費電力に変化なし。BCM5721の増えた電力=GbE-PCI2の電力らしい。残念な結果。

もう1つ、悪名高いデルタ電源を優秀と名高いEA-380にとりかえてみました。それだけで-10W。49Wを達成しました。ちなみに、この2つPS-ON(電源だけONに)して消費電力を計ると5Wと11Wでした。何もつなげなくても11Wって酷すぎ。

Athlon X2 BE-2350という構成から考えると49Wは明らかに電気食い過ぎなのですが(HDDを加味しても35~40Wぐらいが相場っぽい)、原因を探るとチップセット(サウスブリッジ?)が触れないぐらい発熱しているのでどうやらここの模様。NFP3400というサーバ用チップセットのようですが、今度サーバを組むときは普通のPCにすると猛反省しました(汗)。HDD2台でRAIDは譲れませんが、それでも30W台にはしたいところです。