October 27, 2004
CSVファイルを扱うモジュール [ Perl/CGIの記録 ]
CSVといってもカンマ区切りでExcelにて見れればいいCSVというレベルですけど
Perlで扱うときに便利なモジュールの使い方メモ
まずText::CSV_XSというモジュールを使うのでuse宣言する
use Text::CSV_XS;
そしてtest.csvを読み込むときは
open(RU, "./test.csv");
eval{flock(RU, 2)};
@csv_data = <RU>;
close(RU);
上記なりで@csv_dataにCSVファイルを全読み込みしてから
foreachなどで1行1行取り出します。
$csv = Text::CSV_XS->new({'binary' => 1});
foreach(@csv_data){
$csv->parse($_);
@columns = $csv->fields();
}
とやると@columnsに全てのカンマ区切りのデータが入ります
「"abc","def","ghi"」が$_に入ってると
$columns[0]にabc
$columns[1]にdef
$columns[2]にghi
が入ります
逆にテキストをCSVに書き出すときは
@new_columnsにさきほどの@columnsと同じ感じで入れて
combineしてから$out_csvに書き出してます。
$csv = Text::CSV_XS->new({'binary' => 1});
$csv->combine(@new_columns);
$out_csv = ($csv->string);
$out_csvは「"abc","def","ghi"」な感じで入ってるのでそのままファイルに書き出せばOK
そのまま出力してもいいのならば
print $csv->stringでいいですね
普通に
$csv = Text::CSV_XS->new();
とやると日本語を扱うときに文字化けするみたいですので
$csv = Text::CSV_XS->new({'binary' => 1});
のようにバイナリ形式でオブジェクトを生成してください
普通にsplit関数を使って「","」で分割すればいいじゃんとかいう人いますが
「"あ"ああ"」のように途中でダブルクォーテーションがあるのとないのととかで
いろいろ面倒なんですよ!
楽にしたいんですよ!
って感じですので使ってます。
October 23, 2004
yanbe.net使用者へ [ 日頃の記録 ]
今までこのサイトでサーバ停止などの情報を掲載してましたが
2004年10月23日より下記のページに全て移行しますのでお知らせします。
YANBE.NETサーバのサーバ情報からユーザドメインメール作成方法など
ある程度の情報は書いておきました。
サーバ・サービスの質問、要望などは下記ページのサポート掲示板にてお願いします。
↓YANBE.NETサーバ情報
http://yanbe.net/
エースコンバット5をクリアしてみて [ 日頃の記録 ]
最後まで素晴らしい!
ストーリーも結構好きな感じで普通の映画にでも使えそうなほどでした
終盤は空母からの離着陸もありよかった
リアリティを出すためにエースコンバット4にあった弾薬補充制もなくなってるが
爽快感を出すためにも1回クリアすれば出てきて欲しいところです
アーケードモードもミサイルは数的に最初から足りないところをみると今回は機銃重視かな?って感じ
確かに今までのエースコンバットの機銃音とは違うし当たり判定も難しくなってる感じはする
しかし以前に比べて機体が集めにくい
というのも金だけでは買えなくなってるためである
そんだけ遊べということだろうが
今回はかなり難しめにできているので
最強機をゲットしても簡単に全クリアはできそうにない
以上、エースコンバットレビュー終わり
October 22, 2004
エースコンバット5をミッション6までやってみて感想 [ 日頃の記録 ]
まずグラフィックが綺麗。
さすが5と思わせるところあり
ストーリーはかなりいい
エースコンバット2・4のストーリーを
うまく合わせた感じ
機体も実際に使われてるのが多く
リアリティが高い
エースコンバット3・4の近未来の戦闘機重視とは違う
そして僚機への指示は良い!とは言えない
隊長なので質問に答えることが多く
戦闘が忙しいときも聞いてきやがる
まぁ隊長気分はこんなものかという感じ
しかし実戦での指示はなかなかいい感じ
ややこしそうに思われた指示システムも命令タイプは3種類で
やり方も十字キーの上・左・下 右は特殊兵器の許可に使う
エースコンバット4を遥かに超えたと思われる変化が
撃墜などでの爆発シーン
これは素晴らしい!100点である
霧の中なども素晴らしく良い感じ
あとエースコンバット4までミサイルだけでなんとかクリアできていたが
重要ターゲットという概念がなくなったので
全てがターゲット。
(レーダーでの赤・黄・白は敵機のダメージ量になっている)
だからミサイルが確実に打ちまくっているとなくなる
機銃を使いこなせればかなり楽。
そしてエースコンバット2にあった勲章システムが復活している
これでかなりやりがいがある!
そして最大の変化は同じ機体を最大4個も買えるようになっている
これは僚機の機体を隊長自ら指示するため
4人全員の機体を用意する必要がある
だから自分だけ良い機体があっても仲間が弱いと援護が使えなくなる
タイムアタックな感が強かった4に比べては時間制というものがありつつ
エースコンバット2のような余裕も生まれている
まさにエースコンバット史上最高作と言われ続けたエースコンバット2と
グラフィックの凄さ満点のエースコンバット4のいいところだらけである
ゲームシステム以外でも変化はある
音声英語が嫌な方にも英語・日本語が選択できるようになった
音声のみで日本語でも字幕はあるし
以前までの1・2・3・4は全て英語。
個人的に素晴らしいと思ったのが
モノラル・ステレオ・サラウンドが選べること!
PS2から光デジタルでヘッドホンに繋いでる自分としては
サラウンド最高!
エースコンバット2のサントラを未だに聞く者としては
エースコンバット5のサントラもかなり欲しい
エースコンバットは音もすごい!
パッケージの戦闘機姿にポスターさえ欲しくなってしまうソフトである
と良い事ばかりだが
ん?っと思ったこともある
ロード時間は短いが
ミッション終了時のあの微妙な間はかなり違和感ある
画面情報が多すぎる
敵機の矢印か仲間の場所を指す矢印かたまに間違える
△キーを押してもすぐに目標を切り替えてくれない
(おそらく1回目の目標は今のターゲットなので2回押しが必要)
ストーリーの最初らへんは自分がどのコールサインかがわかりにくい
自分はブレイズで自分のチームがウォードッグらしい!
しかし今、やりにくくても前作らしく1回クリアすれば
これが当たり前となることは間違いない!
また全クリアしてから感想でも。
↓PS2ゲームレビュー「エースコンバット5 ジ・アンサング・ウォー」
http://www.watch.impress.co.jp/game/docs/20041020/ac5.htm
↓PS2/エースコンバット5
http://namco-ch.net/acecombat5/index.php
October 21, 2004
October 20, 2004
PHPのGDライブラリ入れるときのトラブル [ Linuxの記録 ]
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のバージョンアップ [ Linuxの記録 ]
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を入れる [ Linuxの記録 ]
まずは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
エースコンバット5!!!欲しい!!! [ 日頃の記録 ]
あと4日になりました!
ACES WEBを見ましたか!?
あのムービーはもう映画の領域!
さすがサントラもなかなか良さそうでかなり期待してしまいます。
ゲームシステムはやってからだけど
グラフィックやゲームの流れ、音どれも素晴らしい!!!
これはまたもやサラウンドヘッドホンでかなり楽しめそうな気がします
エースコンバット4と違い、風きり音など自然な音もムービーではかなりきれいに聞こえてます
(普通のスピーカーではわかんないけど)
エースコンバットシリーズの最高傑作になることを期待しております!
↓ACES WEB内の最新公開ムービー!(直リンクです!)
mms://wm2.streaming.ne.jp/namco/opdemo.wmv
↓ACES WEB
http://www.acecombat.jp/
↓PS2/エースコンバット5
http://namco-ch.net/acecombat5/index.php
PostfixAdminのイケてないところ [ Linuxの記録 ]
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を使ってサーバ資源の管理 [ Linuxの記録 ]
サーバの状況を見るために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選択のデフォルト値を変更する [ Linuxの記録 ]
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版の共存環境を作る [ Linuxの記録 ]
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 11, 2004
PostfixAdminのアナウンスファイル [ PC/WEB技術の記録 ]
PostfixAdminに最初アクセスするとメニューの下に赤字で
表示されるものが気になると思います。
赤なのでエラーかなっと思う人もいるでしょうが
それがアナウンスファイル(勝手に呼んでますが)の結果です
これは各ユーザに知らせるときなどに使える結構便利なヤツ
ページごとに表示も変えれます
http://example.com/ は motd.txt
http://example.com/admin/ は motd-admin.txt
http://example.com/users/ は motd-users.txt
のファイルを読み込んでます。
表示させたくなかったらファイルを削除すればOK
↓Postfix Admin
http://high5.net/postfixadmin/
October 10, 2004
PostfixAdminを日本語化しちゃう [ PC/WEB技術の記録 ]
PostfixAdminはデフォルトでなんと22言語に対応してます!
しかしその22言語に含まれてないのが日本語!!!
別に英語でもわかれば問題ないんですが
一般ユーザにも利用させるためにも日本語化してみましょう
まずMETAタグの指定文字コードをデフォルトはiso-8859-1になってるので
templates/header.tplのファイルにあるcharsetをShift_JISに書き換える
次にlanguagesディレクトリに下記からDLしたja.langファイルを入れる
↓PostfixAdminの日本語化ファイル
!!!公式で日本語対応したため配布終了!!!
そしてconfig.inc.phpの設定ファイルの最初らへんの言語設定を
$CONF['default_language'] = 'ja';
にする
以上!!!
自分でいじる時の注意点はpostfixadminは中身を見ると手抜きっぽい感じがあったりする
例えばlangファイルの
$PALANG['pAdminMenu_create_domain_admins']
実はどのファイルにも使われていない(苦笑
$PALANG['pVcp_welcome']とかのVcp関係も使ってない
というかtemplateのvcp.tplにあるのだが
どのファイルもvcp.tplを使ってねーーーーーーーー
まぁそんなのよりも動いてくれればいいんです
ということで皆さんも日本語化してないからPostfixAdminが嫌なんて言わず
さっさとわかりにくいqmailよりPostfixに移行しましょう(笑
October 09, 2004
SASL2とMySQLとの連携のトラブル [ Linuxの記録 ]
以前のエントリーで設定した感じでインストールしてみたが
実際やってみるとエラーばっかり・・・(鬱
(それでも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
エントリーのImport/Exportの注意点 [ MovableTypeの記録 ]
サイトの移転などでImport/Exportを利用すると思いますが
実はExportしたときは正常なのにImportするとエントリーが途中で切れている・・・
なんていう状況がサーバ移転した際に起こりました
しかしExportしたテキストを見てみればすぐにわかりました
書き出したテキストは「-----」という列でエントリーなどの情報を分けてるんですが
エントリーに「-----」だけの列があるとそこでエントリーが終わりと勘違いし
後でblogを見てみるとエントリーが正常にImportされていない状態になります
対処法はただ一つ。
「-----」だけの列を使わない。
もし起こった場合の対処法は
テキストを自分でエントリー編集で追加する。
皆さん、ご注意を。
PostfixAdminのインストール [ Linuxの記録 ]
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インストール [ Linuxの記録 ]
現在、動作中の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の起動・終了のコマンド [ Linuxの記録 ]
普通に起動する(起動ユーザを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モジュールを追加する [ Linuxの記録 ]
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をすぐ
