2009年1月17日星期六

消受不了

单位给换台新设备,其实我的电脑是2007年的,也不差,PD925, DDR 2G, 160G,nVidia7300LE, 不过呢,虽然在当时感觉如此高的配置,但是在X-Plane下不能开全屏。不过是看上了新设备上的双头显卡,ATI HD 3650啊, 可以说是比较高端的显卡了,准备弄个双显示器用,提高编码工作效率,虽然也习惯用虚拟桌面,但是总是调试编码的切,如果有双显示器那就爽了,用双显示器也是《productive Programer》中的一个建议.新电脑处理显卡比较新之外,还有Core 2 Duo CPU,250G硬盘,这些都是让人流口水的配置,于是就花了一天多的时间来转资料,并且把老机器上的Arch拷了过来,改了设置之后,启动,发现显示特别不对,觉得颜色乖乖的,用fvwm居然窗体动画状态的窗口最大最小化都要1秒时间,把我难受得不行,猛查资料什么的,改来改去还是改变不了这个状况,只要fvwm里面用透明或者在gnome里面开compiz,窗口反应都特别迟缓;闭源驱动有问题,开源驱动不支持,我着实郁闷。后来想想还是算了,不换了,Core 2 Duo E8200比PD925的性能,确实快了,不过那是在windows下面感觉,在设备更新和Linux之间我还是选择使用Linux,所以用老机器吧。其实老设备完全可以满足我的需要,特别是Linux更是不成问题,在家里2003的老电脑,1Gcpu我照样用得挺好,看来这个新设备我是消受不了了。

2009年1月14日星期三

centos-java6-tomcat5配置

在上个月的一篇博客里面提到要更新服务器,最后定到两个候选对象,debian和Centos.
后来装了一下CentOs之后觉得它作为服务器来说,确实不错,它的安装是最快的。其实作为一个服务器来说,很多东西是必须而且不要自己再去定义的,比如SSHD,iptables等等,如果用debian,那么这些东西还要自己安装,在源慢的情况之下,那么装debian就比较费时间了。虽然它有DVD下载,但是它包含的软件包实在太多,有三张DVD,也不知道自己在服务器中用到那张的;而Centos专注于服务器应用,它那一张DVD,基本就能应付了。所以从安装方面来讲,Centos还是比较好的。
另外,Centos的图形配置工具也很值得推荐,比如system-config-securitylevel等等.
对于centos5,有一点不爽就是Java,它自带的Java是GCJ1.4.2,这个肯定是要换的。很多年没有用redhat的东西,当时用redhat的时候都还没有YUM呢,所以也都忘了有jpackage这个东西,对于在redhat之类的Linux上用Java,jpackage这个东西还是不能少的,关于Java的设定,在CentOS的wiki上有一个howto,google到了,自己找到并且编译了sun-jdk-1.6.0,才满足了我的需要,当然,如果愿意直接用sun提供的self-extrac安装包也可以,我原来是以为用jpackage源rpm包自己重新编译的能够解决一些依赖问题,但是不知道为什么,tomcat5还是依赖java-gcj-1.4.2,这让我非常不爽,不知道我用CentOs的经验太少还是怎么的。所以干脆也就不用它的tomcat5的包了,改用直接下载的tomcat5的tar包。其实对于用做服务器,我尽量用服务器自己带的软件包,而不想自己加的软件包更不用提自己手工编译了,因为这样涉及到很多配置的问题。而对于tomcat的这个也是如此,自己下载tomcat包的一个优点是系统会很干净,就加一个第三方包就可以了,也没有依赖的问题,唯一不爽的就是它的自自动。关于它的自启动,有这样几种方法:
(1) 直接把start.sh放到rc.local里面,这样是最省事的方法,但是带来的问题就是是用root启动的,并且不能用启动脚本灵活的控制其起停。
(2) 自己编写脚本,在start,stop函数中调用start.sh,stop.sh来控制tomcat起停,这样也很简单,但是也存在(1)中的问题,并且没有pid创建等等,故不能实现status的功能,可以做到灵活控制启动停止了,但是还是没有做到用non-root启动的目的。在网上找的脚本编写得并不好,由于启动tomcat需要比较多的延时,所以如果不注意控制,很可能发现自动不了,或者不能重启,停止了java还是不退出等等问题。
(3) 可以把catalina.sh放到init.d里面,因为catalina.sh本身就有start,stop之类的调用方法了,当然,为了适应chconfig的要求,这个脚本要做相应的修改,添加用数字表示的启动停止顺序等,缺点同(2)
(4) 使用tomcat带的jsvc,这样可以做到non-root用户,启动到特权端口上,这个是很多人的选择,并且jsvc里面带了启动脚本实例。
(5) 使用su - user -c script方法以其他用户运行tomcat的catalina.sh,这样可以以non-root用户运行tomcat,但是不能使用特权端口。这个也需要自己编写脚本来实现自启动,为这个我专门花了两个小时把CentOS自带的tomcat5的脚本改到合适单独安装tomcat的情况,经过测试不会遇到2的问题,CentOS这个启动脚本考虑问题很周全,建议自己安装tomcat的用户根据需要自己改改。可惜blogger不能贴附件,否则我就传上来。我的需要是使用nginx做前端的反向代理,所以方案5适合我的需要。

另外,经过一天的学习和配置,对CentOS理解越多,还是觉得它在服务器环境来讲确实很不错的,完全没有我担心额外软件包的问题。关于源:mirror.be10.com这个源比较快,在cn99源down掉了之后,比我遇到的任何debian,ubuntu源都快。源也是我挑选发行版的一个重要原因。还有就是epel这个comunity的rpm库也很重要,我原来以为用nginx之类的不包含在centOS发行中的软件包需要自己编译的,google了一下之后,发现还有epel这样一个软件库,由于centos和rhel二进制兼容,因此就不用担心软件包的问题了,基本上需要的软件包在epel里面都有。安装和使用也特别简单。
tomcat5启动脚本:
#!/bin/bash
#
# tomcat5 This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat5
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Release implementation for Servlet 2.4 and JSP 2.0
# Short-Description: start and stop tomcat
### END INIT INFO
#
# - originally written by Henri Gomez, Keith Irwin, and Nicolas Mailhot
# - heavily rewritten by Deepak Bhole and Jason Corley
#

# commented out until the RHEL and FC daemon functions converge
# Source the function library
#if [ -r "/etc/rc.d/init.d/functions" ]; then
#. /etc/rc.d/init.d/functions
#fi

NAME="$(basename $0)"
unset ISBOOT
if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
NAME="${NAME:3}"
ISBOOT="1"
fi

# For SELinux we need to use 'runuser' not 'su'
if [ -x "/sbin/runuser" ]; then
SU="/sbin/runuser"
else
SU="su"
fi

#tomcat setting
TOMCAT_CFG="/etc/tomcat/tomcat5.conf"
if [ -r "$TOMCAT_CFG" ]; then
. ${TOMCAT_CFG}
fi

SHUTDOWN_WAIT=30
# Define which connector port to use
CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"

# Path to the tomcat launch script
TOMCAT_SCRIPT="${CATALINA_HOME}/bin/catalina.sh"

# Tomcat program name
TOMCAT_PROG="$NAME"

# Define the tomcat username
TOMCAT_USER="${TOMCAT_USER:-tomcat}"

# Define the tomcat log file
TOMCAT_LOG="${TOMCAT_LOG:-/var/log/tomcat/catalina.out}"

RETVAL="0"

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function checkpid() {
local i
for i in $* ; do
if [ -d "/proc/${i}" ]; then
return 0
fi
done
return 1
}

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_failure() {
echo -en "\\033[60G"
echo -n "[ "
echo -n $"FAILED"
echo -n " ]"
echo -ne "\r"
return 1
}

# remove when the RHEL and FC daemon functions converge
# (pulled from /etc/rc.d/init.d/functions)
function echo_success() {
echo -en "\\033[60G"
echo -n "[ "
echo -n $"OK"
echo -n " ]"
echo -ne "\r"
return 0
}

function parseOptions() {
options=""
#if GLOBAL VARIABLE is set, TOMCAT_CFG is optional
if [ -r "${TOMCAT_CFG}" ]; then
options="$options $(
awk '!/^#/ && !/^$/ { ORS=" "; print "export ", $0, ";" }' \
$TOMCAT_CFG
)"
fi
TOMCAT_SCRIPT="$options $TOMCAT_SCRIPT"
}

# See how we were called.
function start() {
echo -n "Starting ${TOMCAT_PROG}: "
if [ -f "/var/lock/subsys/${NAME}" ] ; then
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
if checkpid $kpid 2>&1; then
echo "$NAME process already running"
return -1
else
echo "lock file found but no process running for"
echo "pid $kpid, continuing"
fi
fi
fi
export CATALINA_PID="/var/run/${NAME}.pid"
touch $CATALINA_PID
chown ${TOMCAT_USER}:${TOMCAT_USER} $CATALINA_PID
$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT start" >> $TOMCAT_LOG 2>&1
#$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT run" #for testing
RETVAL="$?"
if [ "$RETVAL" -eq 0 ]; then
echo_success
touch /var/lock/subsys/${NAME}
else
echo_failure
fi
echo
return $RETVAL
}

function status() {
RETVAL="1"
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
if checkpid $kpid 2>&1; then
echo "$0 is already running (${kpid})"
RETVAL="0"
else
echo "lock file found but no process running for pid $kpid"
fi
else
pid="$(pgrep -u tomcat java)"
if [ -n "$pid" ]; then
echo "$0 running (${pid}) but no PID file exists"
RETVAL="0"
else
echo "$0 is stopped"
fi
fi
return $RETVAL
}

function stop() {
local STOP_VERBOSE="false"
echo -n "Stopping $TOMCAT_PROG: "
if [ -f "/var/lock/subsys/${NAME}" ]; then
$SU - $TOMCAT_USER -c "$TOMCAT_SCRIPT stop" >> $TOMCAT_LOG 2>&1
RETVAL="$?"
if [ "$RETVAL" -eq "0" ]; then
count="0"
if [ -f "/var/run/${NAME}.pid" ]; then
read kpid < /var/run/${NAME}.pid
until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
[ "$count" -gt "$SHUTDOWN_WAIT" ]; do
if [ "$STOP_VERBOSE" = "true" ]; then
echo -n -e "\nwaiting for processes $kpid to exit"
fi
sleep 1
let count="${count}+1"
done
if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
if [ "$STOP_VERBOSE" = "true" ]; then
echo -n -e "\nkilling processes which didn't stop"
echo -n -e "after "
echo -n "$SHUTDOWN_WAIT seconds"
fi
kill -9 $kpid
fi
echo_success
if [ "$count" -gt "0" ]; then
echo -n -e "\n"
fi
fi
rm -f /var/lock/subsys/$NAME /var/run/$NAME.pid
else
echo_failure
fi
fi
}


# See how we were called.
case "$1" in
start)
parseOptions
start
;;
stop)
parseOptions
stop
;;
restart)
parseOptions
stop
sleep 2
start
;;
condrestart)
if [ -f "/var/run/${NAME}.pid" ]; then
parseOptions
stop
start
fi
;;
status)
status
;;
version)
parseOptions
"${JAVA_HOME}/bin/java" \
-classpath "${CATALINA_HOME}/server/lib/catalina.jar" \
org.apache.catalina.util.ServerInfo
;;
*)
echo "Usage: $TOMCAT_PROG {start|stop|restart|condrestart|status|version}"
exit 1
esac

exit $RETVAL

2009年1月11日星期日

说说windows7

今天看Google资讯,无意中看到了windows 7 Beta提供BT下载的消息,顺着链接看了一些windows7的新特性,可能是写文章的人不明白真正吸引人的地方吧,举例说了什么任务栏预览窗口内容什么的。对于这些用于体验上的特性,windows真的不能和Mac OSX比,甚至都不能和装了compize的Linux比。说实话,说运行效率,windows xp确实不错,如果用Linux要达到windows xp的运行流畅程度,那么Gnome,KDE肯定是不能用的,不过windows xp的读写文件我倒是觉得没有Linux好,要我选择,我只可能用Mac OSX,Linux,然后才是windows xp,那么Vista,windows 7完全没有兴趣。不知道微软操作系统定位是什么了,提高易用性,也不是牺牲运行性能为前提吧,那些特效动画效果,我个人觉得windows xp那样就已经足够了。

2009年1月10日星期六

我满25岁了,回忆过去的那些日子

明天是我25岁生日,今天是我24岁的最后一天,突然想起了很多事情,一下子,工作已经两年半的时间,不好也不坏,只是感觉很充实,也学到了很多东西。
今天睡了个懒觉,10点半才起来,天气太冷了,被窝的诱惑力实在太大。我发现自己的意志力还是有些问题,不能拒绝一些诱惑和欲望,比如早起,即使上班我也要拖到实在是再晚一分钟就会迟到的,所以很多时候就不能像自己所设想的,早上刮个胡子,梳好头发,打好领带,擦好皮鞋,调整一下笑容衣冠楚楚的出门,还好是短发,否则那就真会是蓬头垢面了。我总会有借口让自己多睡个几分钟,比如自己昨晚12点才睡阿,学习工作太累,休息好才能工作好什么的,宁可待会到路上跑步去上班。这也让我想起高中时候,甚至大学时候在天津,大雪天洗冷水澡,想锻炼自己的意志力,看来也没有真正的派上用场,这一点是应该改的,25了,如果生命是100岁的话,那么已经过去了四分之一,而且接下来10年,必须使我最辉煌的时候,我不容许自己错过任何的机会。
今天有个学弟给我发邮件简历,想跳槽到我们公司,我之前是让一个朋友物色的,既然能联系到我,技术能力肯定也不错,他发个介绍过来,我觉得也挺不错,后来继续聊了一下,告诉我他四级也没有过,成绩也不好,我感到挺失望的,这些是公司的硬性规定,将来有无数的场合要看英语成绩,其实我觉得光用四级来评价一个人的英语水平和偏颇,但是从一个方面反应了一个人的学习能力和态度,我总是觉得如果真有能力,即使我英语不行,四级这种东西,死记硬背也要考过来,况且四级考的是词汇和阅读。我四级其实也考了几次才过,那个时候太不上心了,每天脑子里面都是计算机,直到了大三,开窍了,不那么执迷不悟,一口气把四六级都考过了。并且我始终是那么认为,搞计算机的,英语如果好就会如虎添翼,很多最新的文档都是英文的,所以我可以说学习Linux成就了我的今天,让我可以自由的把英语当成一种工具,让我对于事物总是有那么一种新奇感,喜欢研究,不搞明白不罢休,养成了坚持学习的态度。其实我挺怀念大学的,大学几年我有两个遗憾,一是为什么没有更努力些,拿奖学金;二是没有找个女朋友。不过后来想想也许很多事情是注定了点,顾此就要失彼吧,不过就是觉得自己好像还没有用上全力,还可以做得更好。我怀念泡在图书馆的日子,我怀念在启航网站里面的日日夜夜,我怀念和213寝室的同学们上自习的日子,我想念215寝室的兄弟们,我怀念那为数不多的跟同学们踢的几次球,我还记得毕业前夕的喝醉躺在马路上唱歌的情形,我还记得离校时那些拥抱。
我一直不怀疑自己的学习能力,到了单位之后也确实为单位解决了不少问题,有些时候有些问题大家觉得棘手了,领导就会把我叫过去让我看看,而且每次都居然很奇迹般的可以把事情解决,有很多次居然都是全新的我从来没有接触过东西,看看文档,花点时间,用点心。我想这和平常养成的学习习惯有关系,所以还是得要坚持学习才对,我有时候是否在想,是否在大学里面对于学习方面所欠缺的遗憾,所以毕业之后再补补?而且发现自己是一个很随兴趣发展的人,自己也觉得奇怪,我总是觉得学习新的东西有很强的兴趣,总部培训部一个老师听说我的专业之后可一个概括挺有意思,学的自动化,干的计算机,居然还教英语?在这些方面我其实也意识到了我的缺点,一个人时间和精力有限,不可能样样精通,所以在哪一方面我都比不上真正在上面花时间的人,比如这次参加RELTA就没有考过5级,也就当不了民航总局的评分员了,这也许是我和科班出身的差距吧,不过也还是有些不服气吧,自己觉得发挥还不错,自己教了那么多飞行员都考了四级,结果自己也就考了个四级?所以下次再努力了。说到英语,我其实没有丝毫的成就感,想起大学里面,我就完全是因为看国内编的教材不顺眼,并且看翻译过来的,我有时候都很自大的觉得翻译得好笑,所以硬着头皮去啃自动化和计算机的原版书,其实也没有啃完几本,关于当ICAO教员的事也许只是机会好而已,后面也只有硬着头皮边学边用,关于学习我还真是有所体会,因为书到用时方恨少,所以当你需要哪个知识的时候,你才会学得更加的快。我其实是属于那种不是很踏实的从头学到尾的人,我必须要先找到自己的兴趣,我学习起来才不会打瞌睡。比如看一本书,我通常会很快看完,跳着看,但是通常要反复看即便,我想我其实只是那种对新事物有新奇感,并且反应比较迅速,比较容易学以致用而已。这些东西是优点也是缺点,我应该更加聪明的扬长避短便是。
学习,坚持学习就是了。因为我知道机会只给有准备的人。要踏踏实实一步一步,不要好高骛远,但是也要警惕温水煮青蛙的教训,千万不可失去激情和斗志。

25岁了,父母长辈开始念叨终生大事了,老说什么我的某某同学现在结婚了,某某生子了什么的,对于我而言,我倒是不着急,我在等待那样的一个让我不害怕和她一辈子的女子。我没有太多的耐性,这是我的一个缺点,所以对于胡搅蛮缠不可沟通之人我会慢慢失去该有的关心和爱护,我的容忍是以期待着一个改变为前提,而容忍的时间长短是我对她的爱来衡量,当缘尽了,那也该散了。到现在为止交过一个女朋友,在一起一年多,结果还是分了手。说实在的,我挺遗憾的,不是她不好,她非常好,她不爱钱,她爱干净,总是她家里弄得整整齐齐;她漂亮,她对我好,所以有时候一个人呆着,想起她,仍然会叹气,黯然伤神。我记得分手之后的某个周六,我在家大扫除,翻出了一些文字,那是她写给我的,我看着看着慢慢泪水就流了下来,然后一个人在家里号啕大哭。可是我们分手似乎又是必然,分手之前总是吵架,她总是乱发脾气,我也不能像以前那样去容忍和哄她,找她谈她也不说话,沉默,每次遇到那种情形,我连头撞墙的心都有。我发现我们的人生观很不一样,我们相互沟通和理解成了问题,也许是学历和生活经历的差别造成的问题,并且我们相隔两地,相互沟通起来非常困难,有一段时间,每个月手机费都是四五百;她是导游,工作不稳定,我尝试着帮助她提升,为了在一起而努力,我记得我帮她补习功课,准备成人高考,她学不好就发脾气,我要好好哄才能继续学;她回去了,和她那些姐妹在一起,就又不学了,这些是我不能理解的,但是她的理解却是我没有能力,不能养她,还给她压力,关于这些就吵着分过手。经济基础决定了上层建筑吧,对于我而言,我已经比周围人努力很多了,可我不能抢银行来一夜暴富,我在努力,我只是希望有一个善解人意的女子支持我,相信我可以给她幸福,跟她一起我已经是很有压力了,可我一段时间都相信着真爱可以战胜一切,虽然我相信她也可以跟我过朴素的日子,然而我却不愿意我的女人比别人过得差,所以在我最需要理解支持和相信的时候,不要和我吵。后面一段时间几次说过分手,每次都是我重新把她找回来,如果说舍不得分手是因为怕她离开我过得不好,后面听说她姑姑给他介绍男朋友时,我想是我放手的时候到了。我想我应该可以找到那样一个soulmate吧,要是不行,那么就找一个不会乱找我吵架,彼此过得下去的人结婚罢了。
明天是我25岁的第一天了,fighting!

2009年1月7日星期三

Python数据库连接需要关闭数据库连接吗?

程序运行久了会出现数据库连接超时失效的错误,因为我把数据库连接放到了模块级别了,那么所有的类都可以使用这个connection,我想当然的这么做,因为我不想自己去频繁处理连接。也想把关闭连接的动作放到类的__del__方法中去,但是总觉得这样麻烦,所以放到了模块级。今天去翻看了一下pyhton DBAPI PEP249,看到了这样的两段关于close方法的说明:
cursor:
.close()

Close the cursor now (rather than whenever __del__ is
called). The cursor will be unusable from this point
forward; an Error (or subclass) exception will be raised
if any operation is attempted with the cursor.
.close()

Close the connection now (rather than whenever __del__ is
called). The connection will be unusable from this point
forward; an Error (or subclass) exception will be raised
if any operation is attempted with the connection. The
same applies to all cursor objects trying to use the
connection. Note that closing a connection without
committing the changes first will cause an implicit
rollback to be performed.
显示的调用close方法可以马上关闭连接,但是DBAPI应该在__del__方法中显示关闭数据库连接的操作,因此其实使用符合DBAPI标准的数据库Driver就根本自己不用去管连接的问题了,你初始化一个connection之后,如果connection被GC收集,那么连接会自动释放的!

2009年1月6日星期二

这几天得到的教训

从周日开始,休完元旦假吧,2009年就给了我几个耳光,让我必须得谨慎谨慎再谨慎的做开发,否则在调试和部署上做的工作,付出的精力会比想象的多,想想我这三天睡得都不安稳
(1) 使用gentoo作服务器时要注意编译参数
准备使用lighttpd+fastcgi来部署程序,结果发现lighttpd不支持fastcgi?左试右试发现编译参数里面没有fastcgi。对于没有时间折腾和相当丰富经验的人,慎用gentoo作为服务器,万一你要增加新功能,那么很可能你不重新编译,就不会支持,内核,php,apache等等都是。
(2) 写配置文件要非常小心,差之毫厘,谬以千里
在workstation上的配置都正常,服务器上lighttpd重新编译之后还是运行不了,比较了两遍配置文件还是没有发现问题,后来把本机上的配置放到服务器上又能运行,仔仔细细比较了一下,发现少了一个斜扛,我rewrite到/code.py,结果在fastcgi.server节里写了code.py,少了一个斜扛,又狂晕
(3) 慎用developing状态的软件
我一直用webpy的git版本,在自己电脑上运行似乎没有问题,部署到服务器上,发现session的问题,造成用户验证的拦截器失效,尝试了很久,后来仔仔细细的把webpy的源代码读了一遍,后来才发现是线程池里的threadLocal变量没有被清空,跟开发者联系,尝试自己fix,结果才发现发布的0.31版本根本不存在这个问题,也许git上是开发者没有完成的版本,通过通读源代码,发现其中有不少bug会造成各种各样的问题。比如db.py模块中,MSSQL中要取kw['pw']关键字,结果写成了kw['kw']。
(4) webpy开发经验,webpy的session功能的加入是以一个processor加入的,那么如果你有自己的processor使用了session的功能,比如用户验证的功能实现,那么你的拦截器必须在session初始话之后再调用app.add_processor(func)加入。
(5) mysql乱码:
我的workstation是archlinux,今天才发现它的mysql默认设置都是latin-1,而不是像其他linux,比如gentoo,centos,debian,ubutnu那样默认用utf8,造成我机器上数据库操作不能支持中文。我把workstation上的数据库导出导入到server的时候,即使服务器的设置全部都是utf8,都是由于mysqldump会把数据库的character set信息保留,所以造成服务器也不可以使用中文了,并且使用alter database, alter table设置default character set 和collate不起作用,调试了一个下午,后面干脆dump之后,把sql文件中的latin-1全部替换成utf8,然后drop数据库后,新建数据库并且设置默认编码为utf8,问题解决。用了mysql很多年了,乱码问题一直都不成问题,但是今天却很多巧合搞到了一起,搞了将近一个下午,问题解决之后觉得自己都可笑。
(6)whatwhat的中文问题:
whatwhat是用turbogears开发的一个项目管理工具,比较简单易用,适合小型团队使用,但是它对于支持中文有几个问题,第一比如hack model.py中person的定义到Unicolumn,要人名可以显示中文,另外,数据库导入文件要像第5点说的那样,改到utf8.

2009年1月1日星期四

服务器准备升级了

公司的4台Linux服务器是我在2006年装的,其中三台Ubuntu6.10,都是web服务器;还有一台gentoo是定制的反向代理服务器,负责公网入口,当时用ubuntu的一个很重要的理由是参加工作以来,我自己的桌面就是ubuntu,那么出任何的问题都可以考虑随着我的日常使用,从而更加熟悉的解决任何可能出现的问题;还有就是当时我们这里可以使用的最快的源是cn99,它上面支持的三个发行版本就是ubuntu,debian和centos,所以这三个发行版本自然成了首选。这近三年的使用下来,总觉得ubuntu作为服务器来说心里老是觉得不踏实,也不知道是不是我自己的问题,因为配置服务器更新的问题上一直没有解决问题;不是每台服务器都可以连接公网,所以需要借助一台机器来作为更新的Proxy,但是在ubuntu,APTProxy我一直就没有配置成功;以前总觉得它应该是基于debian而优于debian的,所以没有选debian而选择的它,不知道debian上有没有这个问题。6.10的支持期限很快就要到了,想趁这次调整服务器的机会来一次大的升级,那么选什么呢?ubuntu8.10? debian4.0? centos?还是我现在自己使用的archlinux?选择Linux发行版本,对于配置来讲一个linux老手来说其实区别都不大,但是使用一个发行版本就意味着你要熟悉这个发行版本的一套软件包管理体系,还有对于企业应用,还要考虑这个发行版本是否经历了大量的测试,是否稳定可靠,它后面的社区有多大,文档有多少,是否有商业的公司在推进,因此看了一下distrowatch上面的linux发行版排名。

centos, 它是redhat enterprise edition的社区打包版本,对于redhat公司的技术力量不用怀疑了,并且它的文档也是最多的,redhat也是我最早接触的linux发行版本。
ubuntu, 也有商业的支持,社区似乎现在是最庞大的,不过专注于桌面的方面占了大量的份额;它的开发维护文档基本就是参考debian的就够了,所以在它和debian之间其实我还更加倾向于debian,据说163的服务器全是debian的
gentoo,曾经是我的桌面最爱,我完全只用它使用了三年的时间,也觉得它的包管理体系实在是很好,很强大,不过对于每台服务器我可没有时间去折腾,编译更新。
arch,我现在使用的桌面,使用了半年之后,感觉作为桌面还可以,但是如果放到服务器上去,感觉怕怕的,都是最新的软件,也不一定经过了详细的测试。
freebsd, 挺向往的一个纯血统的unix系统,还有就是传说的RockSolid Performance,不过想了好多年了,就一直没有狠下心来抛下Linux随BSD去,怕了学习成本。

现在人开始变得现实起来,开始发现商业和利益驱动的力量也不可小觑,高手也是要吃饭的,所以更加倾向于背后有商业支持的Linux版本,Redhat公司在Linux里面做的贡献就很值得钦佩,所以对于centos确实是比较想,并且以前烦躁的RPM包依赖问题,现在有了yum已经不成问题了;而debian在业界的广泛使用也让我倾向于选择它,所以再看看,看看它是否能完美解决这个集群更新的问题~