Debian wheezyでsolr-jettyを使う


いきなりなんですが、solrが何ぞっていうのはちょっと置いておいて、ここではsolrをjettyの上で動かすパッケージをインストールしてみます。(solrの使い方とかはまたいつか書きたい)
利用するのはDebian wheezyを利用します。squeezeまでは存在していませんでしたが、このバージョンではどうでしょうか。まともに使えるんでしょーか?

(ちょっと補足すると、jettyはサーブレットコンテナ、solrはjavaのwebアプリと考えてとりあえず良いかと思います)

solrをインストール

いきなりsolr-jettyをインストールしてもよいのでしょうが、まずはjetty単体をインストールしてみます。

# apt-get install jetty
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  apache2-utils ca-certificates ca-certificates-java dbus default-jre-headless
  icedtea-6-jre-cacao icedtea-6-jre-jamvm java-common jsvc libapr1 libaprutil1
  libavahi-client3 libavahi-common-data libavahi-common3 libcap2
  libcommons-daemon-java libcups2 libdbus-1-3 libjetty-java libjpeg8
  liblcms2-2 libnspr4 libnss3 libnss3-1d libpcsclite1 libservlet2.5-java
  libslf4j-java libsystemd-login0 openjdk-6-jre-headless openjdk-6-jre-lib
  openssl tzdata-java
提案パッケージ:
  dbus-x11 default-jre equivs libjetty-extra-java libjetty-extra
  libjetty-java-doc java-virtual-machine cups-common liblcms2-utils pcscd
  libcommons-logging-java liblog4j1.2-java libnss-mdns sun-java6-fonts
  ttf-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho ttf-wqy-microhei
  ttf-wqy-zenhei ttf-indic-fonts
以下のパッケージが新たにインストールされます:
  apache2-utils ca-certificates ca-certificates-java dbus default-jre-headless
  icedtea-6-jre-cacao icedtea-6-jre-jamvm java-common jetty jsvc libapr1
  libaprutil1 libavahi-client3 libavahi-common-data libavahi-common3 libcap2
  libcommons-daemon-java libcups2 libdbus-1-3 libjetty-java libjpeg8
  liblcms2-2 libnspr4 libnss3 libnss3-1d libpcsclite1 libservlet2.5-java
  libslf4j-java libsystemd-login0 openjdk-6-jre-headless openjdk-6-jre-lib
  openssl tzdata-java
アップグレード: 0 個、新規インストール: 33 個、削除: 0 個、保留: 0 個。
46.7 MB のアーカイブを取得する必要があります。
この操作後に追加で 71.5 MB のディスク容量が消費されます。
続行しますか [Y/n]?

素のwheezyなんでいろいろ入ってきてしまうわけなのですが、Debian wheezyではjetty 6.1.26というバージョンがインストールされます。これはオフィシャルドキュメントにあるようにSolr 3.5.0を利用するのに適しているバージョンという事になります。

まずはjettyの構成を見てみる事にしましょう。

$ dpkg -L jetty
/.
/etc
/etc/jetty
/etc/jetty/contexts
/etc/jetty/contexts/javadoc.xml
/etc/jetty/contexts/README.TXT
/etc/jetty/jdbcRealm.properties
/etc/jetty/jetty-ajp.xml
/etc/jetty/jetty-bio.xml
/etc/jetty/jetty-debug.xml
/etc/jetty/jetty-extra.conf
/etc/jetty/jetty-jmx.xml
/etc/jetty/jetty-jsp.xml
/etc/jetty/jetty-logging.xml
/etc/jetty/jetty-plus.xml
/etc/jetty/jetty-rewrite.xml
/etc/jetty/jetty-setuid.xml
/etc/jetty/jetty-ssl.xml
/etc/jetty/jetty-sslengine.xml
/etc/jetty/jetty-stats.xml
/etc/jetty/jetty-xinetd.xml
/etc/jetty/jetty.conf
/etc/jetty/jetty.xml
/etc/jetty/keystore
/etc/jetty/realm.properties
/etc/jetty/start.config
/etc/jetty/webdefault.xml
/etc/jetty/jetty-shared-webapps.xml
/etc/cron.daily
/etc/cron.daily/jetty
/etc/default
/etc/default/jetty
/etc/init.d
/etc/init.d/jetty
/usr
/usr/share
/usr/share/jetty
/usr/share/jetty/resources
/usr/share/jetty/resources/log4j.properties
/usr/share/doc
/usr/share/doc/jetty
/usr/share/doc/jetty/copyright
/usr/share/doc/jetty/LICENSES
/usr/share/doc/jetty/LICENSES/NOTICE.txt
/usr/share/doc/jetty/LICENSES/cla-dexter.txt.gz
/usr/share/doc/jetty/LICENSES/cla-dyu.txt.gz
/usr/share/doc/jetty/LICENSES/cla-gnodet.txt.gz
/usr/share/doc/jetty/LICENSES/cla-gregw.txt.gz
/usr/share/doc/jetty/LICENSES/cla-janb.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jesse.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jfarcand.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jocsch.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jstrachan.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jules.txt.gz
/usr/share/doc/jetty/LICENSES/cla-jvz.txt.gz
/usr/share/doc/jetty/LICENSES/cla-lorban.txt.gz
/usr/share/doc/jetty/LICENSES/cla-mgorovoy.txt.gz
/usr/share/doc/jetty/LICENSES/cla-mpurland.txt.gz
/usr/share/doc/jetty/LICENSES/cla-ngonzalez.txt.gz
/usr/share/doc/jetty/LICENSES/cla-potterru.txt.gz
/usr/share/doc/jetty/LICENSES/cla-sbordet.txt.gz
/usr/share/doc/jetty/LICENSES/cla-tbecker.txt.gz
/usr/share/doc/jetty/LICENSES/cla-template.txt.gz
/usr/share/doc/jetty/LICENSES/cla-tvernum.txt.gz
/usr/share/doc/jetty/LICENSES/ccla-exist.pdf.gz
/usr/share/doc/jetty/LICENSES/ccla-sabre.pdf.gz
/usr/share/doc/jetty/LICENSES/ccla-simulalabs.txt.gz
/usr/share/doc/jetty/LICENSES/ccla-template.txt.gz
/usr/share/doc/jetty/README.Debian
/usr/share/doc/jetty/changelog.Debian.gz
/usr/share/doc/jetty/NEWS.Debian.gz
/usr/share/doc/jetty/changelog.gz
/usr/share/doc/jetty/README.txt.gz
/var
/var/lib
/var/lib/jetty
/var/lib/jetty/webapps
/var/lib/jetty/webapps/README.TXT
/var/lib/jetty/webapps/root
/var/lib/jetty/webapps/root/index.html
/var/lib/jetty/webapps/root/jetty_banner.gif
/var/log
/var/log/jetty
/var/cache
/var/cache/jetty
/usr/share/jetty/javadoc
/usr/share/jetty/contexts
/usr/share/jetty/etc
/usr/share/jetty/logs
/usr/share/jetty/webapps

ふむ。。。とりあえず起動はしていないようです。

# netstat -tlpn
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態        PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1896/sshd
tcp6       0      0 :::22                   :::*                    LISTEN

起動させてみます。

# /etc/init.d/jetty start
[....] Not starting jetty - edit /etc/default/jetty and change NO_START to be 0 [FAILomment it out). ... failed!

というわけなので/etc/default/jettyを編集する、と

# change to 0 to allow Jetty to start
# ↓ 1を0にする
NO_START=0

# /etc/init.d/jetty start
[....] Starting Jetty servlet engine.: jetty[....] Jetty servlet engine started,[ ok hable on http://{$your-host}:8080/.: jetty.

みたいに起動してきます。8080を既に利用している場合はコケちゃいますから先程のファイルでポートを変更してみてください。

、が、しかし

# netstat -tlpn
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態        PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1896/sshd
tcp6       0      0 127.0.0.1:8080          :::*                    LISTEN      6922/jsvc.exec
tcp6       0      0 :::22                   :::*                    LISTEN      1896/sshd

このようにローカルバインドになっているんで、とりあえずテストする為にどのホストからも接続できるようにしてみます。これは先程の/etc/default/jettyでこんな感じ定義しときます。

# Listen to connections from this network host
# Use 0.0.0.0 as host to accept all connections.
# Uncomment to restrict access to localhost
#JETTY_HOST=$(uname -n)
JETTY_HOST=0.0.0.0

# /etc/init.d/jetty restart
<略>
# netstat -tlpn
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態        PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1896/sshd
tcp6       0      0 :::8080                 :::*                    LISTEN      7061/jsvc.exec
tcp6       0      0 :::22                   :::*                    LISTEN      1896/sshd

こんな感じでしょう。該当ホストの8080ポートにhttp(というかブラウザーなど)でアクセスして

Welcome to Jetty 6 on Debian

とか見られれば一応okです。

solr-jettyを入れる

これもaptでいけるはずなんですが

# apt-get install solr-jetty
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  ant ant-optional curl fontconfig hicolor-icon-theme icedtea-netx
  icedtea-netx-common javascript-common libapache-mime4j-java
  libapache-pom-java libasound2 libasyncns0 libatk-wrapper-java
  libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libavalon-framework-java
  libbcel-java libcairo2 libclass-isa-perl libcommons-beanutils-java
  libcommons-codec-java libcommons-collections3-java libcommons-compress-java
  libcommons-dbcp-java libcommons-digester-java libcommons-fileupload-java
  libcommons-httpclient-java libcommons-io-java libcommons-lang-java
  libcommons-logging-java libcommons-parent-java libcommons-pool-java libcurl3
  libdatrie1 libecj-java libexcalibur-logkit-java libffi5 libflac8
  libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgeronimo-jta-1.1-spec-java
  libgeronimo-stax-1.2-spec-java libgif4 libglib2.0-0 libglib2.0-data
  libgnuinet-java libgnujaf-java libgnumail-java libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common libguava-java libhttpclient-java libhttpcore-java
  libhttpmime-java libice6 libicu4j-4.4-java libjasper1 libjaxp1.3-java
  libjbig0 libjetty-extra libjetty-extra-java libjs-jquery libjson0
  libjsr305-java libknopflerfish-osgi-framework-java libldap-2.4-2
  liblog4j1.2-java liblucene3-contrib-java liblucene3-java libmsv-java
  libmx4j-java libogg0 libpango1.0-0 libpcre3 libpixman-1-0 libpng12-0
  libportlet-api-2.0-spec-java libpulse0 libregexp-java
  librelaxng-datatype-java librtmp0 libsasl2-2 libsasl2-modules libsm6
  libsndfile1 libsolr-java libssh2-1 libstax-java libstax2-api-java
  libswitch-perl libthai-data libthai0 libtiff4 libtomcat6-java libvorbis0a
  libvorbisenc2 libwoodstox-java libx11-xcb1 libxcb-render0 libxcb-shm0
  libxcomposite1 libxcursor1 libxdamage1 libxerces2-java libxfixes3 libxft2
  libxi6 libxinerama1 libxml-commons-external-java
  libxml-commons-resolver1.1-java libxml2 libxrandr2 libxrender1 libxtst6
  libxz-java openjdk-6-jre perl perl-modules sgml-base shared-mime-info
  solr-common ttf-dejavu-extra wwwconfig-common xml-core
提案パッケージ:
  default-jdk java-compiler java-sdk ant-gcj ant-doc libbsf-java liboro-java
  libxalan2-java junit jython antlr libjdepend-java libcommons-net-java
  libjsch-java javacc ant-optional-gcj apache2 httpd libasound2-plugins
  libavalon-framework-java-doc libbcel-java-doc libcommons-beanutils-java-doc
  libcommons-collections3-java-doc libcommons-dbcp-java-doc
  libcommons-digester-java-doc libcommons-httpclient-java-doc
  libcommons-io-java-doc libcommons-lang-java-doc libcommons-logging-java-doc
  ecj libecj-java-gcj libgeronimo-jta-java-doc libgnumail-java-doc
  librsvg2-common gvfs libjasper-runtime libjaxp1.3-java-gcj
  libjsr305-java-doc libknopflerfish-osgi-java-doc liblog4j1.2-java-doc
  libjboss-jmx-java liblucene3-java-doc junit4 libhessian-java ttf-baekmuk
  ttf-arphic-gbsn00lp ttf-arphic-bsmi00lp ttf-arphic-gkai00mp
  ttf-arphic-bkai00mp pulseaudio libsasl2-modules-otp libsasl2-modules-ldap
  libsasl2-modules-sql libsasl2-modules-gssapi-mit
  libsasl2-modules-gssapi-heimdal libeasymock-java libjetty-extras-java
  libsolr-java-doc libstax-java-doc tomcat6 libxerces2-java-doc
  libxerces2-java-gcj libxml-commons-resolver1.1-java-doc icedtea-plugin
  perl-doc libterm-readline-gnu-perl libterm-readline-perl-perl make
  libpod-plainer-perl sgml-base-doc libmysql-java mysql-client
  postgresql-client debhelper
以下のパッケージが新たにインストールされます:
  ant ant-optional curl fontconfig hicolor-icon-theme icedtea-netx
  icedtea-netx-common javascript-common libapache-mime4j-java
  libapache-pom-java libasound2 libasyncns0 libatk-wrapper-java
  libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libavalon-framework-java
  libbcel-java libcairo2 libclass-isa-perl libcommons-beanutils-java
  libcommons-codec-java libcommons-collections3-java libcommons-compress-java
  libcommons-dbcp-java libcommons-digester-java libcommons-fileupload-java
  libcommons-httpclient-java libcommons-io-java libcommons-lang-java
  libcommons-logging-java libcommons-parent-java libcommons-pool-java libcurl3
  libdatrie1 libecj-java libexcalibur-logkit-java libffi5 libflac8
  libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgeronimo-jta-1.1-spec-java
  libgeronimo-stax-1.2-spec-java libgif4 libglib2.0-0 libglib2.0-data
  libgnuinet-java libgnujaf-java libgnumail-java libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common libguava-java libhttpclient-java libhttpcore-java
  libhttpmime-java libice6 libicu4j-4.4-java libjasper1 libjaxp1.3-java
  libjbig0 libjetty-extra libjetty-extra-java libjs-jquery libjson0
  libjsr305-java libknopflerfish-osgi-framework-java libldap-2.4-2
  liblog4j1.2-java liblucene3-contrib-java liblucene3-java libmsv-java
  libmx4j-java libogg0 libpango1.0-0 libpcre3 libpixman-1-0 libpng12-0
  libportlet-api-2.0-spec-java libpulse0 libregexp-java
  librelaxng-datatype-java librtmp0 libsasl2-2 libsasl2-modules libsm6
  libsndfile1 libsolr-java libssh2-1 libstax-java libstax2-api-java
  libswitch-perl libthai-data libthai0 libtiff4 libtomcat6-java libvorbis0a
  libvorbisenc2 libwoodstox-java libx11-xcb1 libxcb-render0 libxcb-shm0
  libxcomposite1 libxcursor1 libxdamage1 libxerces2-java libxfixes3 libxft2
  libxi6 libxinerama1 libxml-commons-external-java
  libxml-commons-resolver1.1-java libxml2 libxrandr2 libxrender1 libxtst6
  libxz-java openjdk-6-jre perl perl-modules sgml-base shared-mime-info
  solr-common solr-jetty ttf-dejavu-extra wwwconfig-common xml-core
アップグレード: 0 個、新規インストール: 127 個、削除: 0 個、保留: 0 個。
69.7 MB のアーカイブを取得する必要があります。
この操作後に追加で 163 MB のディスク容量が消費されます。
続行しますか [Y/n]?

どん引きみたいな依存状態ですが、こんなものといえばこんなものか。まあ、いっときますか。
インストールの間

solr-jetty (3.6.0+dfsg-1+deb7u1) を設定しています ...
[....] Stopping Jetty servlet engine (was reachable on http://{$your-host}:8080[ ok jetty . .[....] Jetty servlet engine stopped.: jetty.
[....] Starting Jetty servlet engine.: jetty Rotate logs[....] Jetty servlet eng[ ok tarted, reachable on http://{$your-host}:8080/.: jetty.

とまあこんな感じ再起動がかかるわけですが、どうしたらいいかわからんというわけなので、入ったものを確認します。

とりあえずsolr-jettyをdpkg -L してみますと

# dpkg -L solr-jetty
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/solr-jetty
/usr/share/doc/solr-jetty/changelog.Debian.gz
/usr/share/doc/solr-jetty/copyright
/usr/share/solr
/usr/share/solr/web
/usr/share/solr/web/WEB-INF
/usr/share/solr/web/WEB-INF/jetty-web.xml
/var
/var/lib
/var/lib/jetty
/var/lib/jetty/webapps
/var/lib/jetty/webapps/solr

なるほど、webappsの下にsolrが配置されております。



# ls -l /var/lib/jetty/webapps/
合計 8
-rw-r--r-- 1 jetty adm   697 10月 30  2006 README.TXT
drwxr-xr-x 2 jetty adm  4096 11月  8 01:38 root
lrwxrwxrwx 1 root  root   22  6月 17 02:51 solr -> /usr/share/solr/webapp

/var/lib/jetty/webapps/を見るとsolrがシンボリックリンクになっており、リンク先の/usr/share/solrを見てみると...

# ls -l /usr/share/solr/
合計 8
drwxr-xr-x 2 root root 4096 11月  8 02:11 bin
lrwxrwxrwx 1 root root   14  6月 17 02:51 conf -> /etc/solr/conf
lrwxrwxrwx 1 root root   18  6月 17 02:51 data -> /var/lib/solr/data
lrwxrwxrwx 1 root root   13  6月 17 02:51 logs -> /var/log/solr
lrwxrwxrwx 1 root root    3  6月 17 02:51 scripts -> bin
lrwxrwxrwx 1 root root   18  6月 17 02:51 solr.xml -> /etc/solr/solr.xml
drwxr-xr-x 4 root root 4096 11月  8 02:11 web

/usr/share/solr/webappが見つからんというオチが発生します。。このヘンはダメですね。直します。

# rm /var/lib/jetty/webapps/solr
# ln -s /usr/share/solr/web /var/lib/jetty/webapps/solr
# /etc/init.d/jetty restart

さて、これでhttp://your-host:8080/solrとかにアクセスしみると...

HTTP ERROR 500

Problem accessing /solr/. Reason:

    Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-openjdk-amd64/jre"

Caused by:

Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/java-6-openjdk-amd64/jre"

お、おう。javacが無いんだって。

# tyep javac
-su: tyep: コマンドが見つかりません

徐に、openjdk-6-jdkを、インストールしまうす。default-jdkでもいいのかもしれぬ... java関連はよくわからん所も多いです。とりあえずjavacできるようにする事が必要なのでしょう。この辺もおそらく依存落ちか?

ともあれ、確認後、一度再起動しときますか

# type javac
javac は /usr/bin/javac です
# /etc/init.d/jetty restart

これで殺風景な管理画面へのリンクが見えます。管理画面はノーパスで入れるので、これは最終的には何とかする必要があるでしょう。

ともあれ、おつかれ様でした。