Shell's Home

上海地铁的七宗罪

May 27, 2011 - 1 minute read - Comments

上海地铁是我见过的最扯淡的地铁之一。之所以有之一,是因为还有北京地铁在后面排着。 停车误差半个门很常见,最高误差了半截车厢,再倒车。停不准已经成了上海地铁的特色之一,尤其是二号线,停不准是正常的,准了您就知道,今天是老师傅上班。 上下车关门不等人。四号线上下班高峰经常在世纪大道站迟到,然后掌车要按照时刻表赶回来。但是世纪大道站又是上下客流非常大的一站,经常是10-20秒不够上下的。结果掌车在无法确认人已经全部上车的情况下就开始关门,后来的人要么强行顶住门,要么等了一辆车被车门关在外面,车里面还是空的。 地铁没厕所。我不知道是不是中国的惯例,反正我在中国没看到几辆地铁有厕所的。上海地铁金沙江路,金科路我知道站外有厕所,世纪大道站内有厕所。其他站好像基本没看到,有几个站我专门问过,没有。 信号烂到渣。闵行附近有个信号盲区,上海火车站到宝山路有个信号盲区,这两个已经是出名的连信号都没有的地方了,不过这毕竟是地面,覆盖不全是移动问题。可是二号线世纪大道站一下光有模拟信号没有数字信号,只能收短信不能上网,外加部分上来的地方连电话都会断线,很明显是泄漏电缆出了问题。二号线延伸段已经竣工一年多了,这种小问题都迟迟不解决。这还不说,四号线信号时好时坏,每天想用飞信给朋友发个消息纯属摸彩。 下雨天地铁内发霉的味道重到一塌糊涂。不知道地铁内空气循环系统怎么设计的,一到梅雨天就有一股发霉的气味,让人喘不过气来。就这种空气系统,多少安检都属摆设,万一有人往进气口放一颗毒气弹,出的事故比地铁内爆炸轻不了多少。 上地面的出口安排不科学。金科路站靠近金科路祖冲之路的出口,连接了一条双向的人行道,最高可容三人并排。但是几乎所有人都是向十字路口方向走,导致单向人流满载。平时上下班高峰还有人在这么拥挤的地方摆摊无人过问,也不知道城管这会到哪里去了。就不说这种中国特色问题,单是下雨天无人摆摊的时候,由于打伞,因此地铁出口入口严重滞留。自从施工因素导致一面栏杆被拆除后,很多人就找到了出路。一旦又遇到下雨或者摆摊导致拥堵,就从非机动车专用道上走到入口附近,翻栏杆进入地铁口。很多人还互相问,今天要不要翻墙? 安检纯属扯淡。没有强制安检能力,没有规范的操作方法,没有明确统一的培训和标志。你不知道在那里搞安检的人是谁,也不知道什么要检,什么没事。每回被检查都像被刁难,为什么我这个要检,前面那个看起来差不多的就不检。更不谈安检纯属扯淡,有此vvoody拿着一盒德州扑克的筹码进去,标准的赌博工具。安检一点异议都没有,过去后我们从后面看了,外观上看起来像六管炸药。安检人员真的有良好的培训,能够分辨什么是危险物品么? 上述这些都是扯淡中的扯淡,相比起来,倒是有些不那么扯淡的事情,我们也列一下。 经常晚点停开。这个不完全是上海地铁的过错,毕竟上海地铁已经是世界上人流量最高的地铁之一了,算里程好像也是世界第一,因为意外而晚点实属难免。但是上海地铁缺乏一些有效手段引导人流规避。有一次在世纪大道听到广播说哪里哪里地铁严重延误,我觉得这已经是个不小的进步。个人希望能够通过网页,围脖等方式将运作过程中的事故展现出来,让乘客避免死胡同问题。 高人流量交错没有进行多站交互分流,例如香港地铁的中环和金钟。在香港地铁设计中,但凡大人流量交错的换乘都是多站分流的。说的更通俗点,就是两条线有两个交点。大家可以想想,要是人民广场站分两站交错,人流何至于如此拥堵。上海地铁设计的看似阡陌交错,但是在最密集的几个站人流压力极大,浪费大量空间做人流疏导,而且要走很远。而最稀疏的几个站又人流不足。不过回想上个世纪上海地铁设计的时候,那时候打死我也想不到地铁会发展到现在这个样子,而且是在十年内。所以设计失误有其历史原因,但历史问题造成的后果还需要我们正视。 拥挤,拥挤,还是TMD拥挤。这个也得部分的归功于上海的发展。目前上海地铁的票价比北京高出不知多少,还是非常拥挤。北京拥有全国最拥堵的地面交通系统和地铁票价,可见其地铁拥挤程度。这是典型的政府好心办坏事的结果,其中最典型就是广州市政府免除地铁票价导致的地铁功能失效。希望上海地铁能推行“峰-谷”折扣票价,推高峰口票价,降低平时票价,充分利用平时用不到的运能。

使用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,所以我采取了一个非常复杂而高性能高可靠的方案。

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,否则检验不通过会报错。