有些事情做了,还想再做一次(一)。

三月中旬特地请了两周的假期,出门转了几个地方。这回来一晃都个把月了,心里总惦记着这补日志的事。其实旅游什么的,是最好写在日志上的了。按时间顺序摆一摆,贴几张照片,附几句解说,再来个总结,一篇游记就算是写好了。

第一站:西安。西安对杭州而言,应该算是远门了吧(在全国范围内)。这算是弥补了去年未完成的年度计划之一。在飞机上看西安的时候,就对西安没什么感觉。因为天气不好,云太厚,雾太大,压根看不到。从咸阳坐大巴到市区的路上,还暂时看不到阳春三月的景象。要么是一片片黄土,要么就是还没吐出嫩叶的树枝,哦,还有各种被灰尘附着的建筑物。到了市区后,从人口数量上比,和杭州没啥区别。可是从着装上比,夸张点说就像是16级灰度和32位真彩色的差别。对此我只能说,勤劳的古都人们太务实了。

到西安后,第一要解决的就是住的问题,其次是吃。住的价格与杭州再一比,再夸张点说,那就像抄文字的小明和打篮球的小明的差别了。其实我还没有富裕到觉得抄文字的小明价位很低的那种程度,瞎侃呗。

说到吃啊,那真是太合我意了。不管是正餐、还是快餐,或者火锅,亦或烧烤、还有肉夹馍,都让我流连忘返,顾此失彼。在西安,要是只说肉夹馍,那就太掉份了,一看就是外地来的。只能说是夹馍,因为既然是馍,就可以夹很多玩意啊,谁说非得是肉了?西安外国语学院正门前的那家里脊夹馍就相当好吃。我在旁边的速7买丝袜奶茶时,看着几个小学生在摊前流着哈喇子朝着老板娘挥舞着脸色发绿的毛太公,我的心里开始发痒了,可是我在买到奶茶后,毅然扭头就走了。为啥?因为我要去师大对面吃鱼酷了,“高档餐厅”恐怕会嫌弃吃里脊夹馍的人吧?所以我只好在后来去师大学生食堂的路上顺手买了他家的馍。一个馍下肚,饿得发昏的人顿时就清醒了,连davidx请的那餐李记搅团是什么滋味,我都记不起来了。只记得那丝滑般的入嘴口感,让人久久不能忘怀啊。走在西安的路上,看着满街的小吃,再想想杭州,得出这么个结论:服装店之于杭州正如小吃店之于西安。服装带来的附加值对我而言,是不如可口的小吃让人心满意足的。

俗话说得好啊,饱暖思那个啥。吃饱之后,该出去玩了。某90后同学说想去城墙上骑单车,结果在双人车后座上被吓得哇哇大叫。到西安去玩的人,都会被推荐到一个地点——陕西历史博物馆。说实话,去之前,我还都觉得去了是给这些给我建议的人的面子,去了之后才知道,是他们给我面子,才推荐我去陕博。先不说往远古人那头说了,光是秦、汉、隋唐这几个在中国历史上霸占了好些年,并且说出去都是中国面子的朝代,就能让人大开眼界,大长见识。秦代的兵马俑是见多不怪了,汉朝的丝绸之路,各种出土的小泥人儿,小家什儿的,那真是没完没了,唐朝的皇城布局之工整,真是让人不由自主的拿现代西安城建来对比了,这次对比拿啥来做比喻呢?中华民国和中华人民共和国?如是天真的是圆的,那么长安城就真是方的。让我不解的是,西安方面怎会好意思拿现代的城市地区图与唐代的长安地区图做对比,并且还是半透明的覆盖对比,我再小小地对现代西安吐个槽。还有一众唐三彩的盆盆罐罐以及仕女像,特别是仕女像,让90后同学发自内心的羡慕啊。总而言之,唐代那里的宣传片让人看得真是心潮澎湃,如有波涛汹涌啊,真让人有一种想穿越回去的冲动。我就不解了,最近国内的穿越剧怎么净往雍正那窜,大唐多美好啊,还是正统的汉人天下,穿过去当个武则天啥的,总比争着给人家当妃子要强吧?

参观完陕博,我怀着复杂的心情继续参观了大唐芙蓉园。看了场据说是全亚洲最大的3D水幕电影《孙悟空大战007》(真名我忘了,胡诌一个)。电影看完也没啥感觉,到是那紫云阁,让我真的有种在玩仙剑,突然来到了蜀山的感觉(我知道,仙剑的时间和地点都与唐朝无关),唐朝建筑真的很霸气,不是张扬,是让人敬畏的霸气。虽然不能亲返唐朝,但身为李姓人,我总算是没有太遗憾。

在西安住了一周,总体感觉是:其貌不扬,但很内涵,很有味道,像我。特别是翠华路上的赵家烤肉坊

组图: 继续阅读“有些事情做了,还想再做一次(一)。”

有些事情现在不做,你还在等什么呢?

虽然公历2012已经来到,但对于我等天朝屁民而言,过了今晚,才算是迎来正统的世界末日之年。

赶在末日前的最后几个小时,对照去年的年度计划,制订的挺多,实现的没多少。书是看了几本,但身体锻炼方面,没有新爬的山,没有打过羽毛球,远门旅游都推迟到明年阳春三月了。不过虽然计划内的事情没完成多少,但计划外的事——求偶,却在不经意间很自然地完成了。她开朗、幽默、乐观、大方;与我兴趣相投;第一眼看到就会喜欢;有点小肉,还有各种我喜欢的的小优点。

今年就不制定计划了,把去年还没完成的实现就OK了。

有些事情,现在不做,你就得抓紧时间做了。

谢谢五月天,谢谢《第二人生》。

MacBook Air二三事

  • MacBook Air合上盖子前把手机连上,合上盖子后就是一个巨大的移动电源。回家这一路上15个小时,Meizu MX这个耗电大户居然还能一直玩到家。
  • 回家后拿出电源,发现竟然无法充电。把电脑放在火炉边烤了一晚上,也没啥反应,MagSafe接口一直不亮灯,后来急得走投无路,病急乱投病地把白色电源也放到火炉边烤了下,竟然行了。这才知道,网上说把电脑热一下,是指把电源热一下。
  • 病急乱投医时,打了苹果的客服热线,客服小姐说有一招:按住shift+option+command+开机键 十五秒,然后松开,重新开机,不过好像不适用于我这种。
  • TotalTerminal是个随手呼出的终端,在Linux下爱用Tilda的朋友应该会很喜欢这个软件。

Vim查找替换的高端用法

处理文本时,有这么一个需求:一个包含大量聊天记录的文本文件,有两列。一列是时间,一列是内容。大致如:

1319265479, 你好啊。
...

现要将第一列的Unix时间戳转换成”2011-10-22 14:37:59″这种形式。

我第一反应就是用Vim。但发现,每一行的时间戳都不一样,不能直接简单的查找替换。其次,使用sed来处理每行,使用某个程序来将时间戳转换成直观的时间。但据我查找,Linux下的date可以将时间戳转成直观的时间,但Mac OS X下的date却不能做到。再次,我只好回到Vim里,打算从文档看看查找替换时能不能支持函数来转换匹配的字符串,结果还真有。

因为这文件里的时间戳已经很有规律了,都是以131开头的,所以我就用简单的匹配来做了。

:%s/\(131\d+\),/\=strftime("%Y-%m-%d %H:%I:%S", submatch(1)) . ", "/g

下面简要解释下这个正则表达式。:表示进入Vim的命令模式,%s表示进行全局替换,\(131\d+\),表示匹配以逗号结尾的时间戳,\=strftime()表示将先执行函数strftime(),将返回的结果进行替换,submatch(1)表示将匹配的时间戳当作strftime()的参数,.”,”表示将strftime()的结果与”,”组合起来(.号表示连接两个字符串)。这个正则表达式应用在文首的例文,进行展开后的结果如下:

:%s/1319265479,/\=stftime("%Y-%m-%d %H:%I:%S", 1319265479).","/g
等同于:
:%s/1319265479,/2011-10-22 14:37:59,/g

关于这种用法,可以Vim中使用

:h sub-replace-\=

来查看相关文档。

Got A Mac

还记得我刚接触到Ubuntu的时候,是在06年那会儿。Ubuntu 6.06刚出来,国内有个组织将其做成了适合国情的版本,名为Hiweed。那时,Hiweed吸引我的最主要一个特性就是3D桌面。在我内存为512Mb的电脑上,安装好Hiweed,竟然都不用安装任何其它驱动程序,就顺利开启Compiz桌面特效。鼠标滚轮在桌面上一拔,桌面立方体就转得异常欢快,且感觉不到一丝迟钝。

从那以后,我但凡在自己电脑上安装Linux,首选就是Ubuntu。从6.06一直到最近的11.04,基本上每个版本都有用过。但最近在那台”Air”上,Ubuntu的表现,却不能再让我满意。

“Air”是10年7月买的,到手之后我便格了自带的Windows Vista,装了上最新的10.04,尔后一路升级到11.04。可是自从升级到11.04,我就一直沉浸在Unity和Classic GNOME & GNOME 3的“三角恋”中了。总的来讲就是:我讨厌Unity的界面,又丑又慢;不能适应GNOME 3的剧变,顶上的Panel消失,让我很不能适应;喜欢传统的GNOME 2,但升级之后,总是出现网卡不能激活,X突然重启,键盘突然不能击键诸如此类的烦心事。”Air”机身内存总共就2G,开个Chromium,再加上系统内存泄漏,内存基本就吃没了。不堪忍受此等罪后,刚好KDE 4.7适时发布了,便决定第N次尝试KDE。果然带着对GNOME的怨念,这一次的KDE之旅异常舒适。就连那看着软软控件都觉得非常顺眼了。

KDE统一的用户体验,做得比GNOME要好。至少从应用程序的命名上可见一斑。应用程序菜单里,清一色的K***。至于KDE的其它优点,我在此不多讲(跑题已经很远了)。现在数数我离开它的理由:虽然说漂亮,虽然说用户体验一致,但桌面环境Plasma时不时的Crash,其它KDE程序也跟着起哄,这让我不能接受。我也想尽一份力去提交Crash Report,结果又是注册,又是填说明,最后还要我查看一个庞大的问题列表以确认我的问题是否位列其中,顿时放弃了。不过,这些理由都不够让我离开它。最关键的还是我对MacBook Air 2011向往已久的心,以及在我多方找人试图从香港私带过关的关键时候,沙子钧居然暴殄天物地在日本买了Air 2011的高配版。就这样,他成为了让我离开KDE的最后一根稻草。

谢谢寻文凯,让我以低于行货价1500¥的价格,拿到了垂涎已久的MacBook Air。轻薄的机身和它的上任Asus UX30比起来,还是要略胜一筹。对于它们俩,我有个不恰当和不适宜的类比:UX30和Air就像是波多野结衣和林志玲。“像”和“是”果然还是有差别的。不仅外在有差别,而且内在更明显。

以后,我会写一些关于Mac OS X的软件推荐及使用心得,这次就到这里了。放上”Air”和Air的合影作为结尾。

真假Air

Vim编辑远程文件

Vi/Vim作为我最值得炫耀的编辑器(没有之一),与它的对手Emacs相比,经常被提到的一个优点就是:这个世界上几乎所有的*nix服务器,都会自带Vi/Vim。这个优点带来的方便之处在于,只要会用Vi/Vim,你就可以在任何一台*nix服务器上使用神乎奇技的手法来编辑文件,而不用额外安装软件(Emacs去哭吧)。这个优点几乎在我所有的服务器操作中都用到过,但在今天,似乎略有不便。

我有一台VPS,这基本上是众所周知的事情了。但中美网速的差别与两国国民生活水平一样大,导致我娴熟的指头在服务器上用Vim直接修改文件时,遇到了十分强烈停顿感。这深深地挫伤了我文思如泉涌的灵感。便想把远程文件下载到本地,修改后再上传,就像Emacs一直以来无奈的做法一样。当然这事必须不能手工去做,不然不仅不能给Vimer长脸,还会被认为是其它阵营派来给Vim抹黑的。

本文的主角是netrw.vim,它可以让Vim直接编辑网络上的文件(当然是netrw已经把该文件下载到临时文件里了),并且还支持保存到网络上(如果有写权限的话)。不知道从什么开始,它便成为Vim默认自带的插件了。在大多数现代GNU/Linux发行版里,安装Vim时都会顺便把它给装上了。

netrw使用起来也很简单。在终端里可以直接:

$ vim ftp://user@some_url/path/filename

这样便可以编辑一个远程文件,其它操作,便与编辑本地文件无异,该’:w’或’:q’时都悉听尊便。

但并不是所有的远程文件都能这么方便的访问,像我今天修改的那个文件,只有通过ssh才能访问到,并且ssh还是有key认证的。但是呢,对于我而言丝毫不影响,因为我还可以这样:

$ vim scp://t@tigerlee.me/path/target_file

也许你这样做,并不会成功,当然不成功的原因是多样的,最主要原因可能是你不能顺利地(不用输入密码,没有任何交互的提示)使用

$ scp://t@tigerlee.me/path/target_file .

来将target_file拷贝到本地。如果能做到顺利,那么你也会成功的。要实现顺利地使用scp,无外乎就是去掉一些不必要的认证过程,使用不带密码的key是最方便的了。详细使用参见netrw的文档:‘netrw-ssh-hack’,有Vim的哥们呢,就直接使用’:h netrw-ssh-hack’来看好了。

当远程文件拥有一个冗长的路径时,直接输入全部路径可能比较麻烦,因为它又不能使用Tab补全。这时可以先输入:

$ vim scp://t@tigerlee.me/

然后再在稍后出现的路径列表里慢慢选了。

netrw共支持三种使用模式:远程编辑,远程浏览(包括浏览目录内容),远程写入。不同的模式,支持的协议也不同。这是理所当然了,不然对于HTTP地址的文件,怎么写入啊?以下是不同模式支持的协议:

远程编辑
:e dav://machine[:port]/path                    uses cadaver
:e fetch://[user@]machine/path                  uses fetch
:e ftp://[user@]machine[[:#]port]/path          uses ftp   autodetects <.netrc>
:e http://[user@]machine/path                   uses http  uses wget
:e rcp://[user@]machine/path                    uses rcp
:e rsync://[user@]machine[:port]/path           uses rsync
:e scp://[user@]machine[[:#]port]/path          uses scp
:e sftp://[user@]machine/path                   uses sftp

远程浏览
:Nread ?                                        give help
:Nread "machine:path"                           uses rcp
:Nread "machine path"                           uses ftp   with <.netrc>
:Nread "machine id password path"               uses ftp
:Nread "dav://machine[:port]/path"              uses cadaver
:Nread "fetch://[user@]machine/path"            uses fetch
:Nread "ftp://[user@]machine[[:#]port]/path"    uses ftp   autodetects <.netrc>
:Nread "http://[user@]machine/path"             uses http  uses wget
:Nread "rcp://[user@]machine/path"              uses rcp
:Nread "rsync://[user@]machine[:port]/path"     uses rsync
:Nread "scp://[user@]machine[[:#]port]/path"    uses scp
:Nread "sftp://[user@]machine/path"             uses sftp

远程写入
:Nwrite ?                                       give help
:Nwrite "machine:path"                          uses rcp
:Nwrite "machine path"                          uses ftp   with <.netrc>
:Nwrite "machine id password path"              uses ftp
:Nwrite "dav://machine[:port]/path"             uses cadaver
:Nwrite "ftp://[user@]machine[[:#]port]/path"   uses ftp   autodetects <.netrc>
:Nwrite "rcp://[user@]machine/path"             uses rcp
:Nwrite "rsync://[user@]machine[:port]/path"    uses rsync
:Nwrite "scp://[user@]machine[[:#]port]/path"   uses scp
:Nwrite "sftp://[user@]machine/path"            uses sftp
http: not supported!

小总结一下:

  • 网速慢,文件小的情况下,可以使用此法编辑远程文件。
  • 网速快,文件大的情况下,那就远程编辑文件吧。
  • 网速慢,文件大或网速快,文件小的情况下,你应该明白怎样做吧?

有关梦想的事

最近两天,在下班回家的路上,我又不由自主地想起了那个问题:“什么时候去找个地方支教呢?去什么地方呢?呆多久呢?”。回到家后,躺在椅子上仔细地思考了好一会,想写点什么东西下来。

有时候,会从网络上浏览到一些好的贴子。像旅行、户外、探险、爱心援助等,让人一看就能立即产生心旷神怡的向往。于是幻想着自己有朝一日也能像那些主角们一样,可以浪迹天涯、跋山涉水、舍生入死、仗义疏财。但浏览完毕,联想到实际的种种,便告诫自己:“醒醒,这只是你的梦想,你的生活就是工作,赚钱,成家,立业,生子,养子,直到最后老死(当然,在本朝,老死不一定是唯一的死法)”。是啊,我孑然一身,事业未有,尚未娶妻,更无生子,百事待兴,不应有其它想法才是。在多数人(仅为个人推测,至少我曾经也如此想过)眼中看来,要想有个舒适、自在的生活,工作赚钱才是第一,成家立业才是王道,当家事已定,事业有成,这时再去实现其它理想和目标,才不显得too young too simple, sometimes naive。

在以前,我一直都觉得面包总是会有的,我想要做的事情也总会实现的。但当我越往将来想,我心里便越不安。把如果现在有能力实现它,何必要去透支将来的时间呢,并且将来是那么的捉摸不定。往事物发展好的一面想,我可能在工作若干年后,经过一番努力,终于发达了。可以去世界上任何想去的地方,可以做世界上任何好玩的事情。可是在那个时候,我不一定还有一颗像现在一样充满着渴望与激情的心。更加可能的现实是,随时间的逝去,澎湃的心如同温水煮青蛙般被现实生活慢慢蒸干,渴望和激情逐渐被遗憾和后悔趁虚而入。往事物发展不好的一面想,我可能还来不及实现梦想,就因为各种人祸天灾,连拥有遗憾和后悔的感觉都没有了。退一步,往事物发展正常的一面想。一生可能就被找对象,结婚,买房、还房贷、养小孩等等随之而来的一系列正常历程所充满。而这段历程,都不是目前的梦想所能滋生的土壤。

我现在已经发现有很多事情当初没有去做,错过了那段光阴,就只剩下后悔了。所以我不希望在若干年后,当我看着年轻的人们在实现他们梦想的时候,心头会涌上一股带着后悔的醋意;听着他们讲述实现梦想的故事,我只能喃喃地说:“啊,我原来也想……,可是……,只好……”这般纯属怨念的话语。我知道梦想众多,不能全都实现。所以只想能在以后少一些遗憾和后悔;如果可能的话,还可以同他们一起交流,讲述自己年轻时候为实现类似的梦想所遇到的可爱人物和经历过的有趣故事。

好像从小时候到长大,我一直都有个习惯:如果我有一些糖果或是其它吃的,我会把好吃的留到最后。可是我现在想到:为什么不把喜欢的先吃了呢?我那么喜欢它,为什么要先经历那些没它好吃的,最后才细细品尝它呢?是所谓苦尽甘来么?如果我先吃喜欢的,再吃不喜欢的,可能最后不一定会将那些不喜欢的吃完(这有点类似于由简入奢易,由奢入简难的意思吧)。换个情境:假定人的一生,只允许一次好的事情发生,那么在少年、青年、中老年三者中,我们会怎么选择呢?至少我会选择青年,因为少年时也许还不能体会好的事情,而中老年时,可能已经没有像青年时的激情来享受好的事情了。

人生短暂,及时行乐。既然做出了选择,那就趁着还年轻,趁着牵挂不多,趁着还有自由,趁着还有激情,一股作气,将那些美丽的梦想一一实现吧!

——立此存照,待到明年,必定践行!

六月的雨,七月的事

已所不欲,勿施于人。在做人方面,我是这么理解的:如果我不喜欢一种人,不喜欢Ta的思想、行为,不管拥有这种思想,或是实施这种行为能给自己带来多大利益、拥有多少好处,那么我宁可放弃这些利益和好处,以免变成我所不喜欢的人。连自己都无法做到的,更加没资格要求别人做到了。这个理解正好与我所喜欢的一首歌词不谋而合:“就算会有一天,没人与我合唱。至少在我的心中,还有个尚未崩坏的地方”。这段时间以来,遇到一些事,加上以前遇到过的,开始有了这段感悟,算不上是人生真谛,至少可以敦促自己在未来的路上做得更好吧。

六月的雨比零八年那场雪来得还猛一些,全国各地纷纷出现“百年难得一遇”的海景,我也因为杭州的“海景”暂时中断了跑步的计划。真的不是我三分钟热度,你想想,连我跑步的河岸都被水淹了,难道还要让我变跑步为三千米游泳么?除此之外,六月份也发生了一件大事——《建党伟业》上映了。我,提早早地买好了首映票,兴冲冲地跑去了电影院,饥饿饿地购买了爆米花,然后,安静静地靠在了座位上,准备亲眼目睹这部天朝史上演员阵容最豪华且没有之一的大片。剧情都是发生过的,我也不打算复述,因为剧情和中学历史故事课本上的大致吻合。但除了吻合,本片还是有不少出彩的地方,我就暂且择取观片时发在校内网上的状态来写写吧:

当年太反动,此图片不适合展示

回首六月,拿得上台面,值得说起的,除了电影,应该就是赛车椅的事了。是的,我终于买梦寐以求的赛车椅买回来了,只不过没想到请回来的代价有如此之大,远超过我当初的预算。110斤的大箱子,光是组装起来就花了好几个小时。赛车椅,加上亚克力桌板,加上长臂台灯,加上按摩坐垫,再加上头枕,个人驾驶舱就这么搭建好了。至于方向盘,还是先拿这个天驹EX凑合着用吧。

六月事不多,就此两件。至于七月,虽然才过两旬,但还值得讲讲。

首先,我恢复了跑步!在七月这么火热的天气,再猛的雨,再大的海,也必须得晒干了!这对于说我进行跑步事业是“三天打渔,两天晒网”的人来说,绝对是个反击。

其次,我看书居然做笔记了!这几年来,我提笔写字的次数真是屈指可数。借来一本《Effective C++》,不紧不慢的看着,工作以来,不是用Ruby,就是在用Erlang,用C++的时间还真不算多,得补习了。其它书也在慢慢看,不过进度有点落后。总的来说,我还是相信我的执行力,应该能把年初定下的看书指标给完成了。

再次,我娘亲,带着她娘亲和她妹妹来杭州旅游了。在我印象中,她就基本没有出过湖南省,更别说千里迢迢来到杭州了。我请了三天假,加上周末两天,陪她们把杭州大致游了下。深有感触!原来即便是到了我娘亲这般年纪的女人,在逛街这项技能上也依然宝刀未老。但在游览上,明显就不着调了,走走停停的,整个西湖,大半天下来,才走完了北面的白堤,顺便再加个杭州花圃。

再再次,本周一,我再次接待了一位来自家乡的同学。在杭州三年多来,一直有人说要来杭州找我玩,谁知道我认为最没可能的某宅女,却是我第一个亲眼见到来杭州玩的同学。虽然只是跟团,虽然只在杭州停留一天。晚上用了几个小时,带她和她的驴友们再次走了西湖。据她们导游说:西湖,日湖不如雨湖,雨湖不如雪湖,雪湖不如夜湖。好吧,我承认“夜壶”是比较好看的。当然,夜湖还得配佳人,我很荣幸能把您三位的岳阳风情与夜湖魅力留在了我的HS11上。

最后,我想说:今晚去跑步了,原计划的路程,就跑了五分之三,剩下的路程就走回来了。我很羞愧,对不起国家,对不起人民,对不起今晚被我煮得半熟的俩鸡蛋和那杯牛奶。

VPS迁移:从OpenVZ到Xen

前阵子,在PhotonVPS上租的VPS到期了,当时图便宜,选用了基于OpenVZ的,结果这一年来,用得不甚舒坦。ssh连接上去,断断续续的的;OpenVPN装上去,为了nat之类的发了好久的ticket;博客打开的速度,也是老慢老慢的。趁着到期了,就琢磨着换成基于Xen的了。

在原来的机器上,大大小小的网站有10来个,每次需要增加新网站时,都是本着知根知底的态度,也没装个WebPanel,全是手工操作来增加Virtual Host,创建数据库,设置目录权限等。弄了几次终于累了。

Apache2的速度果然不是吹的,死慢,还巨吃内存。Word Press没搭几个,1G的峰值内存就全吃光了。就算照着网上的LAMP教程优化了一遍,也是没见起效。

Open VPN这玩意,既要有nat设备,还有设置iptables,更加有一堆证书。在我已知的任一平台上使用,都得额外安装软件,烦不胜烦。想想还是PPTP VPN好使,每个平台都默认支持,不用装其它软件,也没有证书之类的,很好操作。

基于以上几点,在迁移到Xen的过程中,做了如下改变:

Web服务器:Apache -> Nginx
网站部署:手动->使用自写脚本
VPN: OpenVPN -> PPTP

没变化 的也就php和mysql了。

在Apache下使用php基本上都是安装mod来达到支持php的,但使用nginx的时候,却没有这样的mod可以用,所以为了支持php,还需要安装一个php-fpm,在Ubuntu 10.04中,这个软件包名字叫php5-fpm。php5-fpm是一个服务,默认会监听在9000端口。在nginx的默认Virtual Host配置中,也有一段被注释掉的代码,包含有”location ~ \.php$”字样的。取消掉后重启就可以支持php了。

至于 PPTP,那就更简单了,aptitude安装好后,就直接可用了。只是默认是没有用户的,需要在/etc/ppp/chap-secrets里增加用户,并且密码是明文保存的。[2011-07-21更新] 漏了一步骤

iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -o eth0 -j MASQUERADE

因为我在/etc/pptpd.conf里设置了remoteip值为192.168.255.100-238,所以iptables中192.168.255.0/24表示我这个remoteip的网段了。[2011-07-21更新完毕]

至于自写脚本,贴上来仅供参考:使用之前请先过目,知道每条命令在做什么。

#!/bin/sh
USER=$1
SITENAME=$2

sample_conf() {
    echo "server {
        root /var/www/$SITENAME;
        index index.html index.htm index.php;
        access_log /access.log;
        error_log /error.log;
        server_name $SITENAME;
        location / {
            try_files \$uri \$uri/ /index.php?q=\$uri&\$args;
        }
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }"
}

sample_conf $SITENAME > /etc/nginx/sites-available/$SITENAME
ln -s /etc/nginx/sites-available/$SITENAME /etc/nginx/sites-enabled/$SITENAME
mkdir /var/www/$SITENAME
chmod o+t /var/www/$SITENAME

## create database
DB_NAME=`echo $SITENAME | sed -e 's/\./_/g'`
mysql -uroot -p --password=MYSQL_ROOT_PASSWD -e "create database $DB_NAME"
mysql -uroot -p --password=MYSQL_ROOT_PASSWD -e "grant all privileges on $DB_NAME.* to '$USER'@'localhost' identified by ''"

exit 0

使用该脚本前,需要先创建一个用户。这个脚本会使用自动为指定的域名创建一个Virtual Host配置,并且创建一个数据库,让该用户对其有所有操作权限。脚本使用格式:./script USER SITE_NAME,如:./new_site.sh tiger blog.tigerlee.me

人太懒了,都静不下心来把个教程写完整,我知道这是缺点,得改。