2008年4月26日土曜日

ssh01を立ち上げる

外部からのSSH着信用に専用待ち受けサーバを立てることにしました。
やっぱ危ないもんね。

cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/ssh01.img

cp /etc/xen/standard /etc/xen/ssh01
sed -i 's/name = "standard"/name = "ssh01"/g' /etc/xen/ssh01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/ssh01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/ssh01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630029"/g' /etc/xen/ssh01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/ssh01.img,xvda,w\" \]/g' /etc/xen/ssh01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:29,bridge=xenbr0\" \]/g' /etc/xen/ssh01

○ssh01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.41/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:29/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=ssh01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○公開鍵設定まで
# yum update
・DNSに設定追加
・Webmin Clusterに参加させ、ユーザーを同期させる
・SSH公開鍵のセット
# cd ~
# mkdir .ssh
# vi .ssh/authorized_keys
公開鍵をペースト
# chmod 600 .ssh/authorized_keys
# chmod 700 .ssh
# chwon -R hoge:hoge .ssh
これを各ユーザー分セットしてしまえ

○鍵なしログイン禁止
# vi /etc/ssh/sshd_config
#PasswordAuthentication yes
→PasswordAuthentication no
# /etc/rc.d/init.d/sshd restart

いじょ。

なお、鍵はPoderosaで作成しましたが、WinSCPとPuTTyはPuTTy形式の秘密鍵しか認識しないので、秘密鍵についてはPoderosaで生成後、puttygenでputty形式に変換しました。

あとー、/etc/snmp/snmpd.confを他のサーバからコピーしておく。standardイメージには入ってないです。

2008年4月20日日曜日

unixbenchによるベンチマークテスト

unixbenchでベンチしてみる。
rpmforgeのx86_64のrpmはディレクトリ構成がイケてないので、シンボリックリンク貼っております。

# yum --enablerepo=rpmforge install unixbench
# ln -s /usr/lib64/unixbench /usr/lib/unixbench
# unixbench

このまま30~40分待つ。

# rm /usr/lib/unixbench
# yum remove unixbench

なお、x86_64でi386を使う場合は、rpm持ってきてrpmコマンドで入れないとだめだぞ。
# wget http://ftp-stud.fht-esslingen.de/dag/redhat/el5/en/i386/dag/RPMS/unixbench-4.0.1-1.el5.rf.i386.rpm
# rpm --install unixbench-4.0.1-1.el5.rf.i386.rpm
# unixbench
# rpm --erase unixbench

Celeron D 341 と Core 2 Quad のunixbench対決結果

プロセッサCelD341CelD341Q6700CelD341Q6700
ドメイン種別Dom0DomUDom0Dom0Dom0
ドメイン名/td>alphadevalphabetaalpha
unixbenchのアーキテクチャx86_64x86_64x86_64i386i386
Arithmetic Test (type = double)237.4235.3287.5213.4240.0
Dhrystone 2 using register variables526.2525.31297.2385.3945.0
Execl Throughput173.87.8372.3202.8417.0
File Copy 1024 bufsize 2000 maxblocks322.3319.0802.4316.5708.6
File Copy 256 bufsize 500 maxblocks212.2214.8530.8207.9463.8
File Copy 4096 bufsize 8000 maxblocks590.9525.9301.0586.0297.1
Pipe Throughput156.0171.6404.1155.4333.5
Pipe-based Context Switching0.00.00.0111.0221.0
Process Creation117.9114.5304.5152.0393.8
Shell Scripts (8 concurrent)321.768.2312.8328.3320.5
System Call Overhead115.1119.0290.1102.8209.4

2008年4月13日日曜日

全Dom0にPostfixを入れる

しまった、面倒なことになってしまった。
PHPやPerlはsendmailをコマンドラインで叩いてメール送信するので、各Dom0にMTAを導入してやらないとメールを集約できないじゃん・・・。。。

Webminで全mail01を除く各Dom0にPostfixを入れて、設定ファイルをコピーすることにする。ああ、まんどい。
※alphaには入れない。Dom0が常に動いているとは言い切れないのでトラブルの元。

全DomUに
# yum -y install postfix

全DomUに設定追記
myhostname = stats01.hoge.com
mydomain = hoge.com
myorigin = $mydomain
inet_interfaces = all
#proxy_interfaces =
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

#SMTP-Auth
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#MailSizeLimitter 100MB
message_size_limit = 104857600

#MailBoxSizeLimitter 500MB
mailbox_size_limit = 512000000

mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination

relayhost = mail01.hoge.com
#transport_maps = hash:/etc/postfix/transport
#alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

#manual setting
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
disable_vrfy_command = yes
allow_percent_hack = yes
swap_bangpath = yes
forward_path = $home/.forward$recipient_delimiter$extension,$home/.forward
sendmail_path = /usr/sbin/sendmail

これでローカル配信以外は全部mail01.hoge.comにリレーされる。
全DomUで
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd
# mkdir -p /etc/skel/Maildir/new
# mkdir -p /etc/skel/Maildir/cur
# mkdir -p /etc/skel/Maildir/tmp
# chmod -R 700 /etc/skel/Maildir/
# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off
# chkconfig --list sendmail
# alternatives --set mta /usr/sbin/sendmail.postfix
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
# chkconfig --list postfix

これでよしと。

■動作まとめ
○mail01
@hoge.com宛・・・ローカル配信する。
外向け・・・携帯はプロバイダSMTPサーバ、その他は直接当該SMTPサーバにリレー。
外から@xxx.hoge.com宛・・・全部ローカル配信。

○mail01以外
@hoge.com宛・・・ローカル配信する。
@xxx.hoge.com宛・・・該当xxx.hoge.comにリレー。
外向け・・・mail01.hoge.com宛にリレー。
外から@xxx.hoge.com宛・・・全部ローカル配信。

DomU mail01の設定

■Postfix&IMAPサーバ
○参考サイト
http://centossrv.com/postfix.shtml

○Postfix設定 全部最後にまとめて書く。
# vi /etc/postfix/main.cf
myhostname = mail01.hoge.com
mydomain = hoge.com
myorigin = $mydomain
inet_interfaces = all
#proxy_interfaces =
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

#SMTP-Auth
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#MailSizeLimitter 100MB
message_size_limit = 104857600

#MailBoxSizeLimitter 500MB
mailbox_size_limit = 512000000

mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination

#relayhost = op25b.asahi-net.or.jp
transport_maps = hash:/etc/postfix/transport
alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

#manual setting
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
disable_vrfy_command = yes
allow_percent_hack = yes
swap_bangpath = yes
forward_path = $home/.forward$recipient_delimiter$extension,$home/.forward
sendmail_path = /usr/sbin/sendmail


# vi /etc/postfix/transport
最後に追記
ezweb.ne.jp :mail.asahi-net.or.jp
.ezweb.ne.jp :mail.asahi-net.or.jp
docomo.ne.jp :mail.asahi-net.or.jp
.docomo.ne.jp :mail.asahi-net.or.jp
vodafone.ne.jp :mail.asahi-net.or.jp
.vodafone.ne.jp :mail.asahi-net.or.jp
softbank.ne.jp :mail.asahi-net.or.jp
.softbank.ne.jp :mail.asahi-net.or.jp
pdx.ne.jp :mail.asahi-net.or.jp
.pdx.ne.jp :mail.asahi-net.or.jp


○SMTP-AuthにシステムのID/PWを使う
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd

○Maildir形式メールボックス自動作成
# mkdir -p /etc/skel/Maildir/new
# mkdir -p /etc/skel/Maildir/cur
# mkdir -p /etc/skel/Maildir/tmp
# chmod -R 700 /etc/skel/Maildir/

○Sendmail止める
# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off
# chkconfig --list sendmail
# alternatives --config mta

○Postfix起動
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
# chkconfig --list postfix


続いてDovecot(今回はIMAPのみとする)
これも最後にまとめて追記。
#vi /etc/dovecot.conf
protocols = imap imaps
mail_location = maildir:~/Maildir

あと自動起動設定して完了。

なお、ユーザーiwataについてはiwata01.hoge.comにメールを転送するよう、.forwardファイルを設定しておく。


○mailman
mailmanもインスコしておく。

# yum install mailman
# vi /etc/mailman/mm_cfg.py
DEFAULT_URL_HOST = 'mail.hoge.com'
DEFAULT_EMAIL_HOST = 'hoge.com'

MTA = 'Postfix'
DEFAULT_SERVER_LANGUAGE = 'ja'
DEFAULT_GENERIC_NONMEMBER_ACTION = 2
DEFAULT_LIST_ADVERTISED = No
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%d] "
DEFAULT_REPLY_GOES_TO_LIST = 1
OWNERS_CAN_ENABLE_PERSONALIZATION = Yes
VERP_PERSONALIZED_DELIVERIES = Yes

# /usr/lib/mailman/bin/mmsitepass [パスワード]
# /usr/lib/mailman/bin/genaliases
aliasesが /etc/mailman/aliases に生成される。
# chown mailman. /etc/mailman/aliases*
# chmod g+w /etc/mailman/aliases*
# vi /etc/postfix/main.cf
alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases
# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/httpd reload

ここまででインスコは完了。続いてデータ引き継いでおく。
# rsync -av 192.168.0.9:/etc/mailman /etc/
# rsync -av 192.168.0.9:/usr/lib/mailman /usr/lib/
# rsync -av 192.168.0.9:/var/lib/mailman /var/lib/
# rsync -av 192.168.0.9:/var/log/mailman /var/log/

あと、ドメイン変更は以下を参考に。
http://mm.tkikuchi.net/pipermail/mmjp-users/2004-June/000917.html

# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/httpd reload
# /etc/rc.d/init.d/mailman restart

で完了。

オリジナルCMS HogeCMSの改造

■DBサーバ切り替え
このあたり。
# find ./ -name \*.php -print | xargs grep dbm01
mailsend/mail_send.php
edit.php
beacon.php
gallery/config.php
loginsys/login.php
beacon_bench.php

■キャッシュ対応
Squidを入れたので、キャッシュ制御をちゃんとせねばならん。

○common.php - 5分間キャッシュ有効
header("Expires: ".gmdate("D, d M Y H:i:s",time()+300)." GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: public, max-age=300");
header("Vary: User-Agent");

※投稿フォームがキャッシュされると困るので、index.phpに手を入れないとダメだな・・・。。

○beacon.php - キャッシュさせない
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

○image.php - 5分間キャッシュ有効
header("Expires: ".gmdate("D, d M Y H:i:s",time()+300)." GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: public, max-age=300");
header("Vary: User-Agent");
※下の方にキャッシュ無効設定が隠れているので注意

DomU sc01の設定

# yum install squid
# mv /etc/squid/squid.conf /etc/squid/squid.conf.org
# vi /etc/squid/squid.conf
http_port 80 vhost
cache_peer www01.hoge.com parent 80 0 no-query originserver round-robin

acl valid1 dstdomain .hoge.com
http_access allow valid1
acl valid2 src 192.168.0.0/24
http_access allow valid2
acl all src 0/0
http_access deny all

cache_dir ufs /tmp/squid/cache 128 16 256
cache_effective_user squid
cache_effective_group squid
visible_hostname sc01.hoge.com
cache_mem 128 MB
maximum_object_size 4096 KB
maximum_object_size_in_memory 4096 KB

forwarded_for off

coredump_dir /var/cache/squid
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log on
log_fqdn off

cache_vary on

※forwarded_for off について
OnにするとHTTPヘッダに X-Forwarded-For が付く・・・ というのが一般的に囁かれていますが、
正確に言うと、X-Forwarded-Forを上書きする、が正しいようです。Offにしとくと既にあるX-Forwarded-Forがスルーされるので、受け側Apacheに入れたmod_rpafで正しく処理できます。ややこしい・・・。。。

# mkdir /tmp/squid/cache
# chown -R squid:squid /tmp/squid

ついでに日本語化。
Squid日本語化
# mv /etc/squid/errors /etc/squid/errors.org
# ln -s /usr/share/squid/errors/Japanese/ /etc/squid/errors
うむむ。日本語化されないじゃん。。。

DomU mdbm01の設定

# yum install mysql-server
# vi /etc/my.cnf
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
big-tables
query_cache_type=1
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=32M
table_cache=128
log-bin
server-id=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
ft_min_word_len=1

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set = binary

[client]
default-character-set=utf8

#utf8を明示しないとエラー出るよ

DomU www01の設定

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

# yum install httpd httpd-devel php perl
# yum install ImageMagick-perl
# perl -MCPAN -e shell
## install Jcode

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

○PHPの追加インスコ
yum install php-mysql php-pear php-mbstring php-mcrypt

○PHPの設定
#vi /etc/php.ini
↓以下変更点
output_buffering = Off
zlib.output_compression = Off
memory_limit = 64M
post_max_size = 80M
upload_max_filesize = 20M
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;

※ad01は以下のとおり。
output_buffering = Off
zlib.output_compression = Off
register_argc_argv = On
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;

あと、DBホストを設定変更しとこうね。

2008年4月12日土曜日

DomU iwata01の設定

■statsに導入するものと手順
○apache周りの導入
# yum install httpd httpd-devel php perl

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

○各種ライブラリの導入
# yum install ImageMagick-perl
# perl -MCPAN -e shell
全部Enter応答。
CPANのFTPに繋がらないエラーが出た。この日限定だと思うが、以下を入力して回避した。
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
いくつもミラー設定したが、あちこちエラー出過ぎです orz
install Image::Size
install Image::IPTCInfo
install Image::Info
install Jcode
install Archive::Zip

続いてuploader.cgi用。依存関係で他は全部入る。
install MIME::WordDecoder
install File::Path

uploader.cgiをコピーしておく。
pop3ディレクトリを作成しておく。

○mod_rpafの導入
http://www.nire.com/2008/02/howto-install-mod_rpaf/

DomU gatekeeper01の設定

■gatekeeperに導入するものと手順
○apache+mod_proxy
HTTPリバースプロキシはmod_proxyを利用するため、apacheを入れます。
# yum install httpd
httpd.confは適切に設定。
リバースプロキシ関係は別ファイルに切り出しておく。
# vi vi /etc/httpd/conf/proxy.conf
ProxyRequests Off
<proxy>
Order deny,allow
Allow from all
</proxy>

ProxyPass /balancer-manager !
<location>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.0.
</location>

<proxy>
BalancerMember http://iwata01.hoge.com loadfactor=10
</proxy>
<proxy>
BalancerMember http://stats01.hoge.com loadfactor=10
</proxy>

NameVirtualHost *:80
<virtualhost>
ServerName iwata.hoge.com
ProxyPass / balancer://cluster_iwata/ lbmethod=byrequests timeout=1
ProxyPassReverse / balancer://cluster_iwata/
ProxyPassReverseCookieDomain balancer://cluster_iwata/ iwata.hoge.com
ProxyPassReverseCookieDomain balancer://cluster_iwata/ iwata.hoge.com
ProxyPreserveHost On #バックエンドでバーチャルホストを使うため
</virtualhost>

<virtualhost>
ServerName stats.hoge.com
ProxyPass / balancer://cluster_stats/ lbmethod=byrequests timeout=1
ProxyPassReverse / balancer://cluster_stats/
ProxyPassReverseCookieDomain balancer://cluster_stats/ stats.hoge.com
ProxyPassReverseCookieDomain balancer://cluster_stats/ stats.hoge.com
ProxyPreserveHost On #バックエンドでバーチャルホストを使うため
</virtualhost>

受け側ではmod_rpafの導入を忘れずに。


あー、gccとgcc+++は今後も必要そうなので、webminのCommand shellから全PCに導入しておく。基本イメージに含めればよかったね。。
# yum -y install gcc gcc-c++

○DeleGate
手順は以下で検証済み。
http://centos-server.blogspot.com/2008/03/delegate.html

SMTPサーバにPostfixを入れてあるが、25番ポートをDelegateに占有させるので泣く泣く切る。
一応設定は生かしておくので、アンインスコはしない。

IMAPは直接mail01に送る。設定するのはSMTPだけ。

・・・と思ったけど、Delegateをかますと、mail01から見るとローカルからの接続に見えちゃって、リレーし放題になっちゃうかも。これはまずい。
あ、いやまて、接続先を絞るわけだから、hoge.com宛以外の接続要求はmail01.hoge.comに飛ぶことはないわけで、問題ないかな。。。

・・・めんどくさいので、DeleGateは使わないことにした。HTTPもmod_proxyにしちゃったんで、抹消。

2008年4月11日金曜日

DomU stats01の設定

■statsに導入するものと手順
○log集計
rsyncでwwwXXサーバのログを持ってきますが、これは後日。

○サーバ統括
Webminの操作をします。

Webminにログインし、全DomUを管轄下に置きます。
今回導入したDomUは全て目的が異なるため、異なるグループに所属させ、
Cluster Users and Groups
Cluster Webmin Servers
だけ利用します。

IPとドメインの関係は以下。
www01 IN A 192.168.0.31
lb01 IN A 192.168.0.21
sc01 IN A 192.168.0.211
gatekeeper01 IN A 192.168.0.11
dbm01 IN A 192.168.0.51
iwata01 IN A 192.168.0.91
stats01 IN A 192.168.0.81
mail01 IN A 192.168.0.71

○サーバ監視
Cactiを入れます。
ただし、先にdbm01にMySQLを入れなければなりません。
http://centossrv.com/mysql.shtml

次にRRDTool
yum --enablerepo=rpmforge install rrdtool

あとは http://centos-server.blogspot.com/2008/04/cacti.html で。

※なお、Cactiは起動時にMySQLに繋ぐらしく、他のドメインより後から起動させなければなりません。

○Webalizerの導入
Webalizerを導入し、アクセスログ集計を行います。
ログはgatekeeperXXから回収する。
gatekeeperXXのログはgatekeeperXX自身により週1回rotateする。

インストール
# yum install webalizer
# mkdir /kfs/logs/gatekeepers
# mkdir /kfs/logs/$HOSTNAME

gatekeeperXXのローカルにあるログをgatekeeperXX自身がcronで/kfs/logs/gatekeeperXXに上書きコピーする(毎時20分+logrotate前に週1回4:30にも実行)
# \cp -f /var/log/httpd/* /kfs/logs/$HOSTNAME/

awstatsの中に入っているlogresolvemerge.plでログを統合し、/kfs/logs/gatekeepers/に出力する。(毎時40分)
# perl /kfs/logs/logresolvemerge.pl /kfs/logs/gatekeeper0*/komaspo_access_log > /kfs/logs/gatekeepers/komaspo_access_log

stats01のWebalizerが/kfs/logs/gatekeepers/のログを集計し、members_html/webalizer/に結果を書き出す(毎時00分)
これはWebminで設定しちゃうことにする。

Webalizerが文字化けするので、後処理で自作コードを走らせる。
Jcode.pmをCPANで入れておく。
# perl -MCPAN -e shell
全部Enter応答。
CPANのFTPに繋がらないエラーが出た。この日限定だと思うが、以下を入力して回避した。
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
いくつもミラー設定したが、あちこちエラー出過ぎです orz
install Jcode

BINDの設定

一気にDomUを立ち上げたので、一気にBINDに登録します。

www01 IN A 192.168.0.31
lb01 IN A 192.168.0.21
sc01 IN A 192.168.0.211
gatekeeper01 IN A 192.168.0.11
dbm01 IN A 192.168.0.51
iwata01 IN A 192.168.0.91
stats01 IN A 192.168.0.81
mail01 IN A 192.168.0.71

DomUを一気に立ち上げる

ここまでで一旦、DomUを一気に作ってしまいました。
以下、コンソールに流したコマンド。

■イメージ量産
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/www01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/sc01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/gatekeeper01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/dbm01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/iwata01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/stats01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/mail01.img

■設定量産
cp /etc/xen/standard /etc/xen/www01
sed -i 's/name = "standard"/name = "www01"/g' /etc/xen/www01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/www01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/www01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63001f"/g' /etc/xen/www01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/www01.img,xvda,w\" \]/g' /etc/xen/www01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:1f,bridge=xenbr0\" \]/g' /etc/xen/www01

cp /etc/xen/standard /etc/xen/sc01
sed -i 's/name = "standard"/name = "sc01"/g' /etc/xen/sc01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/sc01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/sc01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa6300d3"/g' /etc/xen/sc01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/sc01.img,xvda,w\" \]/g' /etc/xen/sc01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:d3,bridge=xenbr0\" \]/g' /etc/xen/sc01

cp /etc/xen/standard /etc/xen/gatekeeper01
sed -i 's/name = "standard"/name = "gatekeeper01"/g' /etc/xen/gatekeeper01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/gatekeeper01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/gatekeeper01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63000b"/g' /etc/xen/gatekeeper01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/gatekeeper01.img,xvda,w\" \]/g' /etc/xen/gatekeeper01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:0b,bridge=xenbr0\" \]/g' /etc/xen/gatekeeper01

cp /etc/xen/standard /etc/xen/dbm01
sed -i 's/name = "standard"/name = "dbm01"/g' /etc/xen/dbm01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/dbm01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/dbm01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630033"/g' /etc/xen/dbm01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/dbm01.img,xvda,w\" \]/g' /etc/xen/dbm01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:33,bridge=xenbr0\" \]/g' /etc/xen/dbm01

cp /etc/xen/standard /etc/xen/iwata01
sed -i 's/name = "standard"/name = "iwata01"/g' /etc/xen/iwata01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/iwata01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/iwata01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63005b"/g' /etc/xen/iwata01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/iwata01.img,xvda,w\" \]/g' /etc/xen/iwata01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:5b,bridge=xenbr0\" \]/g' /etc/xen/iwata01

cp /etc/xen/standard /etc/xen/mail01
sed -i 's/name = "standard"/name = "mail01"/g' /etc/xen/mail01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/mail01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/mail01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630047"/g' /etc/xen/mail01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/mail01.img,xvda,w\" \]/g' /etc/xen/mail01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:47,bridge=xenbr0\" \]/g' /etc/xen/mail01

cp /etc/xen/standard /etc/xen/stats01
sed -i 's/name = "standard"/name = "stats01"/g' /etc/xen/stats01
sed -i 's/maxmem = 512/maxmem = 512/g' /etc/xen/stats01
sed -i 's/memory = 512/memory = 512/g' /etc/xen/stats01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630051"/g' /etc/xen/stats01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/stats01.img,xvda,w\" \]/g' /etc/xen/stats01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:51,bridge=xenbr0\" \]/g' /etc/xen/stats01

■DomU起動量産
xm create www01
xm create sc01
xm create gatekeeper01
xm create dbm01
xm create iwata01
xm create stats01
xm create mail01

■DomUそれぞれ処理
○www01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.31/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:1F/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=www01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○sc01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.211/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:D3/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=sc01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○gatekeeper01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.11/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:0B/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=gatekeeper01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○dbm01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.51/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:33/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=dbm01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○iwata01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.91/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:5B/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=iwata01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○stats01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.81/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:51/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=stats01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○mail01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.71/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:47/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=mail01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

■DomU自動起動
ln -s /etc/xen/www01 /etc/xen/auto/www01
ln -s /etc/xen/sc01 /etc/xen/auto/sc01
ln -s /etc/xen/gatekeeper01 /etc/xen/auto/gatekeeper01
ln -s /etc/xen/dbm01 /etc/xen/auto/dbm01
ln -s /etc/xen/iwata01 /etc/xen/auto/iwata01
ln -s /etc/xen/stats01 /etc/xen/auto/stats01
ln -s /etc/xen/mail01 /etc/xen/auto/mail01

Sparseファイルの取り扱い方法

XenのイメージファイルをSparseファイルにしておくと
未使用領域を圧縮した状態になる。

■メリット
・イメージファイルのディスクスペースの節約になる
・コピーが速い(イメージファイルを量産する時に有効)

■デメリット
・書き込み速度がとても遅い
http://www.atmarkit.co.jp/flinux/rensai/xen02/xen02b.html
・ファイルが膨張するとHDDから溢れて壊れる可能性がある。
・対応したコマンドで取り扱わないと、元に戻る。

■取り扱い方法
○コピー
# cp --sparse=auto [コピー元] [コピー先]
# rsync -avS [コピー元] [コピー先]

○GNU TARで圧縮/解凍
圧縮 # tar zcSvf [書庫ファイル] [格納するファイル]
解凍 # tar zxSvf [書庫ファイル]

○通常ファイルをSparseファイルにする
# cp --sparse=always [コピー元] [コピー先]

○Sparseファイルを通常ファイルに戻す
# cp --sparse=never [コピー元] [コピー先]

○実容量を表示する
# du -h [ファイル名] ※ワイルドカードOK
↑ls -lと比べてみよう。

2008年4月10日木曜日

Xenのイメージサイズを変更する

Xenのイメージファイルのサイズを変更します。

■条件
・イメージファイルは1つのまま。
・/を増やしたい。
・DomUのパーティションはデフォルトでインスコした=/がLVMになっている。

■やり方
DomUをシャットダウンする。
# dd if=/dev/zero of=dummy4GB.img bs=1M count=4096
# cat standard.img dummy4GB.img > 8GB.img

DomUを起動し、fdiskでLVMを作る。
# fdisk /dev/xvda
n p 3 [ret] [ret]
t 3 8e
w
再起動

# pvcreate /dev/xvda3
# vgextend VolGroup00 /dev/xvda3

空き容量を確認する
# vgdisplay
↑Free PEの値を確認

# lvextend -l+XXX(←FreePEの値) /dev/VolGroup00/LogVol00
# e2fsck -f /dev/VolGroup00/LogVol00
# resize2fs /dev/VolGroup00/LogVol00

■参考 なかなか情報がなくて苦労しました。。。
http://tomo.ac/goodstream/xen/centos5/imgfile.html
http://fedorasrv.com/xen-domuhdd-add.shtml
http://slashdot.jp/~Ryo.F/journal/366066
http://pc.watanet.com/lab/homesvr/linux/lvm_resize/lvm_resize.html

2008年4月8日火曜日

NTPで時刻同期

そういやNTP入れてなかった。

■やりかた
http://fedorasrv.com/ntp.shtml

■使うサーバ
ntp.asahi-net.or.jp
ってのが公式でアナウンスされてるので使うことにする。

導入後、自動起動設定。
# ntpdate ntp.asahi.com
# /etc/rc.d/init.d/ntpd start
# chkconfig ntpd on
# chkconfig --list ntpd

どうやらDomUは自動的にDom0に同期するらしいので、放置。

Cactiの導入

ポコポコたくさんサーバを立てるので、監視用にCactiを入れておきます。
Net-SNMPについてはXenの標準イメージにも導入しておく。
Cactiはネットワークを通じて1つあればよくて、mysql-serverのインスコが先に必要。

■基本的な手順
http://centossrv.com/rrdtool-cacti.shtml

■ただし
・標準XenイメージにはNet-SNMPだけ入れておく。

・RRDToolは普通に入れる。

・Cactiの前に。
 以下は事前に明示して入れておく。
 依存関係で勝手にrpmforgeから入るのを防止する。

# yum install apr apr-util gmp httpd mysql net-snmp-utils perl-DBI perl-Net-Daemon perl-PlRPC php php-cli php-common php-mysql php-pdo php-snmp postgresql-libs

・さてようやくcacti
# yum --enablerepo=rpmforge install cacti

あとの設定は先の参考サイトで。所々間違ってるけど。
public →ユニークな名前にしよう。

2008年4月7日月曜日

ソフトウェアRAIDの構築

HDDとメモリを買ってきたので、ソフトウェアRAIDで再セットアップすることにする。

■基本ポリシー
・500GB×2で丸ごとRAID1(ミラー)
・Xenの管理コマンドを覚えるのが面倒なので、GNOMEを入れてしまう。

■パーティションの切り方
http://www.linuxmania.jp/soft_raid.html

ただし、以下相違点。
・swapは2GB(2048MB)
・/はLVMで構築。

LVMを切るのでグラフィカルインストールでなければならない。
グラフィカルインストールだとオプションが違う。
導入するもの
・開発-レガシーなソフトウェアの開発、開発ツール、開発ライブラリ
・ベースシステム-ベース
・仮想化
・言語-日本語のサポート

インスコ終わったらgrub忘れずに。
[root@linux ~]# grub  
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> root (hd0,0)
grub> setup (hd0)
grub> quit

2008年4月5日土曜日

DeleGateの導入(POP3、SMTP編)

DeleGateはPOPもSMTPも中継できちゃいますので、導入します。

まずpop。
# vi pop.conf
-P110
SERVER=pop
ADMIN="root@hoge.com"
RELIABEL="*"
RELAY=proxy
CACHE="no"
LOGFILE=""
CONNECT="d:*:*"
MOUNT="* pop://hoge.com/*" #default
REACHABLE="192.168.0.9"
MOUNT="//moge.com/* pop://moge.com/*"
REACHABLE="192.168.0.9"

↑この設定の解説。
MOUNT="* pop://hoge.com/*"
普通にPOPアクセスがあると、hoge.comに中継されます。

MOUNT="//hoge.com/* pop://hoge.com/*"
POPのアカウント名が「アカウント名#moge.com」となってる時には、moge.comに中継されます。

REACHABLE="192.168.0.9"
中継先は192.168.0.9縛りです。

次にSMTP編。
-P25
SERVER="smtp"
RELIABEL="*"
RELAY=proxy
CACHE="no"
LOGFILE=""
CONNECT="d:*:*"
MOUNT="/* smtp://192.168.0.2/* vhost=-smtp.bbb.biz"
REACHABLE="192.168.0.0/24"

↑この設定の解説
外から来たsmtpを内側に振り分けます。
SMTPサーバを外部に制限無しに解放してしまうのは危険なので、到達できるIPを限定しておきます。



POP起動(コンソール付き)
# delegate -vv +=pop.conf
POP起動
# delegate +=pop.conf
POP終了
# delegate -P110 -Fkill

SMTP起動(コンソール付き)
# delegate -vv +=smtp.conf
SMTP起動
# delegate +=smtp.conf
SMTP終了
# delegate -P25 -Fkill


なお。
DeleGateは積極的に名前解決してくれるので、「アカウント名#存在しないドメイン」とやると、DNSの設定によっては自動的に補完してくれちゃいます。このため、指定以外の文字列でもサーバにアクセスできてしまうことがままあるのでご注意。