HTTP_RequestをHTTP_Request2に書き換える

PHP 5.4以降でE_STRICTによるメッセージが出るようになったこととHTTP_Requestがデサポになっていることから、ようやくHTTP_RequestをHTTP_Request2に書き換えてみることにした。
参考にしたサイトは[php][pear]HTTP_Request2のサンプル#1 : うえちょこ@ぼろぐ
互換性があるライブラリと思いきや、かなり非互換。
コンストラクタから違う。上記参考サイトとあわせて下記参考にしてみてください。
HTTP_Request
HTTP_Request HTTP_Request( [string $url = ”], [array $params = array()])
HTTP_Request2
HTTP_Request2 __construct( [string|Net_Url2 $url = null], [string $method = self::METHOD_GET], [array $config = array()])

logrotateを使う

ログファイルによってディスクフルにしないようにするためには、logrotateを利用するわけだが、一部ハマったことがあったので、記録しておく。
1.logrotateを実行すると怒られる
$ sudo /usr/sbin/logrotate /etc/logrotate.conf
error: skipping “(ログファイルのパス)/logs/debug.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.
どうやらログが記録されているフォルダの権限が、rootユーザではないことが原因のようだ。(腑に落ちない点はあるが。。。。)
設定ファイルにsu設定を行っておき、ログの書き込みを行うことが可能なユーザー、グループを指定する。
$ cat /etc/logrotate.d/hogehoge
(ログファイルのパス)/logs/debug.log {
daily
rotate 7
missingok
notifempty
create 0664 apache apache
su apache apache
nodateext
}
2.ローテートされたファイルに日付が付加される。
昔は、ローテートされたファイルに数字が付加されていたような気がしたが、Cent OS 7では、ファイル名-YYYYMMDDになっている。
見やすいのだが、プログラムでログファイルを自動解析しようとするといささか不便である。
/etc/logrotate.conf
に dateext が設定されていることが原因。これをコメントアウトするか、個別のログで解除したい場合には、上記例のように nodateext を設定すればよい。
参考サイト:
ログローテートしない – 揮発性のメモ
logrotate パーミッション エラー (r271-635)

Windowsで”.”から始まるファイル、フォルダを作成する

「第2回 Bluemix × SoftLayer ユーザーグループ合同勉強会@北陸~IBMクラウドサービスを使って遊ぼう~」に昨日参加してきました。
ハンズオンは2回目の参加ですが、なかなか勉強になります。
.htaccess とかWidowsで作成しようとすると
「ファイル名を入力してください」
と怒られる。
入力してるよー!と突っ込みながら、泣く泣く拡張子をつけてそれからリネームしていた。
ところが、最後に”.”を付けるとリネームせずに作成できることが判明。
“.htaccess”を作りたければ、”.htaccess.”と入力してファイルを作ると作成できる。
フォルダも同じ。
もしや、Ctrl+Escなみの隠し技?それとも当たり前?

RTX1200でPPTP接続できない

クラウドサーバから自宅のネットワーク機器を監視するの続編。
WZR-HP-G301NHでPPTPを実現したものの、毎日なぜか切断される事象が発生し、都度クライアント側から接続していた。
今考えれば、MTUの設定値があっていなかったのだろうと推測されるが、当時は、常時接続し続けられるだけのスペックが不足しているのだろうと勝手に考えてしまったことと、SNMPでの状態監視ができないことため、N1200(RTX1200)をネットオークションで落札して試すこととした。
しかし、実際にやってみたところ、Cloudn(PPTPクライアント側とする)とM1200(PPTPサーバ側とする)でPPTPを接続しようとしたがエラーが出てはまった事例。
N1200で表示されたエラーメッセージ
TUNNEL[??] PPTP connection is rejected: (PPTPクライアントのIPアドレス)
結論としては、PPTPはanonymousで登録する必要があり、tunnnelとbindする必要がある。(GUIからは登録できない?)
pp select anonymous
pp bind tunnel1
検証内容
$ pppd debug call (PPTP定義名) updetach
using channel 9
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
sent [LCP ConfReq id=0x1 ]
anon fatal[open_callmgr:pptp.c:509]: Could not launch call manager after 3 tries.
Script pptp matsuda.biz –nolaunchpppd finished (pid 3100), status = 0x1
Modem hangup
Connection terminated.
PPTPクライアント側でTCPダンプした結果は下記のとおり
$ sudo tcpdump -i eth0 -X port not 22 and host (PPTPサーバ側IPアドレス)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:40:33.989971 IP (PPTPクライアント側IPアドレス).45520 > (PPTPサーバ側IPアドレス).pptp: Flags [S], seq 2347880000, win 29200, options [mss 1460,sackOK,TS val 254809516 ecr 0,nop,wscale 6], length 0
21:40:34.004610 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45520: Flags [S.], seq 2406366252, ack 2347880001, win 65535, options [mss 1414,nop,wscale 1,nop,nop,TS val 25870246 ecr 254809516], length 0
21:40:34.004637 IP (PPTPクライアント側IPアドレス).45520 > (PPTPサーバ側IPアドレス).pptp: Flags [.], ack 1, win 457, options [nop,nop,TS val 254809530 ecr 25870246], length 0
21:40:34.005496 IP (PPTPクライアント側IPアドレス).45520 > (PPTPサーバ側IPアドレス).pptp: Flags [P.], seq 1:157, ack 1, win 457, options [nop,nop,TS val 254809531 ecr 25870246], length 156: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(AS) BEARER_CAP(DA) MAX_CHAN(65535) FIRM_REV(1) HOSTNAME(local) VENDOR(cananian)
21:40:34.029304 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45520: Flags [F.], seq 1, ack 157, win 32768, options [nop,nop,TS val 25870248 ecr 254809531], length 0
21:40:34.029583 IP (PPTPクライアント側IPアドレス).45520 > (PPTPサーバ側IPアドレス).pptp: Flags [F.], seq 157, ack 2, win 457, options [nop,nop,TS val 254809555 ecr 25870248], length 0
21:40:34.043614 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45520: Flags [.], ack 158, win 32768, options [nop,nop,TS val 25870249 ecr 254809555], length 0
21:40:35.028270 IP (PPTPクライアント側IPアドレス).45522 > (PPTPサーバ側IPアドレス).pptp: Flags [S], seq 1008276158, win 29200, options [mss 1460,sackOK,TS val 254810554 ecr 0,nop,wscale 6], length 0
21:40:35.042989 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45522: Flags [S.], seq 3144760390, ack 1008276159, win 65535, options [mss 1414,nop,wscale 1,nop,nop,TS val 25870349 ecr 254810554], length 0
21:40:35.043016 IP (PPTPクライアント側IPアドレス).45522 > (PPTPサーバ側IPアドレス).pptp: Flags [.], ack 1, win 457, options [nop,nop,TS val 254810569 ecr 25870349], length 0
21:40:35.044580 IP (PPTPクライアント側IPアドレス).45522 > (PPTPサーバ側IPアドレス).pptp: Flags [P.], seq 1:157, ack 1, win 457, options [nop,nop,TS val 254810570 ecr 25870349], length 156: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(AS) BEARER_CAP(DA) MAX_CHAN(65535) FIRM_REV(1) HOSTNAME(local) VENDOR(cananian)
21:40:35.067673 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45522: Flags [F.], seq 1, ack 157, win 32768, options [nop,nop,TS val 25870352 ecr 254810570], length 0
21:40:35.067911 IP (PPTPクライアント側IPアドレス).45522 > (PPTPサーバ側IPアドレス).pptp: Flags [F.], seq 157, ack 2, win 457, options [nop,nop,TS val 254810594 ecr 25870352], length 0
21:40:35.082015 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45522: Flags [.], ack 158, win 32768, options [nop,nop,TS val 25870353 ecr 254810594], length 0
21:40:36.051778 IP (PPTPクライアント側IPアドレス).45524 > (PPTPサーバ側IPアドレス).pptp: Flags [S], seq 1750809907, win 29200, options [mss 1460,sackOK,TS val 254811578 ecr 0,nop,wscale 6], length 0
21:40:36.066305 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45524: Flags [S.], seq 2886155361, ack 1750809908, win 65535, options [mss 1414,nop,wscale 1,nop,nop,TS val 25870452 ecr 254811578], length 0
21:40:36.066339 IP (PPTPクライアント側IPアドレス).45524 > (PPTPサーバ側IPアドレス).pptp: Flags [.], ack 1, win 457, options [nop,nop,TS val 254811592 ecr 25870452], length 0
21:40:36.067176 IP (PPTPクライアント側IPアドレス).45524 > (PPTPサーバ側IPアドレス).pptp: Flags [P.], seq 1:157, ack 1, win 457, options [nop,nop,TS val 254811593 ecr 25870452], length 156: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(AS) BEARER_CAP(DA) MAX_CHAN(65535) FIRM_REV(1) HOSTNAME(local) VENDOR(cananian)
21:40:36.090389 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45524: Flags [F.], seq 1, ack 157, win 32768, options [nop,nop,TS val 25870454 ecr 254811593], length 0
21:40:36.090637 IP (PPTPクライアント側IPアドレス).45524 > (PPTPサーバ側IPアドレス).pptp: Flags [.], ack 2, win 457, options [nop,nop,TS val 254811617 ecr 25870454], length 0
21:40:36.090709 IP (PPTPクライアント側IPアドレス).45524 > (PPTPサーバ側IPアドレス).pptp: Flags [F.], seq 157, ack 2, win 457, options [nop,nop,TS val 254811617 ecr 25870454], length 0
21:40:36.105109 IP (PPTPサーバ側IPアドレス).pptp > (PPTPクライアント側IPアドレス).45524: Flags [.], ack 158, win 32768, options [nop,nop,TS val 25870456 ecr 254811617], length 0

FLAC形式

Free Lossless Audio Codecの略。
可逆圧縮音声フォーマット形式。私が持っている古いAVアンプRX-V475でもサポートされているので、割と普及しているのかも。
恥ずかしながら今まで知りませんでした。CDをリッピングするにはMP3かwmaかなぁみたいな。。。。
ただ、Windows Media Playerではリッピング形式として選択できないので、別のアプリケーションが必要。

mbox形式のデータをMaildir形式に変換する

サーバ移行作業中に誤ってメールをmbox形式で/var/spool/mail/(username) で受信してしまっており、Maildir形式に移行する必要が発生した。
優れたツールがあったので、紹介しておく。
wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
cd /usr/local/bin/
chmod u+x perfect_maildir.pl
./perfect_maildir.pl /home/(username)/Maildir < /var/spool/mail/(username) >> /tmp/migrate-maildir.log 2>&1
root権限での実行を想定しています。
上記を実行すると、/tmp/migrate-maildir.log には、
Inserted NNN messages into maildir /home/(username)/Maildir/ in N seconds
というログが表示され、実際にNNN件のメールデータが移行されています。

Cloudnで再チャレンジ

クラウドサーバから自宅のネットワーク機器を監視するの続編。
AmazonEC2もWindows Azureもデータ転送量に課金されてしまう点が問題であることと、やはり仮想マシンの運用費が高い。
月額1000円以上負担しても問題ないのであれば大丈夫だが、そうでなければ候補から外れる。
いろいろ調べてみた結果NTTコミュニケーションズが提供しているCloudnというサービスを利用してみることとした。
Computeというサービスで構築できる仮想マシンの最小構成(プランvQ/1vCPU, 0.5GB RAM, CentOS, 720時間)であれば、月額450円(税抜)とGMOクラウドよりも安い。
また、今なら12000円分無料クーポンもついていて試すには十分だ。
仮想環境は、GMO ALTUS BASICと同様にCitrix Cloudを採用しているので、GMO ALTUS BASICを使用していれば、コンソールの使用に戸惑うこともない。
さらにGMO ALTUS BASICでは時々英語環境になってしまう不具合?があるが、Cloudnではそんなこともなく、バージョンが新しいためか一部使いやすくなっている。
さて導入環境についてだが、GREパケットも通るのですんなりとPPPTPサーバと接続することが出来た。
※一部アスタリスクでマスクしています。
#pppd debug call ******* updetach
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/pts/2
sent [LCP ConfReq id=0x1 ]
rcvd [LCP ConfAck id=0x1 ]
sent [LCP ConfReq id=0x1 ]
rcvd [LCP ConfAck id=0x1 ]
rcvd [LCP ConfReq id=0x1 ]
sent [LCP ConfAck id=0x1 ]
rcvd [LCP EchoReq id=0x0 magic=0x*******]
sent [LCP EchoRep id=0x0 magic=0x*******]
rcvd [CHAP Challenge id=0x1 <*******>, name = “*******”]
sent [CHAP Response id=0x1 <*******>, name = “*******”]
rcvd [CHAP Success id=0x1 “Welcome to G301NH.”]
CHAP authentication succeeded: Welcome to G301NH.
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 ]
rcvd [IPCP ConfReq id=0x1 ]
sent [IPCP ConfAck id=0x1 ]
rcvd [IPCP ConfNak id=0x1 ]
sent [IPCP ConfReq id=0x2 ]
rcvd [IPCP ConfAck id=0x2 ]
local IP address *******
remote IP address *******

クラウドサーバから自宅のネットワーク機器を監視する

自宅のネットワーク機器が正しく動作しているかどうかをチェックするためにWebサーバ死活監視ウィジェットを入れているが、もっと細かく監視したいと思い、クラウドサーバに監視ソフトウエアZabbixをインストールしてVPNで自宅ネットワークに接続しネットワーク機器を監視することとした。
自宅サーバ内にZabbixを入れた方が安全なネットワークを構築できる可能性はあるが、サーバ自体が死んでいては意味がないことと自宅とインターネットとの疎通が取れない場合でも外部からチェックできるようにすることは有用であるとの判断である。
採用したクラウドサービス:GMO Cloud ALTUS(Basic)
ミニサーバのみであれば月額500円で利用できる&通信量による課金が発生しないのがポイント。
採用した仮想マシン:CentOS7
PPTPサーバ:WZR-HP-G301NH
参考サイト:Zabbix 3.0をCentOS 7にインストール
(結果)
参考サイトの通りすんなりZabbix 3.0導入は完了した。Zabbix 2.2よりも使いやすい感じがする。まだ使いこなせてないが・・・・
VPNについてはPPPTPサーバで構築することとしたが下記の通りとなってしまい、なぜがGREパケットが通らず。。。。現在サポート問い合わせ中。
※一部アスタリスクでマスクしています。
# pppd debug call ******* updetach
using channel 2
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
sent [LCP ConfReq id=0x1 ]
(何回か続く・・・)
sent [LCP ConfReq id=0x1 ]
LCP: timeout sending Config-Requests
Connection terminated.
Modem hangup
Waiting for 1 child processes…
script pptp ******* –nolaunchpppd, pid 1565
Script pptp ******* –nolaunchpppd finished (pid 1565), status = 0x0
—-
14:30 追記
GMOクラウドのサポートセンターより回答あり。Basicシリーズでは対応していないとのこと。。。
残念。。。。Amazon EC2かWindows Azureでやってみることにします。。。
ただ、Zabbix3.0は監視パケットを暗号化できるようになったので、安価な外部監視サーバ導入の目的では上記構成は十分に利用できると思う。