2010/05/17(月)省電力マシンで Ubuntu 10.04 Server セットアップメモ

以前の資料。

Canonのじゃじゃ馬プリンタ(CAPTプリンタ)がなければFreeBSDでも入れたかったところですが。今回は最初からUTF-8環境で構築したため文字コード周りは楽でした。

省電力なハードウェア

ハードウェアに興味ない方は読み飛ばしてください(苦笑)

マザーボードFoxconn H55MXVBIOS-upでAHCI対応
CPUintel Core i3-530 (2.93GHz/2Core/HT/4MB cache)
メモリ4GB(2GBx2) - UMAX Cetus DCDDR3-4GB-1333*1
HDDSeagate 1TB 7200rpm SATA HDD / ST31000528AS
電源Antec EA-380D Green

どこかで見たことあるような構成です。定番すぎて面白みはないですね。

  • Athlonファンなので今回はあえてIntel。カーネルにパッチ充てたくないのが本音(笑)*2
  • HDDもたまにはHitachi/IBM以外ということで、WDの低消費電力なGreenPowerもいいかなと思ったのですがいかんせん故障報告が多いため、ファームバグも落ち着いたSeagateにしました。*3
  • BIOS設定は C1E, EIST, C-STATE Technologyなど省電力関連はすべてEnable等に設定。
  • 消費電力は35W(Linux起動時のアイドル)に落ち着きました。うち12WはHDDの消費電力ですので優秀な方でしょう。*4

以前のサーバ8.04LTS@ML115G1はもう期限切れでアップデートが必要でしたが、HDD増やしたい、カーネルにパッチ充てたくない、消費電力が多くて不満という3拍子揃ったためマシン置き換え。サーバ性能アップは全く求めてないのに……。*5

負荷がかかっても+10Wぐらいで優秀です。

*1 : 最大積載:4GBx2=8GB/DDR3 1333(max)

*2 : パッチ充てること自体は構わないのですが、その後のカーネルアップデートを抑制したりデーモンがらみ設定したり色々面倒なので……。次世代Athlon(Bulldozerまで待てば改善するようですが待てない。)

*3 : 500GBワンプラッタにすれば消費電力も故障率も下がったのですが、現状入りきらないデータを外部HDDに保存するという意味不明なことになってたので2プラッタHDDです。

*4 : SSDに変えれば23Wぐらいのはず。以前のサーバは50W。

*5 : Intel VT対応だからVMwareでも入れて遊びます。

インストール

初めDesktop版のCDを焼いたのですが、インストール時にRAIDを構成するためにはServer版でないといけないらしい。ということで、やり直し。

オフィシャルからDownload Ubuntu Server Editionを選択。もちろん64bit版(amd64版)を落としました。

マシンにCD-ROMが付いて無いので、一番楽そうなUSBメモリから入れる方法を取りました。UbuntuのCDイメージをダウンロードし、UNetbootinというツールを使ってUSBメモリに書きこみます。bootローダーを書き込むためにAdministratorで実行しましょう*6。FATフォーマットされていれば、既にあるファイルを消さなくて大丈夫でした。このツールは色々なものをUSB起動できるようで便利そうです。

ブートメニューで「default」を選ぶとCDが認識できませんと言わるため「install」を選ぶとよいようです((これに気付かずエキスパートを選んだために面倒なことに……。結局この記事の資料的価値を鑑みてInstallから入れなおしました(汗))。インストール時の作業は割愛。もちろんサーバコンポーネントは何も入れてません(苦笑)

パーティション

マウントデバイス容量説明
//dev/md04GRAID1。/dev/sd*1
/tmp/dev/md11GRAID1。/dev/sd*2
swap/dev/md24GRAID1。/dev/sd*3
/var/dev/md38GRAID1。/dev/sd*5
/usr/dev/md416GRAID1。/dev/sd*6
/home/dev/md5950GNilfs2 on RAID1。/dev/sd*7

以前の500GBから1TBにしました。/homeが増えて/varを減らした以外はそのまま。

*6 : 一般ユーザーでも実行できますが、単に起動しないUSBメモリができあがります。

最初にしたこと

とりあえず「sudo apt-get install openssh-server」して、あとはTeraTermから作業しました。

  • /etc/ssh/sshd_config の "PermitRootLogin" は相変わらず Yes なので No に設定。

rootとwheel

前と一緒なので概要だけ

$ sudo su
# passwd

wheelを導入。

# vi /etc/pam.d/su  ↓pam_wheel.so を有効化
auth       required   pam_wheel.so group=adm

wheel(ホイール)とは、wheelグループに所属する場合のみ su でrootになれる機能。この場合 adm グループの人のみ su を許可します。

いつもならsudo自体を無効にするところですが、KDEがまともに使えなくなるので*7、sudo を adm グループのみにするターゲットのパスワードを要求するように変更。

# vi /etc/sudoers
Defaults        env_reset,targetpw
%adm ALL=(root) ALL
# ほかはコメントアウト

*7 : kdesudoが使えなくなる。kdesuは存在しないため回避策なし……。

日本向けパッケージの追加

# wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | apt-key add -
# wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | apt-key add -
# wget https://www.ubuntulinux.jp/sources.list.d/lucid.list -O /etc/apt/sources.list.d/ubuntu-ja.list
# apt-get update

固定IP

/etc/network/interfaces

auto eth0
iface eth0 inet static
	address 192.168.1.20
	netmask 255.255.255.0
	gateway 192.168.1.1
#	mtu 9000

MTUはJumboFrame用。よく分からない場合はコメントアウトのままに。

雑多な設定

  • 「EDITOR=vi」を設定し、/usr/bin/vi を /bin にコピー*8
  • 日本向けパッケージの追加
  • IPv6を無効に。/etc/sysctl.conf に
    net.ipv6.conf.all.disable_ipv6=1
    
  • upstart化が進んで起動は早くなりましたが、update-rc.d や sysv-rc-conf などは効かないような感じです(未検証)。
  • ローカールパスワードとSambaパスワードはデフォルト不一致になった模様
  • PostgreSQLは --no-locale で再初期化する。
    /usr/lib/postgresql/8.x/bin/initdb -D /home/postgres --encoding=UTF8 --no-locale
    
  • PostgreSQLのpgstat.statの記録を /tmp(tmpfs)に移動。
  • fstabのオプションに noatime を追加してアクセス時刻記録を止める。*9
  • デーモン停止時の参考資料(ただしCentOS)
  • BIOS時計をローカルタイムに設定していて9時間ずれてしまう場合は /etc/default/rcS で「UTC=no」に設定。

*8 : singleユーザモードでも確実に実行出来るようにするため。

*9 : パフォーマンス云々ではなくアクセス音がうるさいので。

その他パッケージ

開発環境
# apt-get install build-essential
Zmodem等での転送
# apt-get install lrzsz
runlevelの設定
# apt-get install sysv-rc-conf
日本語のman
# apt-get install manpages-ja

tmpfs

/tmpをメモリキャッシュに変更しました。fstabに

tmpfs /tmp            tmpfs    defaults,size=256M 0 2
tmpfs /var/tmp        tmpfs    defaults,size=256M 0 2

と記述。

コンソール画面の解像度設定

Linuxカーネルに新しく実装されたDRM/KMS(Direct Rendering Management/Kernel Mode-Setting)というものがありまして、X.Orgが行っていた解像度管理をKernelで行うことでX環境とコンソールでシームレスな画面切り替えを可能にする機構があります。

2.6.30以降こいつがディフォルトでonになってるわけですが、modprobeと同時に高解像度に勝手に切り替えてくれるため画面が広すぎて(UXGA)コンソールが使い物にならない。X.orgの解像度管理をカーネルに移すのはいいですが解像度が設定の情報がまるでみつからなくて苦労しました。

約2日格闘した上*10、分かった結論はカーネル起動時のパラメータvideo=xxxで設定可能ということでした。

(例)
video=800x600
video=800x600-16
video=800x600-32@60

i915やinteldrmfbのフレームバッファを指定する方法ではうまく行きません(「video=i915:800x600」等はダメ)。Radeon等でも同じように設定できます。

Ubuntu 10.04の場合、この変更は /etc/default/grub の GRUB_CMDLINE_LINUX に設定して、update-grub します。

# vi /etc/default/grub
# update-grub

そもそもフレームバッファが有効にならない場合

カーネルのコンパイルオプション等で標準ではフレームバッファがonにならない(KMSが無効に設定されている)場合は、次のカーネルブートオプションを更に追加します。

i915.modeset=1      # i915/Coreシリーズ内蔵の場合
radeon.modeset=1    # radeonの場合
nouveau.modeset=1   # nvidiaの場合

もしくは /etc/modprobe.d 以下に適当なファイルを作って次のように書きます。

options i915 modeset=1

Debian GNU/Linux squeeze(Debian 6.0)にてこの症状に見舞われました。

ちなみに、1ではなく0にすれば強制的に無効にできます。

*10 : ネット情報どころか、Linuxカーネルソースやドキュメントにも指定方法が書いてないと探しまくったのですが、Document/fb/modedb.txtの前半のみ有効で、後半のドライバ指定が無効だったという……。

コンソールの日本語表示

jfbterm が exit すると画面が死んでくれるので*11、fbtermを入れました。

# apt-get install fbterm unifont

このままだとフォントが見づらいので、fbtermを1度起動し終了。ホームディレクトリにある .fbtermrc を編集して、次のように変更しました。

font-names=mono,unifont
font-size=16

jfbtermよりも扱い易い印象。i915の場合、KMS(modeset=1)が有効でないと fbterm はまともに動かない印象でした。

*11 : KernelがKMS/フレームバッファモードで動いているせいかも。

RT8111Dドライバのインストール

RealtekのRTL8111Dが乗っているのですが、一応使えるものの異なるドライバが認識し微妙な問題が起こるようです。こちらのサイトを参考に正しいRTL8168D/RTL8111Dドライバを入れました。

# cd /usr/src
# tar jxvf r8168-8.00xx.00.tar.bz2
# cd r8168-8.00xx.00/
# make clean modules
# make install
# depmod -a

R8169なドライバをロードさせないためブラックリストに登録。

/etc/modprobe.d/blacklist.conf
blacklist r8169

カーネル起動用ファイルシステムの更新

# update-initramfs -u

ネットワークパフォーマンスが向上し、MTU=9000も通るようになりました。

RTL8169/8110なNICも同時に乗ってる場合はblacklistしてしまうとそちらを自動認識しなくなるため、rc.localあたりでmodprobe r8169してください。

問題はカーネルアップデート時に再コンパイルが必要なことですが……。この問題を避けるにはdkmsを使った自動更新を検討してください。

物理バックアップ

物理的に別のHDDを付けてバックアップを取るようにしました。

#!/bin/sh

DIR=/backup
/bin/mount $DIR
/usr/bin/rsync -auv --delete --exclude "/files/movie" --exclude "/lost+found" /home/ $DIR
/bin/umount $DIR

# spindown
/sbin/hdparm -Y /dev/sdc

電気の無駄なのでバックアップ用HDDは通常時スピンダウンしています。

/backup は fstab に書い設定してあります。

# backup hdd mount point
UUID=6236975e-60f1-4c5c-a0f5-2916db571e88 /backup  ext4  noauto 0 2

noautoがポイントです。

このスクリプトファイルを root の crontab に登録し、月2~3回バックアップを取るようにしました。