Shell's Home

使用uwsgi搭建python应用

May 25, 2011 - 1 minute read - Comments

wsgi是python的一个标准web服务接口,具体去google pep文档,不解释。在李木头的忽悠下,贝壳试用了一下uwsgi搭建python服务器,感觉还不错。 首先,贝壳将uwsgi打包成deb包,因为这东西和python基本没什么关系,就是一个标准的系统守护服务程序。其中贝壳测试了一下,uwsgi编译的时候是依赖版本的。所以请教了一下thomas,打了uwsgi2.6和uwsgi2.7两个包。没办法,mercurial对python2.7的支持不是很好,每次都出问题。具体的可以加贝壳的repos: http://shell909090.org/debian/ testing,然后通过一下贝壳的key,就可以直接安装uwsgi2.6了。当然,不通过key也可以,只是每次安装升级都有警告。 贝壳写了一个很简单的init.d,使用–vhost来启动uwsgi为服务模式。这种模式的好处是,uwsgi的具体执行的应用都是由nginx来确定的,因此所有的映射只需要修改nginx配置就好。uwsgi参数很多,包括可以指定内存限制,工作进程/线程,定时重启工作进程,多解释器等等。是一个高效的,功能强大的服务器。具体可以自己参考调整。最好的的地方是,uwsgi还支持virtualenv,你可以给不同的应用建立不同的工作环境,从而在环境中使用指定的包,而不是系统包。 下面是一个nginx配置的例子。 location /ticket { include uwsgi_params; uwsgi_param UWSGI_PYHOME /usr; uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg/thost; uwsgi_param UWSGI_SCRIPT main; uwsgi_pass unix:/var/run/uwsgi.socket; } location /mlocate { include uwsgi_params; uwsgi_param UWSGI_PYHOME /usr; uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg/thost; uwsgi_param UWSGI_SCRIPT main; uwsgi_pass unix:/var/run/uwsgi.socket; } location /hg { include uwsgi_params; uwsgi_param UWSGI_PYHOME /usr; uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg; uwsgi_param UWSGI_SCRIPT hgweb; uwsgi_param SCRIPT_NAME /; uwsgi_param SERVER_NAME hgweb; uwsgi_pass unix:/var/run/uwsgi.socket; } 这里面设定了三个应用。由于贝壳不需要virtualenv,所以PYHOME设定了/usr。第一二个应用的基础路径在/home/shell/workspace/hg/thost,脚本叫做main.py。第三个应用的基础路径在/home/shell/workspace/hg,脚本叫做hgweb.py。需要注意的是,uwsgi会以模块方式导入这些脚本,然后使用其中的application对象作为wsgi处理函数。所以不要把application对象赋值放在if __name__ == ‘__main__‘里面,那没用的。第三个应用指定了SCRIPT_NAME和SERVER_NAME,是因为hg的wsgi模块没有SCRIPT_NAME不工作,而这个应用和前两个不在一起,所以如果不指定SERVER_NAME会导致覆盖冲突。 这种部署模式的好处是,我可以使用一个宿主来管理所有的应用,而不必每个应用启动一个宿主,省去了多个宿主管理的麻烦。而多进程,压力分布等等问题都被uwsgi的配置系统搞定了。于是应用程序宿主做到了彻底的免管理,即装即用,只用调节性能匹配即可。具体程序配置下放到nginx中,要修改映射关系只用管理一个位置。

debian中文初学者引导——中文化

May 24, 2011 - 1 minute read - Comments

讲了半天废话,都是在介绍你应该用什么应该用什么,基本没讲到中文用户最关心的一个问题,中文化和输入法。 其实没讲是有原因的,因为debian的中文实在太简单了。在你安装的时候选择中国地区和中文,装出来应该就是中文的。如果不是,或者你安装的时候忘记选择了,可以先运行dpkg-reconfigure locales,出现一个很长的语言列表。其中选择中文的几项,常见的有zh_CN GBK(不推荐18030,多出来的字很少用到,生成时间极长),zh_CN UTF-8,zh_HK UTF-8(香港地区编码,不用可以不选),zh_TW BIG5,zh_TW UTF-8(后两者为台湾地区编码,不用可以不选)。选择好后,确定,推荐zh_CN UTF-8为默认编码。然后就是漫长的生成,完事。试试看重启后你的env | grep LANG有没有变成zh_CN.UTF-8?过去就对了,没有的话,手工修改/etc/default/locale加入也一样。其实dpkg-reconfigure locales就是修改了/etc/default/locale和/etc/locale.gen,然后locale-gen一下。 不过这不代表你能正确的使用中文,只是你的满屏看不懂的东西变成了一堆方块而已。因为,你还没装字体。当linux不支持该种语言的时候,出现的是满屏的乱码。如果支持了但是没有字体,则是一个个方块。下面是我常用的一堆字体,保证不含windows,大家可以选择自己喜欢的用。ttf-arphic-bkai00mp,ttf-arphic-bsmi00lp,ttf-arphic-gbsn00lp,ttf-arphic-gkai00mp,ttf-arphic-ukai,ttf-arphic-uming,ttf-wqy-zenhei。其中最后一个就是赫赫有名的文泉驿正黑。安装方法都很简单,aptitude install就好。如果你还不满足,非要自己安装字体。那就在/usr/share/fonts下面新建个目录,把你的字体复制进去(符号链接也可以),然后在这个目录中运行mkfontscale,mkfontdir。全局运行fc-cache。 OK,中文支持快走到最后一步了。你现在应该可以看到满屏的中文,可是,可是——你还什么都输入不进去。恩,没装输入法吧。debian的特点是什么东西都是自己来装,而不是系统帮你装好。所以,你需要自己装输入法。简体中文而言,比较流行的有三种,fcitx(传说中的小企鹅),scim,ibus。下面就要根据你的具体配置选择了。ibus是我用过的比较好的输入法,但是相对比较费cpu,在低端机器(例如netbook)上老是丢字,scim对这种情况略好些。如果你安装了一个以上,可能你还需要im-switch来切换输入法。这个软件会调整/etc/alternatives/xinput-zh_CN的链接指向,这是debian的alternative系统,细节不说。 另外说一句额外的提示,做完上面的步骤,你应当可以阅读和输入中文,但是你看到的软件还是满眼的鸟语,对不对?这是因为软件的语言在软件书写的时候就确定了,他不会随着你的内容改变而改变。但是这并不是说常见软件没有中文版。例如你安装一下iceweasel-l10n-zh-cn这个包,再跑iceweasel (firefox)看看?

debian中文初学者引导——上网

May 20, 2011 - 1 minute read - Comments

上网是linux系统的一大强项,除了那个变态的QQ外。 通常而言,上网指的是网络三大基础应用,浏览器,IM工具,电子邮件。最后一个我们介绍过了,那么我们就集中介绍一下linux的两大杀手级浏览器。firefox和chrome。 firefox是debian内置的,不过用的是开放分支,iceweasel。其实主要就是改个名字换个图标做做兼容性测试打几个下游补丁什么的,内核还是一样的,版本号和firefox都保持一致。目前testing下的firefox还是3,不过估计很快就会升到4。firefox下有很多插件,你可以挑选部分来安装,改善浏览器特性。记得linux是一个多用户系统么?对了,你在firefox下安装的插件(addons)都是针对个人起效的。所以,你老婆安装了一堆插件,对你不会构成任何干扰。如果你打算全局安装,可以用apt-get来安装部分插件。 用firefox的话,你可能疑惑flash插件怎么装。系统会给你默认安装拉,不过那个非常不好用。你需要用non-free版本的flashplugin-nonfree,直接从仓库中可以下到。注意这个组件是x86 only的,如果你用64好像要自己装ia32来做模拟,否则无法生效。如果连这个都说版本太老,就去adobe的网站上弄个最新linux版本回来,for debian或者for ubuntu都可以,自己装。 chrome的安装使用就比firefox简单很多了,直接去这里( http://www.google.com/chrome/ )下载合适的包,安装后,你的系统/etc/apt/sources.list.d/位置下会多出一个google-chrome.list,每次update的时候会检查google的仓库,跟随升级。这点chrome做的非常无缝,你基本没有感觉。 另外就是IM软件的选用。国内装机量最大的是QQ,不过鉴于我对企鹅这厮没什么好感,我强烈不推荐你用QQ。整个开源社区做QQ兼容做了不下三次(QQ for pidgin, luma, eva),还都是在未公布资料的黑盒情况下做的。每次都被腾讯改协议给封掉。自己出了个linuxqq,做的烂不说,还多年不升级,也不管客户反应。微软就算讨厌开源,也好歹没有封杀开源办公软件兼容他的文件格式。既然这厮不打算支持开源,那么开源也不打算支持他。你非要用,可以用webqq,或者很痛苦的用linuxqq。有不支持的功能,请打电话给腾讯吧。 linux下用的比较多的IM还是gtalk,msn和skype三种。不得不感慨大中华局域网的威力,国内和国外的东西都不一样的。国外好用的东西就是进不来,国内的山寨货大家玩的不亦乐乎。首先是最多的gtalk,这个东西什么都不支持。没有定制表情,不一定能传输文件,没有远程协作。那为什么列为第一推荐IM呢?因为这个东西就是为了随时通讯而生的。支持gmail内置客户端,可以在无客户端的情况下用网页使用(这也就是为什么不一定能传输文件的原因)。支持几乎所有的第三方客户端,支持手机,强安全通讯。(腾讯的另外一个问题是,在同一个网段内的人可能可以获得你的聊天记录)并且,这是我所知唯一能同时在多个地点登录的IM工具。你可以在地铁上通过手机聊天,到了公司后直接登录,不必担心手机和电脑互相提下线的问题。电脑关机,手机持续在线。 MSN是老牌IM,不过微软逐步淡化了这个系统。某个版本后居然需要安装100M+的客户端,我就没在windows下继续使用。但是linux下的pidgin可以同时支持gtalk(协议是jabber)和MSN,开一个软件可同时登录多个账户,也不需要一个超级庞大不知道干了点啥的客户端,非常方便。skype是国外知名的IM工具,特点是音频支持能力,说白了基本当电话来用的,在国内发行的版本有记录聊天记录的问题。linux下要使用skype需要独立下载软件,pidgin-skype这个东西居然要skype在运行才能使用,这不是扯淡么?贝壳的repos里面有skype的安装包,你也可以去下载官网的安装包,应该没什么问题。不过最近这厮被微软收购了,也不知道将来命运如何。

debian中文初学者引导——办公

May 19, 2011 - 1 minute read - Comments

作为一台中国的电脑,最重要的三大功能就是上网,办公和游戏。当然,linux下你需要暂缓考虑游戏。不过最基础的,办公功能应当还得有。 首先要说明的一个问题是,linux下对微软的office系列的支持并不好。这当然不是linux的过错——你让微软打开odp或者tex文件看看?不过鉴于现在office满天飞的现状,你总要支持doc系列文件,否则办公就直接出局。这部分的是为什么只有程序员才用linux的原因——在IT公司里,用office的是异类。我们公司里,老大带头用openoffice。对于没有这种幸运的人,我的建议是安装libreoffice这个包,这个的前身是sun的openoffice,不过开源社区做了一个完全自由的分支。后来sun杯具了,debian下的头号办公系统就是他了。大部分的文件打开,使用和保存都是没问题的。如果光论正常文档,文字的编辑,段落编排,libreoffice的功能都不会和office差太多。不过高阶功能开始,libreoffice就会变的很不顺手。这是当然的,office用户众多,发掘出的用法和资料不知凡几。libreoffice用户不但少,而且多数还是老外。 当然,作为一个linux用户,通常都抱有一个观点。平文本(plain text)比复杂的办公软件好用多了。大多数情况下,这都是对的。当你写毕业论文的时候,内容比你排版技巧更加重要。当你给上司做一份汇报材料的时候,内容比排版技巧更加重要。平文本的简单编排,libreoffice还是可以比较好的兼容掉office的。如果这些工作上,公司的要求是排版技巧更加重要,那你可以考虑换一个公司。有少部分情况下,排版技巧会比内容更加重要。例如客户PPT展示,公司报纸美编,这些工作不要使用办公软件来完成,你应当做的是寻找合适的软件来做到完美,而不是用一个不专业的软件在那里折腾,然后抱怨不好用。记得我们开始说的么?要懒,而且有创造力。 除了office系列,另一个办公上常用的东西是pdf文档。debian下可以用的选择就比较多了,闭源的有foxit reader,开源的有epdfview,mupdf,xpdf,evince等等一堆。个人比较推荐foxit reader,基本可以解决大部分情况下会让你比较烦恼的中文看不见问题。如果要生成和处理pdf,选项更多。linux下大部分办公软件都可以直接输出PDF。即使不可以,也可以像windows那样,装一个虚拟的打印机,然后输出pdf来。 提到PDF不能不提的就是打印,这点上debian做的并不太好,当然,也不算太差。在windows下的行为通常是,连接打印机,安装驱动,在打印机设备中出现新设备,配置打印机,并标记为默认,然后就可以工作了。在debian下需要先安装cups包,启动服务。再安装合适的驱动,例如hplip-cups。连接打印机,然后用浏览器访问http://localhost:631/来访问管理界面。新建打印机,再选择合适的配置。对于不大熟悉的人,通常会在驱动选择和管理界面上花费不少功夫。这里( http://zh.wikipedia.org/wiki/CUPS )介绍了常见系统下的管理工具,能减轻一些负担。不过实话说,直接用web管理并不繁琐。 办公中还有一个比较重要的功能就是收发邮件。作为初学者,我建议你用thunderbird开始,debian下需要安装icedove这个包,这是thunderbird的开放分支。基本简单配置后就可以直接收发邮件了,没什么值得好讲的。不过既然你选择了linux,我建议你好好学习一下gnupg和签名技术。你要知道,通常的电子邮件安全性和明信片背后写的祝福大致相当,以这个作为办公基础实在是一件相当危险的事情。

组合翻墙方法——细节

May 18, 2011 - 1 minute read - Comments

中国这网络,越来越没法上了。现在你访问国外禁网,就会中断连接10分钟。问题是我也不知道哪个网是禁止的… 现在教大家一招,基本能够永久套上翻墙。理论上你就没有中招的可能,尤其适用于公司使用。 首先是squid,这个是流量分离和缓存的关键部件。你可以用pac替代,但是这只局限于某台具体的机器,并且代理用户支持pac。squid的好处是,任何http访问都可以分流,而且无须客户端支持。甚至如果你精通squid配置,你可以配置成透明代理(cache拦截),从而避免在每台机器上修改代理配置。当然,cache拦截是有技术问题的,具体请参考这篇(http://home.arcor.de/pangj/squid/chap09.html#a6)。 squid的配置如下: include /etc/squid3/gfw.conf acl localnet src [192.168.0.0/16](http://192.168.0.0/16) http\_access allow localnet http\_access allow localhost cache\_peer 127.0.0.1 parent 8123 0 no-delay no-query cache\_peer\_access 127.0.0.1 allow gfw always\_direct deny gfw never\_direct allow gfw 以上配置是允许192.168.0.0的C类内部子网访问本机,所有gfw规则的域名必须通过8123端口的上层代理,而其他的直接访问。注意以上不是完整配置,不保证可以独立运行,只保证在debian的标准配置文件的基础上,修改以上内容就可以工作。独立配置你可能还需要加入以下两句。 http\_access deny all http\_port 3128 配置中的gfw.conf是gfw这个规则的定义文件,这个文件是由程序生成的,程序如下。注意,你系统上的python版本应当在2.5以上。 #!/usr/bin/python from \_\_future\_\_ import with\_statement with open('gfw', 'r') as fi: for line in fi: print 'acl gfw dstdomain .%s' % line.strip() 以上内容,保存为平文本,赋予执行权限后,直接执行即可。同目录下必须有一个gfw文件,平文本,里面一行保存一个域名。域名不以.开头,可以使用泛域名(例如google.com匹配www.google.com)。执行后打印出内容,所以你还需要重定向。./gfw2squid > /etc/squid3/gfw.conf。当每次gfw文件升级时,你都需要重新生成,并且迫使squid加载。方法是squid -k reconfigure。 OK,现在你有一台配置了分流的squid,然后你需要一个可以翻墙的代理。由于我的目标是看youtube,所以我采取了一个非常复杂而高性能高可靠的方案。 我配置了一台polipo作为http socks5协议转换。由于squid的特性,不能直接使用socks5,因此还是做了一重转换的。polipo这个代理的性能和稳定性也相当不错,用来做缓存代理也是可以的。不过我们用了更强大的squid,就没必要用polipo了。因此启用以下几句来减少polipo的性能消耗,同时,将本地8123端口的http代理服务转向到7777端口的socks5代理。 socksParentProxy

debian中文初学者引导——安装

May 17, 2011 - 1 minute read - Comments

这篇主要讲安装。所以,请去这里( http://www.debian.org/CD/http-ftp/#stable )下载一张stable光盘。如果你对testing和unstable比较感兴趣,没问题,装好了可以改的。但是对于初学者,我建议你从stable开始玩起。在选择了合适的架构后,你会被引导到光盘镜像服务器上。作为国内玩家,我建议你别用官方服务器,那个在美国,很慢。个人推荐中科大服务器( ftp://ftp.cn.debian.org/debian-cd/ )去下载合适镜像,服务器是电信联通教育网三线路的,无论是学生还是商业人士都很合适。目前而言,我推荐你下载debian-6.0.1a-i386-netinst.iso作为安装镜像。这个镜像只安装最小部分,而且在安装时无须联网,适合大多数场合。注意,如果你的机器只有无线网络,请不要使用这张镜像,因为难度太高了。 好吧,下面我假定你有镜像了,你有三种常见的安装模式,刻录光盘安装,liveusb安装,虚拟机直接使用镜像。刻录光盘没什么好多说的,虚拟机直接使用就看你会不会用虚拟机,liveusb就有点复杂。具体参考我写的这篇文章( http://shell909090.org/blog/archives/1646 )。无论从哪里开始,你都必须保证开机启动的是你的debian安装镜像。所以发生例如debian安装时进入了硬盘上的windows这种问题别来问我,直接去google BIOS设定。 很多人经常问的一个问题,是关于如何安装linux和windows共存。其实这种模式并不好,至少我知道的使用这种模式学习linux的人都失败了。因为你平时会经常进入windows,然后懒得出来了。最好的方法是,彻底告别你的windows,然后下定决心用linux解决所有问题。如果你觉得底气不足,可以用虚拟机运行一个小实例,至少我觉得这比共存模式方便。因此,我不会介绍windows和linux共存的有关问题——这些问题太复杂了,虽然技术上说并不难,但是会占用大量篇幅。 单独安装linux也需要划分分区。通常的建议是/ /usr /var /home /tmp swap全部可以考虑分开。不过作为初学者,我建议你用一个分区/就够了。如果内存在1G及其以上,也不一定需要用swap。减少麻烦不是什么值得羞耻的事情,制造麻烦才是。如果你看了半天,搞不懂这段话什么意思,我建议你先看看下一篇《系统管理》中关于linux文件组织结构的介绍。如果你觉得有些不安,常见的方法是/ /home swap。这通常用于大型机器上,分离的home会让你在重装时无须额外的做数据保留操作,swap则提供更高的内存使用率。文件系统的建议是全ext3,这个会减少你很多的管理麻烦。如果你想尝试一些新的文件系统,最好不要在/上面尝试。 安装过程没什么好多说的,安装完成后,才是一系列最艰难的地方。debian-netinst是不带X系统的,所以如果你想使用图形界面,安装完成后的配置才是最关键的。通常你的电脑可以联网,因为安装的时候会自动配置你的网卡。如果你是无线网卡,请先连一根有线。如果不行,那就不是初学者课程了——你需要自行安装wpasupplicant,iw和相关依赖包,然后手工建立config文件。通过config连接合适的ap,再手工dhcp获得地址。总之,这些问题初学者就不要想了,请直接拉一根网线,接上,启动机器(次序不要反),你的机器就联网了。如果不是,找人求助吧。 第一件事,请先去/etc/apt/source.list下面,修改你所选用的镜像。如果你希望用testing或者unstable,直接修改此处就可以了。通常我们需要安装contrib和non-free部分,所以在main后面加上contrib和non-free。这里有些重要的商业程序,例如sun-java,rar/unrar,flashplugin等等。另外就是名称。通常镜像后面的名称是lenny这类的代号,建议改成stable这样的代号。当debian升级,版本切换的时候,你的系统会自动的升上去。当然,商业级别的服务器反之,不要用stable这样的代号,因为会造成稳定性问题。 当你修改完source后,执行aptitude update,然后再执行aptitude install vim slim xfce4。当然,如果你喜欢用gnome,那就是aptitude install vim gdm gnome。然后重启?你的机器应当出现了一个可爱的,花里胡哨的界面。啧啧,简直俗毙了。不过鉴于新手都比较习惯图形界面,我还是继续从图形界面开始介绍吧。

debian中文初学者引导——系统管理

May 16, 2011 - 1 minute read - Comments

装什么系统就要能玩什么,如果你安装的是windows,也需要解决几个最简单的管理工作——文件存放,如何联网,安装软件。不过幸好,用debian的好处是,你暂时不用担心病毒了。 在进行管理工作前,我先说明一个事实。平时你在windows下,可以随便进行的系统管理工作,在debian下面不是谁都能干的。如果linux也像windows那样允许所有用户都修改系统,那早就天下大乱了。为了修改系统关键部分,你需要root权限。如果在命令行下(多数系统管理都是命令行完成的),那么用su-来变成root,或者在执行具体命令的时候在前面加上sudo,如果你已经配置了sudo工具的话。需要特别注意的是,我不建议新手随时都顶着root权限做事,这很危险。在windows下我们很容易修改系统导致出错和崩溃,原因之一就是我们随时都可以拥有系统最高权限。所以,当你需要root权限的时候,开一个root的命令行来管理,不要一直用root命令行做日常工作。 首先是文件存放,这和windows有基础概念区别。windows的文件组织结构继承了DOS的特征,使用A-Z的分区号标示每个物理设备。而linux的文件组织结构继承了unix的特征,所有数据都在一颗单根树下。就是说,系统只有一个根目录。每个物理设备,都被“挂载”在特定的目录下。在windows下,我们把光盘放入光驱,就可以在F盘上面看到一颗目录树。如果在linux下,我们需要将光盘“挂载”在某个目录下。这个目录下的原本内容就消失不见(放心,没有被物理的删除),取而代之的是光盘的目录结构。当然,debian下面通常有自动挂载程序会帮你完成检测到光盘插入后自动挂载的过程。 文件存放的结构也和windows大有不同。windows下的程序安装和文件组织遵循“同包内聚”的结构特征。即是说,只要属于同一个软件,这些文件就被放到一起。大家可以看看programfiles下面一堆堆的目录,每个都属于一个软件。而linux则基于FHS结构,大部分的时候是“功能内聚”,即是说,同类功能的文件被放到一起。例如可执行代码基本放置在/usr/bin和/usr/sbin,前者是普通用户可执行代码,后者是特权用户可执行代码。当你执行ls的时候,其实是调用了/bin/ls。这样的好处是路径设定及其简单,你不信可以对比windows的path设定和linux的path设定。当然,坏处是无法通过直观的文件删除来删除所有包。 这当然不代表debian卸载软件比windows更费力。实际上,是更简单。debian提供了dpkg工具来管理包,和apt工具来管理仓库。你可以很简单的用apt-get install 包名,来安装一个包。用apt-get purge包名来彻底删除包。purge和remove的区别相当于windows中的“是否删除注册表”,如果是purge,是不会保留你自己修改和定制的配置文件的,除非这些数据存在于你的HOME目录下。你可以用aptitude update来追踪系统升级,不过这个不会自动的未你下载最新包。update只是检查服务器上有没有新的包出现,然后通知你,有新东西了。升级是upgrade的事情,不过我建议手工进行升级,具体要多读debian参考手册,也要有几次搞坏系统的准备。 最后一个问题是如何联网。debian是一种很网络化的系统,你的系统升级,使用,都是通过网络的。乃至于我每天用系统的时候,一多半时间都在透过ssh来管理不同的设备。对于这种系统,如何联网是一个很重要的问题。如果你是有线网络,由于不大可能断线,我建议通过/etc/network/interfaces来配置。方法在debian参考手册里面,根据你是dhcp还是static配置好,重启,基本就固定下来不用动了。如果是无线网络,建议直接安装NetworkManager,并且注释掉/etc/network/interfaces中的所有内容。nm的使用很简单,你看着办就好。

debian中文初学者引导——总论

May 13, 2011 - 1 minute read - Comments

上次写了篇debian中文争议问题,结果发现好多人都在搜debian中文,我估计他们对debian中文名没什么兴趣。纯粹想玩玩debian,但是却难于入手。由于此类人中中文使用者居多,对于debian良好的资料无法使用。所以我准备写这篇debian中文初学者引导,来让更多的人可以玩玩这个系统。 在开始玩debian之前,请确定你是适合使用linux的人群。当然,这里并不是说linux只适合程序员。我认识的人里面,使用linux的还有金融工作者,大学教师(非计算机专业),初中学生。他们使用linux完成日常工作,没有什么太大的问题。如果你希望学习linux,首先,你不能是重度游戏爱好者。linux下的游戏无论从数量还是质量,和windows都不在一个级别。其次,你需要一定的英语水准。当然其实不需要太好,贝壳自己连四级都没过。你只需要能认识基础的指令和提示,照抄到网络上即可。如果您是初中未毕业,26个字母尚有困难,建议还是别用了。最后,也是最重要的一点,你需要热爱折腾,总觉得现有软件满足不了自己,但是又没有什么好办法。当然,如果您热爱折腾又有办法,那估计是个程序员。程序员就别废话了,完全没学过linux的程序员不算是完整的程序员。 我的目标是,尽量让你从最简单方式安装一台系统出来,然后普通使用三个月以上,期间基本不用windows。当然,鉴于中国国情,有些网站是永远的IE,所以要用到windows是难免的。实际上,如果你的学习能力不算太差,大约在一周以后,使用linux的不舒服感就会减少,甚至消失,出现问题无法搞定的几率也会降低。大约在一个月后,就会开始自己折腾各种配置。差不多从你开始折腾自己的配置开始,你就会无可救药的爱上linux。 学习linux最重要的几件事情是——合作,创造,懒惰,不满足。 当你学习linux时,最重要的就是和其他人合作,包括看文档和问问题。所以,首先请学会自己查看常见文档,包括man和google,来解决一些简单的问题。例如ls的哪个参数能够列出目录详细信息这种问题就不要问出来。次之,你需要学会《提问的智慧》(http://bbs.csdn.net/IndexPage/SmartQuestion.aspx),请不要问出愚蠢的问题来。其中最愚蠢的就是,为什么linux不能XXX,windows可以。唔,为什么老虎不能拉车呢?驴可以。最后,尽量认识几个linux玩的不错的,又比较有空的人,这对解决你的燃眉之急很有帮助。 作为linux玩家,你必须是懒惰而具有创造力的。通常linux玩家不喜欢太“勤劳”的人。自己辛辛苦苦的在一个文件的所有行头部加上行号是一个很愚蠢的行为——作为一个懒人,你应该想——这个是不是有人做过了,有没有什么比较省力的方法?要能够懒惰,你必须很有创造力。见没见过用光驱不断弹出收入来晃动婴儿床的想法?恩,这家伙很懒,我很欣赏。 作为开始使用linux的基础,请把这个网址(http://www.debian.org/doc/manuals/debian-reference/)收入你的收藏夹。里面说了很多实用的东西,足可引导一个人正常的使用整个系统完成工作。其次,专门准备一台电脑,不用太好,用来安装debian。如果没有,那就用虚拟机。尽量不要多分区混合安装,因为你不会记得去用linux的。现在一台专门的电脑并不贵,一般人家里都有几台很老的电脑,用那个就好,通常还免去了最新硬件无法驱动的烦恼。 如果上面的东西你都看过了,确定自己需要学习使用debian,那么,请慢慢看接下来的文章。

再论openvpn的搭建

May 12, 2011 - 1 minute read - Comments

从概念上说,openvpn类似于一根网线,或者一台交换机。你拨上vpn,差不多相当于给自己的机器装一个虚拟的网卡,从上面拉一根线到服务器的虚拟网卡上。所以,vpn的配置大概和网络配置差不多,分为几个大类。 一类是第二层交换,即虚拟网卡和真实网卡组成网桥。这样可以把虚拟网络上的设备引入真实网络,让虚拟网卡获得真实网络的地址,或者反之。坏处是配置复杂,稳定性差。 例如你家里是192.168.0.0/24网络段,你决定用tap配置一个网桥,就需要新建一个br0设备,将eth0和tap0设备加入网桥。这样,一台IP为192.168.0.10的家庭机器,在访问IP为192.168.0.110的远程机器的时候,所发出的ARP请求会被转发到远端,然后ARP响应转发到本地。通过这种方式,10就会直接把MAC报文发送到中转机上,然后再转发远端。可以看出,由于ARP请求往来非常费时,在子网内机器多的时候,会消耗不少时间和带宽进行ARP转包,以及各种链路级开销。所以通常除了两个安全封闭子网因为管理理由必须这么玩,并且两者间又都有服务器和高速链接的时候,其他时候我不推荐这种玩法。 更何况,在debian系统下配置网桥需要额外脚本,不如路由那样,可以使用默认脚本启动,然后动态修改路由表。 大部分是三层交换,即将服务器作为路由器使用。这又分为两种情况,网络地址转换,和网关互通。 网络地址转换是最常见的情况,这个又叫做NAT。网关在转发你的包的同时,会将地址转换成自己的地址。从而避免修改路由的行为。 同样是192.168.0.0/24举例,远程网络假如叫做192.168.1.0/24。当你拨号上远程网络时,你就拥有了一个远程IP和一个本地IP。你可以配置路由表,让哪些IP从远程走(这就是地址段选择翻墙的原理)。大多数情况下,会被配置为默认都从远程IP走,除了几个特定地址(例如VPN服务器地址,这个也走虚拟网络会引起循环的)。而远程的网关,假定是192.168.1.1,开启了NAT。这时候你的所有网络流量就都从远程的VPN服务器上发出和接收了,如同你正坐在远程服务器后面的小网络内一样。 网关互通是更复杂的一类情况,通常是小型企业为了多个连通多个地点办公子网而设计的。理论上说大型企业也适用,但是大型企业有钱,IT部为了防范责任问题,通常会直接采购Cisco之类大公司的产品直接使用。基本概念是将虚拟网络和真实网络配置成两个子网,两个子网可以互相访问。 还是192.168.0.0的例子,我们假定另外有一个子网叫做192.168.1.0/24。现在我们需要连通两个子网,或者,更进一步,多个子网。 我们首先配置一个虚拟子网叫做192.168.254.0,然后架设一台共用服务器。这是比较简单的模型。更复杂的可以将其中一个子网的某个服务器映射出去作为核心,配置就更加复杂,不过可以依照同样原理推导。架设好共用服务器后,我们需要在每个子网的网关上下手,否则就无法做到透明路由。修改这个网关的路由表,将192.168.0.0/16全部转发到虚拟网关(即共用服务器的虚拟IP)上去(当然,除去本网段不转发)。在OpenVPN上面可以配置,当某条链路拨接上来后,就在服务器上加入一条路由,将其后面的网段加入网关路由表。于是,当192.168.0.100的某台服务器希望直接访问192.168.1.100。首先这台主机会检查自己的路由表,发现这个需要由网关192.168.0.1转发,就先转到了192.168.0.1。192.168.0.1检查路由表,发现192.168.1.100需要被转发到虚拟网关,即192.168.254.1。于是通过虚拟网络,该网关做出转发。当192.168.254.1接收到后,他会依照上面的路由表,检查到这条链路是否已经拨接上来,拨接上的话对应的虚拟IP是多少,然后转发过去。最后是目标网关,192.168.1.1,转发给192.168.1.100的过程。整个过程复杂无比,不过实现起来都是自动化的。 在配置文件中,有ca certkey三项,这三项分别对应不同作用。cert和key是用于向客户端验证服务器身份的。客户端那里有一个ca.crt,服务器这里的cert和key必须是那个ca.crt签署过的。这样,客户端就可以验证服务器是否是可信任的。而服务器这里的ca则是验证客户端身份的,客户端那里同样也有cert和key,必须由服务器端的ca.crt签署过。通常,我们用同一套ca.key签署两个cert,分别部署在服务器端和客户端,就可以工作了。 另外一点需要注意的是,ns-cert-typeserver这个参数。在debian的默认系统中有这个参数,一旦指定,openvpn就会检验服务器证书上是否有server的选项。对于easy-rsa签署的证书,这个肯定是有的。但是如果自己用openssl签署,就要记得做ext,否则检验不通过会报错。

一切终将过去

May 10, 2011 - 1 minute read - Comments

前几天才说纸质书电子书怎么怎么的,今天就爆出一条新闻,新华书店指责当当网倾销。 能不指责么,上回说到书籍成本中,有大约三成是流通成本,也就是运输,仓储,退换,宣传成本。网络书店可以省去仓储成本,宣传也是搭的实体店的车。通常的东西,网上卖的都比实体的便宜,这都成了一个共识了。衣服尚有合不合适的问题,书就只有哪个出版社的问题了,可以说是全国标准化产品。对于这种产品,从网络上购买,除非碰到假货,否则几无不合适的可能。实体书店可以先看一下,网络书店还可以找到大段内容呢,例如china-pub就有。甚至部分书同时出版电子版和纸质书,effective stl中文版,我是先看了电子书,然后才买了一本纸质的。当然,现在很后悔,能不能光付钱不要纸阿。 对于标准化物件销售,网络对上传统销售几乎是没有悬念的。书籍,U盘,电子器件,化妆品,这些都是一旦确定买什么产品,型号代码一定,哪里买都一样的。在店里转两圈,地板一走,口水一噴,老板就是10多元的成本,一件东西不赚个20-30根本回不了本。在网络上,一台服务器2W一年成本计的话,够上千人连续逛一年,合一个人连续不断,不分白天黑夜逛一年才10元成本。当然,网络更多的是开发和运营费用,但是随着规模的上升,这些费用是会降下来的。这也就是为什么网络公司做上规模后来钱很快的原因。对上这种架子越大赚钱越多的对手,传统零售业的失败是已经注定的。 那么新华书店指责当当倾销,这话是怎么说的呢?倾销,常见于美国对中国的一些政策上。最早指的是一种商业手法,以低于成本的方式供货,打压对手,淘汰出市场。当成功占领市场后,再拉高价格,补回亏损。倾销往往是和垄断联系在一起的,在现代商业社会中,由于倾销通常会导致垄断,从而造成公司被拆分,所以本国对本国倾销的很少,多数都是对其他国家玩这手。也有用于本国某某协会抗议对方倾销,导致本国协会工人失业的例子。当然,这些事情在中国这个神奇的国度都是不存在的。 当当网算不算倾销呢?未必是,未必不是。当当的供货成本是比实体书低了很多没错,但是不是说所有的差价都一定是来自技术造成的成本降低。对于互联网公司,急于上市的情况下,拿钱补贴产品,造成消费者竞相抢购,从而让报表非常好看的手法屡见不鲜。我不确定当当网一定是这样,也不确定一定不是。但是一个当当倒下了,又会有别人站起来。互联网销售的成本太低了,是土地,就会有花要发芽。人不来种,自然生之。 另外还有一点问题,见于网络营销很多。就是通过实体店打样,网络上购买。这其实是一种并不公平的模式,因为靠山山倒,靠人人跑。实体店败局是个定数,实体店倒了,怎么打样呢?没地方打样,网络销售也玩不起来。这是一个会把自己玩死的胜利。今后更加现实的模式可能是格子屋形态的样品店。网络销售者租一个格子,放他们的样品。看好样子,网络订货。实在想要,可以把样品买走,销售者再补货就是。这种模式兼顾了网络营销的低成本和实体营销的可打样,似乎平衡的更好一些。不过最终形态,应当是借助新技术普及,发展虚拟打样为主的。 另外,网络销售如此,一些其他的事情上,大致也能看出,现在的世界,和以前不一样了。以前觉得理所应当天经地义的事情,现在也要重新考虑了。毕竟MJ走了,拉登也走了。虽然世界还没有完成更替,我们却也可以说,纸质书会成为历史,人们都将看电子书。我们也可以说电视将成为历史,人们都看网络视频。甚至也可以说,电话将成为历史,我们会打网络视频电话。当新东西出来时,虽然会相对弱小,需要一定时间的发展。但是最终必然会将陈旧的技术,乃至社会形态彻底摧毁。