March 27, 2008
Apache2.0系列のSSLトラブル
OpenSSLの最新ver:0.9.8gで発生
Apacheはver2.0.63
/usr/local/apache2/bin/httpd: symbol lookup error: /usr/local/apache2/bin/httpd: undefined symbol: SSL_CTX_sess_set_new_cb
とエラー出てSSLでは起動できなくなるようだ
(SSLなしで起動すれば問題ない)
確認できてるver0.9.7aで再構築すれば問題なく起動できる
どのverからかは調査してないが海外フォーラムでちらほら報告あり
メモメモ
February 22, 2006
February 14, 2005
Linuxのドライバディスク作成
Linux入れるときに
ブートディスクを使うとSCSIコントローラドライバが入らないために
CD-ROMデバイスやHDDデバイスなどが使えなくなり
インストールに困る場合は
images/drvnet.img - ネットワークカードドライバ
images/drvblock.img - SCSIコントロラー ドライバディスク イメージ
という2つのイメージがあります
ネットワーク(FTP、HTTPなど)を使う場合はdrvnet.imgを
普通にSCSIコントローラを入れたい場合はdrvblock.imgを使います。
フロッピーへの焼き方は
以前の「AIT: RedHat9のブートフロッピー(起動ディスク)作成」
http://www.yanbe.net/blog/archives/000281.html
と同じです
rawriteが起動した後のimgファイル指定のときに
入れたいimgファイルを指定してください
// bootdisk.imgの位置を指定
Enter disk image source file name:../images/drvblock.img
これでデバイスディスクの製作完了です
↓ドライバ ディスク(Red Hat Linux 7.3: オフィシャル Red Hat Linux x86 インストールガイド)
http://www.redhat.co.jp/manual/Doc73/RH-DOCS/rhl-ig-ja/ch-driverdisk.html
February 04, 2005
AWStatsをバージョンアップ
AWStats6.0(build 1.704)を使っていたが
AWStatsにリモートコマンド実行の脆弱性が見つかった。
yanbe.netサーバは全てBASIC認証だしSuEXECなので
大丈夫なんだけど古いのよりも新しいのということで
AWStats6.3(build 1.800)を入れてみる
ソースはおなじみの本家からとってきて
http://awstats.sourceforge.net/
早速、入れるわけだが以前のデータももちろん流用したい
なのでawstats.plがあるcgi-binの直下にある
awstats[数字].txtとDNSキャッシュしてる人は
dnscachelastupdate.txtをバックアップしとく
そしてawstats,confを適当に設定。
(6.0と6.3はほとんど同じ)
しかしこんだけでは済まないのが
日本語環境
キーワード検索などの日本語が化けてしまうのである
原因はawstats[数字].txtに保存されている月別のデータは
全てEUCでのURLエンコードをしている
しかしAWStats6.3はUTF-8でURLエンコードしている
だからそのままやると????ってなってしまう
しかしこれから先もUTF-8だろうから
表示のスクリプトを変えるより
今までのログファイルの中身を置換することにする
しかし月別ファイルなのでファイルも多いし
わざわざURLデコードしてUTF-8にエンコードするのは面倒
そういう時は得意のPerlでちょこちょこやればOK
スクリプトは以下のページにあるので
使いたい人はどうぞ。
あとはawstats.plのファイルに
use Jcode;を追加し
DecodeEncodedStringサブルーチンに
Jcode::convert(\$stringtodecode, "utf8");を追加する
*******************************************************
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/\+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
return $stringtodecode;
}
******************************************************
↓
******************************************************
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/\+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
Jcode::convert(\$stringtodecode, "utf8");
return $stringtodecode;
}
******************************************************
これで終了!
↓AIT: AWStatsログ専用文字コード変換
http://www.yanbe.net/blog/archives/000286.html
↓AWStats - Free log file analyzer for advanced statistics (GNU GPL).
http://awstats.sourceforge.net/
January 14, 2005
RedHat9のブートフロッピー(起動ディスク)作成
DOS/Vではないサーバマシンに
Redhat9を入れようとするも
なんとBIOSでCD-ROMを最優先にしてもCD起動しない
CD起動してくれないと最近のOSは困るわけだが
幸いRedhat9も自分でブートフロッピー(起動ディスク)を作れるのでメモ
FedoraCoreが出たのもあって
Redhat9のISOイメージを落とせるFTPが少なくなった
2005年1月14日で確認できたのは
ftp://ftp.riken.go.jp/pub/redhat/redhat/linux/9/en/
FFFTPで落とそうとしたけどなぜかファイルリストが取得できないので
IEを使って落としました
そしてブートフロッピーを作るためには
ftp://ftp.riken.go.jp/pub/redhat/redhat/linux/9/en/os/i386/
の中にある
dosutilsとimagesのディレクトリを適当なところにダウンロード。
ここでは「C:\起動ディスク」というところにダウンロードする
まず起動ディスクを作るので当たり前ながら
1枚のフォーマット済みフロッピーを用意する
そしてコマンドプロンプトを立ち上げて
C:\> cd C:\起動ディスク\dosutils
C:\起動ディスク\dosutils> rawrite
そうすると画面が変わって入力画面が出ます
// bootdisk.imgの位置を指定
Enter disk image source file name:../images/bootdisk.img
// 書き込むドライブ名
Enter target diskette drive:a
OKなら下記のように出るのでエンターキーで書き込み開始
Please insert a formatted diskette into drive A: and press -ENTER- :<エンターキー>
そのまま放置すると勝手に終わって
C:\起動デ~1\dosutils>
という状態に戻ります
この間に
Can't figure out how many sectors/track for this diskette.
などのメッセージが出る場合は正常に書き込めてませんので
フロッピーが壊れてないか
フォーマットしてるかなど確認してください。
あとはインストールしたいPCにフロッピー差し込んで
起動すればOK!
October 20, 2004
PHPのGDライブラリ入れるときのトラブル
configureした時に
****************************************
checking whether to enable JIS-mapped Japanese font support in GD... no
configure: error: libjpeg.(a|so) not found.
****************************************
が表示する場合は文字通りlibjpeg.soファイルがないからです
# find / -name libjpeg.so*
/usr/lib/libjpeg.so.62
/usr/lib/libjpeg.so.62.0.0
で探し当てます
/usr/lib/libjpeg.so.62は/usr/lib/libjpeg.so.62.0.0にリンクされているので
実際は/usr/lib/libjpeg.so.62.0.0だけです。
libjpeg.so.62.0.0からlibjpeg.soにリンクしようとしたが
今後、何かあったら困るのでコピーする
# cp /usr/lib/libjpeg.so.62.0.0 /usr/lib/libjpeg.so
これで乗り切れる!
次はconfigureしたときに
****************************************
configure: error: libXpm.(a|so) not found.
****************************************
が出た場合。
ないファイルを検索
# find / -name libXpm.so*
****************************************
/usr/X11R6/lib/libXpm.so.4
/usr/X11R6/lib/libXpm.so.4.11
****************************************
先ほどと同じく
# cp /usr/X11R6/lib/libXpm.so.4.11 /usr/X11R6/lib/libXpm.so
で完了
次はconfigureのときに
***************************************
/usr/local/php-4.3.8/ext/gd/gd.c:385: undefined reference to `gdFreeFontCache'
collect2: ld returned 1 exit status
make: *** [sapi/cgi/php] エラー 1
***************************************
が出た場合。
根本的な対処法はわかりませんが
私はエラー元の/usr/local/php-4.3.8/ext/gd/gd.cの385行付近で関数をコメントアウトしました
# vi /usr/local/php-4.3.8/ext/gd/gd.c
gdFreeFontCacheで検索すると1箇所ヒットするので
その行をコメントアウト!
***************************************
/* gdFreeFontCache(); */
***************************************
これでおそらくOK
次はconfigureはうまく通ったがmakeのときに
********************************************************************************
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:42:21: jpeglib.h: そのようなファイルやディレクトリはあり
ません
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:43:20: jerror.h: そのようなファイルやディレクトリはあり
ません
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:53: 構文解析エラー が "cinfo" の前にあります
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c: 関数 `fatal_jpeg_error' 内:
(中略)
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:245: 警告: 変数 `jerr' は使われませんでした
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c: トップレベル:
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:450: 領域 `pub' は不完全な型です
/usr/local/php-4.3.8/ext/gd/libgd/gd_jpeg.c:455: 前のエラーにより混乱していますので、脱出します
make: *** [ext/gd/libgd/gd_jpeg.lo] エラー 1
********************************************************************************
と出る場合。
PHPのJPEGライブラリが認識されていません
インストールしてない場合は
jpegsrc.v6b.tar.gzを入れてください。
入れる場合は
http://fink.sourceforge.net/files/からltconfigとltmain.shを
jpegsrc.v6b.tar.gzを解凍したjpeg-6bディレクトリにある
既存のltconfigとltmain.shを消して
# wget http://fink.sourceforge.net/files/ltconfig
# wget http://fink.sourceforge.net/files/ltmain.sh
に置き換えてから
# ./configure --enable-shared --enable-static
# make
# make install
以上!
PHPのバージョンアップ
GDを入れるついでにPHPもバージョンアップしたので
configureメモ
4.3.8→4.3.9にしました
バージョンアップの際はApacheの再起動を忘れずに
CGI版
# ./configure --mandir=/usr/local/man --enable-dba --enable-sockets --enable-calendar \
--enable-ftp --enable-mbstring --enable-mbregex --enable-zend-multibyte \
--enable-debug --enable-memory-limit --enable-mbstr-enc-trans --enable-trans-sid \
--with-zlib --with-mcrypt --enable-cgi --with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql --with-db4 --with-imap-ssl --with-imap \
--with-config-file-path=/usr/local/lib/phpcgi \
--enable-exif --enable-gd-native-ttf --with-ttf --with-freetype-dir=/usr/local \
--with-jpeg-dir=/usr/local --with-iconv=/usr/local --with-png-dir=/usr/local --with-gd
CLI版
# ./configure --mandir=/usr/local/man --enable-dba --enable-sockets --enable-calendar \
--enable-ftp --enable-mbstring --enable-mbregex --enable-zend-multibyte \
--enable-debug --enable-memory-limit --enable-mbstr-enc-trans --enable-trans-sid \
--with-zlib --with-mcrypt --disable-cgi --with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql --with-db4 --with-imap-ssl --with-imap \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-exif --enable-gd-native-ttf --with-ttf --with-freetype-dir=/usr/local \
--with-jpeg-dir=/usr/local --with-iconv=/usr/local --with-png-dir=/usr/local --with-gd
しかしGDのJPEGサポートがされていない
ん~libjpegがちゃんとされてないのかねぇっと思い
いろいろやってたらできた。おそらく下記の方法がいい感じだと思う
http://fink.sourceforge.net/files/からltconfigとltmain.shを
jpegsrc.v6b.tar.gzを解凍したjpeg-6bディレクトリにある
既存のltconfigとltmain.shを消して
# wget http://fink.sourceforge.net/files/ltconfig
# wget http://fink.sourceforge.net/files/ltmain.sh
に置き換える
そして後はお決まりの
# ./configure --enable-shared --enable-static
# make
# make install
これで乗り切ったと思われます!
October 19, 2004
PHPにmcryptを入れる
まずはmcrypt自体をインストールする
# cd /usr/local/src
# wget ftp://argeas.cs-net.gr/pub/unix/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
# cd ..
# tar zxvf ./src/libmcrypt-2.5.7.tar.gz
# cd libmcrypt-2.5.7/
# ./configure --disable-nls --disable-posix-threads
# make
# make install
そしてPHPのconfigureに--with-mcryptを追加してmake,make installをする
October 17, 2004
PostfixAdminのイケてないところ
PHP自体の問題もあるが
モジュール版で使う人はおそらく
PHPの実行権限がnobodyだと思います
しかし/usr/local/virtualにできるメールボックスは
postfix権限なので生成はpostfixがメールを受信するときに作成されるが
消すときはMySQLなどデータベースから消されるだけで
POP3,IMAP,SNTPが使えないのにサーバにメールボックスが残ってしまう形になる
自分だけ使うならそんなに数が増えないのでいいけど
メールボックスが空でも1メールボックスに数KBが確保されてしまいます
SuEXECにして削除コマンド実行でもいいけど
#!/usr/local/bin/phpや拡張子をcgiにしなければなりません
Apacheの方で制御してもいいが
他のホストにも影響するし面倒。
そこで削除処理するPHPに処理を追加し
削除メールアドレスリストがあるファイルを作り
cronの定期的な自動処理でそのリストのアドレス名のメールボックスをrmコマンドを実行し削除します
まず必要なのはアドレスリストファイルを生成することです。
PHPのfopen関数を使うので権限さえ持たせればファイルがないと自動生成してくれます
PostfixAdminは管理用ページとドメイン管理者用ページによる削除処理に使います
ファイルパスとしては
/delete.php
/admin/delete.php
です。
ファイルリストはどこに置いてもいいですがWEB上から見れるとまずいので
できればpublic_htmlの以外に置く方がいいですが
adminディレクトリは既にBASIC認証で守られているので
/admin/delete_email
というディレクトリを作成します。
nobody権限でファイルが作れるようにパーミッションは777
そしてPHP側でも処理を追加します。
/delete.phpは60行付近
/admin/delete.phpは100行付近にある
/delete.phpだと
*********************************************
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($CONF['admin_email'], $fDomain, "delete mailbox", $fDelete);
*********************************************
/admin/delete.phpは
*********************************************
db_query ("DELETE FROM vacation WHERE email='$fDelete' AND domain='$fDomain'");
db_log ($SESSID_USERNAME, $fDomain, "delete mailbox", $fDelete);
*********************************************
のすぐ下に下記の記述を追加します。
(ここでは/admin/delete_email/email.logですがファイルパスは環境に合わせてください)
/delete.php
*********************************************
// 追記モードでファイルをオープン
$fp = fopen('./admin/delete_email/email.log', 'a');
// ファイルにメールアドレスを書き込む
fputs($fp, "$fDelete\n");
// ファイルをクローズする
fclose($fp);
*********************************************
/admin/delete.php
*********************************************
// 追記モードでファイルをオープン
$fp = fopen('./delete_email/email.log', 'a');
// ファイルにメールアドレスを書き込む
fputs($fp, "$fDelete\n");
// ファイルをクローズする
fclose($fp);
*********************************************
追加したら一度、追加、削除を繰り返して
メールアドレスが追加されるのを確認してみてください。
追加したPHPファイルはこちらからダウンロードできます。
次にこちらからplファイルをダウンロードして好きなところに設置します
このファイルはメールボックスを削除するプログラムですので
************************************************
# 削除するEmailリストファイルの位置(絶対パス)
$file_path = '/home/postfix/public_html/admin/delete_email/email.log';
# 削除するメールボックスの位置(最後に「/」を絶対入れる)
$dir_path = '/usr/local/virtual/';
************************************************
の部分を自分の環境に合わせる
cronに追加する前に自分で手動実行してちゃんと削除されているか確認する
# perl /usr/local/postfix/postfixadmin_del_email.pl
何も表示されずに終了するはずですが
削除できなくても正常終了したように見えるかもしれませんので
自分で削除されていることを確認してください。
# ls /usr/local/virtual -al
削除処理されることを確認できれば次にcron追加をします
# vi /etc/crontab
を実行しcrontabに以下の記述を追加する
(以下の場合は毎日AM5時に削除処理をします)
postfixadmin_del_email.plのファイルパスは環境に合わせて下さい
************************************************
01 5 * * * root /usr/local/postfix/postfixadmin_del_email.pl
************************************************
これでメールボックスの削除処理の設置が完了ですので
動作確認して終わりです。
October 16, 2004
MRTGを使ってサーバ資源の管理
サーバの状況を見るためにMRTGを入れます。
MRTGを入れるときに必要なのは
Perl,zlib,libpng,GDです。
ネットワークのトラフィック量を見る人はSNMPも必要
(ここではRedhatデフォルトのSNMPを使用しています。)
わからない人はrpmコマンドで検索してください
# rpm -q net-snmp
net-snmp-5.0.9-2.90.1と出ればOK
(バージョンは違ってもいいですけどね)
Redhatのデフォルトインストールだと他のサイトでよく使われている
snmpwalkコマンドが使用できません
途中で使うcfgmakerコマンドを実行中に使ってる感じもあるのであるらしいですが。
Perlはデフォルトで入ってるサーバばっかりなのでパス
SNMPはデフォルトで入ってるが設定してないし起動もしていないので
設定し、サービスに自動起動するように設定する
# chkconfig --list snmpd
(↑これでサービス確認)
まずzlibをインストール
# cd /usr/local/src
# wget http://www.gzip.org/zlib/zlib-1.2.1.tar.gz
# cd ..
# tar zxvf ./src/zlib-1.2.1.tar.gz
# cd zlib-1.2.1/
# ./configure
# make
# make test
****************************************
hello world
zlib version 1.2.1 = 0x1210, compile flags = 0x55
uncompress(): hello, hello!
gzread(): hello, hello!
gzgets() after gzseek: hello!
inflate(): hello, hello!
large_inflate(): OK
after inflateSync(): hello, hello!
inflate with dictionary: hello, hello!
*** zlib test OK ***
****************************************
# make install
次にlibpngをインストール
# cd /usr/local/src
# wget http://aleron.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.7.tar.gz
# cd ..
# tar zxvf ./src/libpng-1.2.7.tar.gz
# cd libpng-1.2.7/
# cp scripts/makefile.linux makefile
# make test
# make install
次にGD本体
# cd /usr/local/src
# wget http://www.boutell.com/gd/http/gd-2.0.28.tar.gz
# cd ..
# tar zxvf ./src/gd-2.0.28.tar.gz
# cd gd-2.0.28/
# ./configure
# make
# make install
ようやく本命のMRTGを入れます
# cd /usr/local/src
# wget http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/mrtg-2.10.15.tar.gz
# cd ..
# tar zxvf ./src/mrtg-2.10.15.tar.gz
# cd mrtg-2.10.15
# ./configure
# make
# make install
# cd /usr/local/mrtg-2
# cp -r /usr/local//mrtg-2.10.15/images /home/yanbe/public_html/hosting/www/mrtg/
ここでネットワークのトラフィック量もグラフ化するためにsnmpdを設定します。
# vi /etc/snmp/snmpd.conf
長々と設定があるのでどこを設定していいのかわからなくなりそうですが
下記の部分だけで動きます。
(設定はサーバ機自身でチェックするようになってますので数台を1台で管理使用としてる方はこの設定では動きません。)
**************************************************************
####
# First, map the community name "public" into a "security name"
# sec.name source community
com2sec local localhost public
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group MyROGroup v1 local
group MyROGroup v2c local
group MyROGroup usm local
####
# Third, create a view for us to let the group have rights to:
# Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional)
view all included .1 80
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access MyROGroup "" any noauth exact all none none
***************************************************************
sec.name、source、communityの意味は
[セキュリティルールネーム] [ソース] [コミュニティネーム]です。
com2secは変更不要です
communityの名前はパスワードみたいなものなので一意の名前にしましょう。
あとは全部デフォルトのを消して真似しちゃってください。
以下から使う「public@localhost」は
「コミュニティネーム@ソース」ですので環境に合わせてご覧ください。
ちなみにSNMPDは自分から自分にアクセスするので
/etc/hosts.allowなどを使ってIP制限してる人はlocalhostや127.0.0.1など追加してください
設定できればSNMPD起動!
# service snmpd start
またMRTGに戻ります。MRTGの要である設定ファイルmrtg.cfgファイルを作成
# /usr/local/mrtg-2/bin/cfgmaker --output /usr/local/mrtg-2/cfg/mrtg.cfg public@localhost
*******************************************************************************
--base: Get Device Info on public@localhost:
--base: Vendor Id:
--base: Populating confcache
--snpo: confcache public@localhost: Descr lo --> 1
--snpo: confcache public@localhost: Descr eth0 --> 2
--snpo: confcache public@localhost: Type 24 --> 1
--snpo: confcache public@localhost: Type 6 --> 2
--snpo: confcache public@localhost: Ip 127.0.0.1 --> 1
--snpo: confcache public@localhost: Ip 192.168.0.3 --> 2
--snpo: confcache public@localhost: Eth --> 1
--snpo: confcache public@localhost: Eth 00-11-2f-21-f1-86 --> 2
--base: Get Interface Info
--base: Walking ifIndex
--base: Walking ifType
--base: Walking ifAdminStatus
--base: Walking ifOperStatus
--base: Walking ifSpeed
--base: Writing ./cfg/mrtg.cfg
*******************************************************************************
設定ファイルができているので
最低限必要な情報を入れる
# vi /usr/local/mrtg-2/cfg/mrtg.cfg
WorkDir : /home/yanbe/public_html/hosting/www/mrtg
設定ファイルの下らへんにネットワークのトラフィック設定があるのを確認する
*****************************************
Target[localhost_2]: 2:public@localhost
SetEnv[localhost_2]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth0"
Options[localhost_2]: growright
MaxBytes[localhost_2]: 12500000
Title[localhost_2]: ネットワーク使用量 for yanbe.net
PageTop[localhost_2]: <H1>ネットワーク使用量 for yanbe.net<H1>
*****************************************
127.0.0.1と192.168.0.3の2つが設定されてますが
127.0.0.1の方は使いませんしデフォルトでコメントアウトされてるので
不要な場合は消してもいいでしょうね
そしてテスト動作
# /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/cfg/mrtg.cfg
*****************************************
Rateup WARNING: /usr/local/mrtg-2/bin/rateup could not read the primary log file for localhost_2
Rateup WARNING: /usr/local/mrtg-2/bin/rateup The backup log file for localhost_2 was invalid as well
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_2.old updating log file
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't rename localhost_2.log to localhost_2.old updating log file
*****************************************
もう一度実行。
******************************************
Rateup WARNING: /usr/local/mrtg-2/bin/rateup Can't remove localhost_2.old updating log file
******************************************
そして3回目には正常に終了します。
index.html作成
# /usr/local/mrtg-2/bin/indexmaker /usr/local/mrtg-2/cfg/mrtg.cfg > /home/yanbe/public_html/hosting/www/mrtg/index.html
あとは出力したディレクトリをApacheなどのWWWサーバの管理下に置いてブラウザで確認してください
設定ファイルに日本語を使う場合は
Language: eucjpを追加する
次にCPUとメモリのグラフも表示させる
### CPU ###
Target[cpu_load]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@localhost
MaxBytes[cpu_load]: 100
Options[cpu_load]: gauge, absolute, growright
YLegend[cpu_load]: Load Average (%)
LegendI[cpu_load]:
LegendO[cpu_load]:
ShortLegend[cpu_load]: %
Unscaled[cpu_load]: dwmy
Title[cpu_load]: CPU USAGE -- yanbe.net
PageTop[cpu_load]: <H1>CPU Usage for yanbe.net</H1>
### メモリ ###
Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:public@localhost
MaxBytes1[mem]: 2055604
MaxBytes2[mem]: 2040212
Unscaled[mem]: dwmy
Options[mem]: gauge, absolute, growright
YLegend[mem]: Mem Free(Bytes)
ShortLegend[mem]: Bytes
kilo[mem]: 1024
kMG[mem]: k,M,G,T,P
LegendI[mem]: Real
LegendO[mem]: Swap
Legend1[mem]: 空き物理メモリ[MBytes]
Legend2[mem]: 空きスワップメモリ[MBytes]
Title[mem]: Memory Free -- yanbe.net
PageTop[mem]: <H1>Memory Free for yanbe.net</H1>
CPUは.1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2
メモリは.1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0
これは固定の番号なのでただコピーして使ってください。
後ろのpublic@localhostだけ変更してください
CPU・メモリのTitle・PageTopはご自由に変更してください
メモリは実メモリとスワップの量を
MaxBytes1とMaxBytes2を変更してください
MaxBytes1は実メモリ容量、MaxBytes2はスワップ容量
単位はキロバイトです
スワップなど設定した容量を忘れた方はfreeコマンドで確認
# free
************************************************************************************
total used free shared buffers cached
Mem: 2055564 141608 1913956 0 24508 65628
-/+ buffers/cache: 51472 2004092
Swap: 2040212 0 2040212
************************************************************************************
で確認してください。
上記の例でいくとMemのtotal(2055564)が実メモリ容量でSwap(2040212)のtotalがスワップ容量です
この設定で無事、動作確認ができれば問題はもうありません。
次にcronに登録(5分おきに実行)
# vi /etc/crontab
0-59/5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/cfg/mrtg.cfg
mrtgコマンドで生成されるのは画像と詳細ページだけなのでindex.htmlは生成しません。
好きな感じに生成したindex.htmlを変更すればそのindex.htmlがずっと使えます
しかしindexmakerコマンドでindex.htmlを生成した場合は消えます。
そこでindexmakerコマンドを実行しても反映させましょう。
ここからはPerlを知らないと危険な香りもしますが
関数など使ったりしないので大丈夫でしょう。
# vi /usr/local/mrtg-2/bin/indexmaker
80行目ほどから下にある下記の部分です
******************************************
sub main {
# default options
my %opt = (
sort => 'original',
show => 'day',
section => 'h1',
columns => 2,
addhead => '',
bodyopt => 'bgcolor="#ffffff" text="#000000" '.
'link="#000000" vlink="#000000" alink="#000000"',
title => 'MRTG Index Page',
headlevel => 1,
pagetopend => '',
pagetop => '',
pageend => '',
prefix => '',
rrdviewer => '/cgi-bin/14all.cgi',
optlog => 1,
bold => 1,
boldon => '<B>',
boldoff => '</B>',
div => 'DIV',
imgborder => 1,
cellspacing => 10,
nolegend => 0,
);
******************************************
titleのところに入れるとタイトルとページの一番上の題名が変わります。
columnsは1行に表示するグラフの数です
showはindex.htmlに表示するグラフの種類など
大体はここで設定できます。
あまり無茶な設定するとエラーになったりするので注意しながらやってください。
さてtitleに日本語を入れると文字化けすると思います
それはmrtg.cfgをeucjpに設定してもindex.htmlは文字コードの指定文がありません。
ですので
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp">
の1文を追加しなければなりません
追加する場所は真ん中ぐらいの295行目
******************************************
# -----------------------------------------------------------
# issue page top
# -----------------------------------------------------------
******************************************
のある行の30行ほど下です。
「<META HTTP-EQUIV=」で検索した方が早いかもしれませんが下記の部分です。
METAタグが5個並んでるのでどこでもいいので
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp">
を追加しましょう
******************************************
<TITLE>$$opt{title}</TITLE>
<!-- Command line is easier to read using "View Page Properties" of your browser -->
<!-- But not all browsers show that information. :-( -->
<META NAME="Command-Line" CONTENT="$metaCmdLine">
<META HTTP-EQUIV="Refresh" CONTENT="$refresh">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="$expiration">
******************************************
追加すれば後はindexmakerコマンドを実行するだけです。
# /usr/local/mrtg-2/bin/indexmaker /usr/local/mrtg-2/cfg/mrtg.cfg > /home/yanbe/public_html/hosting/www/mrtg/index.html
↓zlib
http://www.gzip.org/zlib/
↓GD
http://www.boutell.com/gd/
↓MRTG
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/
再起動時のkernel選択のデフォルト値を変更する
kernelをアップデートすると再起動したときに古いkernelと新しいkernelを選べるようになりますが
デフォルトで古いkernelを選択してしまう場合の対処法
GRUBの場合は/boot/grub/grub.confの中が
Redhat9の場合だと下記のようになってます(kernelの種類は除く)
********************************************************
default=2
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-31.9smp)
root (hd0,0)
kernel /vmlinuz-2.4.20-31.9smp ro root=LABEL=/
initrd /initrd-2.4.20-31.9smp.img
title Red Hat Linux (2.4.20-31.9)
root (hd0,0)
kernel /vmlinuz-2.4.20-31.9 ro root=LABEL=/
initrd /initrd-2.4.20-31.9.img
title Red Hat Linux (2.4.20-6smp)
root (hd0,0)
kernel /vmlinuz-2.4.20-6smp ro root=LABEL=/
initrd /initrd-2.4.20-6smp.img
title Red Hat Linux-up (2.4.20-6)
root (hd0,0)
kernel /vmlinuz-2.4.20-6 ro root=LABEL=/
initrd /initrd-2.4.20-6.img
********************************************************
1行目のデフォルトで指定してます
この場合だとデフォルトは2番。
この番号は0から数えるので上から0,1,2,3の順です
よって、Red Hat Linux (2.4.20-6smp)が起動されます
しかし最新版は一番上のRed Hat Linux (2.4.20-31.9smp)ですので
default=0
にすることにより再起動した場合でも最新版が選択されます。
ちなみに2行目のtimeout=10がカーネル選択時間ですので
再起動後、1秒でも早く起動したい場合は10秒を短く設定することにより
短時間の再起動を可能にします。
(あまり短すぎると選ぶときに困りますのでご注意を)
LILOの場合は下記リンクから参照ください。
↓ブートローダーの設定(Red Hat Linux 7.2: オフィシャル Red Hat Linuxカスタマイズガイド)
http://www.jp.redhat.com/manual/Doc72/RH-DOCS/rhl-cg-ja-7.2/buildkernel-bootloader.html
October 14, 2004
PHPのCGI版とCLI版の共存環境を作る
PHPをSuEXECしたいのでmod_become使おうとしたが不安だしそこまで需要がないので
CGI版のPHPを使うことによりSuEXECを実現。
なおモジュール版のPHPは現状のままnobodyで動作する
CGIを入れてる場合も入れない場合も
/usr/local/bin/の中にphpというファイルができますが
CGI有りの場合はCGIのPHPが
CGIなしの場合はCLIのPHPが生成されます。
そこでCGI版を先に入れてphp-cgiにファイル名変更をしてから
CLI版のphpファイルを生成することにより共存環境を作っています。
CLI版とCGI版はsafe_modeの値を変えたいので
CGI版をconfigureするときにphp.iniの位置を
/usr/local/lib/phpcgi
に指定してます。
configureするときにmkdirする必要はなく、make install後mkdirしてます
以下のconfigureにはimapもサポートしてますので
imapがない方は --with-imap-ssl --with-imapを外してください。
mysqlとpgsqlも同様です。
まずCGI版をインストール
# cd /usr/local/php-4.3.8
# ./configure --mandir=/usr/local/man --enable-dba \
--enable-ftp --enable-mbstring --enable-mbregex --enable-zend-multibyte \
--enable-debug --enable-memory-limit \
--with-zlib --enable-cgi --with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql --with-imap-ssl --with-imap \
--with-config-file-path=/usr/local/lib/phpcgi
# make
# make install
# mkdir /usr/local/lib/phpcgi
# cp /usr/local/lib/php.ini /usr/local/lib/phpcgi/php.ini
# cp /usr/local/bin/php /usr/local/bin/php-cgi
次にCGI抜きのインストール
# ./configure --mandir=/usr/local/man --enable-dba \
--enable-ftp --enable-mbstring --enable-mbregex --enable-zend-multibyte \
--enable-debug --enable-memory-limit \
--with-zlib --disable-cgi --with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql --with-imap-ssl --with-imap
# make
# make install
これでインストール完了です
以下、2コマンドは確認用です
# php -v
PHP 4.3.8 (cli)
# php-cgi -v
PHP 4.3.8 (cgi)
Apacheのconfは以前のままで
CGI版のPHPは.cgiで起動させます
perlとの違いは1行目に
#!/usr/local/bin/perl
になるところを
#!/usr/local/bin/php-cgi
になります。
phpinfoで確認しましょう
モジュール版(php_info.php)は
***************
<?php
phpinfo();
?>
***************
CGI版(php_info.cgi)は
***************
#!/usr/local/bin/php-cgi
<?php
phpinfo();
?>
**************
で確認しましょう。
CGI版はパーミッションを755にしないと動きませんのでご注意を。
見分ける方法は上から3番目の「Server API」が
モジュール版だとApache
CGI版だとCGI
となってるはずです
safe_modeは変えたい方のphp.iniで設定してくださいね
October 09, 2004
SASL2とMySQLとの連携のトラブル
以前のエントリーで設定した感じでインストールしてみたが
実際やってみるとエラーばっかり・・・(鬱
(それでもPostfixAdminを使いたかった。)
あれからPostfixのmain.cfに下記のように設定してます
******************************
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = yanbe.net
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
*****************************
ローカル内での受信成功!
しかし別ドメインへのメール送信がまだ無理
warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied
BerkeleyDBじゃねーーーw
SASLの設定を見てみる
# vi /usr/local/lib/sasl2/smtpd.conf
今気づいたが
sql_select: SELECT passwd FROM virtual_account WHERE id = '%u'
そもそもvirtual_accountなんてテーブルないよ・・・(T_T)
そう思いながらDBエンジンを明示的に指定
sql_engine: mysql
(PostgreSQLの場合sql_engine: pgsql)
postfixadminの場合の指定は
sql_select: SELECT password FROM mailbox WHERE username='%u@%r'
それでも試してみると
SASL LOGIN authentication failed・・・・・・・・・・・・・・・・
ん~っと悩んで、何気にコマンドを打ってみる
# sasldblistusers2
なんと!もしかしてこの結果に出てるユーザでなら・・・
・・・・いけた。
MYSQL呼んでないじゃーーーーーーーん!
もしかして・・・
# find / -name smtpd.conf
/usr/lib/sasl/smtpd.conf
/usr/lib/sasl2/smtpd.conf
/usr/local/lib/sasl2/smtpd.conf
なんじゃこりゃーーーーw
デフォルトがBerkeleyDBを呼ぶのを利用しログを見ながらmvコマンドでファイル名変更
結局、postfixが呼んでるのは
/usr/lib/sasl2/smtpd.conf
mysqlをログモードにして送信してみるとログが増えない・・・・・(T_T)
warning: SASL authentication failure: Password verification failed
降参しPostfix-JPのMLへ質問してみたが原因わからず
しかしMLでの質問で判明したが
PostfixからSASLを使いMySQLで認証するためには
MySQLのテーブル内ではMD5でcryptしたパスワードを格納していると「無理」!!!!
既にMD5でPOP3やIMAPも動作しちゃってます
今更、プレーンの危険な状態にするなんて無理です
そこで思いついたのがIMAPの認証を借りよう!
実はSASL2にはIMAP認証を利用するという手段があります。
# vi /usr/lib/sasl2/smtpd.conf
***************************************
pwcheck_method: saslauthd
mech_list: plain login
saslauthd_path: /var/run/saslauthd/mux
***************************************
saslauthd_pathはなくてもいいみたいですが
私はこれがないと
warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory
と怒られちゃいました
あとデフォルトではsaslauthdは起動されていないのでIMAP認証モードで起動させます
# saslauthd -O localhost -a rimap
デフォルトでsaslauthdがパスに通るようにインストールされると思いますが
コマンドが認識されない場合は
# find / -name saslauthd
で探してください
MySQLの時と違いすぐに
IMAPサーバへ接続されるログが確認できました
IMAPサーバ自体はMD5対応なのでようやくSMTP認証もMD5に対応できました
しかし、また問題がでてきました
ユーザID:test@example.com
パスワード:testpass
で認証できるような設定をしても
ログには
ユーザID:test
パスワード:testpass
という風に
アカウント名@ドメイン名が
@ドメイン名が消えてアカウント名のみになるのです
***************************************************************
↓MySQLのログ
041008 3:54:49 359 Query
SELECT username, password, "", '1001', '1001', '/usr/local/virtual',
maildir, "", name, "" FROM mailbox WHERE username = "test"
***************************************************************
調べていくとPostfix-JPのML内にてLDAP環境ですが同じ現象を確認できました
LDAPの場合、ldap_filter: mail=%u@%rという設定で逃げれますが
SASL2の場合はLDAPの設定は使えないので
一番最後に@を付加して認証してみる
ユーザID:test@example.com@
パスワード:testpass
でやってみました
結果:成功
最悪の場合の逃走ルートを確保できたが
やはりすっきりしたいのでさらに対策を探し中・・・
見つかり次第またエントリーします
↓SASLのsmtpd.conf設定項目表(英語) Options for Cyrus SASL
http://asg.web.cmu.edu/cyrus/download/sasl/options.html
October 08, 2004
PostfixAdminのインストール
PostfixAdminとはqmailadminのように
ブラウザ上からユーザ管理などを行え
ユーザ自身もパスワード変更を管理者に依頼せずに自分自身で行える便利なソフトです
PostfixAdminのインストールに必要なシステム
Postfix2.0以上
Apache1.3.27以上(Apache2系列未確認)
PHP4.1以上(PHP5系列未確認)
MySQL3.23.xx以上(MySQL4.1以上は未確認)
(公式サイトより)
http://www.high5.net/postfixadmin/から入手(最新版は2.0.5)
wgetで取得するとdownload.php?file=postfixadmin-2.0.5.tgzというファイル名になるので
mv download.php?file=postfixadmin-2.0.5.tgz postfixadmin-2.0.5.tgzで名前を修正
tar zxvf postfixadmin-2.0.5.tgz
解凍したディレクトリをそのままApache管理下に置く
(今回の例は/home/postfix/public_html)
まずadminディレクトリの/admin/.htaccessの1行目のAuthUserFile(/admin/.htpasswdのファイルパス)を修正する
(今回の例は/home/postfix/public_html/admin/.htpasswd)
そして.htpasswdに自分がログインできるように変更する
そして/config.inc.php.sampleを/config.inc.phpに名前を変えてコピーする
(cp config.inc.php.sample config.inc.php)
これをコピーしてないと設定ファイルが読み込めないので
アクセスすると
Warning: main(./config.inc.php): failed to open stream: No such file or directory in /home/postfix/public_html/login.php on line 18
Fatal error: main(): Failed opening required './config.inc.php' (include_path='.:/usr/local/lib/php') in /home/postfix/public_html/login.php on line 18
というエラーが出る
次にMySQLのユーザ登録とデータベースを作成する
GRANT ALL ON postfixadmin.* TO postfixadmin@localhost IDENTIFIED BY 'パスワード';
create database postfixadmin;
そのデータベースに/DATABASE.TXTの43行目ぐらいからのCREATE TABLEのSQLを実行する
admin,alias,domain,domain_admins,log,mailbox,vacationの7テーブル作成
********************************************************
/DATABASE.TXTに書いてる通り
mysql -u root [-p] < DATABASE.TXTを実行し読み込む際は
ユーザ作成・データベース作成なども自動なのでパスワード等の設定を忘れないように
********************************************************
作成したら確認します
mysql> show tables;
+------------------------+
| Tables_in_postfixadmin |
+------------------------+
| admin |
| alias |
| domain |
| domain_admins |
| log |
| mailbox |
| vacation |
+------------------------+
7 rows in set (0.00 sec)
そしてMySQLに登録したユーザなどを設定ファイルの/config.inc.phpで設定する
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'ユーザ名';
$CONF['database_password'] = 'パスワード';
$CONF['database_name'] = 'データベース名';
それ以外はデフォルトで
スーパーユーザ用のhttp://hogehoge.com/admin/のページをアクセスしてみる
.htaccessが機能しBASIC認証を通過しページが無事に出ればOKです
http://hogehoge.com/ ドメインマスター用(アカウント作成など)
http://hogehoge.com/user/ 一般ユーザ用メール(転送とパスワード変更)
http://hogehoge.com/admin/ スーパーユーザ用(ドメインマスターやドメイン自体を作る)
↓Postfix Admin
http://www.high5.net/postfixadmin/
Postfixadminのためにpostfixインストール
現在、動作中のpostfixにpostfixadminを導入するためにMySQLへ対応させます
(Postfix未導入でも再コンパイルするので同じ)
UID・GIDはPostfixAdminのhowtoに従ってるだけで
1001の設定を全て実際のUNIXシステムのpostfixのUID・GIDに合わせる
***********************************************
***************
未導入の方へ
***************
ftp://ftp.dnsbalance.ring.gr.jp/pub/net/mail/postfix/index.html
ここから最新版を入手する
# cd /usr/local/src
# wget ftp://ftp.dnsbalance.ring.gr.jp/pub/net/mail/postfix/official/postfix-2.1.5.tar.gz
# cd ..
# tar zxvf ./src/postfix-2.1.5.tar.gz
これをしておけば以下説明は同じ
***********************************************
まずMailDir形式に対応したquota入れます。
PostfixにはPostfix VDAというパッチがリリースされています。
http://web.onda.com.br/nadal/
Postfixのバージョンに合わせてパッチを入手しましょう
今回は最新のpostfix-2.1.5-trash.patch.gzです
# cd /usr/local/src
# wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
# gzip -d ./src/postfix-2.1.5-trash.patch.gz
# cd /usr/local/postfix-2.1.5
# patch -p1 < ../src/postfix-2.1.5-trash.patch
Makeする前に公開メールサーバになるためSMTP-AUTHをします
その為、MySQLへ認証するためにCyrus SASL2を入れます
# cd /usr/local/src
# wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/OLD-VERSIONS/sasl/cyrus-sasl-2.1.17.tar.gz
# cd ..
# tar zxvf ./src/cyrus-sasl-2.1.17.tar.gz
# cd cyrus-sasl-2.1.17/
# ./configure --enable-static --with-saslauthd=/var/cyrus \
--with-pwcheck=/var/cyrus --with-openssl=/usr --disable-otp \
--disable-krb4 --disable-gssapi --disable-anon --enable-login \
--enable-sql --with-dblib=berkeley --with-mysql=/usr/local/mysql
# make
# make install
# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
# mkdir /var/cyrus
# chmod 700 /var/cyrus
# chown postfix /var/cyrus
# vi /usr/local/lib/sasl2/smtpd.conf
***************************************
pwcheck_method: auxprop
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
mech_list: plain login
sql_engine: mysql
sql_user: postfixadmin
sql_passwd: postfixpasswd
sql_hostnames: localhost
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username='%u@%r'
sql_verbose: yes
***************************************
上記はPostfixAdminとの連携をする場合
受信サーバのCourier-IMAPをインストールする
# wget http://unc.dl.sourceforge.net/sourceforge/courier/courier-imap-3.0.8.tar.bz2
# cd ..
# tar jxvf ./src/courier-imap-3.0.8.tar.bz2
# chown -Rf ./courier-imap-3.0.8
ここからユーザ権限に戻る(エラー回避)
$ ./configure
$ make WITH_MYSQL=yes
$ make check
$ su
# make install
# make install-configure
# cd /usr/lib/courier-imap/etc/
# vi authdaemonrc
********************************
authmodulelist="authmysql"
version="authdaemond.mysql"
********************************
# vi authmysqlrc
********************************
MYSQL_SERVER localhost //MySQLサーバ名
MYSQL_USERNAME postfix //MySQL接続時のユーザ名
MYSQL_PASSWORD nabisco //MySQL接続時のパスワード
MYSQL_DATABASE postfix //PostfixAdminのデータベース名
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password //パスワード形式
MYSQL_UID_FIELD '1001' //postfixユーザID
MYSQL_GID_FIELD '1001' //postfixグループID
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/usr/local/virtual'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
********************************
MYSQL_CRYPT_PWFIELDはPostfixAdminの設定ファイルconfig.inc.phpが
「$CONF['encrypt'] = 'md5crypt';」になってる場合「password」でOK
次にQPOPPERをとめる
/etc/xinet.d/popperを/rootに移動してxinet.dを再起動
(退避させているだけなので移動先はどこでもいい)
そしてPOP3・IMAPを動かす
# cd /usr/lib/courier-imap/libexec/
# ./pop3d.rc start
# ./imapd.rc start
次に起動を確認する
#nmap localhost
110/tcp open pop-3
143/tcp open imap
ようやくPostfixの再コンパイル
# cd /usr/local/postfix-2.1.5
# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql \
-DUSE_SASL_AUTH -I/usr/local/include/sasl' \
'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lsasl2'
# make
そしてMySQL対応になったか確認
# ./src/postconf/postconf -m
****************************
static
cidr
nis
regexp
environ
mysql
proxy
btree
unix
hash
****************************
「mysql」の文字を確認!あれば成功!
make時にエラーがあればほとんどファイル位置が見つからないことが多いので
/usr/local/mysql/include/mysql
/usr/local/mysql/lib/mysql
の2つをちゃんとlsコマンドでチェックしよう
mysqlインストール状態によると
/usr/local/mysql/include/
/usr/local/mysql/lib/
の場合もあるようです!
成功すれば
# make install
でpostfixのインストールを終了させる
virtual_mailbox_baseに指定するディレクトリ作成
# mkdir /usr/local/virtual
# chown -R postfix:postfix /usr/local/virtual
# chmod -R 751 /usr/local/virtual
そして設定ファイルでPostfixを設定する
(基本的なmydomainなどの設定は書いてません)
# vi /etc/postfix/main.cf
********************************
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:1001 //postfixグループID
virtual_mailbox_base = /usr/local/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000 //メールボックスの最大容量(QUOTAとどちらが優先かは未確認)
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001 //postfixユーザID
virtual_transport = virtual
virtual_uid_maps = static:1001 //postfixユーザID
# これから下はPostfixAdminでQUOTAを使う場合
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
********************************
次に
▼mysql_virtual_alias_maps.cf
--------------------------------
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
--------------------------------
▼mysql_virtual_domains_maps.cf
--------------------------------
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
--------------------------------
▼mysql_virtual_mailbox_maps.cf
--------------------------------
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
--------------------------------
▼mysql_virtual_mailbox_limit_maps.cf
--------------------------------
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
--------------------------------
▼mysql_relay_domains_maps.cf
--------------------------------
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '1'
--------------------------------
を設定する(初期ではないのでviでファイルを作る)
以上でPostfix+SASL2+Courier-IMAP+MySQLが完成です
実はここからが長かったが・・・
↓Postfix Admin
http://www.high5.net/postfixadmin/
↓ftp.dnsbalance.ring.gr.jp の index.html
ftp://ftp.dnsbalance.ring.gr.jp/pub/net/mail/postfix/index.html
October 07, 2004
MySQLの起動・終了のコマンド
普通に起動する(起動ユーザをmysqlに指定)
# mysqld_safe --user=mysql &
終了させる時
# mysqladmin shutdown -p
パスワード入らないときは-pを取るかパスワード入力せずにエンターキー
ログモードで起動
# /usr/local/mysql/bin/mysqld_safe --user=mysql --log=/var/log/mysqld.log &
この場合は/var/log/mysqld.logに記録する
ログファイルを先に生成してないと記録されない
MySQL内のユーザ権限を無視させる
# /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-grant-table &
どのユーザにもなれるのでテスト動作以外には使わないこと
October 03, 2004
PHPのIMAPモジュールを追加する
PHPでimap_open()などを使うためにIMAPを入れる
(メールサーバとしてはIMAPは動作させない)
ftp://ftp.cac.washington.edu/imap/
で最新のimapを入手する
# cd /usr/local/src
# wget ftp://ftp.cac.washington.edu/imap/imap.tar.Z
# cd ..
# tar zxvf ./src/imap.tar.Z
# cd imap-2004a
ここでMakefileを見て自分の環境にオプションを合わせる
# less Makefile
Linuxは
# make slx
でOK
しかしRedhat9でやると
*************************************
構造体なんちゃらエラー大量・・・の最後に
osdep.c:237: `ssldriver' の領域サイズがわかりません
make[3]: *** [osdep.o] エラー 1
make[3]: 出ます ディレクトリ `/usr/local/imap-2004a/c-client'
make[2]: *** [slx] エラー 2
make[2]: 出ます ディレクトリ `/usr/local/imap-2004a/c-client'
make[1]: *** [OSTYPE] エラー 2
make[1]: 出ます ディレクトリ `/usr/local/imap-2004a'
make: *** [slx] エラー 2
************************************
そこで
Redhat系列はmake lrhと書いてるので
# make lrh
をやると
************************************
ln -s ip4_unix.c ip_unix.c
ln: `ip_unix.c': すでにファイルが存在します
make[3]: *** [onceenv] エラー 1
make[3]: 出ます ディレクトリ `/usr/local/imap-2004a/c-client'
make[2]: *** [lnp] エラー 2
make[2]: 出ます ディレクトリ `/usr/local/imap-2004a/c-client'
make[1]: *** [OSTYPE] エラー 2
make[1]: 出ます ディレクトリ `/usr/local/imap-2004a'
make: *** [lrh] エラー 2
************************************
上書きしてくれないので
# make clean
で綺麗に消してからもう一度
# make lrh
すると警告がちょこちょこ出るけどそのままスルー
そして無事、終了
imapはmakeしかないので手動で
# cp c-client/rfc822.h c-client/mail.h c-client/linkage.h /usr/local/include/
# cp c-client/c-client.a /usr/local/lib/
と必要なファイルをコピーする
これでIMAP自体は終了~~~
次にPHPをconfigureしなおし
cd /usr/local/php-4.3.8/
前回のconfigureオプションを見るために
cat config.nice
最後らへんに記述されてるのでコピーする
# ./configure \
--with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-imap
実行すると毎度のエラー!
************************************
checking whether IMAP works... no
configure: error: build test failed. Please check the config.log for details.
************************************
configログを見てみる
# cat config.log
すると
************************************
/usr/local/imap-2004a/c-client/osdep.c:874: undefined reference to `RSA_generate_key'
/usr/local/lib/libc-client.a(osdep.o)(.text+0xba0f):/usr/local/imap-2004a/c-client/osdep.c:875: unde
fined reference to `ERR_get_error'
/usr/local/lib/libc-client.a(osdep.o)(.text+0xba1e):/usr/local/imap-2004a/c-client/osdep.c:878: unde
fined reference to `ERR_error_string'
collect2: ld returned 1 exit status
configure: failed program was:
#line 41218 "configure"
#include "confdefs.h"
void mm_log(void){}
void mm_dlog(void){}
void mm_flags(void){}
void mm_fatal(void){}
void mm_critical(void){}
void mm_nocritical(void){}
void mm_notify(void){}
void mm_login(void){}
void mm_diskerror(void){}
void mm_status(void){}
void mm_lsub(void){}
void mm_list(void){}
void mm_exists(void){}
void mm_searched(void){}
void mm_expunged(void){}
char mail_newbody();
int main() {
mail_newbody();
return 0;
}
***********************************
ちゃんとコピーした/usr/local/lib/libc-client.aを見てるのに・・・
IMAP関係にはもう一つ--with-imap-sslがあるので指定してみる
# ./configure \
--with-pgsql=/usr/local/pgsql \
--with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-imap \
--with-imap-ssl
長々とconfigureした最後に
***********************************
Thank you for using PHP.
***********************************
キタ-( )-(∀゜)-(゜∀゜)-(゜∀)-( )-ッ!
後はおなじみmake・make install
# make
ここで一度。Apache停止
# /usr/local/apache/bin/apachectl stop
# make install
# /usr/local/apache/bin/apachectl start
Apacheを停止せずにmake installしても
Apacheは自動で停止しますのでmake install後はすぐにapachectl startできるようにしておく
もしここでブラウザで確認してもページが表示しない場合はPHPモジュール等確認すること
仕事上などではダウンするといけないので
すぐにphpのconfigureのIMAP関係のオプションを消し再コンパイル。
make・make installをすぐに実行しApache restartして復帰させる
無事にPHPのIMAPを読み込めればphpinfo()でIMAPを確認する

となれば終わり
October 01, 2004
Apacheのログをローテーションする
Apacheのhttpd.confでも設定できるがcronを使ってローテーションしてみる
Linuxでは/etc/logrotate.confをいうファイルでログローテーションを設定している
weekly : 毎週ローテーションする
rotate 4 : 4世代まで残す
create : ローテーションするときにすぐに新ファイルを生成する
include /etc/logrotate.d : /etc/logrotate.dディレクトリの中の設定ファイルを使う
っていうのがデフォルトにあると思う
サービスごとにするために/etc/logrotate内にapache用ファイルを作る
vi /etc/logrocate/apacheで新ファイルを作り
/usr/local/apache/logs/access_log {
missingok
postrotate
/bin/kill -HUP `cat /usr/local/apache/logs/httpd.pid 2> /dev/null` 2> /dev/null
endscript
}
を記述すれば/usr/local/apache/logs/access_logをローテーションされます
missingokは指定したファイル(ここでは/usr/local/apache/logs/access_log)が
存在していなくてもエラーにせずパスする設定です
後はローテーションしてすぐにApache再起してローテーション終了するという感じ
September 30, 2004
SSHDの設定
Linuxのほとんどで標準に入っているOpenSSHの設定方法をメモ
設定ファイルはrpm形式だとデフォルトは
/etc/ssh/sshd_config
同じディレクトリにssh_configもあるが間違えないように
まずは
rootでのログインを拒否するために
PermitRootLogin no
(デフォルト:yes)
空のパスワードは使わないので
PermitEmptyPasswords no
(デフォルト:no)
後から作ったユーザしか許可しないので
AllowGroupsかAllowUsersで指名許可
testグループのみ可
AllowGroups test
wwwユーザのみ可
AllowUsers www
拒否する場合は
DenyGroups
DenyUsers
Allowを設定すると設定した条件以外は拒否されるのでDenyは不要
指名は名前のみでユーザID・グループIDは使えない
(デフォルト:全ユーザ許可)
↓sshd config
http://www.saturn.dti.ne.jp/~jpug/doc/linux/sshd_config.html
↓sshd_config.0
http://www.unixuser.org/~euske/doc/openssh/jman/sshd_config.html
↓第8回 Linux研究会 インターネットサーバの構築・運用 sshd_configの解説
http://www.mtc.pref.kyoto.jp/linux-ken/2003/server9.htm
September 27, 2004
saslのユーザ登録
SMTPサーバへメール送る際に認証をかけるやつなんですけど
saslへユーザ登録するとなぜかエラー
# saslpasswd -c hogehoge
ちゃんと登録されているか確認すると
# sasldblistusers
user: hogehoge realm: yanbe.net mech: CRAM-MD5
user: hogehoge realm: yanbe.net mech: DIGEST-MD5
PLAINが出るはずなのにでない!
セキュリティ的にはいいんだけどOutlookじゃ認証できないので困る
ミスったのかと思い
# saslpasswd -d hogehoge
saslpasswd: user not found
なにぃ!
hogehogeユーザがいないだと・・・。
ならばもう一度・・・
# saslpasswd -c hogehoge
# sasldblistusers
user: hogehoge realm: yanbe.net mech: PLAIN
user: hogehoge realm: yanbe.net mech: CRAM-MD5
user: hogehoge realm: yanbe.net mech: DIGEST-MD5
できてるーーーーーーーーーーー
後々調べてみると試した皆さん1回目には作成されないらしいです
なぜか不明ですがやる人は焦らずに同じIDを入れて消してまた入れてね。
September 25, 2004
qmailのqmail-date-localtime.patch入手法
qmailをインストールする際に使う
GMTからローカル時間に使う時間帯を変えるPatchです。
おそらく最近変わったと思うんですが
どこ行っても入手先は
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
だと思うんですがこれは使えません。
wgetしてもFFFTPで丁寧に繋いでも無理です
なぜならFTPでは無理だから・・・。
FTPではなくHTTPにすればOK!
http://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
にすれば可能です。
追記:2006/4/10
上記のサーバが閉鎖してるみたいなんで
代わりのサーバ書いておきます
確認してませんがおそらく中身は同じです
http://mirror.spanasia.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz