2009年10月20日火曜日

DomU dns01の導入

最近内向きプライマリDNSサーバがよく落ちる。
セカンダリDNSサーバを仮想サーバで立てることにします。
DNSくらいリアルサーバで導入しろよって気もしますが。。

■立ち上げ
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.21/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:15/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=dns01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ここらでyum updateする

■BIND導入
# yum install bind
# chkconfig named on

■BIND スレーブ設定
webminでBINDを開くと設定をジェネってくれる。
内向き用の設定で作成する。

新規のスレーブ ゾーンを作成
ドメイン名 / ネットワーク:hoge.com
マスターサーバ:192.168.0.6

で保存して「更新を強制する」でおk。


■全サーバにセカンダリDNS設定を配布する
対象ファイル:
/etc/resolv.conf

内容:
search hoge.com
nameserver 192.168.0.6
nameserver 192.168.0.21
nameserver 202.224.32.1

配布先:
rsync -av /etc/resolv.conf beta.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf ad01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf gatekeeper01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf iwata01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf mail01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf pb01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf ssh01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf stats01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf www01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf www02.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf dbm01.hoge.com:/etc/resolv.conf
rsync -av /etc/resolv.conf dns01.hoge.com:/etc/resolv.conf

※standardイメージには未反映

2009年10月19日月曜日

DomU www02の導入

新システムは結局www01で動かしてしまったので、www11を破棄してwww02を作る。
www02はwww01と異なり、cronプロセスは稼働させない。


■立ち上げ
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.32/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:20/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=www02.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ここらでyum updateする


■www02に導入するものと手順
yum install httpd httpd-devel php perl php-mysql php-pear php-mbstring php-mcrypt ImageMagick-perl php-devel ImageMagick php-gd
perl -MCPAN -e shell
## install Jcode

○APCの導入
vi /usr/share/pear/pearcmd.php
## @ini_set('memory_limit', '16M'); ←追記する
pecl install apc
vi /etc/php.ini
## extension=apc.so ←追記する

○memcached PHPバインディングの導入
yum install php-pecl-memcache

○その他PHP関連
pear channel-update pear.php.net
pear upgrade --force PEAR
pear upgrade-all
pear install Cache_Lite
pear install Pager

○PHPの設定
#vi /etc/php.ini
↓以下変更点
output_buffering = Off
post_max_size = 80M
upload_max_filesize = 20M
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = none;

○apacheの設定
バーチャルホストベースでwww02を作ります。
httpd.confをwww01からコピってservernameあたりを修正するのみ。

○mod_rpaf
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxpf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
vi Makefile
以下の行を書き換える。
APXS2=$(shell which apxs2) を
APXS2=/usr/sbin/apxs
make rpaf-2.0
make install-2.0
vi /etc/httpd/conf.d/mod_rpaf.conf
以下の記述を追加
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips <プロキシサーバのIPアドレス>

【出典】http://www.nire.com/2008/02/howto-install-mod_rpaf/

○起動
service httpd start
chkconfig httpd on


memcachedは今のところwww01を参照することにするので導入不要。
これで再起動、gatekeeperからラウンドロビンさせて完了。

2009年10月4日日曜日

KCMSのバージョンアップ(入れ替え)

KCMSをバージョンアップしました。

■ご来訪のみなさま
本エントリー(ってかブログ全体もそうですけど)は完全なる個人用メモです。
第三者が見ても意味不明だと思います。ご了承ください。。


○メンテナンス表示ON - ルータ設定
port80とport443のアクセスを文言サーバに振り向ける
(変更前)192.168.0.11
(変更後)192.168.0.6

○影響範囲内のサーバ停止&バックアップ - alphaにて
# xm shutdown sc01
# xm shutdown www01

停止確認後
# rsync -avz /kfs_alpha/xen/www01.img kfs01:/mnt/kfs01/xen/img/bak20091004
# rsync -avz /kfs_alpha/xen/sc01.img kfs01:/mnt/kfs01/xen/img/bak20091004

○DBバックアップ - mdb01にて
# mkdir /kfs/backup/output/`date +%Y%m%d%H%M%S`
# /kfs/backup/mysqlsnapshot -u [ID] -p [PW] -l -v -s /kfs/backup/output/`date +%Y%m%d%H%M%S`

○ファイルシステム 固めてtar化 - www01にて
# cd /kfs/backup
# ./backup.sh

○ファイルシステム スナップショット - kfs01にて
# zfs snapshot kfs01/kfs@`date +%Y%m%d%H%M%S`
# zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`

○サーバ復帰
# xm create www01

○リバースプロキシ設定変更
squidサーバ廃止のため、www01直結に変更する。
この時点でイントラアクセスが可能になる。

○ファイルシステム 切り替え
ファイルの入れ替え作業を行う

○テストアクセス
イントラから確認する。

○ファイルシステム スナップショット - kfs01にて
# zfs snapshot kfs01/kfs@`date +%Y%m%d%H%M%S`

○復帰
port80とport443のアクセスを元に戻す
(変更前)192.168.0.6
(変更後)192.168.0.11

2009年9月22日火曜日

NTPで時刻合わせ

予備機がNTPで同期してなかったので修正しました。


yum install ntp
ntpdate ntp.asahi-net.or.jp

あと自動同期の設定など。
vi /etc/ntp.conf
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server -4 ntp.asahi-net.or.jp

/etc/rc.d/init.d/ntpd start
chkconfig ntpd on

ハードウェアクロックにも反映しとかないと、再起動のたびに狂っちゃうよ
hwclock --systohc

いじょう。

2009年9月13日日曜日

OpenXのアップデート

DL&解凍
# wget http://download.openx.org/openx-2.8.1.tar.gz
# tar zxvf openx-2.8.1.tar.gz

DBバックアップ
# /kfs/backup/mysqlsnapshot -u [ID] -p [PW] -l -v -s /kfs/backup/output

ディレクトリ入れ替え
# mv public_html openx26_200909012
# mv openx-2.8.1.tar.gz public_html

パーミッション切り替え
# chmod -R a+w /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var/cache
# chown -R apache:apache /kfs/ad/public_html/var/plugins
# chown -R apache:apache /kfs/ad/public_html/var/templates_compiled
# chown -R apache:apache /kfs/ad/public_html/plugins
# chown -R apache:apache /kfs/ad/public_html/www/admin/plugins
# chown -R apache:apache /kfs/ad/public_html/www/images

あとブラウザでアクセスして適当に進める。
本当は定期メンテとか切らないといけないんだけどね。
パーミッションで怒られたら、そのとおり対処する。

終わったらvarディレクトリ内を全部書き込み禁止にしておく。

2009年9月6日日曜日

FreeBSDにiTunesサーバを立てる

# cd /usr/ports/audio/mt-daapd
# make install clean
# vi /usr/local/etc/mt-daapd.conf
○パスワード変えとく
admin_pw mt-daapd
admin_pw admin

○ファイル保存先
mp3_dir /usr/local/share/mt-daapd
mp3_dir /mnt/kfs01/FreeNAS1/iTunesServer

○サーバ名
servername mt-daapd
servername KFS-iTunes

○自動起動
# vi /etc/rc.conf
mt_daapd_enable="YES"

○手動起動
# /usr/local/etc/rc.d/mt-daapd start

○Webインターフェース
http://kfs01.hoge.com:3689/


これでファイル保存先に適当にファイルを突っ込み、iTunesを起動すると自動的に接続される。

2009年9月2日水曜日

Xenイメージをストレージサーバに置く

今までXenのイメージファイルはローカルディスクに置いて運用していましたが、大規模なストレージサーバを導入して日が経っていることから、ストレージサーバに置くことにしました。

当面はNFS共有で行きます。将来的にZFS@FreeBSDでzVOL(iSCSI)がサポートされたら、また考えます。

…と思ったんだけど失敗しました。敗因は最後に。


■ストレージサーバ(kfs01)にボリューム作成、イメージ移動
○作成と移動
zfs create zen
zfs set sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/xen
mkdir /mnt/kfs01/xen/img
mkdir /mnt/kfs01/xen/conf
mv /mnt/kfs01/kfs/xen/* /mnt/kfs01/xen/img

○設定書き換え
Xenの設定ファイルのファイルパスを書き換えます。
>> disk = [ "tap:aio:/kfs_alpha/xen/ad01.img,xvda,w" ]
<< disk = [ "tap:aio:/kfs_xen/img/ad01.img,xvda,w" ]

○スナップショット作成
ここらでセーブしとくか。
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`

■AlphaとBetaにマウントポイント作成
# mkdir /kfs_xen
# mount -t nfs kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen
# vi /etc/fstab
kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen nfs rw 0 0

○設定ファイルはシンボリックリンク共有にしちゃう
ln -s /kfs_xen/conf/* /etc/xen/

■一気に起動
省略。

■参考:メンテナンス方法
○スナップショット閲覧
zfs list -t all

○スナップショット作成
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`

○スナップショット削除
zfs destroy kfs01/xen@hogehoge

■どうなったか
ストレージサーバのアクセスランプが点灯しっぱなし。パフォーマンスめちゃ悪い(1MB/sとか)。
起動にも時間かかるし、DBなんかまともに動いちゃいない。想定外の事態である。

○原因を考える
ストレージサーバへの転送速度測定では80MB/sくらい出ている。ローカルのRAID1と同じくらいなので、単体アクセス時の速度面は問題なし。複数同時アクセスするとパフォーマンスが激しく落ちるのだろうか。ZFSではキャッシュが盛大に効いているようなので、むしろ速くなるのではないかと期待していたのだが。。

ディスクイメージをNFSで共有しているのが問題なんだろうか。ファイルを部分的に読み書きする場合のNFS+ZFSのパフォーマンスは未確認である。ここかしら。

アクセスランプが点灯しっぱなしであるが、zpool iostatでは10MB/sくらいしか読み書きしていないようである。ってかまず10MB/sも何をしているんだろうか。そんなに盛大にローカルディスクにアクセスする機会、ないんですけど。ファイルの一部分だけを書き換える操作にNFS+ZFSが向いていなくて、広範囲を読み書きしてしまって速度が低下しているんだろうか。

○対策
しかしZFSのsnapshot機能は、サーバのディスクイメージを保管するのにもってこいの機能ではないですか。無停止で取れるし、無駄な容量食わないし。なんとしても活用したい。
というわけでサービス上の最大のボトルネックはDBの読み書きであると判断し、DBサーバだけローカルディスクで稼働するように再変更しました。
これにより、相変わらずアクセスランプは激し目に点滅しているものの、一応サービス提供に問題ないレベルまで速度向上したと思います…。なんか納得いかない。。

気がつけばOpenSolarisの新バージョンが出ているようなので、どこかの段階で、改めてSolaris導入を検討したいと思います。NFS共有がダメなんだとすれば、SolarisでZFSでzVOLでshareiscsi使えば問題なさそうな気がするので。大改造ですけども。

2009年6月8日月曜日

FUPPESを導入する

FreeBSD8-CURRENTにFUPPESを入れる。

cd /usr/ports/audio/lame
make && make install
cd /usr/ports/audio/twolame
make && make install
cd /usr/ports/multimedia/ffmpeg
make && make install
cd /usr/ports/devel/pcre
make && make install
cd /usr/ports/databases/sqlite3
make && make install

cd ~
fetch http://ncu.dl.sourceforge.net/sourceforge/fuppes/fuppes-SVN-578.tar.gz
tar -xvzf fuppes-SVN-578.tar.gz
cd fuppes-SVN-578
./configure --enable-video-transcoding --disable-gnome-panel-applet --disable-libnotify
make && make install

…が、こんなのが出て止まっちゃう…。。。
lib/HTTP/HTTPMessage.cpp:781: error: 'atoll' is not a member of 'std'

ググると解決策は見あたるが、めんどいし、どうせなら最新版を入れちまえ。。
依存関係は多分おなじようなもんではないかと。

cd /usr/ports/devel/subversion
make && make install
cd ~
/usr/local/bin/svn co https://fuppes.svn.sourceforge.net/svnroot/fuppes/trunk fuppes
cd fuppes/
autoreconf -vfi
./configure
make && make install

…おいおい、こっちもエラーかよorz ※SVN636

vi src/plugins/ffmpeg/ffmpeg.cpp

#if LIBAVCODEC_VERSION_MINOR >= 11
av_freep(subtitle_to_free->rects[i]->pict.data[0]);
av_freep(subtitle_to_free->rects[i]->pict.data[1]);
av_freep(subtitle_to_free->rects[i]);
#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
#endif

to

//#if LIBAVCODEC_VERSION_MINOR >= 11
// av_freep(subtitle_to_free->rects[i]->pict.data[0]);
// av_freep(subtitle_to_free->rects[i]->pict.data[1]);
// av_freep(subtitle_to_free->rects[i]);
//#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
//#endif

これでmake && make installすると
/usr/local/bin/fuppes
に本体が入る。やれやれ。

/usr/local/bin/fuppes
でスタンドアロン版を起動すると、設定画面のURLが表示されるのでアクセスする。
共有ディレクトリを適当に指定して(あとついでにポートも固定して)
rebuild databaseする。

デーモン起動はこちら。
/usr/local/bin/fuppesd

2009年5月28日木曜日

Kingmax U-DriveをFreeBSD7.1で使う

多分FreeBSD7.2でも同様だと思う。

Kingmax U-Drive 8GBとやらが安かったので買ってきたが、FreeBSDではこいつがUSBデバイスとして定義されていないので、ZFSで使用する時に盛大にエラーが出る。kernelを再構築すれば使える。

vi usbdevs
(追加)
vendor KINGMAX 0x1687 Kingmax
product KINGMAX UDRIVE 0x6211 Kingmax U-Drive

(追加)
vi umass.c
{ USB_VENDOR_KINGMAX, USB_PRODUCT_KINGMAX_UDRIVE, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
},

多分これだけ。ちゃんちゃん。

…と思ったらmakeが通らない… めんどくさい。やっぱやーめた。。

2009年5月5日火曜日

エラーの多いUSBメモリ対策

USBメモリがよく壊れる。

USBメモリから起動させて数日経つと、フリーズしてしまう。原因は、どうやらUSBメモリのデータ破損らしい。ZFSのCKSUMがうなぎ登り。やはり激安USBメモリではムリがあったか。

対策としては、信頼性の高いストレージを導入することだが、いまさらHDDに切り替えも困難。物理的に搭載できる限界に達してしまっている。USBメモリで何とかするしかない。

SLCのUSBメモリを買えば信頼性は向上するだろうが、今のメモリが無駄だし高いし、そもそも所詮USBメモリなので、根本的解決にはならないだろう。MLCだって1万回程度の書き換え耐久はある(と言われているようだが、どう考えても2~3回くらいしか書き換えてないが…)はずで、それが10倍になったところでこの現象が収まるとは思えない。2~3日で壊れるのが、20~30日で壊れるようになっても、ねぇ。

今回はZFSのミラーリングを利用し、データが破損すること前提で、対策を打ってみる。ZFSが全ブロックチェックサムでデータ破損を検知し、正常なミラーブロックのデータで上書きして動き続ける仕組みを活用する。

バッドノウハウですけれども。。


■ディスク構成
・1GBのUSBメモリ 1本(da0)
・4GBのUSBメモリ 1本(da1) こいつが腐ってるUSBメモリ。

■構築方法
1. da0にFreeBSDをインストールする。
2. da0のFreeBSDでkernelを再構築する(da1が腐っているので、その対策のため設定改変)
3. da1を4分割し、ZFSミラープールを構築する(rpoolという名前にした)。
4. /boot以外のデータをrpoolにコピーする。
5. 起動時にrpoolをrootとしてマウントするように設定する。

■問題点
・2本1セットでないと運用できない(目をつぶる)
・bootパーティションはミラー化されていない(ddでバックアップしておくことにする)

ミラーを3本にすれば1本のUSBメモリで何とかなる気もするが、なにせ信用ならないUSBメモリなので、bootパーティションが破壊された時のために分割しておくことにします。da0のほうはわりと運用実績あるので、信用する。

■やりかた要旨(基本、3つ前のエントリーに沿って作業する)
da0にFreeBSDをインスコして、kernel再構築する。
…と思ったら1GBメモリでは容量不足で再構築できなかったので、腐ったUSBメモリで再構築した/boot以下を上書きコピーしちゃう。

○シングルモードで起動
mount -w /
mkdir /mnt/temp
mount /dev/da1s1a /mnt/temp
rm -rf /boot
cp -a /mnt/temp/boot /
umount /mnt/temp
rmdir /mnt/temp
reboot

○マルチユーザモードで起動
sysinstall->fdiskでスライスを同容量で4つ確保する(da1)
7843838/4 = 1960959

sysinstall->labelでそれぞれパーティションを1つづつ作る
da1s1d/da1s2d/da1s3d/da1s4d

ミラープール作成
zpool create rpool mirror /dev/da1s1d /dev/da1s2d /dev/da1s3d /dev/da1s4d

ZFSパーティション作成。読み書き速度が1/4になる&容量ちょっと足んないので、全部圧縮しちゃう。
zfs create rpool/root
zfs set compress=gzip rpool/root
zfs set atime=off rpool/root
zpool export rpool
reboot

○シングルユーザモードで起動
mount -w /
zpool import rpool

da0のデータをrpoolにコピーしてboot時にマウントされるようにする。
find -x / | cpio -pmd /rpool/root

rm -rf /rpool/root/boot
mkdir /rpool/root/bootdir
cd /rpool/root
ln -s bootdir/boot boot
echo 'vfs.root.mountfrom="zfs:rpool/root"' >> /boot/loader.conf

vi /rpool/root/etc/fstab
(変更前)/dev/da0s1a / ufs rw 1 1
(変更後)/dev/da0s1a /bootdir ufs rw 1 1

cd /
zfs set mountpoint=/ rpool/root
zfs set mountpoint=legacy rpool

zpool export
reboot

これだけ。ナイスだZFS。
安定性はまた後日レポします。

--追記(2009/5/15)--
極めて安定している。嘘のように安定している。エラーが出ない・・・orz
4組ミラーはさすがに無駄が多いので、2組ミラーのストライピングに切り替えちゃいました。
zpool detach rpool da1s3d
zpool detach rpool da1s4d
zpool add rpool mirror /dev/da1s3d /dev/da1s4d

うーん、再起動不要。ナイスだZFS。

2009年4月28日火曜日

DomU mem11の導入

memcached専用ドメインを作る。
ローカル稼働の方が速いんだろうけど、まぁ、共有すると思うので、一応…。
一応新システム用ということでリビジョンコードを上げて、1x系とする。

■立ち上げ
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.161/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:A1/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=mem11.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ここらでyum updateする

■mem01に導入するものと手順
yum --enablerepo=rpmforge install memcached
service memcached start
chkconfig memcached on

とりあえず、これで終わり。
www11からテストしてみる。

vi /etc/sysconfig/memcached
PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="128"
OPTIONS=""

DomU www11の導入

memcachedをフル活用した超高速な新システムを構築するべく、導入する。

■立ち上げ
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.151/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:97/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=www11.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ここらでyum updateする


■www01に導入するものと手順

yum install httpd httpd-devel php perl php-mysql php-pear php-mbstring php-mcrypt ImageMagick-perl php-devel
perl -MCPAN -e shell
## install Jcode

○APCの導入
vi /usr/share/pear/pearcmd.php
## @ini_set('memory_limit', '16M'); ←追記する
pecl install apc
vi /etc/php.ini
## extension=apc.so ←追記する

○memcached PHPバインディングの導入
yum install php-pecl-memcache

○その他PHP関連
pear channel-update pear.php.net
pear upgrade --force PEAR
pear upgrade-all
pear install Cache_Lite

○PHPの設定
#vi /etc/php.ini
↓以下変更点
output_buffering = Off
post_max_size = 80M
upload_max_filesize = 20M
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = none;

○apacheの設定
バーチャルホストベースでwww01を作ります。httpd.confを適切に編集する。

○mod_rpaf
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxpf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
vi Makefile
以下の行を書き換える。
APXS2=$(shell which apxs2) を
APXS2=/usr/sbin/apxs
make rpaf-2.0
make install-2.0
vi /etc/httpd/conf.d/mod_rpaf.conf
以下の記述を追加
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips <プロキシサーバのIPアドレス>

【出典】http://www.nire.com/2008/02/howto-install-mod_rpaf/

○起動
service httpd start
chkconfig httpd on

2009年4月11日土曜日

ZFS@FreeBSDの導入

Dom0でファイルサーバを動かしていたが、大容量化するべくZFSを使いたくなったので、ZFSが使えるOSに乗り換える。LinuxはZFSとライセンスの折り合いが悪いようで、Solaris系かFreeBSD系から選択せねばならない。正直まんどい。

■FreeNAS 0.7.4489(amd64)
一旦入れてみたものの、負荷をかけると安定しない。カーネルメモリの割り当てが足りない。amd64版でも1.5GB割り当てようとすると、起動しなくなる。こういうブツは標準状態を改変して運用したくないので泣く泣くパスすることにする。

■Solaris 10
HDDを丸ごとNAS領域にしたいのでUSBメモリにインスコしたが、めちゃめちゃ重い。起動に1時間かかる。神聖Solaris帝国っちゅーことでパッケージの依存関係を自動解決できず運用工数もかかるし、これもパスすることにする。

■OpenSolaris 2008/11
NEC Express5800/110Gdでインストーラが起動しない。Language選択で画面がまっ白になり、固まる。パスすることにする。

■Nexenta Core 1.0.1 Stable
Debian互換のSolaris。パッケージ管理がapt-getで楽勝だろうということで。
インストールは簡単。導入先を選択し、ネットワーク設定を行うだけ。起動すると既にSSHDが上がっているので、以後はSSHから操作することにする。
#初期状態でzfs snapshotが取られていてGJ。

だがしかし、FreeNASで作ったZFS領域をimportできなかった。詳しい情報があまりないのだが、どうもBSD Flagというのがあって、簡単には移行できないっぽい? Solaris系は諦めるしかないのか…?

■Nexenta Core 2.0RC1
NEC Express5800/110Gdでインストーラが起動しない。ロード中に落ちる。他のマシンでインストールして110Gdに繋いでも、ロードが終わらない。ダメっぽい。

…結局、モトのNreeNASで何とかするか、素のBSDを入れるしか選択肢がない。。FreeNAS0.7はamd64版が全然公開されないし、進捗遅そうなので、自力で立てるほうを選択します。




■FreeBSD7.1 RELEASE
HDDを全量ストレージにするため、USBメモリにminimalでインスコした。
USBメモリは書換耐久力が気になる。ZFSは追記型FSなので書き換え領域が分散するし、後からミラー追加できるし、全ブロックにCheckSUM付きで安心である。ここを参考に/ディレクトリのZFS化を試みた。

…USBメモリがFlushコマンドに対応していないらしく、書き換える度に猛烈にエラーが出まくる…。
↓書き込む度にこんなのが大量にグワァァァーーーっと。
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error

kernelを再構築すれば解消できるらしいが、minimalで入れてしまったのでソースやmakeはおろかkpg_addもsysinstallも、fetchさえも入っていない始末。。。

…素のBSDでも、一筋縄では行かないようで。




気を取り直して再インスコからやり直す。他のOSがまともに動かないんじゃ、しょうがない。。

■FreeBSD7.1 インストール
インストールパッケージは「Kern-devel」を選択。
スライスはUSBメモリ全体を丸ごと1スライスで確保する。
パーティションは/を1.5GB確保(一次インストール&/boot用)。残り全量をマウント無しで確保(ZFSストレージ化して後から引っ越す)。
#後から思ったが、/bootをちょびっと確保して、/とZFS領域を同量で確保しておくと、JBOBかRAID0で無駄なく使えたかもな… と思った。


■kernel再構築 マルチユーザモードでも可
○再構築の準備&ついでに若干最適化
cd /usr/src/sys/amd64/conf
cp GENERIC KFS
vi KFS
(変更前)ident GENERIC
(変更後)ident KFS

↓コメントアウトした行。もっと攻めてもいいけど、無難にね。。
makeoptions DEBUG=-g
options INET6
options SCTP
options COMPAT_FREEBSD4
options COMPAT_FREEBSD5
options COMPAT_FREEBSD6
options KTRACE
options AUDIT

○Transcend JetFlash Driveの機器追加
エラーを吐きまくる現象を回避する。このメモカ限定の現象。参考資料1 参考資料2

cd /usr/src/sys/dev/usb/
vi usbdevs
(追加)product ALCOR TRANSCEND 0x6387 Transcend JetFlash Drive

vi umass.c
(追加)
{ USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_TRANSCEND, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
},

○kernel再構築
cd /usr/src/sys/amd64/conf
config KFS
cd ../compile/KFS
make cleandepend
make depend
make
make install

reboot


■ZFS pool作成 マルチユーザモードでも可
zpool create rpool /dev/da0s1d

zfs create rpool/root
zfs create rpool/root/usr
zfs create rpool/root/var
zfs create rpool/root/var/log

zfs set compress=gzip rpool/root/usr
zfs set compress=gzip rpool/root/var/log
zfs set atime=off rpool
zfs set quota=512M rpool/root/var/log

echo 'zfs_enable="YES"' >> /etc/rc.conf
echo 'zfs_load="YES"' >> /boot/loader.conf
echo 'vm.kmem_size="1536M"' >> /boot/loader.conf
echo 'vm.kmem_size_max="1536M"' >> /boot/loader.conf

zpool export rpool
reboot


■ZFS on root化 シングルユーザモード
mount -w /
zpool import rpool

find -x / | cpio -pmd /rpool/root

rm -rf /rpool/root/boot
mkdir /rpool/root/bootdir
cd /rpool/root
ln -s bootdir/boot boot
echo 'vfs.root.mountfrom="zfs:rpool/root"' >> /boot/loader.conf

vi /rpool/root/etc/fstab
(変更前)/dev/da0s1a / ufs rw 1 1
(変更後)/dev/da0s1a /bootdir ufs rw 1 1

cd /
zfs set mountpoint=/usr rpool/root/usr
zfs set mountpoint=/var rpool/root/var
zfs set mountpoint=/var/log rpool/root/var/log
zfs set mountpoint=/ rpool/root
zfs set mountpoint=legacy rpool

zpool export
reboot

■SWAPのZFS化 シングルユーザモード
zfs create -V 1GB rpool/swap
zfs set org.freebsd:swap=on rpool/swap

zpool export
reboot

■ゴミ片付け シングルユーザモード
cd /bootdir
rm -rf `ls | grep '[^boot]'`

mv /bootdir/boot /bootdir/boot.old
cp -Rp /bootdir/boot.old/* /bootdir
mv /bootdir/boot /bootdir/boot.file
cd /bootdir
ln -s ./ ./boot

echo '/loader' >> /bootdir/boot.config

rm /boot
mkdir /boot
vi /etc/fstab
/dev/ad0s1a /boot ufs rw 1 1

zpool export
reboot

■続・ゴミ片付け シングルユーザモード
rm -rf /bootdir


↓残りの作業はまだまだこんなに。。

■NFS
vi /etc/rc.conf
(追加)nfs_server_enable="YES"
(追加)nfs_server_flags="-u -t -n16"
(追加)rpc_lockd_enable="YES"
(追加)rpc_statd_enable="YES"
(追加)rpcbind_enable="YES"

zfs_enable="YES"
↑これも書いておかないと、zfs set sharenfsが効かない。

共有ディレクトリはZFSでmountする。
zfs set sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/kfs

■Samba
ja-sambaとsambaの違いは、設定ファイルやメッセージが日本語だったりする点。正直いらね。
よってsysinstallからnet/sambaを入れちゃう。

vi /etc/rc.conf
(追加)samba_enable="YES"

でもって、文字コードにUTF8やCP932を指定したりする。
vi /usr/local/etc/smb.conf
[global]
encrypt passwords = yes
map to guest = Bad User
workgroup = WORKGROUP
server string = hogehoge storage
hosta allow = 192.168.0.
load printers = no
display charset = utf-8
unix charset = utf-8
dos charset = cp932

[homes] ※すべてコメントアウト
[printers] ※すべてコメントアウト

[FreeNAS1] ※ネーミングはFreeNAS時代の名残り
comment = FreeNAS1
path = /mnt/kfs01/FreeNAS1
public = yes
writable = yes
printable = no
guest ok = yes
only guest = yes
browseable = yes


ちなみにja-sambaの場合↓
cd /usr/ports/japanese/samba3
make config
make NO_CHECKSUM=yes
make install clean
あとは一緒。

/usr/local/etc/rc.d/samba start

■Webmin
sysinstallで導入しとく。

vi /etc/rc.conf
(追加)webmin_enable="YES"


■Postfix
■rsyncd
■smartd

2009年2月27日金曜日

DomU mail01の設定(2)

MySQL化+バーチャルドメイン化。

ここが秀逸だったので保管。
http://centos.bungu-do.jp/2008/11/postfix_postfixmysqldovecotpos.html
http://s03.megalodon.jp/2009-0227-2203-27/centos.bungu-do.jp/2008/11/postfix_postfixmysqldovecotpos.html

既存のローカル配送は維持したいので、main.cfはこんな感じになった。

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#local_transport = virtual
local_transport = local
virtual_transport = virtual
virtual_mailbox_base = /kfs/mail
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 89
virtual_uid_maps = static:89
virtual_gid_maps = static:89

virtual_mailbox_limit = 512000000
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_inbox = yes

2009年2月14日土曜日

DomU yjnews01の設定

sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.241/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:F1/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=yjnews01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ln -s /etc/xen/yjnews01 /etc/xen/auto/yjnews01

ここらでyum updateする

「全Dom0にPostfixを入れる」をやる
「DomU www01の設定」をやる

/usr/share/pear/pearcmd.php に追記
> @ini_set('track_errors', true);
> @ini_set('html_errors', false);
> @ini_set('magic_quotes_runtime', false);
> @ini_set('memory_limit','16M'); // ここに追加


# yum install gcc-c++
# pear install HTTP_Request
# yum -y install php-devel
# pecl install perl

php.iniに追記
> extension=perl.so

# service httpd restart



# wget http://downloads.sourceforge.net/mecab/mecab-0.97.tar.gz?use_mirror=jaist
# wget http://downloads.sourceforge.net/mecab/mecab-ipadic-2.7.0-20070801.tar.gz?use_mirror=jaist
# wget http://downloads.sourceforge.net/mecab/mecab-perl-0.97.tar.gz?use_mirror=jaist
# wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/TermExtract-4_08.tar.gz

# tar xvzf mecab-0.97.tar.gz
# cd mecab-0.97
# ./configure --with-charset=utf8 --prefix=/usr/local/mecab
# make
# make install
# cd ..

# tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
# cd mecab-ipadic-2.7.0-20070801
# ./configure --with-charset=utf8 --prefix=/usr/local/mecab --with-mecab-config=/usr/local/mecab/bin/mecab-config
# make
# make install
# cd ..

# tar xvzf mecab-perl-0.97.tar.gz
# cd mecab-perl-0.97
# sed -i s/mecab-config/\\/usr\\/local\\/mecab\\/bin\\/mecab-config/ Makefile.PL
# perl Makefile.PL
# make
# make install
# cd ..

# tar xvzf TermExtract-4_08.tar.gz
# cd TermExtract-4_08
# perl Makefile.PL
# make
# make install
# cd ..

# cd /usr/lib/perl5/site_perl/5.8.8/TermExtract/
# nkf --utf8 MeCab.pm > MeCab-utf8.pm
# mv MeCab-utf8.pm MeCab.pm

# perl -MCPAN -e shell
## install DB_File

いじょう。