npc安装问题解决一例

CactiNagios都是好用的运维监控软件,NPC(Nagios Plugin for Cacti)是一个Cacti插件,安装后可以在Cacti界面里使用Nagios的功能。官方安装文档在这里

我的安装环境是这样的:

PHP必须安装PDO 和 JSON扩展。由于NPC使用了Ext JS,如果没有JSON扩展,NPC的界面不会出来,只能看到一个空白页面。Ubuntu 6.06下安装PDO可以参考这里

按照官方文档安装配置好后,遇到了没有显示任何数据的问题,host, hostgroup, service, servicegroup等等都看不到。

检查了NPC的数据库表,有数据,说明NDOUtils已经工作。没有出现在界面上,说明是NPC从数据库读出来到界面显示过程中出现的问题。

用Firebug找出NPC界面为了获取显示数据的Ajax请求(比如/cacti/plugins/npc/npc.php?module=servicegroups&action=getHostStatusPortlet),直接在浏览器里访问,可以看到出了异常:Fatal error: Uncaught exception 'Doctrine_Exception' with message 'Couldn't find class NpcServicegroups' 。显然是Doctrine没有加载到NPC定义的领域类。

经过一番对Doctrine的调试,发现原因在Doctrine类的loadModels方法(Line 516 in Doctrine.php)

$e = explode('.', $file->getFileName());

这里getFileName返回了带绝对路径的文件名,导致autoload函数失败。改成下面这样就解决了。

$e = explode('.', basename($file->getFileName()));

不过还是不明白为什么getFileName返回的是带绝对路径的文件名,是跟我的系统环境有关系吗?有熟悉PHP的朋友能解释一下就好了。

How to install Nginx from source with ‘Debian’ layout

1. 创建相关目录

$ sudo mkdir /etc/nginx
$ sudo mkdir /etc/nginx/conf.d
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo mkdir /var/log/nginx
$ sudo mkdir -p /var/lib/nginx/body
$ sudo mkdir /var/lib/nginx/proxy
$ sudo mkdir /var/lib/nginx/fastcgi

2. 编译安装

$ ./configure --prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--user=www-data \
--group=www-data \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-md5=/usr/lib \
--with-sha1=/usr/lib \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-http_stub_status_module

$ make
$ sudo make install
$ sudo mv /usr/html /var/www/nginx-default

3. 修改配置文件
/etc/nginx/nginx.conf

user www-data;
worker_processes 5;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/default

server {
listen 80;
server_name localhost;

location / {
root /var/www/nginx-default;
index index.html index.htm;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}

启用default vhost

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

4. 创建init脚本
$ sudo vi /etc/init.d/nginx

#! /bin/sh

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi

set -e

. /lib/lsb/init-functions

case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON || true
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
exit 1
;;
esac

exit 0

$ sudo chmod +x /etc/init.d/nginx
$ sudo /usr/sbin/update-rc.d -f nginx defaults

5. 启动、停止、重启nginx服务

sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx restart

maven-eclipse-plugin v2.6与aspectj

最近一段时间以来,项目中使用maven-eclipse-plugin的eclipse:eclipse目标时比较恼人。pom里已经加入了aspectj的依赖,但生成的.classpath里却没有相应的classpathentry。

今天google到了解决办法,有两个:

1. 强制使用上个版本的maven-eclipse-plugin
org.apache.maven.plugins
maven-eclipse-plugin
2.5.1

2. 设置ajdtVersion为none
org.apache.maven.plugins
maven-eclipse-plugin

none

BugFree与SVN整合脚本修改

目前团队里使用subversion做版本控制,bugfree做缺陷管理。参照官方的做法实现了bugfree和svn的整合。

我为每个项目都设置了单独的svn仓库,这样在用viewvc浏览版本库时要指定root查询参数才能访问每个项目的代码库。因此我修改了bugfree官方提供的钩子脚本和向bugfree提交svn信息的php脚本,加入了对root查询参数的支持。具体改动见附件

另外,为了维护方便,我在每个项目的hooks目录里做一个到钩子脚本的软链接,这样就只需维护一个钩子脚本文件了。

在Ubuntu下安装OpenIPMP服务器

1. 如果你用JDK 1.5以上的版本,编译osms过程中会出错,问题在${openipmp_server_src}/osms/src/com/mutable/io/OlLogger.java这个文件中,enum这个变量名跟关键字冲突了,改个名字就好了。
2. 修改${openipmp_server_src}/OMADRMWS/admin_OMADRM.sh,将里面所有的"$CURR_DIR/../../Demo/data/"改为 "/tmp/",然后把证书文件复制到/tmp目录下。

cp ${openipmp_server_src}/../Demo/data/* /tmp

这样可避免安装过程中证书无法存入数据库的问题。
3. 修改 ${openipmp_server_src}/ejbca/deployJBoss4x.sh的第16行,

if (( $1 == keystore ))

改为

if [ "$1" = "keystore" ]

不然这个脚本复制p12文件时会出错。
4. 运行install.sh脚本安装,如果之前运行过了,先运行uninstall.sh
5. 安装正常结束后,记得一定要在bin目录下执行run.sh来启动JBoss服务器,不然会报错 (“找不到 openIPMP 目录” 、“找不到../conf/server.p12”等等)