カテゴリー: Computer

Oracle、オープンソースソフト企業のInnobase買収

ITMediaの記事から少し驚いたニュースを見付けました。

 米Oracleは10月7日、フィンランドのオープンソースソフト企業Innobase OYの買収を発表した。買収条件は非公開。

InnobaseはMySQL4.1からデフォルトのデータベースエンジンとなったInnoDbの開発元です。InnoDbはトランザクションをサポートする高機能なデータベースエンジンです。一方、MySQL4.1より古いバージョンではトランザクションをサポートしないMyISAMがデフォルトのデータベースエンジンでした。

当然ですがこのニュースはInnobaseのサイトにも載っていました。

Oracle Announces the Acquisition of Open Source Software Company, Innobase – Oracle Plans to Increase Support for Open Source Software

Oracleのニュースリリースはこちら

InnoDB’s contractual relationship with MySQL comes up for renewal next year. Oracle fully expects to negotiate an extension of that relationship. Terms of the transaction were not disclosed.

一応OracleはInnobaseとMySQLとの契約が延長されることを望んでいるらしい。
クリティカルな用途でMySQLを利用しているユーザは将来的にはどのような状態になるか非常に気になるのではないか、と思います。

Oracleのニュースリリースには「Oracleha今までもLinux、Apacheなどのオープンソース製品をサポートしてきた」とオープンソースコミュニティへの貢献の実績を書いていました。しかし、OSやWebサーバはOracleデータベースと競合関係にありませんが、データベースは競合関係であるため同じようにサポートできるはずがありません。すぐには動きが無くても長期的にどうなる興味があります。

また作りを知らない人が…

「PHP Open_BaseDir Security Restriction Bypass Vulnerability」と言うbug truckのエントリを作っている人がいますね…. 何年も前から何度もソフトウェアのデザイン上の間違いではない事は解説されているのですけどね….

最近のPHPマニュアルには「open_basedir」も「safe_mode」もスクリプトを書く人からの不正なファイルアクセスを防止する為のセキュリティ対策ではない事、完全な(安全な)アクセス制御を行う仕組みでは無いことは明記してあります。
# 「It is architecturally incorrect to try to solve this
# problem at the PHP level」
# http://www.php.net/manual/en/features.safe-mode.php
# 「アーキテクチャ的にはこの問題をPHPレベルで解決しようと
# するのは正しくありまえせんが」と記述してあります。

たとえばPostgreSQLのラージオブジェクト関数を使うとWebサーバがアクセス可能なファイル全てにアクセスできます。SQL文でファイルをロードできる物もあります。外部のライブラリやシステムを利用するプログラムがファイルアクセスを完全に制御できないのは*当たり前*の事なのです。

だからといって「open_base_dir」や「safe_mode」が無意味かというとそうではありません。例えば、プログラムミスによりディレクトリ遷移バグが入ってしまった場合などには「open_base_dir」は非常に役に立ちます。ログを自動チェックするようにしていればサーバが攻撃された際にディレクトリ遷移バグがあることと攻撃されている事が判別することができます。

coMomonga2+リリース

このブログでもお勧めしていたcoLinuxのMomongaLinux版のcoMomonga2+が一般公開されました。

私のノートPCは

-PentinumM 1.3Ghz
-768MB メモリ
-80GB HDD 5400rpm/16MBキャッシュ

という構成ですが普通の速度で動作しています。coMomongaのISOイメージにはXmingも同梱されています。XサーバはWindowsネイティブアプリケーションなので非常に高速です。つい先日ノートPCのHDDが壊れたの期に以前は作っていたLinuxのパーティションは作らずにcoMomonga一本で行くことにしました。

CDを焼くのが面倒くさい方はDaemonToolsが便利です。Linuxのloopbackマウントと同様な感じでISOイメージをマウントでき、CDROMドライブとして参照できます。

WindowsServer2003のActiveDirectoryに参加しているPCの場合、デフォルトのグループポリシーがインターフェースの共有を許可していません。このため手順書の通り設定できません。これを回避するには次の方法が取れます。

-ドメインに参加しない
-グループポリシーエディタでクライアントコンピュータのポリシーを変更する
-グループポリシーの管理でクライアントコンピュータのポリシーを無効にする(こちら方が簡単)
-グループポリシーの管理でクライアントコンピュータを適用するユーザの範囲を変更する(デフォルトはすべての認証ユーザ。グループ管理がどのように行われているかが関係します。通常はこの変更も比較的簡単なはず)

当然ですがグループポリシーを変更するにはドメインの管理者権限が必要です。面倒な場合はドメインに参加しないのが一番簡単です。

coMomongaのルートファイルシステムは3GBと小さいですが色々な環境をWindows上で作るにはちょうどよい大きさです。基本的なツールのほとんどが入っているので直ぐに使えます。mph-getコマンドでパッケージをインストールするのも簡単です。mph-getにはapt, yumのようなsearchコマンドがありません。パッケージを探すのはsubversionのレポジトリかサイトのRPMパッケージディレクトリを参照してください。実はyumもMomongaでもサポートされているのですがcoMomongaでは未設定です。

最後にcoMomonga2+のISOイメージにはデスクトップ環境はXfce4のみが利用できます。最初にXからログインする際にはXfce4を手動で選択してください。
デフォルトの状態ではターミナルから日本語入力が行えませんがEmacsからは入力できます。(もしかして今のISOは入力できるのかも)

追記:
通常版のMomongaはSHIFT+SPACE、漢字キーなどでIMを起動しますが、ターミナルから起動するにはCTRL+SPACEを使います。

Explaining Explain日本語版ドラフト

JPUG広報部ブログにOSCON2005で発表された「Explaining Explain」の日本語版ドラフトが公開されています。

EXPLAINとはPostgreSQLのコマンドで、クエリの実行プランや実際の実行時間を表示させる為に使います。SELECT min(val) FROM my_table; が何故遅いのか等、が解るツールです。クエリの最適化、PostgreSQLサーバの設定ファイル(postgresql.conf)のrandom_page_costの最適化などには欠かせないコマンドです。

非常に参考になります。もし読まれた事がない方はぜひどうぞ。

お勧めPC

D. J. Bernstein先生のAdvice for computer buyersが8月23日に更新されていました。詳しくはリンク先を見て頂くとして、お勧めPCの概要は

-Athlon64 X2 3800+
-512MB ECC メモリ * 2

その他を付けて $911(送料込み)

10万しませんね。少し前に作ったPentinumDのPCはNon ECCで軽く10万超えましたが…

ふるーいPCにDebian3.1をインストールしてみる

すごーく古い、と言っても6年くらい前のPCですが、Debian3.1をインストールしてみることしました。何故ってMomongaやFedoraは既にインストールできないからです。試しにWindowsXP SP2のインストーラも実行してみましたがこれもダメ。Windows XP SP1aの方はインストールは出来ても固まります。Momongaのカーネルをいじってカスタムカーネルを作れば使えるようになるとは思うのですが面倒なのでパス。

捨てる前に最後の砦としてDebianをインストールしてみることにしました。今のところ、とりあえずはうまく行っているようです。

ところで何故使えないか、というとこのPCのチップセットがSiSVIAだからです。変わった物は嫌いではないのですがこのような場合に困りますね。

改訂版PHPポケットリファレンス

昨日、見本が届きました。
デザインが新しくなったようです。ポケットリファレンスシリーズは引数を◆■◇□等の記号で表記していましたが新しいポケリ(POKERI)シリーズは引数を名称で書くようになりました。改訂前より随分見やすくなったと思います。amazon.co.jpにあるかなと思い検索すると予約可能となっていました。画像が無かったので自分で撮った写真がこれです。

一応、最新版PHPバージョンのPHP4.4, PHP5.1にもadhoc対応しています。
賛否両論のサンプルスクリプトは健在ですが、ページ数の関係で言語仕様の概要を削除する事になりました。機能が増えたので言語仕様の解説を削除してもページ数は約100ページ増えています。紙の厚さが薄くなったのでページ数が増えても厚さは増していません。

間違い等を見付けられた場合は是非教えていください。

VMWare5.5

VMWware5.5ベータ版の案内が来ていました。ハイライトは

► Full support for select 64-bit guest operating systems
► Experimental support for 2-way Virtual SMP
► New guest OS, host OS, and 32- and 64-bit hardware support
► Ability to open and convert Microsoft VMs or Norton Ghost 9 images
► Toolbar customization capabilities
► New wireless networking capabilities for Linux hosts
► Improved autodetect for configuring devices for virtual machines
► Enhanced command line interface

– 64bitゲストOSのフルサポート
– 64bitホストOSの2WAYの仮想SMPサポート
– マイクロソフトVMとノートンゴースト9のイメージファイルのサポート
– ツールバーのカスタマイズ
– LinuxホストでのワイアレスLANサポート
– 仮想マシンのデバイスの自動認識の改善
– コマンドラインインターフェースの拡張

と言う感じです。まだ、ダウンロードして使う時間がないですがかなり期待しています。

Slony-II

ThinkIT(要登録)にSlony-IIプロジェクトの紹介がありました。こんどはNTTデータも開発に参加するようですね。

Slony-Iは非同期方式のマスタースレーブ型のレプリケーションでしたが、Slony-IIでは同期式になるようです。PGClusterの強力なライバルとなりそうですね。個人的には

非同期ならpgpool
– 同期ならPGCluster

をお勧めしたい :)
# 別にSlony-I、IIが悪い、と言っている訳ではないです。念のため。

network.enableIDN=false

最新版のFirefoxのIDN(国際化ドメイン名)に深刻な脆弱性が見つかっていますが簡単に対策できます。ここに書いても良かったのですが元のエントリに追加しています。
# 最初から対策を書いておけば良かったのですが..
# 前にIDNに問題が見つかった時にFirefoxプロジェクトとして
# デフォルトではIDN無効に設定しておいてくれればよかったの
# ですが..

Firefoxに未パッチの脆弱性

ドメインに0xADが含まれているとヒープオーバーフローが発生するそうです。
個人的にはIDNは不必要と考えていますが、IDN関係のコードかな? IDN以外でこんなバグがあるとは思えない。

IDNはレジストラだけが儲かる仕組だと思います。一般ユーザやサイト運営に関わる人には全く利益無し、とまでは言いませんが不利益の方が利益を遥かに上回ると思います。IDNサポートは駆逐されて欲しい機能の一つですね。

追記:
http://security-protocols.com/modules.php?name=News&file=article&sid=2910

Technical Details:
The problem seems to be when a hostname which has all dashes causes the NormalizeIDN
call in nsStandardURL::BuildNormalizedSpec to return true, but is sets encHost to an
empty string. Meaning, Firefox appends 0 to approxLen and then appends the long
string of dashes to the buffer instead. The following HTML code below will reproduce
this issue:

A HREF=https:———————————————

Simple, huh? ;-]

パッチはここから
https://bugzilla.mozilla.org/show_bug.cgi?id=307259
というかこれに書いたときにはパッチは有りましたね。広くリリースされてはいませんが。IDNは手動で無効に設定しておいても良いかも。

network.enableIDN=false

回避策として公開されていますね。
https://addons.mozilla.org/messages/307259.html

XPIでインストールしなくても about:config をアドレスバーに入力して network.enableIDN=false に設定すればOKです。

gooの辞書検索がPHPに

少し前の事になりますがgoo.ne.jpの辞書サービスがCGIバイナリ(?)からPHPに変更されました。

具体的にはURLが

http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi

から

http://dictionary.goo.ne.jp/search.php

に変更されました。たいした事ではないですが気が付いたので。

PostgreSQL 8.1のパフォーマンス

PostgreSQLのパフォーマンスはpostgresql.confに大きく影響されるので、速くなったかどうか判りづらい場合も多いです。しかし、8.1では確実に速くなっているようです。現在8.1はbeta1ですが少しだけ比較してみました。

詳しくはWikiのページを見ていただくとして以下の様にpgbenchで計測すると

./pgbench -v -h 192.168.100.204 -U yohgaki -c 20 -t 200

PostgreSQL 8.0.3

tps = 4683.835265 (excluding connections establishing) (Select only)
tps = 1032.798585 (excluding connections establishing) (Update 省略)
tps = 423.926137 (excluding connections establishing)

PostgreSQL 8.1beta1

tps = 5985.801678 (excluding connections establishing) (Select only)
tps = 1428.605103 (excluding connections establishing)(Update省略)
tps = 533.005286 (excluding connections establishing)

という感じの結果になりました。
postgresql.confの設定は多少チューニングした物を使っています。postgresql.confもWikiのページに添付してあります。

pthread版pgbenchの拡張

実はpthread版pgbenchの作成には別の目的もあります。オリジナル版pgbenchのコードを見ると分かるのですが、非同期クエリを使用しているので送信するクエリのカスタマイズが面倒です。pthread版pgbenchの別の目的、と言うより本来の目的、はpostmasterが書き出したログから自動的にクエリを収集し、再生するベンチマークを簡単に行いたいので作る、と言う事にあります。

今の所こんな感じで実装するつもりです。

postgresql.confのログ設定が

log_line_prefix = ‘%r’
log_statement = true

で出力されたログから自動的に各クライアントのクエリを出力し設定されたスレッド数(クライアント数)でベンチマーク出来るようにする予定です。

今のコードだとログの読み取りとクエリ保存を行えるようにして、各スレッドがクエリを実行するように変更すれば良いだけです。簡単なのでそのうち変更します。