サーバ管理

2008年08月12日

CentOSでタイムゾーンをJSTへ変更する

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

そう言う事か


00:00に実行されるようcronを設定し、一夜が明けた。

確認してみると、動いてない…?
何故だ…と思ったら、タイムゾーンがJSTになっていなかった。

# cp /usr/share/zoneinfo/Japan /etc/localtime
# date

これで解決。


CentOS徹底入門 第2版 (DVD付)
飛田 伸一郎 中島 能和
翔泳社
売り上げランキング: 8472


半袖 at 10:55|PermalinkComments(1)TrackBack(0)

2008年06月05日

[RHEL4] sysstatの設定変更

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

環境


ディストリビューション
Red Hat Enterprise Linux ES release 4 (Nahant Update 5)
sysstat
5.0.5



デフォルトだと10分毎

rhel4# cat /etc/cron.d/sysstat
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A
sa1の「*/10」を「*/5」としてやれば5分毎。
検証環境では毎分の変動を観察したいので「*」とした。



保管ログファイル数を増やす

rhel4# cat /etc/sysconfig/sysstat
# How long to keep log files (days), maximum is a month
HISTORY=7

長期間保管させたい場合はHISTORYを増やすだけ。


半袖 at 02:15|PermalinkComments(0)TrackBack(0)

2008年05月08日

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(5/n) - Dovecotの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

メールを受信


PostfixはMTAなので、POP3用サーバが別途必要。
今回はMySQLと連動叶なDovecotを使った。



設定概要


virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/
設定ファイル/etc/dovecot-mysql.conf



作業内容


dovecotをMySQL対応にする。
# yum install dovecot-mysql
dovecot.confの修正。
imapとpop3を使えるようにする。
結果的に設定ファイルはシンプルなものになった。
# cd /etc/; pwd
/etc
# cp -pi dovecot.conf dovecot.conf.0
# vi dovecot.conf
protocols = imap pop3

auth default {
  mechanisms = plain
  passdb pam {
  }
  passdb sql {
    args = /etc/dovecot-mysql.conf
  }
  userdb passwd {
  }
  userdb sql {
    args = /etc/dovecot-mysql.conf
  }
  user = root
}
MySQL用の設定。
※12000はvpostmailのuidとgid。
# cat /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=********
default_pass_scheme = MD5
user_query = SELECT concat('/var/lib/vpostmail/domain/', maildir) as home, 12000 as uid, 12000 as gid FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' AND active = '1'
設定を反映させる
[root@www etc]# /etc/init.d/dovecot reload
Stopping Dovecot Imap:                                     [  OK  ]
Starting Dovecot Imap:                                     [  OK  ]
POPの確認
$ telnet localhost 25
user foo@example.com
pass ********
list
retr 1
.....
ここで認証が通れば問題なし。

複数バーチャルドメイン対応メール環境が出来上がった。



関連リンク



半袖 at 19:35|PermalinkComments(0)TrackBack(0)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(4/n) - Postfixの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

構成イメージはvpopmail


vpopmailの様なディレクトリ構成にする。



設定概要


virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/
設定ファイル/var/lib/vpostmail/etc/*.cf



作業内容


バーチャルドメイン用アカウント作成。
# /usr/sbin/useradd -u 12000 -s /bin/false vpostmail
バーチャルドメイン用にmain.cf修正
# pwd
/etc/postfix
# cp -pi main.cf main.cf.0
# vi main.cf
# diff main.cf.0 main.cf
> virtual_gid_maps = static:12000
> virtual_uid_maps = static:12000
> virtual_mailbox_limit   = 51200000
> virtual_minimum_uid     = 1001
> virtual_transport       = virtual
> virtual_mailbox_base    = /var/lib/vpostmail/domain
> virtual_mailbox_domains = mysql:/var/lib/vpostmail/etc/mysql_virtual_domains_maps.cf
> virtual_mailbox_maps    = mysql:/var/lib/vpostmail/etc/mysql_virtual_mailbox_maps.cf
> virtual_alias_maps      = mysql:/var/lib/vpostmail/etc/mysql_virtual_alias_maps.cf
メールボックス用ディレクトリ。
今回は/var/lib/vpostmail/配下に作っていく。
# mkdir /var/lib/vpostmail/
# cd /var/lib/vpostmail/; pwd
/var/lib/vpostmail
# mkdir etc domain
vpostmailアカウントが
domainディレクトリにファイルを書き込むのでオーナーを変更する。
# chown vpostmail:vpostmail domain
Postfix-mysql用設定
# cd etc/; pwd
/var/lib/vpostmail/etc

# vi mysql_virtual_alias_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT goto FROM alias WHERE address='%s'

# vi mysql_virtual_domains_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT description FROM domain WHERE domain='%s'

# vi mysql_virtual_mailbox_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT concat(maildir,'Maildir/') FROM mailbox WHERE username='%s'
/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/としたいので、
concatを用いて「Maildir/」を追加する。
これにより、後に設定するdovecotの管理が簡単になる。

etc配下のconfigにはMySQL用パスワードが載ってるので読めないようにする。
オーナーをpostfixへ変更。
# cd ../; pwd
/var/lib/vpostmail
# chown -R postfix:postfix etc/
# ls -ld etc/
drwx------  2 postfix postfix 4096 May  7 20:35 etc/
設定内容確認
# /etc/init.d/postfix check
問題なければ反映
# /etc/init.d/postfix reload
Reloading postfix:                                         [  OK  ]
送信テスト
$ telnet localhost 25
helo localhost
mail from:foo@example.net
rcpt to:bar@example.com
data
Subject: test

test
test
.
quit
ログ確認
# tail -F /var/log/maillog
.....
エラーが出てなければOK


次回はPOP3サーバの設定



関連リンク



半袖 at 18:40|PermalinkComments(0)TrackBack(1)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(3/n) - PostfixAdminの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

管理ツールで管理負荷軽減


エンジニアであればコマンドラインからの作業で事足りる。
納品する場合など、相手がエンジニアとは限らない。
管理ツールを導入する事により、覚える事は最小限。

今回はメールアカウント管理ツールとしてPostfixAdminを使う。



環境概要

PostfixAdmindirectory/var/lib/postfixadmin/
URIhttp://postfixadmin.example.com/
Mailbox$(domain)/$(local-part)
MySQLdb_hostlocalhost
db_namepostfixadmin
db_userpostfix
db_pass********

ユーザー用Maildirディレクトリデザイン補足


今回、
『$(local-part)@$(domain)』のメールボックスを、
『$(domain)/$(local-part)』となるようにする。
これは単にvpopmailの構成が好きだったから。

PostfixAdminで設定する。
設定すべき変数が下記2つ。
$CONF['domain_path']'NO'(無し)
'YES'$(domain)/
$CONF['domain_in_mailbox']'YES'$(local-part)@$(domain)
'NO'$(local-part)

今回の設定。
$CONF['domain_path']'YES'
$CONF['domain_in_mailbox']'NO'



作業内容


# mkdir -p /var/lib/postfixadmin
# cd /var/lib/postfixadminostfixadmin; pwd
/var/lib/postfixadmin
# wget http://downloads.sourceforge.net/postfixadmin/postfixadmin_2.2.0.tar.gz?modtime=1209482958&big_mirror=0
# tar zxvf postfixadmin_2.2.0.tar.gz
# ln -s postfixadmin-2.2.0 htdocs
Apacheのconfig生成
# cd /etc/httpd/conf/vhosts-available/; pwd
/etc/httpd/conf/vhosts-available
# vi postfixadmin.example.com
.....(省略).....

# cd ../; pwd
/etc/httpd/conf
# ln -s `pwd`/vhosts-available/postfixadmin.example.com `pwd`/vhosts-enabled/
問題なければ反映(reload)
[root@www conf]# /usr/sbin/apachectl configtest
Syntax OK
[root@www conf]# /etc/init.d/httpd reload
Reloading httpd:                                           [  OK  ]
ここではsetup.phpへアクセス出きることのみを確認。
→ http://postfixadmin.example.com/setup.php
※まだ設定途中なのでエラーが多々出る。

DBアクセス用アカウント作成
$ mysql -uroot
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY '********';
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
PostfixAdminの設定
# pwd
/var/irokoi/postfixadmin/htdocs
# cp -pi config.inc.php config.inc.php.0
# vi config.inc.php
# diff config.inc.php.0 config.inc.php
31c31
< $CONF['configured'] = false;
---
> $CONF['configured'] = true;
51,53c51,53
< $CONF['database_host'] = 'localhost';
< $CONF['database_user'] = 'postfixadmin';
< $CONF['database_password'] = 'postfixadmin';
---
> $CONF['database_host'] = 'localhost';
> $CONF['database_user'] = 'postfix';
> $CONF['database_password'] = '********';
123c123
< $CONF['domain_path'] = 'NO';
---
> $CONF['domain_path'] = 'YES';
129c129
< $CONF['domain_in_mailbox'] = 'YES';
---
> $CONF['domain_in_mailbox'] = 'NO';
再び http://postfixadmin.sharedlink.com/setup.php を確認。
  • 各項目がOKとなる事を確認。
  • 管理アカウント作成を要請されるので、管理アカウントを作成する。
  • この時点でPostfixAdminがtableを生成してくれる
設定内容に問題がなければsetup.phpをリネームする。
※ここでsetup.phpが残っていると管理画面へアクセス出来ない。
# mv -i setup.php setup.php.deleted
管理画面へアクセス出切る事を確認する。
→ http://postfixadmin.example.com/

この時点でドメインとメールアカウントの管理を行えるようになる。
しかし、まだメール配送(Postfix)の設定がない。

続きは次回。



関連リンク



半袖 at 17:55|PermalinkComments(0)TrackBack(1)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(2/n) - Postfix入れ替え

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

RHEL4のPostfixでは駄目


出鼻をくじかれる。
Postfixが対応するルックアップテーブル一覧を確認してみた。

$ /usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
nis
pcre
proxy
regexp
static
unix
mysqlが無い!!



Postfixを作り直す


参考にしたページはPostfix + Courier-IMAP

$ pwd
/home/admin/work/rpms
$ mkdir -p {SOURCES,SPECS,BUILD,SRPMS,RPMS/i386}
$ echo "%_topdir $HOME/work/rpms" > ~/.rpmmacros
$ cat ~/.rpmmacros
%_topdir /home/admin/work/rpms
SRPMを取得する
$ cd SRPMS/; pwd
/home/admin/work/rpms/SRPMS
$ wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/postfix-2.3.3-2.src.rpm
$ rpm -ivh postfix-2.3.3-2.src.rpm
quota修正用パッチ
$ cd ../SOURCES/; pwd
/home/admin/work/rpms/SOURCES
$ wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
$ gunzip -d postfix-2.3.3-vda.patch.gz
$ cd ../SPECS/; pwd
/home/admin/work/rpms/SPECS
specファイル修正。
MySQLを使えるようにする。
$ cp -pi postfix.spec /tmp/
$ vi postfix.spec
$ diff /tmp/postfix.spec postfix.spec
2c2
< %define MYSQL 0
---
> %define MYSQL 1
82a83
< Patch10: postfix-2.3.3-vda.patch
136a138
> %patch10 -p1 -b .vda
$ rpmbuild -ba postfix.spec
標準パッケージと入れ替える
$ su
Password:
# apt-get remove postfix
# rpm -ivh ../RPMS/i386/postfix-2.3.3-2.i386.rpm
mysqlが入っている事を確認
$ /usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
mysql
nis
pcre
proxy
regexp
static
unix
OK



関連ページ



半袖 at 16:00|PermalinkComments(0)TrackBack(0)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(1/n) - 序章

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

話を聞いてみると、この構成が一番スマート


メールを環境を構築して欲しい。
そう頼まれた。
  • POPを使いたい
  • 複数ドメインを使いたい
  • アカウント管理をしたい

なるほど。

まだ構築した事がなかったけど、
一番スマートに思えた構成がこれ。

MTAPostfix+MySQL
POP3Dovecot+MySQL
管理ツールPostfixadmin+MySQL)

数エントリに分割して環境構築方法をまとめていく。


半袖 at 15:45|PermalinkComments(0)TrackBack(1)

RHEL4にImageMagickとRMagicをインストールする

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

環境


ディストリビューションRed Hat Enterprise Linux ES release 4 (Nahant Update 6)
Rubyruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]
Gems1.0.1



ImageMagic


作業メモ
  • ImageMagickはRPMを取得
    • libtiff-develに依存
    • libexif-develに依存
  • libtiffはRPMを取得
  • libexifはup2dateでインストール
    • 今回libexifだけはup2dateとした
    • 当初は他RPMsと同様にrpmコマンドでインストールしようとしたが、
      libexifがインストール済みであり、ダウンロードしたパッケージよりも
      インストール済みパッケージのバージョンが新しかった為、up2dateでインストールした。

まずは必要なRPMをwget。
[admin@www ~]$ cd work/rpms/; pwd
/home/admin/work/rpms

[admin@www rpms]$ wget http://ftp.riken.jp/Linux/centos/4/os/i386/CentOS/RPMS/libtiff-3.6.1-12.i386.rpm
[admin@www rpms]$ wget http://ftp.riken.jp/Linux/centos/4/os/i386/CentOS/RPMS/libtiff-devel-3.6.1-12.i386.rpm
[admin@www rpms]$ wget http://ftp.riken.jp/Linux/centos/4/os/i386/CentOS/RPMS/ImageMagick-6.0.7.1-17.i386.rpm
[admin@www rpms]$ wget http://ftp.riken.jp/Linux/centos/4/os/i386/CentOS/RPMS/ImageMagick-devel-6.0.7.1-17.i386.rpm

[admin@www rpms]$ su
[root@www rpms]# up2date install libexif-devel
あとはrpmコマンドでインストール
[root@www rpms]# rpm -ivh libtiff-3.6.1-12.i386.rpm
[root@www rpms]# rpm -ivh libtiff-devel-3.6.1-12.i386.rpm
[root@www rpms]# rpm -ivh ImageMagick-6.0.7.1-17.i386.rpm
[root@www rpms]# rpm -ivh ImageMagick-devel-6.0.7.1-17.i386.rpm



RMagick


[root@www rpms]# /usr/local/ruby/bin/gem  install -v 1.13.0 rmagick
しばらく待たされる。
終わるまで待つ。

[root@www admin]# /usr/local/ruby/bin/gem list

*** LOCAL GEMS ***

actionmailer (1.3.3)
actionpack (1.13.3)
actionwebservice (1.2.3)
activerecord (1.15.3)
activesupport (1.4.2)
rails (1.2.3)
rake (0.8.1)
rmagick (1.13.0)
終了

半袖 at 14:45|PermalinkComments(0)TrackBack(0)

2008年04月09日

どうもパフォーマンスが低下してるな・・・と思ったら/tmpに多量のファイル

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

システムコールを追いかけてみた


大した処理をしてないはずのスクリプトのCPU使用率が高くなっていた。
straceでシステムコールを追いかけてみた。

どうも/tmp配下のファイルが多量に出て来ている。
早速いくつファイルがあるのか調査してみた。

# cd /tmp
# ls | wc -l
1191236

そして、大リストラが始まったのであった。

1ディレクトリに119万エントリもあれば
オーバーヘッドが大きくなり、パフォーマンス低下しても不思議ではない。


半袖 at 15:40|PermalinkComments(1)TrackBack(0)

2008年02月05日

Cache::Memcachedが原因?でサーバ過負荷多発

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

ログインしようとしたら、反応が鈍い


20秒くらい経過して、やっとログインプロンプトが現れた。

「やばい…過負荷だ」

やっとログイン出来た所で、すぐさまapacheをダウンさせた。
最近、apacheにメモリを食いまくられる現象が多発している為だ。



過負荷状態のapacheログ


Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Use of uninitialized value in string eq at /usr/share/perl5/Cache/Memcached.pm line 494.
Memcachedが悪さしてる模様。

それが起因となり、apacheにメモリを食い尽くされ、swapも食い尽くされる。
MySQLへの接続も失敗する始末。



バージョン情報


「Debian GNU/Linux (sid)」を使用
$ dpkg -l | awk '$1 == "ii" && $2 ~ "^(apache|mysql|memcached|libcache-memcached-perl|libapache-mod-perl)" {print $2, $3}'
apache 1.3.34-4.1
apache-common 1.3.34-4.1
apache2-mpm-prefork 2.2.6-3
apache2-utils 2.2.6-3
apache2.2-common 2.2.6-3
libapache-mod-perl 1.29.0.4-4.1
libcache-memcached-perl 1.24-1
memcached 1.2.2-1
mysql-client-5.0 5.0.51-2
mysql-common 5.0.51-2
mysql-server-5.0 5.0.51-2

この過負荷頻発状況から脱出したい。


半袖 at 10:50|PermalinkComments(1)TrackBack(0)

2007年09月27日

Apache2のmoduleをDSOでビルド&インストール「mod_proxy」

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

■mod_proxyがない

とある検証をしようとした。
configを修正したら起こられた。



■moduleを追加

# cd /path/to/build/httpd-2.2.3/modules/proxy
# /usr/local/apache2/bin/apxs -i -c mod_proxy.c
# /usr/local/apache2/bin/apxs -i -c mod_proxy_http.c

楽過ぎる。



■問題発生
# /usr/local/apache2/bin/apachectl configtest
httpd: Syntax error on line ... of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_proxy.so into server: /usr/local/apache2/modules/mod_proxy.so: undefined symbol: proxy_lb_workers

何だこれ。



■解決: mod_proxy*には、proxy_util.cが必要

# /usr/local/apache2/bin/apxs -i -c mod_proxy.c proxy_util.c
# /usr/local/apache2/bin/apxs -i -c mod_proxy_http.c proxy_util.c
# /usr/local/apache2/bin/apachectl configtest
Syntax OK

やっと動いた。


半袖 at 12:35|PermalinkComments(0)TrackBack(0)

2007年09月22日

daemontoolsの/service/に、サービスを追加するスクリプト「addsv.sh」

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

■/service/に新サービスを追加したいけど面倒くさい

daemontoolsはサービスプロセスの起動管理をしてくれる便利ツール。
サービスを新規追加する時、その独特のディレクトリ構成のおかげで、
少々面倒な作業が発生する。毎回覚えてられない。

とにかく面倒くさいのだ。



■だったら、スクリプトを作ってしまえ

簡単な事をさせたい場合、シェルスクリプトは非常に便利だ。
面倒な処理をスクリプトにやらせてしまう。

そうして作られたスクリプトは下記の通り。


▼addsv.sh
#!/bin/sh
#
# http://blog.hansode.org/
#
# $0 <service name>
#

PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH


#
# usage
#
usage() {
  cat <<EOS
usage:
  $0 <service name>

EOS
  exit 1
}



#
# main
#
[ $# = 1 ] || usage

svdir=/service
svname=$(basename $1)
acct_name=logadmin
acct_group=logadmin

[ -d ${svdir}  ] || usage
[ -z ${svname} ] && usage
[ -d ${svdir}/.${svname} ] && usage
id ${acct_name} 2>&1 >/dev/null || { echo "no such acct: ${acct_name}"; usage; }



# directory, file

mkdir    ${svdir}/.${svname}
chmod +t ${svdir}/.${svname}
mkdir    ${svdir}/.${svname}/log
mkdir    ${svdir}/.${svname}/log/main
touch    ${svdir}/.${svname}/log/status
chown ${acct_name}:${acct_group} ${svdir}/.${svname}/log/main
chown ${acct_name}:${acct_group} ${svdir}/.${svname}/log/status


# run script

cat <<EOS > ${svdir}/.${svname}/run
#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH

exec 2>&1
sleep 3

EOS
chmod +x ${svdir}/.${svname}/run


cat <<EOS > ${svdir}/.${svname}/log/run
#!/bin/sh
exec setuidgid ${acct_name} multilog t s1000000 n100 ./main
EOS

chmod +x ${svdir}/.${svname}/log/run



exit 0

▼必要に応じて変更
acct_name=logadmin
acct_group=logadmin
log管理用アカウントを設定する。
スクリプトでは「logadmin」と言うUNIXアカウントを設定した場合の例。



■使い方

自分は上記スクリプトを/service/addsv.shとして、
/service/ディレクトリ直下においている。

▼例: 「new-service」と言うサービスを追加
$ cd /service/
$ sudo ./addsv.sh new-service
addsv.shすると、ドット付きディレクトリが作成される。
その後は、追加したサービスディレクトリ直下のrunファイルに管理したいプロセス等を記述。
$ sudo mv -i .new-service new-service
$ sudo svstat ./new-service



■関連リンク
daemontools
半袖野郎 daemontools

半袖 at 15:35|PermalinkComments(2)TrackBack(0)

2007年08月27日

初心に帰ってMRTGを設定した

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

■サーバ統計情報
普段、統計情報の必要性はさほど無い。
長期間サーバを管理する場合、統計は重要となって来る。


▼サーバ統計情報
・負荷観察
・負荷予測
・スケールアップ,スケールアウトの検討材料

サーバの統計情報を記録する手段の1つがMRTG。



■初心に帰る
久々に初心に帰って統計情報を取得,記録する設定をした。
振り返りを兼ねて、ここに作業記録を残す。


作業記録は下記の通り
続きを読む

半袖 at 19:15|PermalinkComments(1)TrackBack(0)

内部コンテンツNSで名前解決出来ない問題を解決

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

■特殊な環境で起きる

同様の現象に遭遇する事は滅多にない。
しかし、今度遭遇した時にすぐ解決出来る様にしたい。
ここに作業記録を残しておく。未来の自分へのラブレター。



▼環境
・Debian GNU/Linux (etch)
・tinydnsで内部コンテンツNS
・プライベートネットワークは内部コンテンツNSを参照


▼背景
・外部からの接続にはプライベートネットワークのサーバへ、
 ルーターがルーティングしてくれる。
・内部からFQDNで接続しようとすると、ルーターに割り当てられている
 グローバルIPアドレスへ接続し、プライベートネットワークのサーバへ
 ルーティングしてくれない


【図1: 外部ネットワークからの接続】




【図2: 内部ネットワークからの接続】



ルーターのグローバルIPアドレスが返って来てしまう。



▼背景2
解決策の選択しを幾つか列挙し、
議論の結果、内部コンテンツNSを立ち上げて解決する事となた。

tinydns, dnscacheを設定

hostコマンドで名前解決出来る事を確認


【図3: 内部ネットワーク内で解決した名前解決】




しかし、hostコマンドだけでは足りなかったのだ…



■hostコマンド v.s. telnetコマンド

▼ある日
やむ:『telnet web.example.com 80 とすると、ルーターに接続してしまうよ』


hostコマンドで確認すると問題ない。
しかし、telnetコマンドを使うと確かにルーターのIPアドレスが返って来る。

何だコレは?!


▼仮説
・hostコマンドとtelnetコマンドでは名前解決ロジックが違う
・telnetを実行したサーバのリゾルバが設定不十分
・nsswitchの設定で、検索優先順位が意図しない物を最優先にしている


▼検証: straceコマンド
コマンドの挙動を確認する時に使うのがstraceコマンド。
straceコマンドを使う事で、システムコールをトレース出来る。

$ strace host web.examle.com
$ strace telnet web.examle.com 80


この2つのコマンドを実行し、
どのファイルをopenしているのかを観察してみた。


▼新たな疑惑
そしてnscdのキャッシュ疑惑が生まれた。
どうもnscdがあやしいぞ?


■容疑者nscd

▼/etc/nscd.conf

nscdの設定ファイルは/etc/nscd.conf。
こいつの設定項目を確認していった。

その中で日と際目立つヤツを発見。
enable-cache hosts yes


▼仮説
enable-cache hostに違いない。
enable-cache hosts yes


▼検証
yesをnoへ変更
$ sudo cp -pi /etc/nscd.conf /etc/nscd.conf.0
$ sudo vi /etc/nscd.conf
$ diff /etc/nscd.conf.0 /etc/nscd.conf
enable-cache hosts no
$ sudo /etc/init.d/nscd restart


▼結果
$ telnet web.examle.com 80
Trying 192.168.0.80...
Connected to web.example.com.
Escape character is '^]'.
^]
telnet> close
Connection closed.


成功だ



■まとめ
▼発生する環境
・内部コンテンツNSを立てている
・nscdを使っている
▼解決策
・『enable-cache hosts no』にする

『何故nscd使うの?』と言う突っ込みは今回の議論の対象外。


■関連リンク
やむにやまれず: Air Stationに変えたらLAN側自社サービスにアクセスできなくなった
tech memo: cached


半袖 at 01:30|PermalinkComments(0)TrackBack(0)

2007年08月13日

makeでサーバ管理効率を上げる Postfix編

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

自分は良くmakeを使う(Makefileを書く)。


▼makeの良い所
対象となるファイルのタイムスタンプを比較し、比較対照よりも
新しくなっている場合、何かしらの処理を行ってくれる所。


この利点を上手く利用してやるとサーバ管理の効率を上げる要素となる。
例えばPostfixのconfig。

Postfixを使っている人は分かるだろうけど、main.cfやmaster.cf、
これ等Postfixのconfigはincludeディレクティブ未対応。
それゆえ、main.cfやmaster.cfを1ファイルに設定を集約してやる必要が出て来る。


効率よく管理する方法はいくつかある。
そのうちの1つが、複数ファイルを1ファイルとして結合する方法。

▼confを結合する時のイメージ
d47f193a.png


※画像クリックで拡大表示


▼/etc/postfix/main.cfを結合生成プロセス

・/etc/postfix/parts.d-common/main.cf 管理サーバ群共通設定
・/etc/postfix/parts.d-local/main.cf サーバ特有設定
  ↓
  ↓2つを結合する
  ↓
・/etc/postfix/master.cf


▼Makefile例
PARTS_COMMON=parts.d-common
PARTS_LOCAL=parts.d-local
MAIN_CFS=$(PARTS_COMMON)/main.cf $(PARTS_LOCAL)/main.cf

all: main.cf

main.cf: $(MAIN_CFS)
cat $(MAIN_CFS) > $@
echo $@ done.



▼実行結果
$ make
cat parts.d-common/main.cf parts.d-local/main.cf > main.cf
echo main.cf done.
main.cf done.


makeを実行する事により、main.cfが生成される。
parts.d-common/main.cfかparts.d-local/main.cfのタイムスタンプと比較し、
main.cfのタイムスタンプが *古い場合*、main.cfが再生成される。


結合用スクリプトを生成するよりも、makeを利用した方が良い事は多々ある。
シェルスクリプトを作っておいて良かったと思った事は…無いな。

makeはソースをコンパイルする為だけの物ではない。
サーバ管理にも使えるスグレモノ。
上手く使えば大分サーバ管理効率を上げる事が出来るはず。

広がるmakeの世界。


半袖 at 23:35|PermalinkComments(0)TrackBack(0)

2007年07月06日

/etc/motdを有効活用

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

/etc/motdはサーバへログインした時に出るメッセージ
複数のサーバを管理している場合、/etc/motdを有効活用しない手は無い。



▼/etc/motdへ書いておいた方が良い事
・サーバの用途
 ・例: MTA(Postfix)
・サーバ関連情報のURI
 ・wikiでも何でもいい
・関連するサーバの構成図、IPアドレス・ホスト名一覧
 ・構成図を管理しているマスターURI
 ・構成変更があれば、マスタURIの情報を変更し、関連サーバへ配布
・その他メモ
 ・作業履歴


/etc/motdを生成するスクリプトを作り、cronで定期的に更新するのも良いかな。
過去に/etc/motdを書いた自分に助けられた事は多々ある。

/etc/motdは未来の自分への手紙。
記憶に依存するサーバ管理にさよなら。


半袖 at 10:45|PermalinkComments(0)TrackBack(0)