Xupeng's blog

圆外之大,心向往之

重新编译python以后mod_python出问题了

也不是完全不能用了,我的moinmoin在mod_python下运行还基本良好,就是当我早上要查找一个文档时发现moin的“查找网页”功能出了问题,错误信息如下:

ImportError

/usr/lib/python2.4/lib-dynload/array.so: undefined symbol: PyUnicodeUCS4_FromUnicode

If you want to report a bug, please save this page and attach it to your bug report.

起初我并不知道这是mod_python的问题,也不知道这个PyUnicodeUCS4_FromUnicode 是什么意思,当然也没有认为这是moinmoin的问题,因为一星期以来moinmoin运行的都很好,没有出现过任何问题。猜测是python本身的原 因吧,因为这两天总是因为某些问题重新编译python,比如最初编译python时我没有使用”tcltk”这个USE,导致了python不支持 tk,于是我就重新编译了他,于是我的moinmoin就有小恙了。

equery u python看一下上次编译python时使用的USE:

osr root # equery u python
[ Searching for packages matching python... ]
[ Colour Code : set unset ]
[ Legend : Left column (U) - USE flags from make.conf ]
[ : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for dev-lang/python-2.4.3-r1 ]
U I
+ + X : Adds support for X11
+ + berkdb : Adds support for sys-libs/db (Berkeley DB for MySQL)
- - bootstrap : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used duri ng original system bootstrapping
- - build : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping.
+ + doc : Adds extra documentation (API, Javadoc, etc)
+ + gdbm : Adds support for sys-libs/gdbm (GNU database libraries)
- - ipv6 : Adds support for IP version 6
+ + ncurses : Adds ncurses support (console display library)
- - nocxx : Disable support for C++ (DON'T USE THIS UNLESS YOU KNOW WHAT YO U'RE DOING)
+ + readline : Enables support for libreadline, a GNU line-editing library tha t almost everyone wants
+ + ssl : Adds support for Secure Socket Layer connections
+ + tcltk : Support for Tcl and/or Tk GUI toolkits
- - ucs2 : Enable byte size 2 unicode
osr root #

注:+ +是编译时使用的USE,- -是支持但没有使用的USE

发 现有一个叫ucs2的USE我没有使用,跟那个UCS4长的有点像,好,google一下看看是什么东西,惊奇的发现我遇到的问题是跟 mod_python相关的,说我的这个问题是因为我的python编译的时候使用了两字节的Unicode字符,但是我的mod_python扩展是使 用四字节Unicode字符支持的python编译的。要检查自己的python的unicode字符长度,可以检查sys.maxunicode的值:

>>> import sys
>>> if sys.maxunicode > 65535:
... print 'UCS4 build'
... else:
... print 'UCS2 build'

找 到原因了,恍惚中记得我有一次编译python时使用了那个不知道是什么意思的ucs2 USE(只因为看到了它对unicode的支持,以为这是好事),可是我的python现在没有使用这个USE啊,因为我的sys.maxunicode =1114111,可是我的mod_python怎么会还不能正常工作?

突然想起来gentoo下编译完一个包以后,需要重新编译依赖它的包,而mod_python是依赖python,所以我也需要重新编译mod_python,试一下。

哈哈,好了,问题得到解决。

教训

  1. 千万不要望文生义。比如看到ucs2的unicode支持就盲目的认为这是支持unicode,总是好的
  2. 要体味别人强调过的话的意思,而不能只是一带而过不求甚解。我这次就翻船在编译过依赖包以后没有重新编译依赖它的包,而这恰恰是gentoo强调的。

使用at执行X应用程序

前几天以为使用 at 不能定时执行 X 应用程序,还自己用 Python 写了一个很简单的来使用,见这里

早上起来在 linuxsir 看到了有人给了新的回复,说不能运行只是因为没有指明 display,并非 at 不支持X应用程序,解决的办法是使用 –display 选项。

因此可以这样使用 at 定时执行X应用程序: 在要运行X程序的X登录下查看当前的DISPLAY:

1
2
aiyi@osr ~ $ echo $DISPLAY
:0.0

使用at添加任务,比如:

1
2
3
4
5
aiyi@osr ~ $ at 08:34
warning: commands will be executed using /bin/shell
at> gedit --display=:0.0
at> <EOT>
job 23 at 2006-06-19 08:34

这样就OK了。

另外还有一个在这里可能会用到的命令:xhost

1
2
aiyi@osr ~ $ xhost +root
root being added to access control list

只有使用 xhost 允许了其他用户访问自己的 DISPLAY,其他用户才可以在这个 DISPLAY 下运行 X 程序,不然也是不能成功的,会有类似这样的错误信息:

1
2
3
4
osr aiyi # gedit --display=:0.0
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specifiedcannot open display: :0.0
Run 'gedit --help' to see a full list of available command line options.

想起来昨天是我的生日

哈哈,想起来也没什么,我好像没有什么过生日的习惯,不过这样挺好的,过生日劳民伤财,最近我也是日渐贫穷啊,没办法,快要放假喽

大量的DNS服务器不能使用了,自己装一个

早上起来发现不能上网了,检查了一下是不能解析域名的缘故,不知道是不是又有什么病毒让大量的DNS服务器瘫痪了,至少我平时能够使用的DNS服务器一个都不能正常工作,比如ISP给的:202.102.224.68、202.102.227.68,河南大学的:202.196.96.131,河南理工的:202.196.225.6,郑州大学的:202.196.64.1

最终发现河南理工大学的dns能够解析一部分的域名,还好能解析百度,于是搜索到了一个DNS服务器:ns1.qu-zhou.com:202.107.245.11,可惜的是,也有一部分域名不能解析,比如CU的blog,这是一个很要命的问题。

只好自己装一个DNS Server来用了,用gentoo甚是简单:

aiyi@osr ~ $ sudo emerge bind
aiyi@osr ~ $ sudo /etc/init.d/named start

这样一个默认的可用DNS服务器就启动了,然后编辑/etc/resolve.conf在顶部加入如下一行:

nameserver 127.0.0.1
OK了,终于可以解析CU了,hoho。

不过要想让别的主机也能够使用这台DNS Server来解析域名还要做一件事情:

修改/etc/bind/named.conf,将
listen-on { 127.0.0.1; };
更改为:
listen-on { 127.0.0.1; 192.168.0.254; };
listen-on语句表示在哪些IP上监听DNS请求,gentoo下默认只监听127.0.0.1,也就是说只能本机使用,我的IP地址为192.168.0.254,所以我让bind也在该IP上监听DNS请求,如此以来局域网内的其他主机也可以使用我的域名服务器了。

Ubuntu下的时区设置问题

我现在有两个系统,一个是 Gentoo 2006.0,一个是 Ubuntu Dapper,两个系统之间的时间不同步。

我在 Gentoo 下设置时区的方法如下:

  1. ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  2. 修改 /etc/conf.d/clock,将其中的 CLOCK 设置为 local,即:CLOCK="local"

这也是 Gentoo 下正确的时区设置方法,因此可以认为 Gentoo 的设置没有问题,问题出在 Ubuntu 上。

Google 了一下发现:Ububtu 在默认情况下认为 BIOS 中的时间是 UTC 时间,而我的 Gentoo 在如上的设置下认为 BIOS 中的时间是本地时间,因此就产生了不同步的问题,相差八个小时,解决的方法也很简单:在 Ubuntu 下修改 /etc/default/rcS 文件,将 UTC=yes 改为 UTC=no 即可。

注:Ubuntu 下也是把 /etc/localtime 链接到 /usr/share/zoneinfo/Asia/Shanghai