!!!2006年02月の駄文 !2006年02月28日……わかったぁ!!! 夜の3時過ぎまでApacheやCGIと格闘して、やっとわかりました。 詳しくは技術的雑談に書く予定ですが、新サーバにデータを移転させてから何をやっても「'''Premature end of script headers'''」というエラーが出てきてしまうという問題に直面していました。 でも、不思議なのは、トップコンテンツに使用しているFreeStyleWikiは問題なく動くのに、箱庭や掲示板、はたまた、HTTPヘッダーと1行本文だけ出力するようなhelloworld.cgiたいなものまで動かなくなってしまったことです。 test.phpとかも動いてたんですけどねぇ…。 Premature end of script headersをGoogleで検索してみると、まあ、それなりにHitします。 参考:http://www.google.com/search?hl=ja&q=Premature+end+of+script+hea&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja で、どこも口を揃えて言っているのが、 *Premature end of script headersとは、ApacheがCGIに対して、「HTTPヘッダーがおかしいぞ!」といっている結果エラーである。原因は表していない。 *CGIの先頭の#!/usr/bin/perlが実在のperlとあっていないと発生する。 *perl5.8以降のUnicodeサポートの関係で、文字化けしているとヘッダーを理解できなくて出る。 *#!/usr/bin/perlの後に「--」をつけると出なくなる *CGIの最初のほうで「Content-: text/html\n\n」を書く前に何か他のものを出力してしまっている。もしくは出力していない。 *Apache2.0は安定していないので使わないほうがいい。Apache1.3系に戻したら出なくなった。 なぁ〜んてレベルのまじないレベル。(汗) でも、他にHitしなかったのでその辺を丹念に調べていたのですが…。 *http://www.himajin2001.com/ は大丈夫 *http://www.himajin2001.com/~xxxxx/ はダメ という事に気が付いた。 '''そっか! suExecかぁ!!!''' そういえば./configureするときに「--enable-suexec」って入れてあったよ! そうと決まればここを見る。 http://httpd.apache.org/docs/2.0/ja/suexec.html これによると、suexecはセキュリティーの為に実行ユーザのUIDやGIDが設定した値よりも大きいかとか、実行されるCGIのディレクトリがOtherとGroupに対して書込み禁止にしてあるかとか、実行するCGIでOtherの実行権限がONになっていないかだとか、イロイロ調べており、その結果、suexecで実行する条件を満たしていない場合は「'''Premature end of script headersになる場合が多い'''」らしい。 ……すんません、全くノーマークでした<suexec んだもんで、今回の場合はたまたま./configureで--with-suexec-logfile=xxxxしてあったので、suexecの失敗Logが出ていましたよ。 曰く、 uid: (1014/hakoniwa) gid: (500/500) cmd: test.cgi directory is writable by others: (/xxxxxxxxx/hakoniwa/public_html/cgi-bin) → ディレクトリがOtherから書き込める権限だからダメだよ とか、 uid: (1000/sakatuba) gid: (10/10) cmd: index.cgi cannot run as forbidden gid (10/index.cgi) → GIDがsuexecをコンパイルした時の設定より小さいからダメだよ とか、 ボロボロ出ておりました。 注目すべきは、この辺のsuexecの事情は普通のerror_logには全く出てこないのです。 ただ「Premature end of script headers」とだけ出てくるわけです。 (そりゃぁ、そうだよね。suexecできないんだから「できねえよ!」ってエラーメッセージかダンマリかのどちらかなんだから、HTTPヘッダーのわけが無い。) ってなわけで、Premature end of script headersの理由を知りたい方、是非suExec周りをチェックしてみてください。 perlのCGIに無駄なbinmode〜を書いたり、use encoding;やuse Encode;のかたまりを書くよりもよっぽど早く原因にたどり着けます。 さ、あとは新しいDNS情報が日本まで浸透してくるのを待つばかりだな(爆) {{comment}} ---- !2006年02月27日……VPS7.net御臨終 去年の11月からですがお世話になっていたVPS7.netが今日の昼過ぎに突然アクセスできなくなりました。 まあ、以前から倒産の予告が出ていたので、アクセス不能になったときに「あ、逝ったんだなぁ」と思いました。 かなり以前からVPS7.netのトップページは死んでましたし、サポートに問い合わせをしても返事がなかったですから……。 FreeBSDのVirtual Private Serverという私には貴重なサービスを、たった月額2980円で提供してくれていたのに…残念です。ご冥福をお祈りいたします。 で、直後からドメインの設定の完全移行をしようと思っていたのですが……。 何か、Nameserverが昔のDNSにロックされたまま動かなかった。 新しいホスティング会社と何度か連絡を取って、ガチャガチャと設定をいじくっているうちにいつの間にか新しい設定が生きた。 うーん、なんだったんだろう?? しかしまあ、親DNSがスイスなもんで、日本のDNSで新しいIPが有効に正引きできるようになるまでにはちょっと時間がかかるかもね。 そんなわけで、今のうちに最後のバックアップを新居に引越し中。 これが見られたということはDNSへ新しいアドレスが配信されてきたという事です。 これからもよろしゅう。 {{comment}} ---- !2006年02月25日……Trackback SPAM キター――――(゚∀゚)―――――その2 って、昨日SPAM TBを45件もザクザク消したんだけど、今日さっき見たらまた50件以上溜まってた。しかも2005年12月のページにだけ。 何なんだろう?? FreeStyleWikiのTrackbackはTrackbackだけ別ページになるようにしてあるので、それを消していたら消すが早いかまたSPAMが打ち込まれた。 あまりにもウザいので2005年12月のページのトラックバックは一時停止しました。 どうせそんなにセンセーショナルなことが書いてあるわけでも……ないから……orz 新しいサーバでWebMailの設定がうまく行かない。 以前と違ってUserDBではなくPAM認証にしているのだが、それがちゃんと動いていないと言う事か? うむむ。 {{comment}} ---- !2006年02月24日……Trackback SPAM キター――――(゚∀゚)――――― [[2005年12月の駄文|駄文-2005年12月]]でFreeStyle WikiにTrackback Pluginを入れてみたんだけど、やっと(?)Trackbackがきました!! ……と、思ったら案の定SPAMだったよ。orz ってなわけで、クソ商売の片棒担ぐのは癪なので速攻で削除。URLは消してタイトルだけ晒してやると。 *50 cent window-shopper → MP3屋らしい(67.19.207.228) *green day dookie → 上と同じIP *abba s.o.s mp3 → 上と同じIP *black eyed peas - hey mama → 上と同じIP *the free project voyeur → (85.128.128.99) *horse suck → (213.235.135.105, 213.235.135.106) *public flashing → (81.2.198.67) *asian teen → 上と同じIP *incest porn → 上と同じIP *texas department of public safety → 上と同じIP *horse fucking → 上と同じIP *89 → 上と同じIP *teen lesbian → 上と同じIP *horse fucking → 上と同じIP *lesbian orgy → 上と同じIP *beach voyeur → (213.235.135.105, 213.235.135.106) *fucking machines → (85.128.128.99) *hot teens → 上と同じIP *brutal dildo → 上と同じIP *bridal lingerie → 上と同じIP *scat pics → 上と同じIP *mature moms → 上と同じIP *zoo sex → (81.2.198.67) *femdom → (213.235.135.105, 213.235.135.106) *hidden cameras girls bathroom → 上と同じIP *latina booty → 上と同じIP *sex with animals → 上と同じIP *milfhunter → (85.128.128.99) *bondage → 上と同じIP *asian shemales → 上と同じIP *adult cartoons → 上と同じIP *black lesbians → 上と同じIP *am i pregnant → 上と同じIP *young models  ……以下、もうどうでも良いのでタイトルだけ *rape stories *beastiality stories *shemale cum *public thongs *kim possible hentai *thick girls *wet panties *dog fucking *young nudes *hairy chest *hairy women ふぅ〜〜〜。以上45 Trackback(笑) 大人気ですな。 まあ、今日帰ったらIPでマスキングして弾き飛ばすようにするか(爆) ここにこんなタイトル晒しておいたら、またこれで検索して飛んでくるアホが増えるかね?それともGoogleのNGワードにでも引っかかって八分にされるかね? {{comment}} ---- !2006年02月21日……移転難航中その2 で、前の続き。 apacheでCGIがうまく動かなかったのは、 *旧サーバでは使っていなかったsuExecを使うようになっていたから。(本当は旧サーバでも使っていたのかもしれないけど…。) *configureで指定したuserとhttpd.confで指定していたapacheの実行ユーザが違うからsuexecが起動しなかった。 *ユーザのhome directoryは全部chmod 700だったので、suexecする前のapacheが起動するCGIの存在を確認できなかった。せめてchmod 711でないとダメっぽい。(こんなことどこにも書いてなかったんだけど、そうだったんだから仕方ない。public_htmlを使いたいユーザはこれぐらいはガマンしなさいってことかぁ?) *apacheがCGIによって返されるHTTPヘッダーにやたらとうるさくなってるから。漢字コードに対して融通が利かなくなったらしい。というより今までがいい加減すぎたのか? などなど。一つずつ潰していったけど、一番古くから使っているminiBBSがどうしても動かない。 まだ「どこかのパーミッションが間違っている」という可能性は捨てきれないが、いい加減に同じBBS CGIを5年以上使い続けるのもアレなので、この際入れ替えようかと検討中。 そんなわけでapacheはとりあえずOK。 Mailサーバはそろそろsendmailに挑戦してみようかとも思ったのだが、メールだけはlostするのが怖いので、長年(?)使い慣れたqmail(+vida)にする。 が、いつもはスイスイのパで終わるコンパイルが途中でひっかかる!! 「ぐげっ!qmail、お前もか!!」 とか思ったが、何のことは無い、Linux上での既知の問題。 本家にパッチが落ちているので適用したら何事もなくコンパイルが通った。 しかし、いざ調べてみたら、himajin2001.comのドメインが新しいサーバに移ってこない。 whoisで見てみると「locked」になっているので、どこかでドメイン移転手続きが詰まっているらしい。 仕方が無いので旧サーバの/var/qmail/control/smtprouteに「himajin2001.com:新しいサーバxxx.xxx.xxx.xxx」と書いて、SMTPレベルでフォワードしてもらう。 で、新サーバのほうは既にhimajin2001.comをlocalとして処理するように設定してあるので、MailBox(正確にはMaildir)は新サーバに移った。 vidaの設定も終え、APOPでメールが取れるようになったのを確認。 まだwebmail用のPOP穴はあけてないけどね。 で、ついでなので今まで使っていたSquarralMailじゃなくて、sqwebmailというMaildir対応のWeb mailを入れてみようとしたのだが、ログイン画面までは出るもののどうしても認証が通らない。 仕方が無いので一時撤退。 サーバにデフォルトで入っていたOpenwebmailはMailBoxしか対応していないのでqmailではボツ。結局1度も使わないままUninstallされました。合掌。 そんなわけで、やっぱりSqarralMailにするしかないわけだが、コレ使うには、PHP4、IMAP、認証daemonとInstallしなくちゃいけないので、結構メンドウだったりする。 FreeBSDの場合はportで一発だったのに…。 サーバはFedoraCore'''2'''ベースなのでrpmが少ない少ない…orz 仕方なくphp-4.4.2からInstallを始める。(PHP5はまだ得体が知れないので却下。) あ、MySQLのincludeとか要求しやがる。 後から入れようと思っていたけど、WebMail動き始めてからPHP再コンパイルはなんとなくイヤなので、先にMySQL5.0.18をInstall始める。シクシク。 で、php4を入れようとしたら、実はphp4.3.10がCLIのみでInstall済みだった。でも、mod_php4だけを作って入れてよいものかわからないし、そもそもmod_php4だけをコンパイルする方法がわからないので、結局全部入れ替え。アホっぽいと思っているのは私だけではあるまい。 おなじみにCourier-imapdを入れようとしたら、Courier-authlibを入れろだの、rootでコンパイルするなだの、先にユーザ作れだのconfigureがうるさい。 トドメは、「お前はRedHat使っているから、コンパイルなんてしないで誰かの作ったrpm使え。どうしてもソースからコンパイルしたければ--with-redhatオプションつけろ!」と来たものだ。 '''貴様ぁ〜〜〜!!それでも軍人かぁ!!''' いや、絶対軍人じゃないっす。軟弱モノですから。 とりあえず山のようなconfigureのオプションの後に「make depend;make;make install;make install-configure」とブチ込んでPCつけっぱなしで布団に入りました。 ……ってな調子が2晩も続いたから非常に眠いっす(+_+) {{comment}} ---- !2006年02月20日……移転難航中。 もうDNSの移転も終わったので、そろそろ気合を入れて移転作業をしようとしているのですが、平日はアホみたいに忙しくてとてもじゃないけど家に帰ってきて作業できないです^^; ってか、会社からだとSSH止められてるから入れないし…。 qmail+vidaは昨日の時点でOKになったので、旧サーバはフォワードにして移転完了。 今後私からのメールはIP辿るとスイスから発信されているように見えるかもしれないけど、SPAMじゃないですから!! フィルターとかで弾かないように(笑) 困ったのはapache君。なぜか全然言う事を聞いてくれない。 まずは普通にInstallしてみた所、FedoraCoreのディレクトリ配列規則から全然ずれちゃってカッコ悪そうなのでボツ! 次に、FedoraCoreのapacheのsrpmを拾ってきて.specだけ差し替えてapache-2.0.55のrpm作ろうとしたんだけど、わけのわからないパッチが大量に入っていて挫折。 個々のパッチ見てみたけど、何をやっているのかサッパリわからない。 (単にapacheの前のバージョンからのパッチを残してあるだけなの??) で、.specファイルから./configureのオプション部分だけを参照して手動でインストールを実行。 すると今度は全部のモジュールをsharedでコンパイルしようとしてくれているみたいでコンパイル通らず。 その辺をいじって、モジュール設定を「Most」にしたところ、何となくまともっぽいインストールになりました。 でも、まだDocumentRootの下のディレクトリはちゃんと動いてくれるのだが、個々のユーザディレクトリのpublic_htmlが403になってしまう!! ApacheのsuExecのマニュアルを見ると、apache本体のユーザ権限で、そのsuExecされる先のファイルの存在が確認できてからsuexecされるみたいなことが書いてある。 ってことは、とりあえずディレクトリにchmod +x してあげればいいってこことかな?? ……と、してみた。とりあえずpublic_html以下の普通のhtmlは表示されるようになったが、CGIは起動しない。 {{comment}} ---- !2006年02月12日……久しぶりの三浦半島 多分、結婚して以来ぐらいのご無沙汰で三浦半島にドライブに行きました。 本当は観音崎京急ホテルのスパで「岩盤浴」をしてこようという予定だったんですが、着いて駐車場に入るなり、「女性は90分待ちなんですが…」と言われ、混雑と行列がキライなヘタレ夫婦はアッサリと退散。 ここまで来たついでに三崎口の方に向かいました。 私はすっかり忘れていましたが、 「あ、ここはプロポーズされた場所だよ。」 と突然言われたのは驚きました。 場所はあえて伏せますが、ここだったっけ……? 二人で来たことがあったのは覚えていたけど、プロポーズだったのかは……(汗) まあ、多分はっきりさせない方がいい事も世の中にはあるっていうことで。 野比海岸はまだ嫁さんとちゃんと付き合う前に初めて二人で来た場所。 結構寒かったので次の日、私はのどを壊した記憶が(笑) そんなこんなで、三崎口港を越えて城ヶ島に行って、マグロ丼を食べて、三崎口京急ホテルの立ち寄り湯に行ってきました。 マグロ丼食べている時には窓の外に雪がちらついたりしてたけど、風呂から上がったらすっかりと晴れていました。 結婚して引っ越して、久々の「海」でした。 前はもっと近い気がしてたんだけどね〜。 {{comment}} ---- !2006年02月08日……スイス ってなもんで、引越し先のレンタルホスティングサービスにスイスの会社を選びました。 別にスイスが良かったわけでは無いのですが、安くてよさそうなVirtual Private Serverサービスを選んだらたまたまスイスの会社だったわけで。 今日からまたまた引越し作業ですが、今度のホストはFedoraCore2とのことで、FreeBSDとは勝手が違うなぁ…。大丈夫かな?CGIとか。 MTA(sendmail)とかhttpd(Apachec2)とか、割と最初からちゃんと設定されているし、Web経由のコントロールパネルで大概のことはできるようなので、これがどれぐらい使えるのか試してみます。 ちなみに、VMwareServer Beta、入手しました。 早速ほんのちょっとだけ試してみたけど、VMwarePlayerと大して変わらない感じ。 でも、VM設定の作成や仮想ディスクの作成も(当たり前だけど)できるし、「SnapShot」なんてボタンもあるので、もしかして使えるのかな? (ポチッと押して、画面のイメージショットが撮れるんだったりしたら大爆笑だけど。) 自宅サーバとかでも機会があったら試してみたいです。 {{comment}} ---- !2006年02月06日【その2】……洒落にならん!!! ここhimajin2001.comを置かせてもらっているレンタルサーバ屋さんが倒産するとのメールが来た!! '''まじっすか?!?!''' 急いで自宅にサーバを立ち上げ、レンタルサーバ上のファイルをバックアップした。 で、自宅サーバから定期的にcronで吸い上げるように設定しました。 これでとりあえずデータの完全消失は防げる模様。 ってか、ここのサーバ、バーチャルプライベートサーバなのに月々2980円だったんだよなぁ…。 とってもお安かったのに……orz 残念。(T_T) 他を探さないとならないんだけど、Server side Java置いてあるレンタルサーバですら探すの大変なのに……。 全くシャレにならないです。 とりあえず、ある日突然ここが見えなくなったら、「あ、次のサーバ探すのに失敗したな」と思ってください。 念のために緊急避難所もブックマークしておいて頂けると、復活した際に便利です。 {{comment}} ---- !2006年02月06日……すっかり2月 Yahoo!発、「138万人が選んだラーメン」真骨頂。 ……そんなに美味しくなかった。汁はいわゆる「家系」のこってり感が良く出ていたけど麺が負けてる感じ。 所詮カップラーメンか。 週末にauの新しい携帯W41CAに機種変更しに行ったけど、置いてなかった。 パンフレットには「NEW」って書いてあって、NEWじゃなくて@「近日発売予定」になっていた機種も別にあったからもう売り出ししているのだと思ったら、2月10日発売予定との事。 まあ、家電では良くあることだけどさ、それでいいの?KDDI、CASIOさん? 腹いせに、「Head First デザインパターン入門」を購入。 これがムチャムチャ面白い!! 今まで20年以上プログラムいじってきたけど、10年前にこの本読んでいたら人生変わっていたかもしれない。 万年行き詰まり状態の箱庭の設計も何とかなりそうな気さえしてしまう。 これはそのうち自分の備忘&外からの参照用に技術的雑談にでも載せていこうと思う。 デザインパターンって偉大です。 日曜日に次期箱庭の設計をした。 近日稀に見るほどかなり集中して時間が取れたので大分はかどった。 今まで行き詰っていたのは、DBのたいした経験が無いのにData Orientedで設計をしていたからかな? よくよく考えると、ロジックを先に組んで、HibernateとStrutsに適用できるようなアダプタを書けばよかったんだね。 なるほど。 特にJavaを始めてから「継承フェチ」になっていた私としては目からウロコが落ちる思いです。 早く全部読もうっと。 忘れちゃいそうなのでメモ Javaにおいて、実行時に動的なPluginの読み込みなどを行うためには、 プラグインの置き場として指定したディレクトリを検索し、.jarファイルを見つけ、 その.jarファイルを指すjava.net.URLインスタンスを作成し、URLClassLoaderに 食わせて、ClassLoader.find()で探すしかないみたい。 (例えば、「Package内のClass一覧を取得する」みたいな方法はないらしい。) また、.jarがわかればjava.util.jarパッケージを使って.jarファイルを解析し、 必要とするClassがあるかを確認できる。 何とも原始的だけど今の所仕方がないらしい。 いや、ってか、プラグインを追加したりアップグレードした後に再起動を求めるあたり もしかしてEclipseですら同じようにやっているのかもしれない…(推測) {{comment}} ---- {{trackback}} [[新・Tsubasa's日記(駄文)]]に戻る