utterramblingsのphp-pgsql+php-pdoでPostgreSQL8.4にアクセスするとSegmentaion Fault
表題のような現象が起こった。仕方がないのでphp-5.2.11のソースを持ってきてpdo_pgsqlディレクトリでphpize;./configure;makeして出来上がったpdo_pgsql.soを/usr/lib/php/modules/pdo_pgsql-8.4.so*1にコピーして、/etc/php.d/pdo_pgsql.iniの参照先を変更してみたところ回避に成功失敗しました。
今回は適当に処理しましたけど、他でも必要になりそうなのであとで真面目にrpm作らないと。
間にPHPのpostgresqlとバージョンあってるpgpool-IIがいると平気だった。そんな荒業もありか?
どうやら自作したpdo_pgsql-8.4.soはメモリリークを起こしてた模様です。間にpgpool-IIを入れて回避するのが良いようです。
*1:pdo_pgsql.soを上書きするのは気が引けたので
RHEL5でyum-prioritiesを使う
RHEL5でyum-prioritiesを使おうとした場合にはすんなりいきません。今回はたぶんうまく動かすことができたので報告します。ただし、きっちりとテストしたわけではないので実際に利用する際は自己責任でお願いします。
yum-prioritiesのインストール
まず、RHEL5の標準yumレポジトリにはyum-prioritiesは入っていません。どこかから持ってくる必要があります。
幸いにもCentOS5.3の標準レポジトリには入っている*1のでこいつを使うことにします。
[root@db01 ~]# rpm -ihv http://mirror.centos.org/centos-5/5.3/os/i386/CentOS/yum-priorities-1.1.16-13.el5.centos.noarch.rpm
priority設定
次に/etc/yum.repos.d/にある*.repoファイルに書かれたレポジトリ設定にそれぞれpriorityを書こうとするわけですが、ここで問題があります。実はRHELの標準レポジトリはyum-rhnpluginというプラグインを使ってRHNをラップした仮想yumレポジトリのようなものなのでここに設定ファイルがありません。
調べてみると/etc/yum/pluginconf.d/rhnplugin.confにそれらしき記述がありましたのでここにpriorityを追加してみます。
[main] enabled = 1 gpgcheck = 1 [rhel-i386-server-5] enabled = 1 priority = 1
動いているか確かめる
とりあえず、今回は被っているパッケージがあるyumレポジトリとしてPostgreSQL RPMsからpgdg-redhat-8.4-1.noarchをインストールしてpriority = 20を設定しました。
この状態でyum info postgresqlを実行してみます。*2
[admin@db01 ~]$ sudo yum info postgresql Password: Loaded plugins: priorities, rhnplugin, security 65 packages excluded due to repository priority protections Available Packages Name : postgresql Arch : i386 Version : 8.1.18 Release : 2.el5_4.1 Size : 2.8 M Repo : rhel-i386-server-5 Summary : PostgreSQL client programs and libraries. License : BSD Description: PostgreSQL is an advanced Object-Relational database management system : (DBMS) that supports almost all SQL constructs (including : transactions, subselects and user-defined types and functions). The : postgresql package includes the client programs and libraries that : you'll need to access a PostgreSQL DBMS server. These PostgreSQL : client programs are programs that directly manipulate the internal : structure of PostgreSQL databases on a PostgreSQL server. These client : programs can be located on the same machine with the PostgreSQL : server, or may be on a remote machine which accesses a PostgreSQL : server over a network connection. This package contains the docs : in HTML for the whole package, as well as command-line utilities for : managing PostgreSQL databases on a PostgreSQL server. : : If you want to manipulate a PostgreSQL database on a remote PostgreSQL : server, you need this package. You also need to install this package : if you're installing the postgresql-server package.
つぎにpgdgのpriorityを1にしてみると下記のように表示されpriority設定が有効に働いていることが分かります。
[admin@db01 ~]$ sudo yum info postgresql Loaded plugins: priorities, rhnplugin, security pgdg84 | 1.9 kB 00:00 44 packages excluded due to repository priority protections Available Packages Name : postgresql Arch : i386 Version : 8.4.1 Release : 1PGDG.rhel5 Size : 1.3 M Repo : pgdg84 Summary : PostgreSQL client programs and libraries URL : http://www.postgresql.org/ License : BSD Description: PostgreSQL is an advanced Object-Relational database management system : (DBMS) that supports almost all SQL constructs (including : transactions, subselects and user-defined types and functions). The : postgresql package includes the client programs and libraries that : you'll need to access a PostgreSQL DBMS server. These PostgreSQL : client programs are programs that directly manipulate the internal : structure of PostgreSQL databases on a PostgreSQL server. These client : programs can be located on the same machine with the PostgreSQL : server, or may be on a remote machine which accesses a PostgreSQL : server over a network connection. This package contains the command-line : utilities for managing PostgreSQL databases on a PostgreSQL server. : : If you want to manipulate a PostgreSQL database on a local or remote PostgreSQL : server, you need this package. You also need to install this package : if you're installing the postgresql-server package.
今回は限定的なレポジトリなので実はpriority設定などしなくても問題ないかもしれませんが、DAGレポジトリなど汎用レポジトリを利用したいときは有用になると思います。
続・ドコモでJavaScriptが解禁されたので試してみた。
masa様より
document.write()の無限ループ
とのコメントをいただきましたので実験してみました。
<html> <head> </head> <body> <script> while(1) document.write('a'); </script> </body> </html>
開いてみるとずっと読み込み中表示になります。多少重いくらいです。中止ボタンは効きませんが、メニューは開けてまたブラウザを閉じることもできます。
ただ、while(1);やwhile(1)alert(1);と違って読み込み状態がずううううっと続きます。今回は1時間半変化がなかったのであきらめて閉じました。どこまで続くのかわかりません。
メモリを使い切ったら止まるか落ちるかするだろうと思い一度に書くaの数を1024個にして再挑戦してみましたが、5分ほどたっても変化ないのであきらめました。
ドコモでJavaScriptが解禁されたので試してみた。
まずは
while(1);
眺めの読み込み中の後しばらくすると戻ってくる。
jQueryが動くかなーとjQueryのテストを動かそうとしたけど無反応でした。ただ、jQueryUIを使ったサイトを表示したら一部は動いていたので動くこともあるらしい。
次はwasserで急募したらid:hasegawayosukeさんから
とレスがあったので、alertは無効になっていたような・・・と思いつつ実行。
while(1)alert(1); by hsegawa
結果は少し重くなったけどなにも表示されず。復帰。
やっぱりalertがいないっぽいので検証のために
<html> <head> </head> <body> <script> document.write(typeof alert); document.write(typeof confirm); document.write(typeof prompt); </script> </body> </html>
を実行すると
functionfunctionfunction
と表示されました。
こいつらはなにもしない関数として定義されているらしい。
このことに対してこのような意見も
前は確かに動いてましたが…こんなメジャーな関数殺したら、本当にガラパゴスJSと呼ばれるよ泣き顔…ひょっとして、雇ったコンサルタントがへっぽこだった? by ockeghem@ニートセキュア株式会社
とあるコミュニティサイト運営者として
実は、僕はプライベートでとあるネット上での雑談を目的としたコミュニティサイトを運営している。利用規約ではもちろん出会い行為を禁止しているけど、これを行うものが後を絶たない。
チャットの書き込みは削除とか無意味だし、掲示板にしたって削除しても削除しても書き込まれては困るので、アクセス規制をすることになる。ただ、アクセス規制をするとしても全員が固定IPってわけではないので発信元IPだけをブロックしても仕方がなかったりする。のでプロバイダあるいはアクセスポイント単位で規制する必要が出てくる。しかし、この粒度で規制をすると当然、無関係なユーザのアクセスも制限されてしまう。そして苦情が出る。利用者が減る。プロバイダに報告してもまともに対応してくれるところは経験上ほとんどない。大手の○CNなどはガン無視してくる。
なぜか。
インターネット上での出会いによる未成年者へ被害を防ぐ法律として「インターネット異性紹介事業を利用して児童を誘引する行為の規制等に関する法律」というのがあるわけだけど、的外れな法律で出会い系以外で出会いを求めても規制対象にならないいように読み取れる。
ということは出会い系でないとうたっているサイトへの出会い系書き込みに対して法的に対応する必要がプロバイダにはない。
しかし、サイト運営者には重くのしかかってくる。なぜなら警視庁が出会い系の書き込みに対応しないと出会い系とみなすと主張している*1から。
どうかしている。どうかしまくっている。
本当に未成年者を守りたいなら、どんな媒体であろうと性的行為を目的とした出会いを誘引する目的の内容を発信してはならないようにすればいいはず。「どんな媒体であろうとも」というのは、非出会い系サイトを含むという意味だけでなくもっと大きく、それこそ便所の落書きでも規制対象とすべきだという意味。"未成年者との性的行為を目的とした出会い"が悪だというなら、あくまでも規制されるべきあるいは罰せられるべきはは発信するそして性的な関係を持とうとするその人なんだから。媒体なんて関係ないはずなんだから。
その上で媒体となるものまたはその手段の管理者に対して管理責任を問えばいい。
そうすれば、出会い系であろうとそうでなかろうと、そう言った書き込みを中継したプロバイダに責任が生じるのに。そして、不逞の輩を懲らしめることができるのに。
目的と手段をハッキリさせてほしいもんだよ。手段のためなら目的を選ばないようなどうしょうもない連中ではないんだろ?