August 08, 2005

[繁體中譯]OpenNMS Installation Guide (for Release 1.2.3)

終於翻出新版(1.2.3)的OpenNMS安裝指南啦! 放在這邊格式會有點亂,不過我也不知道該放在哪裡:p 喔,我還不打算提交給OpenNMS開發團隊,因為1.2.4(穩定版)和1.3.0(測試版)馬上要出了…不過沒關係,這次追上了,以後只要注意開發團隊有沒有在CVS裡面更新文件就可以囉! OpenNMS安裝指南

目錄

前 言
1. 概述
1.1. 關於OpenNMS
1.2. 如何運用這份文件
1.3. 最低需求
2. 安裝前的準備工作
2.1. 必要的套件:Java
2.1.1. 在Debian上安裝Java
2.1.2. 在其他系統上安裝Java
2.2. 必要的套件:Tomcat4
2.2.1. 在Debian Sid上修改Tomcat4
2.2.2. 在Fedora 2和3上安裝合適的Tomcat4
2.2.3. 在SuSE Linux Pro 9上安裝Tomcat4
2.2.4. 客製化Tomcat4
2.3. 必要的套件:RRDtool
2.4. 必要的套件:PostgreSQL
2.4.1. 客製化postgresql.conf檔 案
2.4.2. 客製化pg_hba.conf檔 案
2.4.3. 在Red Hat Linux 7上安裝PostgreSQL
2.4.4. 在Solaris上建立PostgreSQL資料庫
2.5. 必要的套件:curl
2.6. 非必要的套件:metamail
3. 安裝OpenNMS
3.1. 執行首次安裝
3.1.1. 安裝於Debian Linux
3.1.2. 安裝於以RPM為基礎的Linux發行版本
3.1.3. 安裝於Solaris
3.1.4. 安裝於Mac OS X
3.1.5. 從程式原始碼安裝
3.2. 幫裝好的舊版升級
3.2.1. OpenNMS相關資料之存放位置
3.2.2. 升級之前……請先備份!
3.3. 運行安裝程式(installer)
3.3.1. 為OpenNMS設定Java
3.3.2. 運行安裝程式(installer)來設定PostgreSQL資料庫
3.3.3. 運行安裝程式(installer)來設定網頁應用程式
4. 開始使用OpenNMS
4.1. 設定發掘(discovery)
4.2. 啟動PostgreSQL,Tomcat4和OpenNMS
4.3. 登入網頁應用程式
4.4. 將OpenNMS設為開機自動執行
4.4.1. 在Debian Linux上設定開機自動執行
4.4.2. 在RPM為基礎的Linux發行版本上設定開機自動執行
4.4.3. 在Solaris上設定開機自動執行
5. 編譯程式原始碼
5.1. 妳確定要這麼做嗎?
5.2. 安裝必須的套件
5.3. 下載程式原始碼
5.3.1. 下載釋出版本程式碼
5.3.2. 從CVS下載程式碼
5.4. 設定build.properties
5.5. 編譯OpenNMS
5.6. 安裝OpenNMS
6. OpenNMS安裝時的問題排除
6.1. 常見的安裝問題
6.1.1. 相依性(Dependency)問題
6.1.2. Error: "Started OpenNMS, but it has not finished starting up"(錯誤:"OpenNMS已經開始啟動,但是啟動沒有完成")
6.1.3. DHCP Poller Won't Start(DHCP輪詢器無法啟動)
6.1.4. The OpenNMS Web Application Will Not Start, or You Can't Log In(OpenNMS網頁應用程式無法啟動,或者妳無法登入)
6.1.5. Error: "runjava: Could not find an appropriate JRE"(錯誤:"runjava:無法找到合適的JRE")
6.1.6. Error: "The database server's error messages are not in English ..."(錯誤:"資料庫的錯誤訊息不是英文…")
6.1.7. Error: "Column X in new table has NOT NULL constraint ..."(錯誤:"新表格的X欄有NOT NULL限制")
6.1.8. Error: "One or more backup tables from a previous install still exists"(錯誤:"之前安裝時殘留一個以上的備份資料表")
6.1.9. Error: "Table X contains N rows (out of M) that violate new constraint Y"(錯誤:"資料表X(的M個資料列中)有N個資料列違反新的Y限制")
6.1.10. Error: "- adding iplike database function... <snip> org.postgresql.util.PSQLException: ERROR: could not access file '<snip>/lib/iplike.so': Permission denied"(錯誤:"加入iplike資料庫函式…<略> org.postgresql.util.PSQLException: 錯誤:無法存取檔案'<略>/lib/iplike.so':拒絕存取)
6.1.11. Error: "Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "pg_user" does not exist" when running installer.(執行安裝程式時遇到錯誤:"在"main"執行緒發生例外 org.postgresql.util.PSQLException: 錯誤:"pg_user"關係不存在")
6.2. 到哪裡尋求技術支援
6.2.1. 發行摘要
6.2.2. OpenNMS網站
6.2.3. OpenNMS郵件論壇列表
6.2.4. 付費技術支援

那麼,妳該如何運用這份文件呢?它包含了下列章節:

這份安裝指南非常倚賴「套件」這個概念。現今大部分的作業系統和發行版 本都擁有套件管 理系統。一個套件會將屬於同一個應用程式的檔案都彙整進來(並且包含檔案變動,移除,更新等等的管理)。我們可藉此系統安裝和管理各種軟體。

請參閱最新的發行摘要以 確認是否有支援妳的作業系統。目前OpenNMS支援Linux(的很多不同發行版本), Solaris和Mac OS X。

這份指南假定如果妳使用套件管理系統,妳就會一直使用它。這是因為 OpenNMS會試著用作業系統內建的套件管理系統來確認那些必須先安裝的套件是否裝好了。例如妳裝了Java,但不是用套件裝的,OpenNMS將無法 確認妳的系統有裝Java,因此整個安裝會失敗。

讓我們再回到最初的問題「妳該如何運用這份文件」,請先瀏覽第二章, 確定妳已經把必須的、作為先決條件的套件都適當地安裝、設定完畢了。用第三章來協助妳將那些套件裝進妳的作業系統,以及安裝OpenNMS。最後,用最後 一章來協助妳修正各種可能遇到的錯誤。

OpenNMS主要是用Java開發的,雖然為了實作例如ICMP這類 東西而用到一些 JNI來呼叫C語言程式 碼。理所當然,妳需要安裝Java。

由於目前的程式碼有小部分倚賴一個Sun-only的函式庫 (HTTPS Monitor裡面的"com.sun.net.ssl.internal.www.protocol"),我們推薦妳使用Sun的SDK。使用IBM的 SDK應該也可以,只不過在輪詢器(poller)啟動的時候會在記錄檔產生一個錯誤訊息。

底下的說明是使用Sun所散佈的Java,不過有一些使用者採用Blackdown網 站編譯的Sun Java,也獲得成功。

XXX Add something about 32-bit vs 64-bit for libjicmp and librrd.

將下面這行加入/etc/apt/sources.list然後執行 update, (也就是"apt-get update")。

版本代號是Woody的話,請加入:

deb http://debian.opennms.org/ debian/opennms stable

版本代號是Sid的話,請加入:

deb http://debian.opennms.org/ debian/opennms unstable

然後,取得版本適合的Java來加以安裝。因為授權的問題, OpenNMS套件不能包 含Java SDK,妳必須在安裝OpenNMS之前,自己取得及安裝。妳有兩個選擇:

妳需要Sun的Java 2 Platform,標準版,1.4版以上。我們建議使用1.4.2版以上。妳可以從Sun的Java網 站下載。 依照步驟取得授權後,下載適合妳的作業系統的Java。如果妳準備使用RPM套件來安裝OpenNMS,請下載RPM套件版本的Java;不然,請下載".bin" 的檔案。請依照Sun的說明來安裝。

Tomcat是Apache 基金會之Jakarta專案的一部份,是一個Java servlet引擎。也就是說Tomcat是一個網頁伺服器,它用"servlets"(小的 Java程式)來產生HTML頁面。注意這和Java "applets"很不一樣--servlets在伺服器端執行,而不是下載到瀏覽器執行。只要servlet被編譯後,Tomcat就會暫存它,意味著 首次次讀取一個特定頁面也許慢,但是接下來的存取就蠻快的。

Tomcat最新的版本是Tomcat5,不過OpenNMS因為使 用Tomcat4的認證功能,不能使用Tomcat5。以後的版本會修正這個現 況,不過現在妳必須使用Tomcat4。

Fedora Core 2內附的Tomcat4套件似乎不能穩定運行,就算不安裝OpenNMS也一樣。目前,我們建議使用OpenNMS FTP站所提供的tomcat4套件。妳需要安裝兩個套件,tomcat4-4.1.18-full.1jpp.noarch.rpmtomcat4-webapps-4.1.18-full.1jpp.noarch.rpm

某些版本的核心有一個bug會讓Java程序甚至整個核心掛掉。這個 問題紀錄在Red Hat bug #121902。 請確保妳的核心版本號至少是2.6.6-422。

我們要修改Tomcat的一些設定。安裝程式(installer)會 負責大部分的修 改,但是有幾項妳必須手 動修改。底下是妳必須手動修改的兩項Tomcat設定:

很多Linux發行版本都有設定檔tomcat4.conf, 妳可以在這裡修改設定參數。在Red Hat和Fedora系列的Linux版本,這個檔案放在/etc/tomcat4/目 錄下。裡面的內容看起來像這樣:

# tomcat /etc/rc.d script example configuration file
# Use with version 1.07 of the scripts or later

# Use Jpackage utils if present
if [ -x /usr/bin/java-functions ]; then
. /usr/bin/java-functions
set_jvm
fi

# Source Java system configuration if exist
if [ -r /etc/java/java.conf ]; then
. /etc/java/java.conf
fi

# you could also override JAVA_HOME here
# Where your java installation lives
# JAVA_HOME="/usr/java/jdk"
# JAVA_HOME="/opt/IBMJava2-131"

# You can pass some parameters to java
# here if you wish to
#JAVACMD="$JAVA_HOME/bin/java -Xminf0.1 -Xmaxf0.3"

# Where your tomcat installation lives
# That change from previous RPM where TOMCAT_HOME
# used to be /var/tomcat.
# Now /var/tomcat will be the base for webapps only
CATALINA_HOME="/var/tomcat4"
JASPER_HOME="/var/tomcat4"
CATALINA_TMPDIR="/var/tomcat4/temp"

# What user should run tomcat
TOMCAT_USER="tomcat"

# You can change your tomcat locale here
#LANG=en_US

# If you wish to further customize your tomcat environment,
# put your own definitions here
# (i.e. LD_LIBRARY_PATH for some jdbc drivers)
# Just do not forget to export them

在這個檔案裡,妳可以分別藉由修改JAVA_HOME變 數來指向Java安裝位置;修改TOMCAT_USER變 數來設定執行Tomcat的帳號。妳可以用一行有關 JAVA_HOME變 數的設定指向妳安裝好的Java,例如:

JAVA_HOME="/usr/java/j2sdk1.4.2_04/"

要改變執行Tomcat的帳號,妳可以這樣設定:

TOMCAT_USER="root"

如果妳使用其他的Linux發行版本或者別的作業系統(例如: Solaris,Mac OS X)而找不到tomcat4.conf這 個檔案,妳必須找出該系統上相對應的修改參數方法。歡迎妳將細節回報給OpenNMS bug資料庫(分類請選enhancement bug),或者email到opennms-install郵件論壇,以便我們加入這份文件。

如果妳選擇不要用root 帳號來執行Tomcat,請做下列變更,讓執行Tomcat的帳號可以讀寫OpenNMS相關設定檔。這個步驟包括將"tomcat" 和"root" 兩個帳號加入"tomcat4" 群組,然後變更目錄權限,讓"tomcat4" 群組可以寫入OpenNMS "etc" 和"logs" 目錄。這步驟必須在OpenNMS軟體安裝之 後

第一項變更完成後Tomcat就可以啟動,但是不做第二項變更的話在 OpenNMS記 錄檔會出現錯誤訊息,而且網頁介面提供的管理指令也無法執行,因為Tomcat無法寫入設定檔。

MRTG, 這個可能是第一個被廣泛使用的開放原始碼網管工具,它的起源就是RRDtool

RRDtool提供"round robin"資料庫,用來快速、節省空間地儲存時間序列(time-series)量測數據。OpenNMS將效能相關的數據儲存在用RRDtool產生 的RRD檔案。

我們不需要對RRDtool做特別的設定。只要它是以套件安裝, OpenNMS套件應該可以找到它,並且用適當的指令完成設定。目前已知可以使用RRDtool 1.0.33以上任何的"1.0"系列版本。

XXX add a comment about 32-bit vs. 64-bit stuff for the iplike.so module

OpenNMS使用PostgreSQL(又 稱"Postgres")這個關聯式資料庫來儲存各種資訊,例如網路設備、事件、告警和故障。

在安裝OpenNMS之前,要先準備兩件跟資料庫有關的事項。首先, OpenNMS必須能夠以TCP/IP方式連結到資料庫(即使兩者都在同一台機 器);其次,在安裝過程中要能夠新增資料庫。

OpenNMS需要PostgreSQL版本7.2以上。如果你使用 PostgreSQL 7.4之前的版本,伺服器的錯誤訊息必須是英文('C' locale)。尤其參數lc_messages 必須是'C'。 相關設定在PostgreSQL data目錄的postgresql.conf檔 案裡, 如果有修改的話,請重新啟動資料庫。data目 錄的所在位置,請參閱底下關於pg_hba.conf的 小節。

妳至少應該安裝這個套件:

  • postgresql-server

請注意,Red Hat Enterprise Linux和CentOS把PostgreSQL套件稱為"rhdb",意思是"Red Hat DataBase";而舊版的SuSE則稱做"postgres"。

如果妳使用最近版本的Mandrake(版本9以上),妳還需要:

  • postgresql-pl

一旦妳安裝了Postgres,妳需要修改兩個Postgres設定 檔:postgresql.confpg_hba.conf。Postgres 首次啟動會產生這些檔案,因此如果妳剛才安裝的時候沒有啟 動它,請現在啟動它。通常,啟動指令稿會放在/etc/init.d

找出Postgres的"data"目錄。通常應該是 /var/lib/pgsql/data。我們要修改的兩個檔案應該就在那個目錄下。

注意

妳必須使用root帳號來執行這一章提到的指令。

請遵循「首次安裝」或者「升級」該節的指示,然後遵循「運行安裝程式 (installer)」一節的步驟。如果在過程中遇到任何錯誤,請參考這份指 南的錯誤排除章節。

XXX this section could use some more love, too.

幫舊版的OpenNMS升級至目前的版本,通常只要安裝適合妳的(作業 系統)發行版本 之套件即可。

如果是RPM為基礎的發行版本,只要輸入指令"rpm -Uvh [套件名稱]"即可。

此外,OpenNMS的安裝程式(installer)可能會試著去修 改資料庫。請記 得依照本章後面的指示以 執行安裝程式(installer)。這些變動應 該會順利完成,但是,就算是最周全的計畫都有可能出錯。為了以防萬一,在升級之前請依照下面的細項指示來備份妳的PostgreSQL資料庫。

妳可以下載某個釋出版本的程式碼,或者妳可以直接從source code respository (CVS)下載。除非妳想要參與開發,或者需要還沒釋出的特定功能、bug修正,否則下載已釋出的程式碼應該夠了。

注意

Solaris內建的tar無 法正確地將OpenNMS程式碼解壓縮。它會(幾乎)無聲無息地執行失敗,妳只會得到一個不完整的OpenNMS程式碼目錄。妳必須要在Solaris上 使用GNU tar。

SourceForge網站上OpenNMS的Files下 載最新的程式碼釋出版本的opennms-source 套件。 它的檔案名稱會看起來像opennms-source-1.2.0-1.tar.gz。 妳解壓縮之後,切換到opennms-1.2.0-1/source目 錄,接著進行下一節(譯註:5.4節)

OpenNMS的程式碼存放在SourceForge.net的CVS。 細節請參閱OpenNMS 的CVS頁面,或者直接使用這些指令立刻開始下載。

使用(匿名帳號)空白密碼登入CVS伺服器:

$ cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/opennms login

將OpenNMS的程式碼check out(這樣會fetch HEAD, 最bleeding-edge的版本):

$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/opennms co opennms

這樣妳要的程式碼都在這個叫做opennms的 目錄。切換到這個目錄然後進行下一節。

目錄

6.1. 常見的安裝問題
6.1.1. 相依性(Dependency)問題
6.1.2. Error: "Started OpenNMS, but it has not finished starting up"(錯誤:"OpenNMS已經開始啟動,但是啟動沒有完成")
6.1.3. DHCP Poller Won't Start(DHCP輪詢器無法啟動)
6.1.4. The OpenNMS Web Application Will Not Start, or You Can't Log In(OpenNMS網頁應用程式無法啟動,或者妳無法登入)
6.1.5. Error: "runjava: Could not find an appropriate JRE"(錯誤:"runjava:無法找到合適的JRE")
6.1.6. Error: "The database server's error messages are not in English ..."(錯誤:"資料庫的錯誤訊息不是英文…")
6.1.7. Error: "Column X in new table has NOT NULL constraint ..."(錯誤:"新表格的X欄有NOT NULL限制")
6.1.8. Error: "One or more backup tables from a previous install still exists"(錯誤:"之前安裝時殘留一個以上的備份資料表")
6.1.9. Error: "Table X contains N rows (out of M) that violate new constraint Y"(錯誤:"資料表X(的M個資料列中)有N個資料列違反新的Y限制")
6.1.10. Error: "- adding iplike database function... <snip> org.postgresql.util.PSQLException: ERROR: could not access file '<snip>/lib/iplike.so': Permission denied"(錯誤:"加入iplike資料庫函式…<略> org.postgresql.util.PSQLException: 錯誤:無法存取檔案'<略>/lib/iplike.so':拒絕存取)
6.1.11. Error: "Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "pg_user" does not exist" when running installer.(執行安裝程式時遇到錯誤:"在"main"執行緒發生例外 org.postgresql.util.PSQLException: 錯誤:"pg_user"關係不存在")
6.2. 到哪裡尋求技術支援
6.2.1. 發行摘要
6.2.2. OpenNMS網站
6.2.3. OpenNMS郵件論壇列表
6.2.4. 付費技術支援

底下的章節是一些建議,用於排除常見的安裝問題。如果妳的問題不在其 中,請參閱「到哪 裡找救兵」的章節。

這種錯誤有好幾個可能。看到這個錯誤之後,請執行"opennms -v status"幾次,以確認OpenNMS最終是否有完整 啟動;如果沒有,檢查一下哪些daemon一直無法完成啟動。底下是幾種可 能的原因:

  1. OpenNMS啟動需要一些時間。這可能在(監控)規模較大的 系統發生,此時指令"opennms -v status" 最終會顯示所有的服務都已啟動完成。啟動指令稿預設會嘗試10次,每次 間隔5秒。要增加重試次數,妳可以新增檔案$OPENNMS_HOME/etc/opennms.conf, 加一行"START_TIMEOUT=20", 就可以將重試次數加倍。妳也可以將這個值設為0, 讓啟動指令稿不等待 OpenNMS完成啟動。

  2. 資料庫沒有運行。如果只有一半甚至還不到的daemons顯示 狀態為"執行中" (running),妳 可以檢查記錄檔裡面是否有FATAL(致 命)的錯誤。妳會看到類似"Error accessing database"的字樣。

  3. Dhcpd沒有啟動。請參閱下一節。

  4. JNI函式庫問題。OpenNMS透過JNI (Java Native Interface)來使用一些native C函式庫。一般情況下它們都能運作,不過有使用者在native AMD64模式下的Linux環境遇到問題,要不是使用32-bit (x86)版本的Java誤搭64-bit (AMD64)版本的JNI函式庫,不然就是反過來。如果妳有這個問題,請試著把妳的Java版本從32-bit換成64-bit,或者反之。

  5. 其他。如果OpenNMS安裝時沒有使用"--nodeps" 這種選項強制略過套件相依機制,裝好後應該能夠順利運行。就算真的不能運行,OpenNMS也有健全的記錄機制。請切換到記錄檔目錄(通常是/var/log/opennms), 用grep或 妳慣用的工具程式來搜尋那些記錄檔中是否有諸如FATALERROR(最 嚴重的兩個等級)的字眼。那些事件應該可以給妳一些蛛絲馬跡。

OpenNMS其實包含兩個主要應用程式:它本身,以及網頁式使用者介 面 (webUI)。其中webUI是用 Tomcat做的,有可能Tomcat正常運行而OpenNMS程式本身停了,或者反之。

在妳繼續下面步驟之前,先讀讀這份指南關於不同作業系統要注意的部分。 有一些常見的 Tomcat問題在那邊有提 到。

如果妳無法連上OpenNMS介面(http://[opennms server]:8080/opennms,Debian系統則 是http://[opennms server]:8180/opennms -  將[opennms server]換成OpenNMS的主機名稱),確定Tomcat正常運行,必要的話重新啟動它。另外,如果妳拿掉網址中的"/opennms", 應該能夠連上Tomcat的主頁面。

檢查並確認已正確地安裝了OpenNMS網頁應用程式。在Tomcat 的CATALINA_HOME目 錄(通常是/var/tomcat4), 妳應該會看到一個webapps子 目錄。從OpenNMS 1.1.4起,我們不再把直接把OpenNMS網頁應用程式放在這個webapps目 錄。 在webapps目 錄下,妳應該只會看到一個叫做opennms.xml的 檔案(或者說symbolic link)。如果妳看到一個叫做opennms的 目錄(或symbolic line),把它刪除(在升級系統的時候,安裝程式不會自動做這個動作)。

此外在CATALINA_HOME目 錄下有個子目 錄叫做conf,其中有個檔案叫server.xml。 在OpenNMS 1.1.4以前,我們需要在那個檔案加入一個"context",不過從OpenNMS 1.1.4開始不需要了。事實上,如果妳從1.1.3或更早的版本升級上來,妳必須手動從server.xml移 除這個"context"(在升級系統的時候,不會自動做這個動作)。底下是這一段看起來的樣子:

<!-- Example Server Configuration File -->

<Server ...
...
...
<Host ... >
....
<Context path="/opennms" docBase="opennms" debug="0" reloadable="true">
<Logger classname="org.opennms.web.log.Log4JLogger" homeDir="/opt/OpenNMS"/>
<Realm className="org.opennms.web.authenticate.OpenNMSTomcatRealm" homeDir="/opt/OpenNMS"/>
</Context >
</Host >

...
</Server >

為了讓這些directives能夠運作,tomcat也需要知道各個 OpenNMS JAR檔案及函式庫所在位置。為了讓tomcat能夠取用這些資源,在$CATALINA_HOME/server/lib目 錄下有建立鏈結,指向下列OpenNMS JAR檔案所在的位置:

Tomcat有個"工作"目錄(通常是$CATALINA_HOME/work) 用來儲存JSP頁面的Java程式碼,以及JSP的compiled classes。有些使用者一直遇到跟網頁應用程式有關的問題,直到清除工作目錄並重新啟動Tomcat才解決。有鑑於此,如果前述方法都無法讓網頁應用 程式正常運作,我們建議妳執行"rm -rf $CATALINA_HOME/work"。

安裝程式(installer)在升級OpenNMS資料庫的時候,通 常會更新table schema。這個時候,它會複製資料表的資料到一個臨時的資料表(例如,node的 內容被複製到 node_old_11033991291234)。 接著原來的資料表被刪除,此資料表的新版本被新增,資料從臨時資料表轉換到新資料表,最後臨時資料表也被刪除。

不幸的是,安裝程式(installer)無法檢查出所有可能造成資料 轉換失敗的問題,因此有時候這個步驟會失敗。碰到這個情況,安裝程式(installer)會"反向操作",將新的資料表刪除,並且把臨時資料表還原成原 來的資料表。

碰上問題能夠將資料表回復當然很好,但是有時候連這個回復動作都會失 敗,特別是比較舊版的Java安裝程式 (installer)。如果碰到這個情況,系統會剩下臨時資料表(名稱中有"_old_"那個)以及其中的舊資料。到OpenNMS 1.1.5版為止,安裝程式(installer)並不會在妳再次嘗試安裝的時候抓出這個問題。例如,安裝程式(installer)會認為妳沒有node資料表,然後就幫妳新增一個。這樣子很糟,尤其當妳還有資 料留在"old"資料表的時候。

如果妳碰上這個錯誤訊息,妳會想要砍掉那些名稱有"old"的資料表, 不過妳應該先檢查裡面還有沒有資料。例如,如果妳只有一個叫做 node_old_11033991291234的 資料表,沒有其他node_old_*的資料表, 也沒有node資料表,那麼妳只要幫資料表更名即 可:

# psql -h localhost -U opennms opennms
Welcome to psql 7.4.6, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

opennms=#
ALTER TABLE node_old_11033991291234 RENAME TO node;

下了psql指 令之後妳可以用"\d"指令來看看妳的資料庫裡面還有哪些資料表。妳可以用"SELECT count(*) from table;"(把"table"換成資料表的名稱)得知任何資料表其中的資料列總數。如果那些 資料表是空的,妳可以刪除它們。如果妳發現數個資料表都有資料,妳必須決定該保留哪一個,或者把資料彙整(merge)。這就留給讀者當作(不太簡單的) 練習。

這些年來OpenNMS延伸了它的資料庫schema來改善功能。這個 錯誤訊息起因於較舊版本的OpenNMS 某些管理功能運作的方式跟現今的不同,或者因為資料庫被OpenNMS以外的程式更動了(後者在規模較大的環境很常見)。這些年來OpenNMS也在資料 庫加上了額外的外鍵限制(foreign key constraints)。當兩個資料表的資料被一個共用鍵(shared key)綁在一起,這些外鍵用來確保資料庫內部一致性。例如,每個事件可以有一個指標(pointer)指回它發生事件的節點;所以存在一個外鍵限制,要 求事件不能指 到一個不存在的節點。

從版本1.1.5開始,在升級資料庫schema的時候,我們首先檢查 是否有資料列會違反可能要加入的外鍵限制。要修復這些錯誤,有三個選擇:

6.1.10. Error: "- adding iplike database function... <snip> org.postgresql.util.PSQLException: ERROR: could not access file '<snip>/lib/iplike.so': Permission denied"(錯誤:"加入iplike資料庫函式…<略> org.postgresql.util.PSQLException: 錯誤:無法存取檔案'<略>/lib/iplike.so':拒絕存取)

PostgreSQL伺服器無法存取檔案iplike.so。這有可能是檔案本身的權限問題,執行PostgreSQL的使用者無法存 取它,也可能是iplike.so上層目錄(們)的權限問題。

就算用root身份來執行安裝程式(installer)也可能遇到這個問題;因為無法存取iplike.so的不是OpenNMS也 不是安裝程式 (installer),而是PostgreSQL資料庫。安裝程式(installer)要求 PostgreSQL資料庫載入iplike.so,而PostgreSQL資料庫伺服器通常不是以root的權限執行,因此跟其他一般使用者一樣,要遵 照檔案系統的存取控制。這問題通常發生在把OpenNMS安裝到root或其他使用者的家目錄,而這個家目錄的權限設定成不開放給其他使用者,只能讓使用 者本身存取。

6.1.11. Error: "Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "pg_user" does not exist" when running installer.(執行安裝程式時遇到錯誤:"在"main"執行緒發生例外 org.postgresql.util.PSQLException: 錯誤:"pg_user"關係不存在")

這個錯誤顯示資料庫沒有正確地建立。由於安裝程式(installer)指令稿負責建立資料庫,妳可能會認為這是OpenNMS出了問 題,其實這是 Red Hat 4(以及CentOS 4)之中的SELinux 功能的問題。基本上來說,指令postgres init_db無法寫入/dev/null,而當它執行失敗的時候沒有顯示一個比較有意義的錯誤訊息。

要避免這個問題,請執行底下的指令:

  1. stop postgres

  2. rm -rf /var/lib/pgsql/data

  3. /usr/sbin/setenforce 0

  4. start postgres

注意,步驟二會刪除之前任何妳對postgresql設定檔的修改,妳必須重做那些修改。

OpenNMS是一個由社群提供技術支援的軟體專案。當妳尋求協助的時 候,請將這點謹記在心,因為大家對這個專案的付出並沒有金錢回報(除非妳是透過付費技術支援合約來求助)。

OpenNMS的主站台是 個Wiki。作為一個社群的專案,那邊有很多有用的建議和資訊。特別一提,我們建議妳在發電郵到郵件論壇問問題之前,先找找上面提到的發行摘要,FAQbug資料庫以及Google。 妳也許可以在舊 的FAQ找到一些有用的資訊,不過請記住這些資訊可能過期了。

如果妳正在考慮,或者已經將OpenNMS實際上線運作,妳可能會對付 費技術支援有興趣。OpenNMS Group維護OpenNMS專案,我們也提供技術支援,教育訓練、諮詢服務以及客製化開發。

Posted by ystuan at August 8, 2005 06:51 PM
Pings
Comments