- 依存関係
- CouchDB ソースの Erlang ライブラリディレクトリへのインストール
- Erlang で使う ICU の準備
- SpiderMonkey のビルド
- couchdb/couch_erl_driver.c のビルド
- Erlang のコンパイル
- 構成
- 実行
「ベータテスト」段階の Windows バイナリインストーラがあります。詳細については、リンク先の wiki ページを参照してください。
CouchDB は、ネイティブな形で Windows にインストールすることはできませんが、手作業でインストールすることは可能です。ただし、Windows 上の Erlang でサポートされていない IO 関連の機能が原因で、多くのユニットテストが失敗します。
必要に応じてこのガイドを更新してください。フィードバックを集めて、手順を公式なビルドとしてまとめたいと考えています。
以下に示す手順は、現時点では Erlang OTP 5.7.1 のデフォルトインストールで設定されたパスを用いており、CouchDB は次の場所にインストールされていることを前提にしています。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0
依存関係
以下のソフトウェアがシステムにインストールされている必要があります。
C コンパイラ/リンカ (
GCC、
Visual C++ など)
ICU (
4.2 リリースのバイナリビルドでテストされています。)
CouchDB ソースの Erlang ライブラリディレクトリへのインストール
Erlang をインストールすると、次のようなディレクトリが作成されているはずです。
C:\Program Files\erl5.7.1
CouchDB のソースツリー全体を次の場所にコピーします。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0
以下の名前で空のディレクトリを作成します。
C:\Program Files\erl5.7.1\lib\mochiweb-0.01\ebin
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0\ebin
Erlang で使う ICU の準備
ICU から、icu*.dll (および古いバージョンの ICU の場合は libeay32.dll) を次の場所にコピーします。
C:\Program Files\erl5.7.1\erts-5.7.1\bin
SpiderMonkey のビルド
SpiderMonkey のディストリビューションに含まれている Windows ビルド用ファイルには問題があってビルドに失敗します。この
ブログ記事を参考にして、適切な js.mak ファイルを用意してください。プロジェクトファイルをわざわざ最新の Visual Studio にインポートしたりする必要はありません。Visual Studio のコマンドライン・ツールと、上の記事にある js.mak ファイルがあれば十分です。
CouchDB では、Unicode まわりとバッファリング機能を改善した独自の JavaScript ドライバを使用します。SpiderMonkey のディストリビューションのうち、src/js.c の名前を src/js.c.bak に変更し、CouchDB ディストリビューションに含まれる C:\Program Files\erl5.6.3\lib\couchdb-0.8.1\src\couchdb\couch_js.c を SpiderMonkey ディストリビューションの src/js.c としてコピーします。nmake を実行する前に、新しい js.c ファイルを編集し、#include <jsapi.h> を #include "jsapi.h" に書き換えておきます。
js.exe と js32.dll をビルドしたら、これらのファイルを次の場所にコピーします。
C:\Program Files\erl5.7.1\erts-5.7.1\bin
次に、js.exe の名前を couch_js.exe に変更します。
上のブログ記事に従ってビルドしたバイナリ
couchbd_spidermonkey_1.7_win32_32bit.zip があります。zip ファイルの内容を bin ディレクトリに解凍してください。
couchdb/couch_erl_driver.c のビルド
ICU の機能を CouchDB に提供するためのラッパーです。
32 ビット Windows 用 ICU 4.2 を使ってビルドしたバイナリ couch_erl_driver.dll があります(心配ご無用。MS の最新テクノロジはスバラシイ!)。
DLL をビルドする最も簡単な方法は、IDE で Win32 DLL プロジェクトを作成し、couch_erl_driver.c をプロジェクトに追加し、プロジェクトの設定を変更して Erlang ERTS および ICU4C のヘッダーファイルをインクルードできるようにすることです。
さまざまな ICU *.lib ファイルも MSVC リンカへの入力に含める必要があります。MSVC では、未解決のシンボルを持った DLL を作成することはできません。Visual Studio 2008 の場合には、プロジェクトを右クリックし、プロパティを選択して、左側のパネルで Linker ノードを展開します。次に、Input を選択し、以下のファイルを 'Additional Dependencies' に追加します。
icudt.lib
icuin.lib
icuio.lib
icule.lib
iculx.lib
icutu.lib
icuuc.lib
上のバイナリをビルドした時の erlang のインクルードパスは、次のようになっていました。
C:\otp_src_R13B\erts\emulator\sys\win32 C:\otp_src_R13B\erts\emulator\beam
次の名前で空のディレクトリを作成します。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0\priv
DLL を次の場所にコピーします。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0\priv\couch_erl_driver.dll
Erlang のコンパイル
次のファイルを作成します。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0\src\Emakefile
次の内容を追加します。
{'./couchdb/*', [{outdir,"../ebin"}]}.
{'./mochiweb/*', [{outdir,"../../mochiweb-0.01/ebin"}]}.
erl (または werl) を起動し、次のコマンドを実行して作業ディレクトリを変更します。
cd("C:/Program Files/erl5.7.1/lib/apache-couchdb-0.9.0/src").
次のコマンドを実行して CouchDB をコンパイルします。
make:all().
構成
次のファイルをコピーします。
C:\Program Files\erl5.7.1\lib\apache-couchdb-0.9.0\etc\couchdb\default.ini.tpl.in
コピー先は次のとおりです。
C:/Program Files/erl5.7.1/bin/default.ini
または、次の場所にコピーします。
C:/Program Files/erl5.7.1/lib/couchdb-0.9.0/default.ini
コピーしたらファイルを編集し、だいたい次のような内容になるようにします。
[couchdb]
database_dir = c:/data/couch
view_index_dir = c:/data/couch
util_driver_dir = C:/Program Files/erl5.7.1/lib/apache-couchdb-0.9.0/priv
ConsoleStartupMsg=Apache CouchDB is starting.
max_document_size = 4294967296 ; 4 GB
max_attachment_chunk_size = 4294967296 ; 4GB
os_process_timeout = 5000 ; 5 seconds. for view and external servers.
max_dbs_open = 100
[httpd]
port = 5984
bind_address = 127.0.0.1
authentication_handler = {couch_httpd, default_authentication_handler}
WWW-Authenticate = Basic realm="administrator"
[log]
file = c:/logs/couch.log
level = info
[daemons]
view_manager={couch_view, start_link, []}
external_manager={couch_external_manager, start_link, []}
db_update_notifier={couch_db_update_notifier_sup, start_link, []}
query_servers={couch_query_servers, start_link, []}
httpd={couch_httpd, start_link, []}
stats_aggregator={couch_stats_aggregator, start, []}
stats_collector={couch_stats_collector, start, []}
[httpd_global_handlers]
/ = {couch_httpd_misc_handlers, handle_welcome_req, <<"Welcome">>}
favicon.ico = {couch_httpd_misc_handlers, handle_favicon_req, "C:/Program Files/erl5.7.1/lib/apache-couchdb-0.9.0/share/www"}
_utils = {couch_httpd_misc_handlers, handle_utils_dir_req, "C:/Program Files/erl5.7.1/lib/apache-couchdb-0.9.0/share/www"}
_all_dbs = {couch_httpd_misc_handlers, handle_all_dbs_req}
_active_tasks = {couch_httpd_misc_handlers, handle_task_status_req}
_config = {couch_httpd_misc_handlers, handle_config_req}
_replicate = {couch_httpd_misc_handlers, handle_replicate_req}
_uuids = {couch_httpd_misc_handlers, handle_uuids_req}
_restart = {couch_httpd_misc_handlers, handle_restart_req}
_stats = {couch_httpd_stats_handlers, handle_stats_req}
[httpd_db_handlers]
_design = {couch_httpd_db, handle_design_req}
_temp_view = {couch_httpd_view, handle_temp_view_req}
[httpd_design_handlers]
_view = {couch_httpd_view, handle_view_req}
_show = {couch_httpd_show, handle_doc_show_req}
_list = {couch_httpd_show, handle_view_list_req}
database_dir が存在すること、LogFile が作成可能であることを確認します。
実行
erl (または werl) を起動し、次のコマンドを実行します。
couch_server:start().
うまく動作しない場合は、default.ini でログの 'level' を 'debug' にしてください。
適切に動作しているかどうか確かめるには、ブラウザで
http://localhost:5984/_utils/index.html にアクセスし、テスト・スイートを実行します。