Archive for the 'OSS' Category

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里,这个就是最根本的原因了。

一个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这个模块,从这里可以下载到。

今晚折腾久违了的weblog

很久没上来了,终于想要记下点东西了。

顺手升级了wordpress到2.5.1,用dreamhost的one click install,很方便。但访问升级页面时,得到了错误:
“Cannot redeclare is_tag()”

这里找到了原因,是ultimate-tag-warrior.php重复定义了is_tag()函数。

K2主题也升级到了最新版,很多东西都需要重新调整,慢慢弄吧。

今天新加了一个分类“Symbian”,准备把自己使用Symbian程序(都是开源或者freeware)的心得记一下,呵呵,注意不是编程心得哈。

升级到Ubuntu 8.04

五一假期用了一晚时间升级了笔记本电脑上装的Ubuntu,注意到一些变化:
1. 启动过程中如果检查硬盘不会显示纯终端界面了
2. 登录xfce后无线网自动连接,不用再输入keyring的密码,很方便
3. Firefox 升级到3.0
4. 中文字体显示效果似乎比以前好了

升级后原来的vmware-player不能用啦,按照这里的说明即可解决。

发布jar包到自己设立的Maven Repository

使用Artifactiry为自己的开发团队设立了repository镜像。有时需要把本地的一些第三方的jar包发布到服务器,使用maven-deploy-plugin的deploy:deploy-file目标可以完成这个任务。

比如,要发布jta的jar包jta-1.0.1B.jar

$ mvn deploy:deploy-file -DgroupId=javax.transaction \
   -DartifactId=jta \
   -Dversion=1.0.1B \
   -Dpackaging=jar \
   -Dfile=~/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar \
   -DrepositoryId=central \
   -Durl=http://host.of.your.repository[:port]/artifactory/ibiblio@repo

说明:

  • repositoryId在工程的pom文件里设置
  • url由Artifactiry的配置决定,注意不能使用virtual repository的地址
  • 如果远程repository需要身份验证,用户名和密码需要在maven的settings.xml里设置

参考: