Author Archive for wolfg

在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”等等)

升级到Ubuntu 8.10

花了一天多的时间将笔记本(IBM Thinkpad T43)升级到了Ubuntu新发布的8.10版本。

升级过程很顺利(就是时间比较长),其间遇到了Network Manager小程序不停地弹出消息对话框,说“找不到所需的资源,无法继续”,但不影响升级包的安装。

重启系统后,Network Manager小程序居然不能加载了,在launchpad里搜索到解决办法是只在/etc/network/interfaces文件里保留下面这两行。

auto lo
iface lo inet loopback

第二个问题是,升级后无线网卡不工作了,用dmesg | grep ipw2200查看,有如下类似的信息:

ipw2200-bss.fw request_firmware failed: Reason -2
ipw2200: Unable to load firmware: -2
ipw2200: failed to register network

google后知道是firmware加载的问题,检查/lib/firmware目录,没在当前使用中的内核目录(/lib/firmware/2.6.27-7-generic/)里找到这些firmware文件。从ipw2200的网站上下载后解压到这个目录后重启就解决了。(补充:使用原来的2.6.24内核启动系统无线网卡是正常的)

audacious不出声了?

audacious不能播放mp3有一段时间了,今天找到这个问题的原因。

如果用终端运行audacious,就会在console里看到下面的错误信息:

*** PULSEAUDIO: Unable to connect: Connection refused
MADPlug-Message: failed to open audio output: XMMS reverse compatibility output plugin

之前试过卸载再重装audacious,没用。

按照google到的结果提示的,发现系统里没有安装pulseaudio。而且,发现audacious里设置output plugin为alsa或oss就可以播放出来了。那pulseaudio为什么不行呢?

修改/etc/default/pulseaudio文件,PULSEAUDIO_SYSTEM_START=1 让pulseaudio服务在系统启动时启动。

最重要的,把自己的用户加到pulse, pulse-access, pulse-rt这3个group里,这个就是最根本的原因了。

解决Maven Jetty Plugin在Windows下的“文件锁定”问题

使用Maven进行Java的web开发,Jetty Plugin是必不可缺的插件,可以极大的提到开发效率。但在Windows环境下会遇到静态文件(html、css、js)被锁定、无法即时更新的问题。要想更新这些文件,只能先停掉Jetty,保存修改,再启动Jetty,非常不方便。
解决办法是这样的:
1、从jetty.jar中解出webdefault.xml(位于org.mortbay.jetty.webapp包下)这个文件,把这个useFileMappedBuffer参数设为false

<init-param>
 <param-name>useFileMappedBuffer</param-name>
 <!-- change to false -->
 <param-value>true</param-value>
</init-param>

2、把修改后的webdefault.xml文件跟pom.xml放在一起
3、修改pom.xml里的Jetty Plugin的配置,加入webdefault.xml

...
<plugin>
   <groupId>org.mortbay.jetty</groupId>
   <artifactId>maven-jetty-plugin</artifactId>
   <version>6.1.7</version>
   <configuration>
     <contextPath>/</contextPath>
     <webDefaultXml>webdefault.xml</webDefaultXml>
     ...
    </configuration>
    ...
</plugin>
...

一个Python脚本,让OpenVPN使用postfix邮箱帐号进行身份认证

这几天配置OpenVPN,使用了用户名密码的身份认证方式,借助已有的postfix邮箱帐号,省去了再为每个人设置用户名密码的麻烦。

原理很简单,OpenVPN服务器配置里有这样一句:

auth-user-pass-verify /etc/openvpn/auth-postfix-mailbox.py via-env

就是说要用/etc/openvpn/auth-postfix-mailbox.py这个脚本来验证用户名和密码。用户名和密码如何传递给它呢?via-env,环境变量。

脚本如下:

  1. #!/usr/bin/env python
  2.  
  3. import os
  4. import sys
  5. from MySQLdb import *
  6. import md5crypt
  7.  
  8. def auth(username, password):
  9.   conn = connect (host = 'localhost',
  10.                   user = 'dbuser',
  11.                   passwd = 'dbpasswd',
  12.                   db = 'postfix')
  13.   cursor = conn.cursor()
  14.   cursor.execute("""
  15.       select password from mailbox
  16.       where username=%s
  17.       and active=1
  18.     """, (username))
  19.   row = cursor.fetchone()
  20.   if row == None:
  21.     return 1
  22.   crypt = md5crypt.md5crypt(password, row[0])
  23.   cursor.execute("""
  24.       select * from mailbox
  25.       where username=%s
  26.       and password=%s
  27.       and active=1
  28.    """, (username,crypt))
  29.   row = cursor.fetchone()
  30.   cursor.close()
  31.   conn.close()
  32.   if row == None:
  33.     return 1
  34.   return 0
  35.  
  36. def main():
  37.   status = 0
  38.   try:
  39.     username = os.environ['username']
  40.     password = os.environ['password']
  41.     status = auth(username, password)
  42.   except:
  43.     sys.exit(1)
  44.  
  45.   sys.exit(status)
  46.  
  47. if __name__ == "__main__":
  48.   main()

由于postfix使用md5认证,所以需要用md5crypt这个模块,从这里可以下载到。