以下はDSpaceサーバを稼働させるために必要なコンポーネントやツールをリストアップしたものです。これらはMITにおける私たちの構築経験に基づいた単なる推奨リストにすぎません。DSpaceはオープンソースの標準的なツールを使って構築されていますので、他にも多くの選択肢や構築法が存在します。
また、以下に示した特定のツールに関する設定やインストールのガイドラインは便宜上ここにあげたにすぎないことに注意してください。 最新の完全な内容については、個々のコンポーネントのドキュメントを参照してください。多くのツールは頻繁にバージョンアップされていますので、以下に示したガイドラインは最新版では正しくないかもしれません。
UNIXライクなOS (Linux, HP/UX など)
Java 1.4以降。(標準的なSDKでよく、J2EEは必要ない)
Apache Ant 1.5以降。(Javaのmake類似ツール)
オープンソースのリレーショナル・データベースであるPostgreSQL 7.3以降、あるいは、Oracle 9以上。
PostgreSQL
ユニコード(厳密にはUTF-8)サポートを有効にする必要がある。これはバージョン8.0以降ではデフォルトで有効になっている。7.xでは、"configure
" に次のオプションを付けてコンパイルすることを忘れないこと
--enable-multibyte --enable-unicode --with-java
インストール後に、(DSpaceはJDBCを使用するので)TCP/IP接続を有効にする必要がある。7.xでは(通常、/usr/local/pgsql/data
、あるいは、 /var/lib/pgsql/data
にある)postgresql.conf
を編集して、次の行を追加する。
tcpip_socket = true
8.0以降では、postgresql.conf
の次で始まる行のコメントをはずす。
listen_addresses = 'localhost'
次に、セキュリティを少し高めるために、pg_hba.conf
を編集して、次の行を追加する。
host dspace dspace 127.0.0.1 255.255.255.255 md5
そして、PostgreSQLをリスタートする。
Oracle
Oracle JDBCドライバを[dspace-source]/lib
にコピーする。
DSpace用のデータベースを作成する。文字セットには必ずユニコード文字セットの1つを指定する。DSpaceは内部的にUTF-8を使用しているので、Oracleデータベースにも同じ文字セットを使用することを勧める。次に、DSpace用のユーザ・アカウント(たとえば、dspace
)を作成し、DSpace用のデータベースにテーブルを追加・削除する許可を与える。
ソースディレクトリにある config/dspace.cfg ファイルを編集し、以下のように設定する。
db.name = oracle db.url = jdbc.oracle.thin:@//host:port/dspace db.driver = oracle.jdbc.OracleDriver
[dspace-source]/etc/oracle
ディレクトリに移動して、全ての内容を親ディレクトリにコピーし、親ディレクトリにあるバージョンを上書きする。
cd dspace_source/etc/oracle cp * ..
以上で、etc
ディレクトリには Oracle用の .sql
ファイルが置かれ、dspace.cfg はOracleデータベースを使うよう変更されたので、通常のDSpaceインストールを続けることができたことになる。ただし、Postgresの設定ステップは省略する。
注意: DSpaceはユニークなオブジェクトIDを生成するためにシーケンスを使用する。Oracleのシーケンスは、データベースをエクスポート・インポートすると値が失われるといわれているので、バックアップからのリストアには注意が必要である。必ず、etc/update-sequences.sql
スクリプトを実行すること。
さらに注意: 全ては完全に機能するが、Oracleには、アイテムのメタデータやコレクション記述のようなテキストフィールドに4Kまでのテキストしか格納できない制限がある。
PostgresからOracleへの切り替えに興味を持つ人に言っておくと、これを自動的に行うツールは存在しないようである。コミュニティ、コレクション、e-personをOracle上に再作成し、アイテムエクスポートツールとインポートツールを使ってコンテンツを移動させる必要があるだろう。
Jakarta Tomcat 4.x/5.x、あるいは、これに相当するもの。たとえば、Jetty や Caucho Resinなど。
DSpaceはTomcatと同じユーザで実行する必要があることに注意すること。したがって、"dspace
" ユーザでTomcatをインストールし、実行すると良いだろう。
Tomcatは、(a)Dspaceを実行するだけの十分なメモリを持ち、(b)世界中の文字をサポートするためにデフォルトのファイル・エンコーディングとしてUTF-8を使用する必要がある。そのために、次の環境変数を起動時実行スクリプト(など)に設定しておく。
JAVA_OPTS="-Xmx512M -Xms64M -Dfile.encoding=UTF-8"
さらに、マルチバイトのUTF-8文字列の検索とブラウジングを正しくサポートするよう、Tomcatのデフォルト設定を変更する必要がある。[tomcat]/config/server.xml
にある<Connector>
要素に次のオプションを追加する。
URIEncoding="UTF-8"
たとえば、Tomcatのデフォルト設定を使用している場合は、変更後、次のようになる。
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
JettyとResinは、はじめからUTF-8を正しく扱えるよう設定されている。
まず、ディレクトリ名とパス名の表記について
DSpaceは3つのディレクトリー・ツリーを使用します。DSpaceのインストールをするためには、それらの詳細の全てを知る必要はありませんが、その存在と、それがこの説明書で次のように表記されていることを知っておく必要があります。
[dspace-source]
と表記する[dspace]
と表記する[tomcat]/webapps/dspace
である(ここで、[tomcat]
は、Tomcatをインストールした場所、すなわち、$CATALINA_HOMEである)。このディレクトリはWebサーバがdspace.warを解凍した際に生成するので、編集しないこと。各ディレクト・ツリーの詳細については、ディレクトリとファイルの章を参照してください。 ソースディレクトリとインストールディレクトリは常に分けておく必要があることに注意してください。
DSpaceユーザを作成する。これは、Tomcat(あるいはJettyなど)を実行するユーザと同じでなければならない。rootになって、たとえば、次のように実行する。
useradd -m dspace
最新のDSpaceソースコードリリースをダウンロードし、解凍する。
gunzip -c dspace-source-1.x.tar.gz | tar -xf -
PostgreSQL JDBCドライバ(.jar
ファイル)を [dspace-source]/lib
にコピーする。自分でPostgreSQLをコンパイルした場合、このファイルはpostgresql-7.x.x/src/interfaces/jdbc/jars/postgresql.jar
にあるはずである。PostgreSQL JDBCサイトから直接ダウンロードすることもできる。その場合、実行するPostgreSQLのバージョン用で、かつJDBC2用のドライバを入手する必要がある。
PostgreSQLユーザdspace
が所有する、dspace
データベースを作成する。
createuser -U postgres -d -A -P dspace ; createdb -U dspace -E UNICODE dspace
DSpaceデータベースのパスワードを入力する。(これは、Unixのユーザdspace
のパスワードとは異なる。)
[dspace-source]/config/dspace.cfg
を編集する。特に、以下のプロパティを設定する必要があるだろう。
dspace.url dspace.hostname dspace.name db.password (前ステップで入力したパスワード) mail.server mail.from.address feedback.recipient mail.admin alert.recipient (必須ではないが、とても便利!)
dspace.dir
を変更した場合は、/dspace
で始まる値を持つプロパティ(たとえば、assetstore.dir
やlog.dir
など)も変更する必要があることに注意する。
DSpaceをインストールするディレクトリを作成する。rootになり、以下を実行する。
mkdir [dspace] ; chown dspace [dspace]
(DSpaceの実行ユーザ名としてdspace
を仮定している。)
dspace
ユーザになって、DSpaceをコンパイルし、インストールする。
cd [dspace-source] ; ant fresh_install
ここで問題が発生する可能性が最も高いのはデータベース接続である。インストール上のよくある問題を参照のこと。
DSpace Webアプリケーションアーカイブ(.war
ファイル)を Tomcat/Jetty/Resin の該当するディレクトリにコピーする。たとえば、次のように実行する。
cp [dspace-source]/build/*.war [tomcat]/webapps
1人目の管理者アカウントを作成する。
[dspace]/bin/create-administrator
さあ、運命の分かれ道である。Tomcatをスタート(あるいはリスタート)。サーバのベースURL(たとえば、http://dspace.myu.edu:8080/dspace)にアクセス。DSpaceのホームページが見えるはずだ。おめでとう。
コミュニティやコレクションを設定するために、管理用UIにアクセスする必要があるだろう。これをするには、サーバのURLに「admin」を追加する。たとえば、http://dspace.myu.edu:8080/dspace/dspace-admin である。
上記のインストール手順はテストサーバを構築して試してみるには十分です。しかし、DSpaceの本番運用を始める前には、おそらく、さらなるインストール作業や選択肢を検討する必要があります。
DSpaceの機能には定期的にスクリプトを実行する必要があるものがあります。新しいアイテムがデポジットされたことをユーザに通知するメール購読機能や、画像のサムネイル作成やインデックス作成のために文献からテキストを抽出する新ツール「メディアフィルター」などです。
これらを設定するには、dspace
ユーザになって、以下のコマンドを実行するだけです。
crontab -e
そして、以下の行を追加します。
# Send out subscription e-mails at 01:00 every day (訳注: 毎日 01:00 に購読メールを送信する) 0 1 * * * [dspace]/bin/sub-daily # Run the media filter at 02:00 every day (訳注: 毎日 02:00 にメディアフィルターを実行する) 0 2 * * * [dspace]/bin/filter-media
もちろんあなたの環境に合わせて頻度を変更すべきです。
PostgreSQLには定期的な "vacuum" 処理が、効果があります。これは、インデックスを最適化し、削除されたデータを一掃します。postgres
ユーザになって、crontab -e
を実行し、(たとえば)以下の行を追加します。
# Clean up the database nightly at 2.40am (訳注: 毎晩、午前2:40にデータベースをvacuum) 40 2 * * * vacuumdb --analyze dspace > /dev/null 2>&1
統計レポートを定期的に作成し、最新にしておくためには、次のようなcronジョブを設定する必要があります。
# Run stat analyses (訳注: 統計分析を実行) 0 1 * * * [dspace]/bin/stat-general 0 1 * * * [dspace]/bin/stat-monthly 0 2 * * * [dspace]/bin/stat-report-general 0 2 * * * [dspace]/bin/stat-report-monthly
もちろん、実行開始時間には最も都合のよい時間を選択するべきです。また、分析用スクリプトの終了後少し経ってから-report-
スクリプトが実行されるようにしなければなりません(8か月分程度のログを処理するには25秒ほどかかります)。作成されたレポートから分析にどのくらいの時間を要したかがわかりますので、それにより開始時間を調整することができます。
統計レポートの出力項目のカスタマイズについては、統計レポートの設定を参照してください。
古い単なるHTTPはまったく安全ではありません。DSpaceでユーザ名とパスワードによる認証を使用する場合、あるいは、アクセス制限のあるコンテンツを格納する場合は、HTTPS(HTTP over a Secure Socket Layer (SSL))上でDSpaceを稼動させることを勧めます。 これを実現するには2つの方法があります。Apache HTTPDを使用する方法と、TomcatとJettyが持つHTTPSサポート機能を使用する方法です。
Apache HTTPDの使用法: DSpaceのソースツリーにはApache設定ファイルの断片である apache13.conf
が含まれています。このファイルにはDSpaceの稼動に必要なほとんどの設定が書かれています。ただし、mod_webappの使用を仮定しています。これは、非推奨であり、コンパイルにこつがいりますが、Tomcatで現在推奨されているmod_jk2
より設定がはるかに簡単です。このファイルの使用は必須ではありません。1つの例として参考にするだけでもかまいません。 Apacheの設定ファイルhttpd.conf
に直接使用する場合は、以下の点に注意してください。
mod_ssl
と mod_webapp
を設定し、ロードするInclude [dspace]/config/httpd.conf
DSpace用の設定ファイルの配置場所は自由に決めることができる。設定の章を参照のこと。TomcatあるいはJettyのHTTPSサポート機能の使用法については、該当するツールのドキュメントを参照してください。
まず、一般的な誤解を晴らすためにいくつかの事実を紹介します。
CNRIのハンドルシステムを使用する必要はない。現在のところ、(PURLなどの)別のシステムを使用するにはプログラムを少し変更する必要があるが、まもなく変更される予定である。
テストサーバを動かしている際に気づいたと思うが、DSpaceは、たとえば、hdl:123456789/24
のような形のハンドルを作成しているように見える。しかし、これは実際にはハンドルではない。なぜなら、世界中のハンドルシステムはこれを知らないし、テスト用としてインストールした数多くのDSpaceが同じIDを作成するからである。
CNRI(以下を参照)にプリフィックスを登録し、DSpace配布物に含まれているハンドルサーバを正しく設定して初めて本当のハンドルとなる。このハンドルサーバが世界中のハンドルサーバと通信することにより、ハンドルを理解する全てのサーバがDSpaceの作成したハンドルを見つけることができるようになる。
ハンドルシステムを使用したい場合は、ハンドルサーバを設定する必要があります。ハンドルサーバはDSpaceに含まれています。これはDSpaceの評価目的には必要のないものであることに注意してください。本番運用の際に必要になるだけです。CNRIハンドルサイトからハンドル・プリフィックスを得る必要があります。
ハンドルサーバは独立したプロセスとして稼働し、他のハンドルサーバからTCPリクエストを受け付けます。また、ローカルから入力されたハンドルがローカルのコンテンツのものではない場合、世界中のサーバへ名前解決のためのリクエストを発行します。ハンドルプロトコルはTCPに基づいていますので、ブロードキャストができ、2641番ポートでTCPを受信できるサーバにインストールする必要があります。
ハンドルサーバのプログラムはDSpaceコードツリーの[dspace-source]/lib/handle.jar
にあります。簡単なハンドル設定ファイルを作成するスクリプトもあります。dspace.cfg
の該当するパラメタを設定してから、 [dspace]/bin/make-handle-config
を実行してください。 handle.netのサイトにあるインストール手順書に従ってハンドル設定ファイルを直接作成することもできますが、次のように変更する必要があります。
java -cp /hs/bin/handle.jar net.handle.server.SimpleSetup /hs/svr_1次のコマンドを実行する必要がある。
[dspace]/bin/dsrun net.handle.server.SimpleSetup [dspace]/handle-server
[dspace]/handle-server
を dspace.cfg
の handle.dir
で設定したプロパティに合わせるためである。[dspace]/handle-server/config.dct
ファイルを編集して、 "server_config"
節に以下の行を追加する。
"storage_type" = "CUSTOM" "storage_class" = "org.dspace.handle.HandlePlugin"
これによりDSpaceプログラムで与えられる個々のハンドルについての情報をハンドルサーバが得られるようになる。
どちらの方法を取った場合も、DSpaceユーザになって、ハンドルサーバを次のコマンドで立ち上げます: [dspace]/bin/start-handle-server
。設定ファイルが作成されたら、http://hdl.handle.net/4263537/5014にアクセスし、作成された sitebndl.zip ファイルをアップロードする必要があります。アップロードページではあなたの連絡先を聞かれます。ファイルがアップロードされると、管理者は(Global Handle Registryとして知られている)ルートサービスにあなたの機関のネーミング・オーソリティ(プリフィックス)を作成し、作成したネーミング・オーソリティをあなたに通知します。あなたの機関のネーミング・オーソリティに関する情報を受け取るまではハンドルサーバのインストールを続けることはできません。
DSpaceプログラムが個々のハンドルを管理するので、ハンドルの作成や変更といった管理用の操作をDSpace附属のハンドルサーバはサポートしていないことに注意してください。
未稿
DSpaceのような規模のソフトウェアプロジェクトにはバグはつきものです。しばしば、安定版のDSpaceには既知のバグが含まれています。既知のバグがすべて修正されるまで、常に、リリースを待つわけではありません。ソフトウェアが十分安定しており、以前のリリースより進歩があり、バグが致命的なものではなく、その回避法が分かっていれば、これらの進歩の利点をコミュニティが利用できるように、我々はソフトウェアをリリースします。
リリースにある既知のバグはソースパッケージの中にあるKNOWN_BUGS
ファイルに記載されています。
現在のバグに関する情報やその後に修正されたバグを知るにはDSpaceバグトラッカー を参照してください。ここは、あなたが見つけた新たなバグを報告できる場所でもあります。
理想世界では、上の手順に従えば誰でも完全に機能するDSpaceを得ることができます。しかし言うまでもありませんが、現実世界ではいつもうまくいくとは限りません。この節では、多くの人がDSpaceのインストールで遭遇するよくある問題を挙げて、原因と対策を説明します。私たちがユーザの経験を知るにつれ、この節の内容は豊かになっていくと思われます。
ant fresh_install
を実行した際に、データベースエラーが生じるよく発生するエラーには2種類あります。次のようなエラーであれば、
[java] 2004-03-25 15:17:07,730 INFO org.dspace.storage.rdbms.InitializeDatabase @ Initializing Database [java] 2004-03-25 15:17:08,816 FATAL org.dspace.storage.rdbms.InitializeDatabase @ Caught exception: [java] org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. [java] at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:204) [java] at org.postgresql.Driver.connect(Driver.java:139)
通常、PostgreSQLの設定ファイルに適切なパラメータ(上記を参照)を追加していないか、設定の変更後にPostgreSQLをリスタートしていないことを意味します。また、[dspace-source]/config/dspace.cfg
のdb.username
とdb.password
プロパティが正しく設定されているかも確認してください。
データベースがTCP/IP上で正常に稼動しているかどうかを簡単にチェックする方法は、これをコマンドラインで実行してみることです
psql -U dspace -W -h localhost
データベース上のdspace
ユーザのパスワードを入力します。正常であれば、dspace=>
プロントを持つpsqlツールに入るはずです。
もう一つのよくあるエラーは次のようなものです。
[java] 2004-03-25 16:37:16,757 INFO org.dspace.storage.rdbms.InitializeDatabase @ Initializing Database [java] 2004-03-25 16:37:17,139 WARN org.dspace.storage.rdbms.DatabaseManager @ Exception initializing DB pool [java] java.lang.ClassNotFoundException: org.postgresql.Driver [java] at java.net.URLClassLoader$1.run(URLClassLoader.java:198) [java] at java.security.AccessController.doPrivileged(Native Method) [java] at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
これはPostgreSQL JDBCドライバが[dspace-source]/lib
にないことを意味しています。上記を参照してください
Tomcatの設定を変えてもエラーの内容が変わらない場合は、Tomcatが正常に終了されなかったためだと思われます。それで、おそらく失効したコネクションのクローズをいつまでも待っているのでしょう。コネクションは永久にクローズされません。これを確かめるには次のコマンドを実行して、TomcatのJavaプロセスを捜します。
ps -ef | grep java
Tomcatのshutdown.sh
スクリプトを実行してもまだプロセスが残っているようなら、kill
コマンドで(必要に応じて-9
オプションを付けて)プロセスを終了させます。そして、あらためてTomcatをスタートさせてください。
DSpaceのWebページにアクセスしてもいつまでたっても画面が現れない、あるいは、データベースの接続に失敗する場合は、データベースコネクションの「ゾンビ」プロセスが残っていて、正常な操作を妨げていると思われます。これを確かめるには、次のコマンドを実行します。
ps -ef | grep postgres
以下のような複数のプロセスがあるか確認してください。
dspace 16325 1997 0 Feb 14 ? 0:00 postgres: dspace dspace 127.0.0.1 idle in transaction
もしあれば正常です。DSpaceはデータベースコネクションの開閉に伴うオーバーヘッドを避けるためにオープンされたデータベースコネクションを「プール」して再利用しています。「idle」状態にあっても大丈夫です。使用されるのを待っているだけです。しかし、何か問題が生じると、クエリの途中で処理が止まり、そのために他のデータベースコネクションの動作を妨げる場合があります。その場合は、たとえば、次のように表示されます。
dspace 16325 1997 0 Feb 14 ? 0:00 postgres: dspace dspace 127.0.0.1 SELECT
この例では、SELECT
操作の途中であることを意味しています。もしこの時DSpaceを使用していなかったとしたら、おそらくそれは「ゾンビ」プロセスです。このような場合は、そのプロセスをkill
し、Tomcatを終了させてから、リスタートしてください。
DSpaceを再構築し、[dspace-source]/build
ディレクトリからdspace.war
を[tomcat]/webapps
ディレクトリにコピーした後、Tomcatをリスタートする前に、既存の[tomcat]/webapps/dspace
ディレクトリを削除しなければなりません。そうしないと、Tomcatは古いプログラムを使い続けることになります。