Linux

如何讓 Openfire 3.7.1 “記住”它的配置?

  • September 11, 2012

我有(嗯,直到今天早上)一個 Openfire 內部網 XMPP 伺服器,它已經快樂地執行了 370 天而沒有被觸及,總共執行了大約 3 年。使用者通過相鄰伺服器上的 AD 進行身份驗證,並按 OU 分組。所有這些功能都有效

$$ ed|s $$偉大的。 我的問題是今天早上服務崩潰了,我的助手在嘗試使用管理控制台確定問題所在時收到“沒有 Java 堆空間”錯誤(並且沒有截圖,抱歉)。我們去了物理控制台並重新啟動了服務,它重新啟動得很好,或者至少沒有明顯的錯誤。

但是現在,嘗試進入管理控制台會打開初始設置頁面。我呻吟了一聲,但還是把筆記翻了出來,重新輸入了所有的 LDAP 資訊和 DB 連接資訊。我有些滿意地點擊了“登錄到管理控制台”按鈕,然後等待……只是返回到我剛剛離開的設置螢幕,詢問我首選的系統語言是什麼。所以:

MySQL 伺服器正在執行,並且 /opt/openfire/conf/openfire.xml 文件中的連接資訊正確。我通過使用該文件中的憑據查看 ofProperty 表來測試連接。檢查 ofProperty 表的內容顯示設置已保存在那裡,包括所有 LDAP 資訊、名稱和其他欄位、組定義等所有內容。但是Openfire 拒絕從數據庫中載入這些內容。

我檢查過的事情:

  • 檢查 /var/log/messages 並沒有發現任何異常。
  • MySQL 執行良好,能夠從本地主機以及我機器上的 MySQL 工作台獲取連接。
  • 我的磁碟已使用 3%。
  • 記憶體不是問題,使用0k交換。
  • 這台機器只執行openfire,沒有別的。
  • Netstat 僅顯示在 9090 和 9091(管理埠)上偵聽的 openfire 程序。
  • 執行 ps 僅顯示管理程序。
  • 沒有安裝任何更新。
  • 沒有更改任何配置。
  • 這台機器無法從網際網路訪問,因此黑客攻擊似乎不太可能。也沒有其他跡象。

編輯:顯示連接被拒絕的日誌剪輯,但顯然只發生在較早的時間:

   2012.05.16 09:27:47 org.jivesoftware.database.DbConnectionManager - Unable to get a connection from the database pool (attempt 10 out of 10).
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection refused

STACKTRACE:

java.net.ConnectException: Connection refused
   at java.net.PlainSocketImpl.socketConnect(Native Method)
   at java.net.PlainSocketImpl.doConnect(Unknown Source)
   at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
   at java.net.PlainSocketImpl.connect(Unknown Source)
   at java.net.SocksSocketImpl.connect(Unknown Source)
   at java.net.Socket.connect(Unknown Source)
   at java.net.Socket.connect(Unknown Source)
   at java.net.Socket.<init>(Unknown Source)
   at java.net.Socket.<init>(Unknown Source)
   at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
   at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
   at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
   at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
   at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
   at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:211)
   at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnectionProvider.java:86)
   at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:124)
   at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:754)
   at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:480)
   at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at java.lang.Class.newInstance0(Unknown Source)
   at java.lang.Class.newInstance(Unknown Source)
   at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)
   at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.
   at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
   at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
   at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
   at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
   at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:211)
   at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at java.sql.DriverManager.getConnection(Unknown Source)
   at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnectionProvider.java:86)
   at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:124)
   at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:754)
   at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:480)
   at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at java.lang.Class.newInstance0(Unknown Source)
   at java.lang.Class.newInstance(Unknown Source)
   at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)
   at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)
2012.05.16 09:27:48 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 09:36:34 org.jivesoftware.openfire.pubsub.PubSubModule - Publish-Subscribe domain: pubsub.cc.server.local
2012.05.16 09:36:36 org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl - Multi User Chat domain: conference.cc.server.local
2012.05.16 09:37:48 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 9:37:48 AM]
2012.05.16 09:38:01 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 09:54:21 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 09:54:33 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 9:54:33 AM]
2012.05.16 09:54:46 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 10:07:24 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:07:37 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:07:37 AM]
2012.05.16 10:07:49 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 10:26:39 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:28:54 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:28:54 AM]
2012.05.16 10:29:10 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 10:33:25 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:33:38 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:33:38 AM]
2012.05.16 10:33:51 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 10:51:38 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:51:51 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:51:51 AM]
2012.05.16 10:52:04 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091
2012.05.16 10:53:01 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:53:35 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:53:35 AM]
2012.05.16 10:53:49 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
 http://127.0.0.1:9090
 https://127.0.0.1:9091

在那次失敗之後,我嘗試了各種重新配置和重新啟動服務,你可以看到管理控制台出現了。

長話短說:看看其他地方的另一個(工作)安裝。原來有一個名為的值<setup>駐留在openfire.xml工作安裝的文件中,如下所示:

...(XML snipped)
     <minConnections>5</minConnections>  
     <maxConnections>25</maxConnections>  
     <connectionTimeout>1.0</connectionTimeout> 
   </defaultProvider> 
 </database>  
 <setup>true</setup> 
</jive>

openfire.xml由於某種原因,我的設置行失去了。

有趣的是,該文件由 root 擁有並且只能由 root 寫入,因此一些特權程序在安裝過程執行時刪除了該行(不知何故???),而顯然不理會連接參數。但是,由於該文件只能由 root 寫入,因此 JRE 執行的設置腳本無法寫入該文件。另外,我是個白痴,在 Java 異常中錯過了這一行:

java.io.IOException: XML properties file must be writable: openfire.xml

顯然它對設置過程的某些部分是可寫的,而不是其他部分?我不知道。但如果其他人有這個問題,希望他們能在這裡找到答案。<setup>通過將值添加到 openfire.xml ,我能夠糾正問題並立即載入 Openfire 。

引用自:https://serverfault.com/questions/389711