【转】清华梦的粉碎—写给清华大学的退学申请

效斐按:这篇文章很旧很旧了,但到今天才看到,并且到今天才知道这个人是许久以前在小虾blog上看到的《完全使用Linux工作》这篇经典文章的作者。当然那篇文章很有煽动性,Linux和Windows的平衡点我自能把握。而这篇确实反映了国内科研环境、学术氛围,esp.在计算机方面。收藏之。

Continue reading “【转】清华梦的粉碎—写给清华大学的退学申请”

有关丢电脑的那些事儿(二)——计算机、工作站、虚拟机终极配置方案(上)

经过近一个月的打造,效斐的超级无敌BT工作站基本搭建完毕,从硬件到系统到软件,完全自己打造,此workstation世间仅此一台,翻版必究~

硬件部分

效斐有个癖好,就是喜欢小的玩意儿。从小学的光明世界前身“小太阳”,到中学买很小很小的笔记本写笔记、自制很小很小的贺卡,到高中玩电脑用尽WinRAR、UHARC等工具把一个游戏压缩压缩再压缩,到大学写程序动态链接msvcrt、开启NOWIN98链接器选项、删资源合并区段加压缩壳甚至手工修改PE结构以求最后的EXE只有几KB。。到这次买电脑,简单地上zol对笔记本电脑的市场行情表示大大的不满而决定配台机后突然想起,乔帮主的Mac Mini很小很kawaii耶,要不咱自己配一个,于是,在丢电脑(12-6)不到100小时之后,纠结的日子便开始了(12-10)。

首先,最小的台式机主板,也就是17×17的Mini-ITX了。然后处理器,自然要用I3I5I7之流,简单的对比发现,I3I5I7貌似只有主频的差别,那就买个最便宜的i3 530吧。然而H55插槽的Mini-ITX却不多,zol上也就只搜到4款,找个便宜的,索泰的那款,还带wifi,虽然做工不咋地。

既然要小机器,那么硬盘肯定是要买笔记本硬盘了。查了下发现7200转的笔记本硬盘太太太贵,还是老实买5400转的。内存又肯定是要买矮版的,找了个Kingston的。

显卡不要——本人不玩啥高端游戏,就用i3内置的~

显示器。显示器再弄小的我就有神经病了。这个必须写程序要爽,要很大很大的,Dell 21.5寸的~

然后就遇到了麻烦——机箱和电源咋办。在经历了1U电源、Flex电源还有各种机箱的纠结后,我睡觉了。。(12-11)最后想,CPU最大热设计功耗是70多W,也未必用得上200W的电源,就用120W的DC电源算了。于是挑了款号称是全球最小机箱的立人E3002。

第二天(12-12)去徐家汇,打算先把主要的部件买回来,结果遇到了最大的悲剧——主板没卖的!情何以堪啊,白费地铁票钱了,还搭上请某飞一顿肯德鸡。。(为了弥补我白跑一趟的缺憾,我跑上音去买了本谱子和一本书。。)

Image_00155

回松江借某飞的电脑上网买。经过详细的价格比较后,决定:硬盘、内存、键鼠、显示器在京东,CPU、主板在淘宝商城,机箱、散热器在淘宝。

———————————–(分割线)————————————-

星期一(12-13)。京东的速度是最快的,保证当天早上的订单上午能到,上午的订单下午能到。。当然不包括大块头显示器。。

Image_00156

星期二(12-14)。主板、CPU、显示器到货,我在延安路演出,让某飞带领~

Image_00162

Image_00163

星期三(12-15),机箱到货~

Image_00164

我把这个照片发给豆子,豆子回了句:“oh shit,我看见了显示器。。”

我清楚地记得外面下着大雪,然而我组装好的机子却因为无法散热而飙到105度,然后跳闸了。。

最后组装好,但是散热不行只能裸机。更悲剧的是我U盘不识别,没法做系统。

Image_00166

星期四去机房把移动硬盘做上grub,回来把win7装上。Everest的系统稳定性测试表明,如果我盖上盖子,那么100度是轻而易举的事情,这让我欲哭无泪。

————————————–(分割线)——————————

为了改造散热,我跑超市买了尖嘴钳、电烙铁、绝缘胶布、螺丝刀这些许多年没碰的东西(准确地讲,烙铁我是第一次自己用)。然后一个机箱被我折腾的惨不忍睹。

最终,机箱和散热器的刚好不匹配(散热器位置上刚好机箱没有开孔)使我不得不放弃使用家用工具去完成工厂里冷轧、冲床做出来机箱的改造。散热器的高度又刚好高那么几毫米使得硬盘位置没法固定。到20号比赛的那天,我开始了淘宝1U散热器的历程。

最后看中一款29mm的国产涡轮式风扇,感觉还不错,就买了下来,又买了10个4007的风扇准备装到机箱上。

22号东西到货,经分析,决定在机箱上加装4个风扇。烙铁和绝缘胶布什么的要派上用场咯~

Image_00168 Image_00169

就这样,机器终于通过了Everest的烤鸡测试。

然后我很悲剧的发现,被我折腾的惨不忍睹的机箱,在换了散热器的情况下,是完全不需要改造的。于是我又决定重新买个相同的箱子。

26号新箱子到货。

Image_00174 Image_00175

硬件的折腾总算告一段落。

后来有个小插曲,就是某飞4000元的超级BT显卡买来,要找台电脑插上看有没有问题,结果众人的机箱均不够长,于是我就贡献了。。再次把什么都拆下来。。。而后壮观的景象~

Image_00176

用这个显卡让win7打了下分,图形性能跃升至7.6分,哇咔咔~不过我现在重做了系统,不然还可以冒充一下这集显炫耀炫耀。。

 

系统、软件方面部署将另立为文,敬请期待。

硬盘加密方案确定

这次买电脑之后,就一直在关注硬盘数据备份、加密方面。备份不用多说(尽管到现在备份方案还没有确定),加密看来看去也就是BitLocker、TrueCrypt那么几款软件。

BitLocker系统自带,最方便,但最大的问题是只在vista以上系统可用,XP下有BitLocker To Go,但是只读,Linux什么的就更读不了了。

TrueCrypt用的人比较多,但我直觉有一种抵触情绪,加之有人说此软件作者身份不明,源代码没有svn等的托管而直接是个压缩包,怀疑有中央情报局的后门(详见http://huaidan.org/archives/2751.html),果断弃之。

许多地方推荐FreeOTFE,就下了一个试试,和其他软件一样,可以虚拟文件磁盘或者加密整个分区,阅读了全部的英文说明书后,倒是觉得FreeOTFE的“兼容Linux的磁盘加密”比较有创意。

当时偶还不怎么会Linux,说明书中介绍了三种Linux下的加密:cryptoloop、dm-crypt、LUKS。看示范程序感觉cryptloop比较通俗易懂,结果呢,昨天在Linux里打命令才发现,Linux在2.6.32内核彻底去除了cryptoloop模块,也就是说这个太旧太垃圾,推荐使用dm-crypt。于是我就用dm-crypt实现了,Linux和Windows互操作成功。

但是觉得这事情怎么这么不靠谱。首先,dm-crypt和cryptoloop一样,是直接用用户的key加密整个文件,也就是说password是不能修改的。其次,挂载分区时,要自己指定加密算法、hash算法、加密位数等各种参数,随便错了一个解出来便是一堆乱码即一个未格式化的分区。

于是再看说明书,有一句话吸引了我

As well as using the "File | Linux | Mount file/partition…" menu items, LUKS volumes may also be mounted using the main "File | Mount file/partition…" menu items and toolbar buttons. (FreeOTFE detects LUKS volumes by their signature and offers to mount them appropriately)

这说明LUKS是个类似于BitLocker,或者FreeOTFE本身加密功能的东西,分区的头部是写有加密信息的。感觉不错,Google下LUKS的文档,找了半天最后还是不得不从LUKS官方下了份specification——这年头,不懂E文就别学电脑。。

大致读完,根据其描述的加密手段,总结LUKS特点如下:

1,加密文件的是随机生成的master key而不是用户密钥,即支持改密码
2,可以添加最多8个密钥
3,忘记密码时无法进行数据恢复(这样的话就不用郁闷BitLocker时给的那个recovery key放哪里比较好不会被JC叔叔搜去,数据更安全,记性不好怕丢密码的话可以多设几个密钥分别放在姥姥家舅舅家。。)

我表示非常满意。决定使用之:

cryptsetup luksFormat /dev/sda4 password.txt
cat password.txt | cryptsetup luksOpen /dev/sda4 home
mkfs.vfat –n BASE /dev/mapper/home
cryptsetup luksClose /dev/mapper/home

要进Windows测试之前,突然发现,Computer中已然多出了一个卷“34 GB Encrypted”,点开自动跳出密码输入框,把密码拷贝过来(我用的password.txt是512字节。。只能拷贝的。。囧。。),就打开啦~

把植物大战僵尸拷进去,unmount,开Windows~

打开FreeOTFE,昨天用的dm-crypt,而LUKS默认的hash算法是sha1,所以先把算法驱动装上。mount第四个分区,FreeOTFE自动弹出LUKS专用的对话框,而不是其本身或者Linux的那种。选使用Key文件,找到刚才的password.txt,确认~稍稍延迟了两秒,因为要挨个比对8个密钥,并且解密出来的master key要checksum以确认密码是否正确,不像另外的加密方式,不管密码正不正确(也没法判断)就挂载,由用户自己从分区的可操作性判断密码或者设置是否正确。

感觉很不错。回头用这个加密U盘,省得打印室的autorun或者文件夹病毒骚扰,FreeOTFE是支持readonly挂载的。

16G HP v225w入手

先秀ATTO的图~~

MyUDisk.png

这速度也忒快了点,网上标称的写速度只有8。

本来还打算量产一下做出CD分区和加密盘的,看到这速度,哥不敢随便去量产了,量产程序的版本是会影响读写速度的。

唯一的缺点是拿回来我机子不吃!!!观察了下USB接口,设计上是有些问题,不是特别的标准,标准的USB触脚都是有0.2mm左右的突起的,而这个没有,并且电路板的位置很低,所以接触上有问题,我机子前后12个插孔只有两个可以识别。

本来想退换的,但寄到沈阳太麻烦,再说也不是人家的错,自己观察了一下,果断决定——和上一个Kingston的U盘一样,改造!

其实也没啥改造的。就是用吃过的药的塑料板把电路板垫高一些。折腾了一个小时,现在后面板全部识别,倒是插的太紧拔不出来了,前面板比较松,勉强可以识别(不能识别时稍微手上给点力就好了)

[转自Cache]答七七 我说『愤青』

源地址:http://blog.renren.com/blog/330804502/704527889

首先,我想说,我无心反对愤青的存在。这有十分充足的理由。

众所周知,青年永远是一个民族的脊梁,是一个社会奋进的力量。而青年所身处的这个年龄段特点注定造就了这样一群人的独特风格:冲动、活跃、激进、有理想有朝气。这是所有年轻人最本质的特征。嫉恶如仇,怀揣着雄心壮志,期望能够改变世界。这一切并不能单纯地解释为幼稚抑或可笑。毕竟,当越来越多的中年人被家庭或事业的重担所反复碾压时,若再不能找到一类有血性的群体唤醒周遭的沉寂,那样的世界将是不可想象的。

看过《十月围城》,辛亥革命近在眼前,这样的一场胜利彻底覆灭了长久以来封建帝制的统治。而推动这样的胜利,所仰仗的便是无数奋起的青年义士。在那个朝不虑夕、内忧外患的时代,有了一群肩负着民族未来与家国荣辱的斗士,抛头颅,洒热血,才造就了全民族的觉醒与未来。

于是,愤青这个看起来并不是那么美好的词条,在我的定义里有着更多褒扬的意义。如若没有愤怒,何来抗争;如若没有抗争,何来尊严;如若没有尊严,All men are created equal只是一句空话。而这些,也正是历史所赋予年轻人的使命。

然,恰如任何事物都有其对立面,这样一种群体性的特质也必然有极大的不足:鲁莽、轻率、不负责任。而这些不足的成分,在当下被无限制地放大。

我所接触到的很多年轻人,或者我所能接触到的更多的年轻人,理念中充斥着浮浅和愚昧。人言去伪存真,去粗取精,可更多的情况却恰恰相反。很明显的例子即出现在中美或中日间的种种争端与摩擦。在最高潮的阶段,打开网页,满眼都是不堪入目的言论与文字。在这样的大环境下,一批批的网络暴民被培养成功。

暂且不论国内互联网暴力的深层次联系。提到这个,主要的原因在于中国互联网结构的特殊性,根据CNNIC的调查,中国网民的组成结构中,25岁以下的使用者占到了总数的七成以上。这个年龄段,正是一个国家的未来。

回到起始的话题。现如今,谩骂似乎也成为了一种文化,一个潮流。无论什么样的事件发生,都要先不吐不快地骂上两句。殊不知,这样一种几近愚蠢的行为将会断送整个社会的前途。犹想起那句“这个连街头的小偷都不敢呵斥的民族,却有勇气高呼灭了小日本。这个连活着同胞的苦痛都漠不关心的民族,却有脸说不忘死去的同胞。”

那些高呼着反日反美的人,是有几人试图理解过大和民族的文化传承,又有几人真正读懂《独立宣言》所传播出的人性呼号呢?

我并非要为美帝国主义唱赞歌,我也没有那个能力。现实是,别人确实有比我们更为突出的成就,如若连这样的基本点都不能认同的话,讨论没有任何意义。现如今有太多太多人不理解“自由”的真谛,仅仅是为了求自身情绪的释放,以为这即是自由的全部,却丝毫不顾及其行为所带来的后果。每每谈到改革,骂;谈到教育,骂;谈到领袖,骂;遇到批评,骂;遭遇不和,骂。骂来骂去,除了那些肮脏的字眼,再没有其他内容留给观众。于是,“粪青”应运而生。这些,才是真正为我所不齿的人群,但数量,却相当庞大。

我想说,这是一个国家的悲哀与不幸。

谩骂不是力量,而仅仅是种发泄。或许,我能将其理解为一种自然的情感表达,无法禁绝。可很多情况下的人们,不会在冲动过后思考一件事情的来由及因果,不去追索事件的发展。情绪易于被渲染,在某种诡异的氛围里,聚少成多。 如今很多新闻事件出来,人们并不是去思考以怎样的方式去改变,去探究到底问题在哪个环节,能否避免,而是盲目跟风发泄。

是的,盲目。举个很久前的例子,08年时的家乐福事件,不谈事件本身,当时的一个插曲是白岩松发过一篇文章,大意即为抵制事件受到最大伤害的是我们自己。于是人们嘘声四起,各式的言论不绝于耳。就像白岩松自己说的,在那些跟帖中,真正抱着探讨问题的态度来谈的更不多,更多的只是把它当作了泄愤的场所。这是一种无端的盲目,每个人都有可能成为牺牲品。如若形成惯性,则尤为危险,人们只会成为舆论所操纵的工具且乐于其中,后果可想而知。所以,“清醒”这样一种可贵的品格若无法存在于多数青年人的秉性之中,实在可悲。

同样缺少的还有求证精神。如今很多事件发生,很少有人会问“为什么”,“是怎样”。大环境造成了轻信的蔓延。就像无数人所传播过的地产商任志强说过一句“我从来不为穷人盖房”,一石激起千层浪,人们纷纷记住了这个地产界“明星”,并尊其为“大炮”。事实上他从未在任何场合说过这句经典之语,论及出处,也不过是其在某篇博文里提到的商品房经济罢了。其大意是为穷人盖房从来就不是开发商的义务,兴建保障房、健全合理的收入分配制度才是遏制房价失控之根本。可悲的是,很少有人能够关注其作为一个国企领导者为改变不合理产业结构所做的努力。媒体断章取义,人们便口口相传,却少有人肯探究其真实性。这是极浮浅的表现。我亦不想歌功颂德,只能说经济制度与政治制度相脱节必定会造成大量的误解和伤害。

再说自由,自由也断然不意味着肆无忌惮,它是自我与他人利益的良好平衡,且必须有其恪守的底线。尊重乃自由之要义。离开这样的原则,自由便无从谈起。那些高喊着自由的口号却肆意践踏别人尊严的人们,终将为大众所不齿。

年轻人理应保持不衰的激情,但假若这激情放错了位置,指错了方向,依然会产生可怕的后果。青年理应成为社会发展的主流力量,在这样和平的年代里,既不会出生入死,也不会朝不保夕。所有人都可以怀揣着热情的理想迎向这个冰冷的世界。这并不仅仅是口号而已。批评当应以光明为出发点,即我们希望社会变得更好,制度更加完善,悲剧不再重演。而不应渲染某种冷漠,如所谓穷则该穷之类没有人性的观念。时代的确残酷,但同样,举手之劳,我们能做的还有很多。

所谓理性过分便是冷血,年轻人需要有激情,需要有热血,更需要有其所忿恨与抗争的事物。但前提是必须对自己的所作所为给以充分的理由支撑,否则,单凭一时激情,无理取闹的行为永远不能得到他人的理解和尊重。同理,一个学不会反思的个人,一个不懂得克制的群体将注定被围困在自我的世界中难以自拔。

来吧,世界的未来是我们的。

青年人当以其朝气与自信告诉世界我们的存在与价值。

【转载】蒙牛也做了一个艰难的决定。。。。。。。。。。。

蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺。

阿迪做了个艰难的决定,如果检测到用户身上有耐克,衣服鞋自动变透视装。

安尔乐做了个艰难的决定,如果检测到身上有其他品牌的卫生巾将自动焚毁。

诺基亚做了个艰难的决定,如果探测到10米范围内有iPhone,将启动自爆程序,毁灭10米内一切物体。

麦当劳做了个艰难的决定:如果检测到用户身上有肯德基的优惠券将自动对所售汉堡进行焚毁处理。

惠普做了一个艰难的决定,如果局域网上有任何非惠普电脑存在将自动发起黑客攻击。

百度做出了个艰难的决定,如果检测到用户电脑里有谷歌公司的软件,将自动启动电脑硬盘自动格式化程序。

可口可乐做了个艰难的决定,如检测到冰箱里有百事可乐,可口可乐将自动爆炸。

东热终于做出了艰难的决定,如果检测到用户电脑存有1本岛的电影,电脑里所有片都将变成打码葫芦娃或新闻联播。

空空做出了一个艰难的决定,如果检测到你电脑里面有其他女优的影片,空空的作品将会打上马赛克。

mac os做了个艰难的决定 一旦检测到电脑里有window系统立马重启。

奔驰做了一个艰难的决定,如果检测到用户家有宝马,将自动变成C4炸弹。

康师傅做了个艰难的决定,如果检测到用户使用过统一,方便面里将没有调料包。

中石化做了个艰难的决定,如果监测到用户汽车油箱里有中石油,将自动释放电火花。

联通做了个艰难的决定,如果方圆百米内检测到有移动用户 将使这些用户不间断自动拨打110。

优乐美决定做了个艰难的决定,如果检测到用户胃里有立顿奶茶,将自动释放硫酸。

中华做了个艰难的决定,如果发现烟民嘴里有苏烟的味道,会自动转换成屁味。

电信做了个艰难的决定,如果监测到用户小区里有使用网通,将自动短路。

广电总局做了个艰难的决定,如果发现用户有不和谐物的,会自动转换成十年精华版新闻联播。

杰士邦做了个艰难的决定,如果监测到用户有使用杜蕾斯,将自动释放艾滋病毒。

迅雷做了一个艰难的决定,如果检测到用户电脑曾安装过快车,将拒绝下载教育片。

Using PHP with mod_fcgid

By Michael Stucki

The upcoming version 4.2 of TYPO3 will depend on PHP 5.2. Here is some help on migrating your server.

 

Intended Audience

This howto explains how to run PHP as a process which runs independently from Apache. It is written for server administrators who want to use a flexible and at the same time easy to manage PHP environment.

What is mod_fcgid

mod_fcgid is an Apache module. It allows execution of external programs who create web documents as their output. This procedure is well-known from CGI (Common Gateway Interface) which is often used in shared hosting environments, for example to run Perl scripts.

mod_fcgid was created as a binary compatible alternative to mod_fastcgi. Both extend the traditional CGI principle with the feature that they use persistent processes, managed by a server component. This means that the web server will not launch a new process for every request as it is the case with CGI. The speed gain is enormous.

Using PHP with mod_fcgid offers a full-featured PHP environment combined with all the features that mod_fcgid provides. This solution has a lot of advantages over the traditional way of running PHP on a web server, while the only disadvantage seems to be that it is a little bit more difficult to be set up.

Advantages of mod_fcgid

  1. Speed
    mod_fcgid seems to be as fast as the traditional mod_php Apache module. However, it also allows to be run on a multi threaded Apache server. For various reasons this still does not work reliable with mod_php4 / mod_php5.

  2. Configuration flexibility
    With mod_fcgid it is possible to run many different PHP versions on the same server, and even with multiple different users.

Disadvantages of mod_fcgid

  1. Installation is more complex
    Installation of PHP using mod_fcgid is probably more difficult than setting up mod_php5, mainly because there is only a few documentation about it that can be found. However, since you found this document, you may be lucky…

Installation

Prerequisites

This manual is designed for Debian Etch servers. It expects a server running Apache 2.x. Basically this should work equally for other systems – they probably just use different paths and package names…

Installation of packages

The following packages are required:

  1. php5-cgi
    This is the CGI binary of PHP5. It was compiled with FCGI support and works perfectly together with mod_fcgid.

  2. libapache2-mod-fcgid
    This is the FCGID module

  3. apache2-mpm-worker
    This is the multi threaded multi-processing module (MPM) for Apache2. It replaces apache2-mpm-prefork with is a single-threaded MPM and is required by mod_php4 / mod_php5. Of course these packages must also be removed.
    Keep in mind that you may want to make a backup of your current php.ini, because php5-cgi will set up a new configuration file.

    # apt-get -u install php5-cgi libapache2-mod-fcgid apache2-mpm-worker

Configuration

  1. Remove mod_php4 / mod_php5 if not already done

    # a2dismod php4
    # a2dismod php5

  2. Enable mod_actions and mod_fcgid

    # a2enmod actions
    # a2enmod fcgid

  3. Raise the communication timeout (= maximum execution time) for FCGI applications in /etc/apache2/mods-enabled/fcgid.conf by adding the “IPCCommTimeout” directive

    <IfModule mod_fcgid.c>
        AddHandler fcgid-script .fcgi
        SocketPath /var/lib/apache2/fcgid/sock
        
        # Communication timeout: Default value is 20 seconds
        IPCCommTimeout 60
        
        # Connection timeout: Default value is 3 seconds
        
        #IPCConnectTimeout 3
    </IfModule>

  4. Create a new file /etc/apache2/conf.d/php-fcgid.conf:

    <IfModule !mod_php4.c>
    <IfModule !mod_php4_filter.c>
    <IfModule !mod_php5.c>
    <IfModule !mod_php5_filter.c>
    <IfModule !mod_php5_hooks.c>
    <IfModule mod_actions.c>
    <IfModule mod_alias.c>
    <IfModule mod_mime.c>
    <IfModule mod_fcgid.c>
        # Path to php.ini – defaults to /etc/phpX/cgi
        DefaultInitEnv PHPRC=/etc/php5/cgi
        
        # Number of PHP childs that will be launched. Leave undefined to let PHP decide.
        #DefaultInitEnv PHP_FCGI_CHILDREN 3
        
        # Maximum requests before a process is stopped and a new one is launched
        #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
        
        # Define a new handler "php-fcgi" for ".php" files, plus the action that must follow
        AddHandler php-fcgi .php
        Action php-fcgi /fcgi-bin/php-fcgi-wrapper
        
        # Define the MIME-Type for ".php" files
        AddType application/x-httpd-php .php
        
        # Define alias "/fcgi-bin/". The action above is using this value, which means that
        # you could run another "php5-cgi" command by just changing this alias
        Alias /fcgi-bin/ /var/www/fcgi-bin.d/php5-default/
        
        # Turn on the fcgid-script handler for all files within the alias "/fcgi-bin/"
        <Location /fcgi-bin/>
            SetHandler fcgid-script
            Options +ExecCGI
        </Location>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>
    </IfModule>

  5. Next, create the directory which is chosen by the alias, and put in a symlink to the php5-cgi binary

    # mkdir /var/www/fcgi-bin.d/php5-default
    # ln -s /usr/bin/php5-cgi /var/www/fcgi-bin.d/php5-default/php-fcgi-wrapper

  6. Finally, restart Apache

    # /etc/init.d/apache2 restart

 

Additional configuration

It is also possible to run different versions of PHP, even with different users.

  1. Enable mod_suexec

    # a2enmod suexec

  2. Create a new user

    # adduser <username>

  3. For every instance of PHP, create a new subdirectory in /var/www/fcgi-bin.d/

    # mkdir /var/www/fcgi-bin.d/php<version>-<username>/

  4. Instead of creating a symlink, this time you need to add a new file “php-fcgi-wrapper” inside this directory

    #!/bin/sh
    # Wrapper for PHP-fcgi
    # This wrapper can be used to define settings before launching the PHP-fcgi binary.

    # Define the path to php.ini. This defaults to /etc/phpX/cgi.
    #export PHPRC=/var/www/fcgi-bin.d/php5-web01/phprc
    #export PHPRC=/etc/php5/cgi

    # Define the number of PHP childs that will be launched. Leave undefined to let PHP decide.
    #export PHP_FCGI_CHILDREN=3

    # Maximum requests before a process is stopped and a new one is launched
    #export PHP_FCGI_MAX_REQUESTS=5000

    # Launch the PHP CGI binary
    # This can be any other version of PHP which is compiled with FCGI support.
    exec /usr/bin/php5-cgi

  1. Make this script executable and change the user appropriately

    # chmod a+x /var/www/fcgi-bin.d/php<version>-<username>/php-fcgi-wrapper
    # chown <user>:<group> /var/www/fcgi-bin.d/php<version>-<username>/php-fcgi-wrapper

  2. Modify the Apache configuration, e.g. in /etc/apache2/sites-enabled/web01

    <VirtualHost *:80>
        Servername web01.myserver.com
        DocumentRoot /var/www/websites/web01/
        SuexecUserGroup <user> <group>
        Action php-fcgi /fcgi-bin/php-fcgi-wrapper
        Alias /fcgi-bin/ /var/www/fcgi-bin.d/php<version>-<username>/
    </VirtualHost>

    Notice: It is important that user and group are owned by the same user and group as defined for the wrapper script above.

  3. Restart Apache

    # /etc/init.d/apache2 restart

Appendix

Further reading

[1] Website of mod_fcgid: http://fastcgi.coremail.cn/

FAQ

How fast is it?

Compared to mod_php5 the speed seems to be almost equal, probably just a little bit slower.

Can I turn off the PHP parser for a specific directory?

Of course! You can simply disable the parser for directories. This is very useful for example to use WebDAV for editing PHP files. Using mod_php5 these files would be sent as plain HTML output:

<Location /dav/>
    RemoveHandler .php
</Location>

ChangeLog

Changes in version 1.0

  1. Initial version

About the author

Michael Stucki is the leader of the TYPO3 core team. He lives close to Basel / Switzerland. When he is not developing, he likes doing sports and travel around. Michael is working for snowflake productions, where this document was initially written as a help guide for their customers.

 

This document is published under the Open Content License available from http://www.opencontent.org/opl.shtml

 

The content of this document is related to TYPO3 – a GNU/GPL CMS/Framework available from www.typo3.com