OpenAMをRESTでセットアップする

OpenAMのJIRAを眺めていたら、RESTでOpenAMの初期設定(セットアップ)をすることができることに気付きました。OpenAMのwarファイルをサーブレットコンテナにデプロイして、以下のようにURL エンコードした各種パラメータを/openam/config/configuratorエンドポイントにPOSTすると、数秒後に初期設定が完了します。

# curl --request POST "http://openam.example.com:8080/openam/config/configurator" \
 --header "Content-Type:application/x-www-form-urlencoded" \
 --data-urlencode "SERVER_URL=http://openam.example.com:8080" \
 --data-urlencode "DEPLOYMENT_URI=openam" \
 --data-urlencode "BASE_DIR=/opt/tomcat7/openam" \
 --data-urlencode "locale=en_US" \
 --data-urlencode "PLATFORM_LOCALE=en_US" \
 --data-urlencode "ADMIN_PWD=p@s2word" \
 --data-urlencode "ADMIN_CONFIRM_PWD=p@s2word" \
 --data-urlencode "AMLDAPUSERPASSWD=Passw0rd" \
 --data-urlencode "AMLDAPUSERPASSWD_CONFIRM=Passw0rd" \
 --data-urlencode "COOKIE_DOMAIN=.example.co.jp" \
 --data-urlencode "DATA_STORE=embedded" \
 --data-urlencode "DIRECTORY_SSL=SIMPLE" \
 --data-urlencode "DIRECTORY_SERVER=localhost" \
 --data-urlencode "DIRECTORY_PORT=50389" \
 --data-urlencode "DIRECTORY_ADMIN_PORT=4444" \
 --data-urlencode "DIRECTORY_JMX_PORT=1689" \
 --data-urlencode "ROOT_SUFFIX=dc=openam,dc=forgerock,dc=org" \
 --data-urlencode "DS_DIRMGRDN=cn=Directory Manager" \
 --data-urlencode "DS_DIRMGRPASSWD=p@s2word" \
 --data-urlencode "acceptLicense=true"

Configuration complete!

GUIを使うと入力の手間やミスがあるので、動作検証などで何回もセットアップするような場合にこの方法は便利です。設定ツール(openam-configurator-tool.jar)を使って、同様にサイレントインストールをすることもできますが、設定ツールはダウンロードとインストールをしないといけないので、RESTの方が少しだけ簡単にできます。

ただし、この方法は今のことろOpenAMのインストールガイドにも載っていない、非公式なもののようです。初期化処理の途中経過が分からない点や例外処理が弱い点も考慮して、非公式のままにしているのだと思います。エラーレスポンスもスタックトレース付きのHTML形式で返ってきていました…

# curl --verbose --request POST "http://openam.example.com:8080/openam/config/configurator" \
 --header "Content-Type:application/x-www-form-urlencoded" \
 --data-urlencode "SERVER_URL=http://openam.example.com:8080" \
 --data-urlencode "DEPLOYMENT_URI=openam" \
 --data-urlencode "BASE_DIR=/opt/tomcat7/openam" \
 --data-urlencode "locale=en_US" \
 --data-urlencode "PLATFORM_LOCALE=en_US" \
 --data-urlencode "ADMIN_PWD=p@s2word" \
 --data-urlencode "ADMIN_CONFIRM_PWD=p@s2word" \
 --data-urlencode "AMLDAPUSERPASSWD=p@s2word" \
 --data-urlencode "AMLDAPUSERPASSWD_CONFIRM=p@s2word" \
 --data-urlencode "COOKIE_DOMAIN=.example.co.jp" \
 --data-urlencode "DATA_STORE=embedded" \
 --data-urlencode "DIRECTORY_SSL=SIMPLE" \
 --data-urlencode "DIRECTORY_SERVER=localhost" \
 --data-urlencode "DIRECTORY_PORT=50389" \
 --data-urlencode "DIRECTORY_ADMIN_PORT=4444" \
 --data-urlencode "DIRECTORY_JMX_PORT=1689" \
 --data-urlencode "ROOT_SUFFIX=dc=openam,dc=forgerock,dc=org" \
 --data-urlencode "DS_DIRMGRDN=cn=Directory Manager" \
 --data-urlencode "DS_DIRMGRPASSWD=p@s2word" \
 --data-urlencode "acceptLicense=true"

* About to connect() to openam.example.com port 8080 (#0)
* Trying 172.105.126.221... connected
* Connected to openam.example.com (172.105.126.221) port 8080 (#0)
> POST /openam/config/configurator HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
> Host: openam.example.com:8080
> Accept: */*
> Content-Type:application/x-www-form-urlencoded
> Content-Length: 572
>
< HTTP/1.1 500 Internal Server Error
< Server: Apache-Coyote/1.1
< Content-Type: text/html;charset=utf-8
< Content-Language: en
< Content-Length: 2474
< Date: Thu, 25 Aug 2016 05:58:34 GMT
< Connection: close
<
<html><head><title>Apache Tomcat/7.0.57 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - AMSetupFilter.doFilter</h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u>AMSetupFilter.doFilter</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: AMSetupFilter.doFilter
com.sun.identity.setup.AMSetupFilter.doFilter(AMSetupFilter.java:141)
org.forgerock.openam.audit.context.AuditContextFilter.doFilter(AuditContextFilter.java:51)
</pre></p><p><b>root cause</b> <pre>com.sun.identity.setup.ConfiguratorException: Default Agent Password cannot be the same as Administrator password.
com.sun.identity.setup.ServicesDefaultValues.validateURLAccessAgentPassword(ServicesDefaultValues.java:443)
com.sun.identity.setup.ServicesDefaultValues.validatePassword(ServicesDefaultValues.java:353)
com.sun.identity.setup.ServicesDefaultValues.setServiceConfigValues(ServicesDefaultValues.java:125)
com.sun.identity.setup.AMSetupServlet.processRequest(AMSetupServlet.java:466)
com.sun.identity.setup.AMSetupServlet.doPost(AMSetupServlet.java:439)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.forgerock.openam.validation.ResponseValidationFilter.doFilter(ResponseValidationFilter.java:44)
com.sun.identity.setup.AMSetupFilter.doFilter(AMSetupFilter.java:125)
org.forgerock.openam.audit.context.AuditContextFilter.doFilter(AuditContextFilter.java:51)
* Closing connection #0
</pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/7.0.57 logs.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.57</h3></body></html>
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中