Aipo構築済のサーバを2ndドメインコントローラに昇格ところ、Aipoが起動しなくなったため、対応した時のメモを残します。
目次
環境
- Windows Server 2008 x64
- Aipo 7.0.2.0
- 1stドメインコントローラは別にあり
対応の流れ
AipoTomcatやAipoPostgreSQLが動作しない
以下を参考に2ndドメインコントローラとして構築、再起動したところ、Aipoが起動しませんでした。
Windows インターフェイスを使用して追加のドメイン コントローラーをインストールする
Aipoマネージャーから起動しても動作せず、サービスを確認しても、AipoTomcatやAipoPostgreSQLが動作しませんでした。
また、イベントビューア(Windowsログ > システム)を見たところ、以下が出力されていました。
項目 | 値 |
---|---|
ソース | Service Control Manager Eventlog Provider |
イベントID | 7038 |
レベル | エラー |
AipoPostgreSQL サービスで、現在構成されているパスワードで .\aipo_postgres としてログオンできませんでした。次のエラーが原因です: ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
AipoTomcatやAipoPostgreSQLのサービスログオンアカウントを確認したところ、
- AipoTomcat: ローカルシステムアカウント
- AipoPostgreSQL:
.\aipo_postgres
でした。
ドメインメンバのWindows Serverをドメインコントローラに昇格させると、
- ドメインコントローラ昇格後のサーバローカルAdministratorの扱いについて
- ローカルユーザーが存在するサーバーをドメインコントローラに昇格した場合ユーザーはどうなるのか? | puti se blog
のように、ローカルアカウントは削除されるとともに、アカウント自体はドメインアカウントへと引き継がれることから、このあたりにエラーの原因があると考えました。
そこで、サーバのローカルアカウントを確認してみました。
コントロールパネル > ユーザーアカウント > 詳細設定タブの詳細設定ボタン
を押したところ、ドメインコントローラではこのスナップインは使用できません
と表示され、ローカルアカウントはいないようでした。
一方、ドメインのユーザを確認すると、aipo_postgres
ユーザ(所属はDomain Users
のみ)がいました。引き継がれているようです。
これにより、存在しないユーザがサービスログオンアカウントとなっているため、うまく動作しないのではと考えられました。
その場合、引き継がれたドメインユーザを使用してサービスを動かせば良さそうですが、以下のような症状が発生することも想定されたため、aipo_postgres
ユーザにDomain Admins
とAdministrators
を追加しました。
6.0.1から6.0.3へのバージョンアップ失敗|無料グループウェア「アイポ」
また、元々ローカルアカウントであったaipo_postgres
のパスワードが分からなかったため、任意のパスワードへと変更しました。
その後、AipoPostgreSQLサービスのプロパティにて
- ログオンアカウントを、
ドメイン名\aipo_postgres
- ログオンアカウントのパスワードは、変更後のもの
をそれぞれ設定したところ、サービスが起動するようになりました。
AipoPostgreSQLサービスがすぐ止まる
AipoPostgreSQLサービスは一瞬起動しましたが、すぐに停止しました。
イベントビューア(Windowsログ > アプリケーション)を見たところ、以下が出力されていました。
項目 | 値 |
---|---|
ソース | PostgreSQL |
イベントID | 0 |
レベル | エラー |
FATAL: could not remove old lock file "postmaster.pid": Permission denied
HINT: The file seems accidentally left over, but it could not be removed. Please remove the file by hand and try again.
メッセージにあったpostmaster.pid
について調べたところ、以下がありました。
- mvn cleanしても「タイムアウト…」表示になるAipoを起動する | hacknote
- postgres をちゃんと終了しないと.pidファイルが残っちゃって、Rails が起動しないもんだい · GitHub
- osx - "FATAL: lock file "postmaster.pid" already exists" - Super User
確認してみたところ、C:\aipo\dpl7020\postgresql\data\postmaster.pid
にファイルがありました。
HINTにある通り、このファイルを削除します。
再度Aipoを起動してみたところ、イベントビューア(Windowsログ > アプリケーション)で別のエラーが出ていました。
項目 | 値 |
---|---|
ソース | PostgreSQL |
イベントID | 0 |
レベル | エラー |
PANIC: could not open control file "global/pg_control": Permission denied
ファイルが開けないエラーだったため、該当のファイルを探します。Windowsの場合、C:\aipo\dpl7020\postgresql\data\global\pg_control
にありました。
ファイルのセキュリティタブを確認すると、不明なアカウント
が1つありました。一方、ドメインアカウントのドメイン名\aipo_postgres
に関するアクセス権は設定されていませんでした。
これらより、AipoPostgreSQLサービスでログオンしているユーザが、必要なファイルにアクセスできていないのではないかと考えました。おそらくですが、ドメインコントローラに昇格した際に失われた、ローカルユーザーアカウントのaipo_postgres
が不明なアカウントなのかな、と。
この不明なアカウントがどこの階層から発生したのかを調べたところ、C:\aipo\dpl7020\postgresql\data
でした。
そのため、そのディレクトリ以下に対して、フルコントロールのアクセス権を持つドメイン名\aipo_postgres
ユーザを追加しました。
この状態で、再度Aipoマネージャーから起動したところ、Aipoが動作するようになりました。
まとめ
- ドメインアカウント
ドメイン名\aipo_postgres
の所属するグループに、Domain Admins
とAdministrators
を追加 - サービス停止しているのに
C:\aipo\dpl7020\postgresql\data\postmaster.pid
があった場合、削除 C:\aipo\dpl7020\postgresql\data
ディレクトリに、ドメイン名\aipo_postgres
アカウントを、フルコントロール権限で追加
その他
PostgreSQLのアクセスに関する設定ファイルは、
C:\aipo\dpl7020\postgresql\data\pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
C:\aipo\dpl7020\tomcat\webapps\aipo\WEB-INF\datasource\dbcp-org001.properties
cayenne.dbcp.driverClassName=org.postgresql.Driver cayenne.dbcp.url=jdbc:postgresql://localhost:5432/org001 cayenne.dbcp.username=aipo_postgres cayenne.dbcp.password=<任意の文字列> cayenne.dbcp.maxActive=100 cayenne.dbcp.minIdle=3 cayenne.dbcp.maxIdle=20 cayenne.dbcp.maxWait=10000
となっていました。
PostgreSQLに接続するアカウントと、Windowsサービスのログオンユーザは別のようだったので、これらのファイルは修正しませんでした。
Aipo7、postgresのパスワード|無料グループウェア「アイポ」