読者です 読者をやめる 読者になる 読者になる

Aipo構築済のサーバを2ndドメインコントローラに昇格したら、Aipoが起動しなくなった

Aipo ActiveDirectory

Aipo構築済のサーバを2ndドメインコントローラに昇格ところ、Aipoが起動しなくなったため、対応した時のメモを残します。

目次

 

環境

 

対応の流れ

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をドメインコントローラに昇格させると、

のように、ローカルアカウントは削除されるとともに、アカウント自体はドメインアカウントへと引き継がれることから、このあたりにエラーの原因があると考えました。

   
そこで、サーバのローカルアカウントを確認してみました。

コントロールパネル > ユーザーアカウント > 詳細設定タブの詳細設定ボタンを押したところ、ドメインコントローラではこのスナップインは使用できませんと表示され、ローカルアカウントはいないようでした。

一方、ドメインのユーザを確認すると、aipo_postgresユーザ(所属はDomain Usersのみ)がいました。引き継がれているようです。

これにより、存在しないユーザがサービスログオンアカウントとなっているため、うまく動作しないのではと考えられました。

 
その場合、引き継がれたドメインユーザを使用してサービスを動かせば良さそうですが、以下のような症状が発生することも想定されたため、aipo_postgresユーザにDomain AdminsAdministratorsを追加しました。
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について調べたところ、以下がありました。

 
確認してみたところ、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 AdminsAdministratorsを追加
  • サービス停止しているのに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のパスワード|無料グループウェア「アイポ」