OSがセットアップできたので jetty の環境を構築する。

- JDKのインストール
host# cd /usr/ports/java/diablo-jdk16
host# make install
-- 手動ダウンロードの指示がされるので従う。

- Jetty
-- 導入はzipを落して来て展開するだけなので割愛。
-- 自動起動スクリプト jail:/usr/local/etc/rc.d/wsjs.sh

#!/bin/bash

export JETTY_HOME=/Jettyのホーム
export JETTY_USER=実行ユーザ
export JETTY_PORT=公開ポート番号

export XVAR=/一時ファイル用ディレクトリ
export TMP=$XVAR/tmp
export JETTY_RUN=$XVAR/run
export JETTY_LOGS=$XVAR/logs

export JAVA_HOME=JDKのホーム
export JAVA_POLICY="-Djava.security.manager -Djava.security.policy=$JETTY_HOME/etc/java.policy"
export JAVA_OPTIONS="-Xmx700M -Xss2M $JAVA_POLICY"

$JETTY_HOME/bin/jetty.sh $*

-- Jettyのログ出力がJettyのホームに固定になっているので補正。
JETTY_HOME/etc/jetty-logging.xml:

16c16
< <Arg><SystemProperty name="jetty.home" default="."/>/logs/yyyy_mm_dd.stderrout.log</Arg>
---
> <Arg><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg>




- java の policy ファイル
-- 空から始めて要求されたパーミッションを1つづつ追加していった。
-- RuntimePermission で強い権限が許可されてしまっているが仕方が無い。
-- FilePermission は必要最低限で問題なさそう。
-- SocketPermission は緩めだがパケットフィルタでなんとかしてもらう。

$JETTY_HOME/etc/java.policy:

grant CodeBase "file:/Jettyホーム/-" {
permission java.io.FilePermission "/WSJSリポジトリ/-", "read,write";
permission java.io.FilePermission "/ログディレクトリ/-", "read,write";
permission java.io.FilePermission "/tmp/-", "read,write,delete";

permission java.io.FilePermission "/Jettyホーム/-", "read";
permission java.io.FilePermission "/usr/share/java/-", "read";

permission java.net.SocketPermission "localhost:公開ポート", "listen,accept";
permission java.net.SocketPermission "*", "connect,accept,resolve";

permission java.util.PropertyPermission "*", "read";
permission java.util.PropertyPermission "jetty.home", "read,write";
permission java.util.PropertyPermission "java.class.path", "read,write";

permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "setContextClassLoader";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "exitVM";
permission java.lang.RuntimePermission "setIO";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";

permission java.security.SecurityPermission "getPolicy";
};
grant CodeBase "file:/一時ファイル用ディレクトリ/tmp/-" {
permission java.io.FilePermission "/WSJSリポジトリ/-", "read,write";
permission java.io.FilePermission "/ログディレクトリ/-", "read,write";
permission java.io.FilePermission "/tmp/-", "read,write,delete";
permission java.io.FilePermission "/Jettyホーム/lib/-", "read";

permission java.net.SocketPermission "*", "connect,accept,resolve";

permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getProtectionDomain";
permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";

permission java.util.PropertyPermission "user.home", "read";
};



この設定で公開中の自宅サーバ:http://wsjs.dip.jp:8008/