Home > Archives > 2009年10月 Archive

2009年10月 Archive

ぱんつ

近所の本屋は新刊の取りそろえが悪い!
そのわりにアマゾンで1ヶ月待ちの本が置いてあったりする。

「ぱんつ」大全

執拗におすすめしてくるのでぽちってみた。
そろそろPoserを7から8にバージョンアップさせて遊ぼうかと思いまして。資料として買っておこうかなと。
まぁ資料としてはイマイチでしたが・・。

後は近所の本屋に置いてあったので↓を。

プラナス・ガール 1 (ガンガンコミックスJOKER)  ちょく! 1 (ガンガンコミックスONLINE)

プラナス・ガール

合格発表の時に出会った一人の少女に一目惚れした槙。入学して偶然にも同じクラスになったがその少女はなんと男だった!! 果たして槙の恋の行方は!?

のほほんとしたそっち系ではない普通に面白いマンガです。

ちょく!

美少女ゲーム大好きで友達のいない高校生:水橋直は何故か男子トイレにいた芹花という女の子に出会う…。直に一目惚れしてしまった芹花は鼻血を出しながら告白するのであったが…。芹花の暴走っぷり、流血っぷりがもの凄い…!! 大流血ラブコメディー!!(オモシロアイテム付き)

色々ぶっとんでるマンガでした。ヒロインが普通にう○こ言います。バレンタインう○ことかシュールすぎる・・。 

両方ともスクエニ出版らしいのですが、スクエニの本こんなんばっかりだな!
・・・面白かったです(*´∀`)

あとはソウルイーターとかファイブとか。

ついでにAmazonで色々みてたら、今なら普通に買えるみたいですよ。ラブプラス。

ラブプラス

Memcached1.4.2をx86_Solaris10でビルドする

libevent-1.4.12とmemcached-1.4.2の組み合わせでビルド環境は↓のような感じです。

$uname -a
SunOS tamsvr11 5.10 Generic_137138-09 i86pc i386 i86pc Solaris

$gcc -v
/usr/local/lib/gcc/i386-pc-solaris2.10/3.4.6/specs から spec を読み込み中
コンフィグオプション: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++,f77
スレッドモデル: posix
gcc バージョン 3.4.6

libeventは普通にconfigureしてgmake; gmake installで通ります。

memcachedは-pthreadなんてオプション知らないよ!怒られます。というわけで怒られないようにするには3種類の方法があります。1つはGCCを使わない(ぉぃ)。2つめはconfigure時に「--disable-coverage」をつける。3つめはMakefileの-pthreadを-pthreadsに置換する。(最後にsがついているのが違いです)

2番目のやり方だと以下のような感じになります。

./configure --prefix=/export/home/tamtam/service/memcached-1.4.
2 --with-libevent=/export/home/tamtam/service/libevent-1.4.12 --disable-coverage
gmake
gmake install

3番目のやり方だと以下のような感じになります。

./configure --prefix=/export/home/tamtam/service/memcached-1.4.
2 --with-libevent=/export/home/tamtam/service/libevent-1.4.12
perl -i -p -e "s/-pthread/-pthreads/g;" Makefile
gmake
gmake install

本当はLDFLAGSに-Rxxxとか指定してますが省略しました。

SOLR 1.4のIssueが0になってる!

というわけで今週中にはリリースされると期待!

http://issues.apache.org/jira/browse/SOLR?report=com.atlassian.jira.plugin.system.project:roadmap-panel

わくわくてかてか。

Apacheで2GB以上のファイルアップロードを扱う

久しぶりに記事を書いてみます。

今回はApache+Tomcatで2GB以上のファイルを扱う方法です。2GB以上のファイルがアップできないよーと言われたのが発端なのですが、まぁちょっと調べてみました。(2GB以上をアップする事なんて普通無いだろうと思うわけですが、それが結構あるんですよw)2GBの壁ということはsigned intのMAXという事になります。

問題になったシステムはSolaris10_x86(uいくつか忘れた。たぶん5くらい?w)にApache2.2.11+mod_proxy_ajp+Tomcat6.0.18 (JDK6u13)という構成です。原因はいくつかありますが、順番にチェックしていきました。

まずはログを調べてみたらTomcatがparseLongでエラーを吐いている。Content-Lengthの値がおかしいという事で、Tomcatにデバッガをしかけてチェック!。どうやら値がマイナス値のご様子。この時点でTomcatは悪くないという事に。(ちなみにTomcat6.0.13だとparseIntを使っているので注意)
次に簡単に調べられるところは、、、ApacheのログでContent-Lengthを出力するようにしてみた(${Content-Length}i)。見事にマイナス値。
この時点でおかしいのはApacheかブラウザという事に。

ブラウザが対応していないのではないか?説。

確かに検索をしてみるとブラウザによっては2GB以上のファイルはそもそもブラウザ側がPOST制限をかけている場合があるようです。その回避策としてはFLASHやJavaアプレットで分割させたりしましょうというらしい。で、問題になっているシステムはFlashでアップロードしていたのでした。どんな値を送っているのかな。と思ってWireSharkでパケットキャプチャ。ここでは見事に4GB以上のファイルも正の値で送信されていました。
原因はApacheにあり!

という事でApacheにログを仕込んでビルドしようと思ったけど、ビルドの時間を待つのが耐えられないのでソースを追ってみた。Content-Lengthでソースを検索すればそれっぽいのがいっぱい出てくる。server/util_script.cで処理しているみたい。さらにソースを読み進めていきます。

リクエストの情報はrequest_recという構造体に格納するようになっていて、Content-Lengthはそのclengthというメンバに格納される。この型はapr_off_t。これはsrclib/apr.hで定義されていてoff_tのtypedefである。で、off_tっていうのはlongで定義されているわけです。つまり32ビット!謎はとけました。

Solarisのマニュアルはこちら http://jp.sun.com/practice/software/solaris/jp/wp/Sol_file/sol_3.html

off_tを64ビット(long long)にするには、マクロを定義すればいいらしい。
Configure時にこうかな。「-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
本当は_FILE_OFFSET_BITS=64のみで良いらしいけど、一応前者もつけておく。

APR, APR-UTIL, Apacheをこのオプションつけてビルドすれば解決できそうです。
(ApacheだけあなくてAPRとAPR-UTILも必要ですよね・・?)

(追記)

家で見たソースはoff_tだったのに、問題のシステムのところのソースをみたらoff64_tで定義されてた。
あれー・・・。(´・ω・`)

Home > Archives > 2009年10月 Archive

Search
Feeds

Return to page top