PHPで定数をメンバ変数の名前に使いたかった

PHPで定数をメンバ変数の名前に使いたかった。

stdClassでメンバ変数の名前に対して定義済み定数を利用しようとしたら怒られた。


<?php

define('HOGECONST', 'ehehe');
$hoge = new stdClass();
$hoge->hoge = 'value';
//$hoge->constant('HOGECONST') = ‘'value';  // raises an error -- Can't use method return value in write context
//$hoge->$constant(HOGECONST) = ‘'value'; // raises an error -- Can't use method return value in write context
//$hoge->HOGECONST = ‘'value'; // raises an error -- syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
$attr = constant('HOGECONST');
$hoge->$attr = 'value';
var_dump($hoge);

?>

object(stdClass)#1 (2) {
["hoge"]=>
string(5) "value"
["ehehe"]=>
string(5) "value"
}

どうやら一度定数を変数に格納した後、 $hoge->$attr というふうにアクセスしないとダメらしい。

TeamFortress2のサーバをFreeBSDで立ててみる

TeamFortress2の鯖を立ててみたくなった、のでやってみる。OSはFreeBSD。現在のsourceエンジンじゃない、hlds(half life dedicated server)の時代から、パフォーマンスを出すならLinuxで、というのが定石だ。詳しい仕組みはわからないんだけれど、サーバでの更新レートを秒間1000回出すためにはlinuxのネイティブ環境じゃないとダメなのだ。更新レート秒間1000回ってのは俗に言う、「鯖のFPS1000」ってやつ。hlds時代の実験ではFreeBSDで動くsteam鯖はあくまでlinuxのエミュレートなのでどうしても秒間500回までしかでなかった。でも今回はパフォーマンスをそこまで気にしていないのでFreeBSDでやってみる。

あと現状がどうなってるのかもよくわかんない。

以前にたぶんL4D2用にsrcds鯖を立てたことがあったので参考にしながらやってみた。

まずはsteam鯖をportsからインストール。linuxエミュレート環境がないとココのインスコでコケちゃう。

linuxエミュレート環境はrc.confにlinux_enableをYESと書いてlinux.koをkldloadしてやる。最近だと標準で付いてくるケースが多い気がするけど、もしかすると環境によってはportsでlinux.koを入れないとダメかも。


shell> echo ‘linux_enable=”YES”’ >> /etc/rc.conf

shell> kldload linux.ko

shell> games/linux-steam

インストールするとパッケージからの情報として下記の通りメモが出てきた。ログイン情報はいらなくなったよ、とのことらしい。前々からアレについてはよくわかんなかったんだよね。


===>>> pkg-message for linux-steam-1.1
------------------------------------------------------------------------
Linux HLDS Update Tool has been successfully installed!

To get started:
cd /usr/local/steam
./steam -command update -game [name] -dir .

Steam will then begin downloading the game content to your system.  Once
complete you may start your server by:

./hlds_run -game [name] +map [mapname] -maxplayers [#] \
-autoupdate

OR

./srcds_run -game [name] +map [mapname] -maxplayers [#] \
-autoupdate

NOTE: Steam no longer requires login information.
------------------------------------------------------------------------

メモにあるとおり、/usr/local/steamにsteamという名前のバイナリが転がってる。ココにゲームのサーバ本体を入れたりして運用しましょう、ということらしい。アップデートのためにsteamバイナリを何度か動かして、その後でゲームリストを拾ってみる。steamバイナリを動かすときはroot権限とかの、/usr/local/steamに書き込み権限がないとアップデートで落としてくるファイルを書き込めなくてエラーになる。


shell> ./steam -command help
Checking bootstrapper version ...
Getting version 48 of Steam HLDS Update Tool
Downloading. . . . . . . . . . . .Steam Linux Client updated, please retry the command
shell> ./steam -command help
Checking bootstrapper version ...
removing stale semaphore last operated on by process 2786 with name 0eBlobRegistryMutex_07692C9F0DCCAB9B49E0AA2095A1952C
removing stale semaphore last operated on by process 2786 with name 0eBlobRegistrySignal_07692C9F0DCCAB9B49E0AA2095A1952C

Use: steam -command <command> [parameters] [flags]

Commands:

update: Install or update HLDS

parameters:
-game <game>            -   Game name (use '-command list' to see available games)
-dir <installdir>       -   HLDS Install dir
(if dir not specified, will use value from last run of tool)

flags:
-verify_all             -   Verify all HLDS files are up to date
-retry                  -   Automatically retry every 30 seconds if the Steam Network is busy
-remember_password      -   Remember password (if a username is supplied)

For example: steam -command update -game cstrike -dir /hlds

version: View installed versions

list: View available games

Optional parameters for all commands:

-nobootstrapupdate      -   Do not check for updates to the update tool

shell> ./steam -command list
Checking bootstrapper version ...
removing stale semaphore last operated on by process 2793 with name 0eBlobRegistryMutex_07692C9F0DCCAB9B49E0AA2095A1952C
removing stale semaphore last operated on by process 2793 with name 0eBlobRegistrySignal_07692C9F0DCCAB9B49E0AA2095A1952C
** 'game' options for Source DS Install:

"Counter-Strike Source"
"ageofchivalry"
"alienswarm"
"cssbeta"
"diprip"
"dods"
"dystopia"
"episode1"
"esmod"
"garrysmod"
"garrysmodbeta"
"hl2mp"
"insurgency"
"l4d_full"
"left4dead"
"left4dead2"
"left4dead2_demo"
"orangebox"
"pvkii"
"smashball"
"synergy"
"tf"
"tf_beta"
"zps"

** 'game' options for HL1 DS Install:

"cstrike"
"cstrike_beta"
"czero"
"dmc"
"dod"
"gearbox"
"ricochet"
"tfc"
"valve"

** 'game' options for Third-Party game servers:

"ageofchivalry"
"aliensvspredator"
"americasarmy3"
"brink"
"darkesthour"
"darkmessiah"
"defencealliance2"
"dinodday"
"diprip"
"dystopia"
"esmod"
"garrysmod"
"garrysmodbeta"
"hauntedhellsreach"
"homefront"
"homefrontjpn"
"insurgency"
"killingfloor"
"killingfloor_beta"
"marenostrum"
"modernwarfare3"
"mondaynightcombat"
"naturalselection2"
"nucleardawn"
"pvkii"
"redorchestra"
"redorchestra2"
"redorchestra_beta"
"serioussam3"
"serioussamhdse"
"ship"
"sin"
"smashball"
"synergy"
"tshb"
"zps"

どうやらTeamFortress2のゲーム名はtfらしい。TeamFortressClassicとカブりそうな気もするけどいいのかな。

下記のコマンドを入れるといろいろとファイルをダウンロードしてくる。結構時間かかりました。


shell> ./steam –command update –game tf –dir ./

…(略)…

102:08    100.00%  downloading .//orangebox/hl2/navplace.db
102:08    100.00%  downloading .//orangebox/hl2/pure_server_whitelist.txt
102:08    100.00%  downloading .//orangebox/libcurl.so.4
102:08    100.00%  downloading .//orangebox/libcurl.so.4.2.0
102:09    100.00%  downloading .//orangebox/srcds_linux
102:09    100.00%  downloading .//orangebox/srcds_run
102:09 [63.150.140.70:27030] Disconnecting
HLDS installation up to date

http://tfortress2.wikiwiki.jp/?server.cfg

上記サイトを参考にサーバの設定をしてみた。コンフィグの置き場所はsteamバイナリが置いてある場所から相対で orangebox/tf/cfg/server.cfg に新規作成。


shell> cat orangebox/tf/cfg/server.cfg

hostname "l2tp tf2 server"
rcon_password "rcon"

mp_chattime 10
mp_stalemate_enable 0
mp_stalemate_timelimit 240
mp_bonusroundtime 5
mp_winlimit 0
mp_maxrounds 0
tf_flag_caps_per_round 3
sv_alltalk 0
mp_timelimit 15
hostname
sv_pure 0
sv_lan 0
sv_consistency 1
sv_stats 1
sv_region 4
log on
sv_log_onefile 0
sv_logfile 1
sv_logbans 1
sv_logecho 1
fps_max 600
sv_minrate 0
sv_maxrate 20000
sv_minupdaterate 10
sv_maxupdaterate 66
sv_allowupload 1
sv_allowdownload 1
net_maxfilesize 15
mp_autoteambalance 1
mp_autoteambalance_delay 60
mp_autoteambalance_warning_delay 30
mp_teams_unbalance_limit 1
mp_enableroundwaittime 1
mp_bonusroundtime 8
mp_restartround 0
mp_stalemate_enable 1
mp_stalemate_timelimit 300
mp_timelimit 35
mp_forcecamera 0
mp_allowspectators 1
mp_footsteps 1
sv_cheats 0
sv_timeout 900
mp_idlemaxtime 15
mp_idledealmethod 2
decalfrequency 0
sv_voiceenable 1
mp_chattime 10
tf_birthday 1

tv_enable 1
tv_name "l2tp hltv"
tv_maxclients 5 // (0-255, default 128)
tv_delay 10 // (10-120[sec], default 30)
tv_delaymapchange 1 // (1 | 0)
tv_port 21520 // (default 27020)
tv_maxrate 0 // (default 5000[bps], 0:unlimited)
tv_autorecord 0
tv_debug 1 // (1 | 0)
//tv_snapshotrate 24 // (default 16)
tv_dispatchmode 1 // (0=never, 1=if appropriate, 2=always)
//tv_overrideroot 0 // (0 | 1)
tv_allow_camera_man 1
tv_allow_static_shots 1 //
//tv_relayvoice 1
tv_transmitall 1

そして実行。+ipで与えるアドレスはsrcds_runのプロセスがバインドするアドレスなのでnapt配下の環境ではローカルipを渡してやる。

一瞬ゲームサーバとかに広告するアドレスでグローバルを書くべきかなとか思ったけど違うみたい。


shell> cd orangebox
shell> ./srcds_run -console -game tf +map ctf_2fort +maxplayers 20 +ip 192.168.1.1 –autoupdate
Auto detecting CPU
Using default binary: ./srcds_linux
Server will auto-restart if there is a crash.
INFO: Located steam: ../steam
Updating server using Steam.
Checking bootstrapper version ...
Getting version 48 of Steam HLDS Update Tool
Downloading. . . . . . . . . . . .Cannot open output file 'LinuxHldsUpdateTool_48.pkg'
2012G/ 47n14F| EZMKF| 11;~42J,28IC JST: Steam Update failed, ignoring.
Unable to determine CPU Frequency
2012G/ 47n14F| EZMKF| 11;~42J,28IC JST: Server restart in 10 seconds
Updating server using Steam.
Checking bootstrapper version ...
removing stale semaphore last operated on by process 22499 with name 0eBlobRegistryMutex_1F7241AEB333B3B7B12FBB9F8A43FDED

なにやら更新作業をしようとして失敗のループをしてる。

Downloading. . . . . . . . . . . .Cannot open output file ‘LinuxHldsUpdateTool_48.pkg’

どうやらファイルをダウンロードしたけど書き込めないよ、とのことらしい。

root権限で動かすとセキュリティリスクがあるよって怒られた。プロセスが乗っ取られるとまずいよね、って。ひとまずroot権限で動かして後でユーザ所有のディレクトリに変えてやる。


shell> sudo ./srcds_run -console -game tf +map ctf_2fort +maxplayers 20 +ip 192.168.1.1 -autoupdate

************** WARNING ***************
Running the dedicated server as root
is highly discouraged. It is generally
unnecessary to use root privileges to
execute the dedicated server.
**************************************

The server will continue to launch in 10 seconds\rThe server will continue to launch in 9 seconds\rThe server will continue to launch in 8 seconds\rThe server will continue to launch in 7 seconds\rThe server will continue to launch in 6 seconds\rThe server will continue to launch in 5 seconds\rThe server will continue to launch in 4 seconds\rThe server will continue to launch in 3 seconds\rThe server will continue to launch in 2 seconds\rThe server will continue to launch in 1 seconds\rAuto detecting CPU
Using default binary: ./srcds_linux
Server will auto-restart if there is a crash.
INFO: Located steam: ../steam

と、またもやループしてる。

見れば

Unable to determine CPU Frequency
と出ている。どうやらCPUの周波数が分からないよ、と。FreeBSDだとLinuxと違ってprocinfoにCPUの情報が無いからだろう。

過去の記事を参考にprocinfoを引けるようにしてあげる。


shell> echo "linprocfs /compat/linux/proc linprocfs rw 0 0" >> /etc/fstab

shell> mount -a

動いた。でもLANモードオンリーとかって気になる文字列が。


shell> ./srcds_run -console -game tf +map ctf_2fort +maxplayers 20 +ip 192.168.1.1 –autoupdate

…(略)…

*********************************************************
*       Unable to load Steam support library.*
*       This server will operate in LAN mode only.*
*********************************************************

原因はポートの待ち受け設定をnaptでやってないことだった。naptでポートの転送先をちゃんと設定するとうまく動いた。

以上で一通りの動作を確認できた。あとは動かしながら調整していこうと思う。

FreeBSDでwsgiを使ったtracがどうもおかしい

FreeBSDでwsgiを使ったtracがどうもおかしい。なんだか重い。もともとfcgiを利用してたんだけれどfcgi版のtrac(というかpythonかな)って重い、なのでwsgiにて動かすことにした。

過去にyubirdたんがdebianで、また別件でcentosにてwsgi版のtracを動かしたけどとっても快調だった。

どうやらapache+pythonでの最近のハヤリはwsgiらしい。ということでテキトウにインストールした。

さて、confの変更もすんで動かしてみたんだけれどどうにも重い。topすればpythonの名前でapacheから独立してプロセスが走り続けてたりする。なんかおかしいな、って。ログを見ると気になる記述が。


[Wed Apr 11 13:37:47 2012] [info] mod_wsgi (pid=1189): Attach interpreter ''.
[Wed Apr 11 13:37:52 2012] [info] mod_wsgi (pid=1189): Cleanup interpreter ''.
[Wed Apr 11 13:37:52 2012] [info] mod_wsgi (pid=1189): Terminating Python.
[Wed Apr 11 13:37:52 2012] [error] Exception KeyError: KeyError(34382823872,) in <module 'threading' from '/usr/local/lib/python2.6/threading.pyc'> ignored

最後の行にあるException KeyError: KeyErrorのあたり。なんかスレッド周りの処理でエラーが出てるらしい。

でググってみるとそれらしき記述を発見。

InstallationOnFreeBSD -  modwsgi - Python WSGI adapter module for Apache. - Google Project Hosting

http://code.google.com/p/modwsgi/wiki/InstallationOnFreeBSD

上記のgoogle codeによるとあれしろコレしろ、ってあるけど、結局最後にはwsgi3.3使ったら直ったよってことが。

調べてみるとwsgiのバージョンは2.8を使ってた。


shell> pkg_info -Ix wsgi
ap22-mod_wsgi-2.8_2 Python WSGI adapter module for Apache
shell> psearch wsgi

www/mod_wsgi              Python WSGI adapter module for Apache
www/mod_wsgi3             Python WSGI adapter module for Apache

どうやらバージョンデュアルツリー(っていう名前を今作った!)らしくて2系がstableで3系は実験的なのかな、両方存在してた。2系をアンインスコして3系を入れる。


shell> pkg_deinstall -f www/mod_wsgi
** No matching package found.
shell> portinstall –c www/mod_wsgi3

以上でちゃんといけたっぽい。めでたしめでたす。

でも早くなったかどうかは微妙、残念。

TeamSpeak3で起動時に自動的に接続するように設定する

TeamSpeak3(チームスピーク3。以下、TS3)で起動時に自動的に接続するように設定する。

Windowsでの操作を前提に進めていくけれど、Mac OS用のTS3でもほぼ同じように設定できる。

また日本語化はしておらず英語版でのメモメモ。日本語化してても問題ナッシング。

まずTS3のメインウィンドウを開いて、上のメニューバーにある左から二番目、”Bookmarks”を選ぶ。

その中にある”Add to Bookmaks”をクリック。

1

するとTS3のブックマーク管理画面が表示される。

TS3のブックマークというのは、世界中に数あるTeamSpeak3のサーバへのアクセスをブックマークとして保存しておき、好きなサーバへ接続する、というために使われる。

(でもぶっちゃけ、複数のTS3サーバを渡り歩いている人というのは限られるんじゃないかな。)

 

次に開いたブックマーク画面について。

2

今回はts.l2tp.orgのTeamSpeakのサーバをブックマークに追加したので項目として一つだけ、”みんなでつかってね~”というのが追加されてる。これで次回からts.l2tp.orgを利用する場合にはこのwindowを開いてクリックするとつなぐことができる。

で、今回のお題は自動接続。自動接続の設定を行うには画面左したにある”More”をクリックして詳細画面を表示してやる。

3

”More”をクリックして詳細画面を表示するとそのサーバに関するいろいろな設定が表示される。

主要なところだと表示名、使用するニックネーム、サーバのアドレス、サーバのパスワード、デフォルトでログインするチャンネル名。

で、”チームスピーク起動時に自動でサーバにログインする”ためには、詳細画面右下にある”Connect on Startup”にチェックを入れる。

コレでTS3起動時にこのサーバへ自動的に接続されるようになる。

 

また併せて使いたい便利機能としてデフォルトでログインするチャンネルも設定できる。「このサーバではこのチャンネルしか使ってないんだな~」というときには便利。

詳細画面真ん中にある”Default Channel”のところにチャンネル名を指定すればOK。パスワードが必要なチャンネルの場合にはその下にある”Channel Password”も設定が必要。ちなみに右側の緑色の丸い矢印をクリックすると現在居るチャンネルをデフォルトで入室するチャンネルに指定できる。便利便利。

 

最後は忘れずに”OK”を押して保存して閉じる。コレで完璧!

モバイル環境からSSHを接続するときに圧縮を行うようにしてみた

モバイル環境からSSHを接続するときに圧縮を行うようにしてみた。
サーバはFreeBSDでクライアントはOpenSSH on Mac OS X。

純粋にターミナルで接続するときに下記の通りオプションを与えた。
-Cは圧縮を有効にするオプション、-oで追加の設定として圧縮レベルを与えている。下記の例では最高圧縮率の9。たぶん昨今のマシンなら大丈夫じゃないかな。

shell> ssh -C  -o CompressionLevel=9 host.example.com

つないでみた感触はなかなか良好。いいんじゃないかな。但し今回は帯域のみを絞って(1KB/s)試験をしただけであって、実際の環境のようにロスが30%出るだとか、ラウンドロビンが1000msを越える、帯域が100B/sってなるとまた違った結果になるかも。delayed ackとかなんたらのアルゴリズムだとかそういった設定が有効なのかも。でもひとまずお手軽な圧縮オンで。

また今回の設定にあたって帯域を絞るには下記のソフトを利用した。
Mac OSで帯域コントロールなソフト。

Download Entonnoir for Mac – Limit upload and download speed on a system scale for any port.
ミニマムが1KB、遅延設定、ロス率は不可、あくまでポートごととちょっと痒いところに手が届かないけれど直感的で簡単な操作で帯域を絞り込める。コレのおかげで試験ができました。

 

 

 

 

 

pt2を多摩テレビ(CATV)で使う

今更だけどメモ。うちはテレビも無かったので、CATVのチャンネルがわからなくて苦労したので。

主にrecpt1とかepgrecの設定に使うチャンネル番号と局名の対応

C37: フジテレビ
C38: TBS
C39: テレビ東京
C40: テレビ朝日
C41: 日本テレビ
C42: NHK教育
C43: NHK総合
C44: 東京MX
C45: TVK
C46: テレ玉

最初総当りでチャンネル調べて、目視で局ロゴみて判定した。
他は特にCATVだからといって違う部分は無い。

LDAPを利用したFreeBSDでMySQLが起動しない

LDAPを利用したFreeBSDでMySQLが起動しない。


shell> /usr/local/etc/rc.d/mysql-server start
Starting mysql.
UID must be greater than 1000
su: Sorry

エラーメッセージの通り、ldapに登録されているmysqlユーザがuidNumberが88で1000以下になっている。なのでうまくうごかないみたい。


shell> more /usr/local/etc/ldap.conf

pam_min_uid 1000

となっていたので pam_min_uid をコメントアウト。うまくいった。

apache httpdでldapを用いてbasic認証を行うときにユーザとかを制限する

apacheで.htaccessを用いてbasic認証を行うとき、認証可能なユーザを選べるようにしてみた。

AuthzLDAPAuthoritative off
AuthName "ldap ninshou dayoyo"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldaps://192.168.1.1/ou=People,dc=l2tp,dc=org?uid
Require ldap-user user1 user2
#Require ldap-filter !(cn=except_user)

この設定を行う上で、 ldap-filterを選択した場合、フィルターをクォートしてしまうとうまくうごかなかった。

http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html#requiredirectives

ApacheのBasic認証にLDAPを利用する

apacheのBasic認証にLDAPを利用しようとしてみた。

サーバはOpenLdap24 on FreeBSD, クライアントはApache22 on CentOS6.2。

今回の方法はBasic認証でアクセス制御をしたい箇所に.htaccessを設置してみた。


shell> more .htaccess

AuthzLDAPAuthoritative off
AuthName "ldap ninshou dayoyo"
AuthType Basic
AuthBasicProvider ldap
#LDAPVerifyServerCert off
AuthLDAPURL <a href="ldaps://192.168.1.1/ou=People,dc=example,dc=com?uid">ldaps://192.168.1.1/ou=People,dc=example,dc=com?uid</a>
Require valid-user

コレだとうまくいかない。500のInernal Server Errorが帰ってしまう。ユーザ名とパスワードの組み合わせがうまくいかないのかと思いきや、他の手段で認証を試すとうまく通ってる。

apacheのerror_logをdebugレベルまで引き上げてログを見てみた。


shell> more httd-vhosts.conf

…前略…

# ldaptest
<VirtualHost *:80>
ServerAdmin hogetan<a href="mailto:hogetan@l2tp.org">@l2tp.org</a>
DocumentRoot /home/hogetan/public_ldap
ServerName ldap.l2tp.org
LogLevel debug
ErrorLog /var/log/httpd/ldap.l2tp.org-error.log
CustomLog /var/log/httpd/ldap.l2tp.org-access.log combined
</VirtualHost>

…後略…

shell> tail /var/log/httpd/ldap.l2tp.org-error.log

[Tue Feb 28 09:43:23 2012] [debug] mod_authnz_ldap.c(393): [client 192.168.1.5] [29473] auth_ldap authenticate: using URL <a href="ldaps://192.168.1.1/ou=People,dc=sixsys,dc=info?uid">ldaps://192.168.1.1/ou=People,dc=sixsys,dc=info?uid</a>
[Tue Feb 28 09:43:23 2012] [info] [client 192.168.1.5] [29473] auth_ldap authenticate: user yubird authentication failed; URI /favicon.ico [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]
[Tue Feb 28 09:43:23 2012] [debug] mod_authnz_ldap.c(1105): [29467] auth_ldap url parse: `ldaps://192.168.1.1/ou=People,dc=l2tp,dc=org?uid', Host: 192.168.1.1, Port: 636, DN: ou=People,dc=l2tp,dc=org, attrib: uid, scope: base, filter: (null), connection mode: using SSL

なんかエラー出てる。Can’t contact LDAP serverとか言われてる。

いろいろ悩んで湯バード先生にヘルプを求めた結果、ldapsのsがいけないんじゃ無いか、ってことに。sslの証明書の検証が悪いのではないか、ということだ。今回のldapサーバはオレオレ証明書を利用しており、今までもldap.confなどでことごとく証明書の認証でコケた経験があった。

試しにldapsじゃない、ldapな待ち受けに接続にいくとすんなりつながった。

で、証明書の検証をしないようにするオプションを探して有効にしてみた。

http://httpd.apache.org/docs/2.2/mod/mod_ldap.html#ldapverifyservercert

このオプションで注意しなくてはいけないのは、.htaccessなどには記述できない、ということ。virtualhostディレクティブとかでもダメ、グローバルディレクティブじゃないとダメっぽい。


shell> grep LDAPVerify httpd.conf

LDAPVerifyServerCert Off

この設定を入れたらldapsでもうまくいった。

とにかくldaps+オレオレ証明書の場合には証明書の検証問題に注意しろ、ってことで。めでたしめでたし。

FreeBSDで不自然にcronメールが届いてた

FreeBSDを使っていたら不自然にcronの実行結果のメールが届いてた。


shell> more 80056.M80664P9205V005BI007FCAB0_0.aaaa.l2tp.org,S=1649:2,S
X-Spam-Checker-Version: SpamAssassin 3.3.0 (2010-01-18) on aaaa.l2tp.org
X-Spam-Level:
X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
TVD_SPACE_RATIO autolearn=ham version=3.3.0
Received: from bbbb.l2tp.org ([192.168.1.1])
(TLS: TLSv1/SSLv3,256bits,AES256-SHA)
by aaaa.l2tp.org with esmtp; Mon, 27 Feb 2012 03:14:12 +0900
id 00022ABF.4F4A7674.000023EF
Received: from bbbb.l2tp.org (localhost [127.0.0.1])
by host005.l3tp.org (8.14.4/8.14.4) with ESMTP id q1QIAPnh047625
for <hogetan@bbbb.l2tp.org>; Mon, 27 Feb 2012 03:10:25 +0900 (JST)
(envelope-from <a href="mailto:hogetan@bbbb.l2tp.org">hogetan@bbbb.l2tp.org</a>)
Received: (from <a href="mailto:hogetan@localhost">hogetan@localhost</a>)
by bbbb.l2tp.org (8.14.4/8.14.4/Submit) id q2EIA47579;
Mon, 27 Feb 2012 03:10:05 +0900 (JST)
(envelope-from yousan)
Date: Mon, 27 Feb 2012 03:10:05 +0900 (JST)
Message-Id: <201202261810.q2EIA47579@bbbb.l2tp.org>
From: <a href="mailto:hogetan@bbbb.l2tp.org">hogetan@bbbb.l2tp.org</a> (Cron Daemon)
To: <a href="mailto:hogetan@bbbb.l2tp.org">hogetan@bbbb.l2tp.org</a>
Subject: Cron <a href="mailto:yousan@unk">yousan@unk</a>  /usr/local/sbin/portversion -vL= > /home/yousan/var/portversion.`hostname`
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin>
X-Cron-Env: <HOME=/home/hogetan>
X-Cron-Env: <LOGNAME=hogetan>
X-Cron-Env: <USER=hogetan>

[Updating the portsdb <format:bdb_btree> in /var/tmp ... - 23289 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.. ..... done]

メールの内容は上記。見たところcronでの実行結果がメールで来ているようだ。でもこのメールはちょっと不審な点が。

というのも宛先のToになっている “hogetan@bbbb.l2tp.org” というアドレスは存在しないアドレスだ。それなのにメールが hogetan@l2tp.org 宛てに届いていた。bbbb.l2tp.org はMXレコードに登録されていない。まずは下記の点いついて調べてみた。

  1. ホスト “bbbb.l2tp.org” でcrontabの環境変数、MAILTOについて
  2. ホスト “bbbb.l2tp.org” で/etc/aliasesでのエイリアス状況
  3. “l2tp.org”ドメインのMXに割り当てられているホストでのaliases

上記について、すべての点において hogetan@l2tp.org へメールを送るような設定は見られなかった。1は設定が無かった。2はファイルはデフォルトでの設定だった。3についてすべてのaliasを見たがそれらしき設定は無かった。

にもかかわらず hogetan@l2tp.org 宛てにメールが届いてしまう。

試しにテストメールを送ってみた。


bbbb.l2tp.org> sendmail <a href="mailto:hogetan@bbbb.l2tp.org">hogetan@bbbb.l2tp.org</a> < mail.txt

当初は単にメールが送れないだけだったんだけど、しばらくして mailer daemon から返答が。よく見るとその戻り先はToが “hogetan@bbbb.l2tp.org” となっていたけれど、このメールも “hogetan@l2tp.org” に届いてしまった。なんかおかしい。

.cshrcとか.zshrcとかにMAILTOが設定されてそうな気がして改めてホームディレクトリをgrepを掛けてみた、ら、答えが出た。

.forwardファイルを設定してた。


shell> ls –lat .forward; more .forward

-rw-------  1 hogetan hogetan  16 Jan 26  2008 .forward
\hogetan@l2tp.org

しかも結構古い。コレが原因でした。