选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
FreeBSDChina 最近又出现了很多垃圾广告等信息。针对一些常见的灌水机实现了一些临时的workaround,并且删除了大约3万2千的用户。
越忙越有人添乱。
补充:为论坛的链接增加了 rel=“nofollow” 的标记。
Read more...nginx可以作为很多种不同的用途。对Web服务器来说,nginx可以直接用作https服务器,也可以用于为现有的http Web服务器作为前端代理和负载平衡的同时提供https之用。
nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名;较早前唯一的办法是签署一个通配证书,即 CNAME 中为 *.delphij.net 这样的证书)。不过,SNI扩展还必须有客户端的支持,另外本地的密码学函数库,例如OpenSSL也必须支持它。
如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。
FreeBSD 8.0起的所有版本附带的OpenSSL均启用了SNI支持。这一特性是OpenSSL 1.0才开始默认启用的新功能,如果系统不是 FreeBSD 并且采用的是较早版本的 OpenSSL, 可能需要自行重新编译,并在config的时候指定enable-tlsext。注意:OpenSSL在多数系统中都有重要的其他用途,重新安装OpenSSL时,最好不要与厂商采用的参数差别太大;另外还有一种解决办法是安装到不同的目录并在运行程序的时候指定搜索路径或静态联编;FreeBSD不需要做这些配置,故不再赘述。
检查nginx是否支持SNI的方法是使用 nginx -V
来查看。
nginx version: nginx/0.8.45
__TLS SNI support enabled__
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-ipv6 --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx-access.log --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-pcre
以上标红的一行表示以目前的方式运行nginx时可以使用SNI。
使用SNI并不需要额外的配置,对nginx来说只需和HTTP主机一样配置多个https主机的server配置段即可。
以下是nginx中用于TLS的配置。可将其保存为一个单独的文件,例如 tls_param:
listen 443; # 端口(IPv4)
listen [::]:443; # 端口(IPv6)
ssl on; # 启用SSL
ssl_session_timeout 5m; # SSL会话超时时间
ssl_protocols TLSv1; # 只启用TLSv1
ssl_ciphers TLSv1:+HIGH:-MEDIUM:-LOW:-EXPORT:-aNULL:-eNULL:@STRENGTH # 启用的加密算法,见下
ssl_prefer_server_ciphers on; # 协商时优先使用服务器指定的加密算法
采用的加密算法集具体请参见 OpenSSL 联机手册 ciphers(1)。这里只解释采用的选项:
Read more...2015-03-05更新:本文中部分干货已过时,本文本身也不再更新。请参阅 这张作弊条。
SSL/TLS协议中,服务器证书是用于向客户端证明服务器身份的凭据,同时它还向用户提供了服务器的公钥,而服务器公钥则可以用来建立客户端到服务器的安全通讯(具体的通讯流程要比这个复杂,纯从技术而言,服务器的公钥主要用于与客户端进行会话密钥的协商)。
服务器的公钥只能确保拥有私钥的服务器(或人)能够解密信息,但它本身并不能确认服务器的身份。在实践中有很多种不同的方法来确保公钥确实来自受信任的服务器,在通常的SSL/TLS协商过程中,采用的方法是根据证书链来逐层验证公钥是否是有效的及其身份。简单地说,就是以安全的方法(例如安装光盘,或互相认证的签名等)事先将证书链上的某一个或某几个证书发给客户端,以便其验证最终用于服务器的安全证书。关于这一流程的具体细节,已经有很多文章进行了介绍,在此不再赘述。
如此,我们在实现采用SSL/TLS的服务器的时候,需要为证书准备的事项包括:
有了这些信息,就可以制作证书申请(CSR)供发证机构去签名了。一般来说,发证机构需要首先验证申请人的身份信息,然后对CSR提交的信息进行核对和签名,并将签名之后的证书发给申请者,或供其下载。下面以 FreeBSD、OpenSSL 为例介绍从生成公钥/私钥对到签发、安装证书的全过程。
Read more...一两个星期里,各地的大学都有毕业的班次,都有得多的毕业生离开学校去开始他们的成人事业。
学生的生活是一种享有特殊优待的生活,不妨幼稚一点,不妨吵吵闹闹,社会都能纵容他们,不肯严格的要他们负行为的责任。现在他们要撑起自己的肩膀来挑他们自己的担子了。在这个国难最紧急的年头,他们的担子真不轻!我们祝他们的成功,同时也不忍不依据自己的经验,赠他们几句送行的赠言,—-虽未必是救命毫毛,也许做个防身的锦囊罢!
你们毕业之后,可走的路不出这几条:绝少数的人还可以在国内或国外的研究院继续做学术研究;少数的人可以寻着相当的职业;此外还有做官,办党,革命三条路;此外就是在家享福或者失业亲居了。
走其余几条路的人,都不能没有堕落的危险。堕落的方式很多,总括起来,约有这两大类:
第一是容易抛弃学生时代求知识的欲望。你们到了实际社会里,往往学非所用,往往所学全无用处,往往可认完全用不着学问,而一样可认胡乱混饭吃,混官吃。在这种环境里即使向来抱有求知识学问的人,也不免心灰意懒,把求知的欲望渐渐冷淡下去。况且学问是要有相当的设备的;书籍,实验室,师友的切磋指导,闲暇的工夫,都不是一个平常要糊口养家的人的能容易办到的。没有做学问的环境,又谁能怪我们抛弃学问呢?
第二是容易抛弃学生时代理想的人生的追求。少年人初次和冷酷的社会接触,容易感觉理想与事实相去太远,容易发生悲观和失望。多年怀抱的人生理想,改造的热诚,奋斗的勇气,到此时候,好像全不是那么一回事了。渺小的个人在那强烈的社会炉火里,往往经不起长时期的烤炼就熔化了,一点高尚的理想不久就幻灭了。抱着改造社会的梦想而来,往往是弃甲抛兵而走,或者做了恶势的俘虏。你在那牢狱里,回想那少年气壮时代的种种理想主义,好像都成了自误误人的迷梦!从此以后,你就甘心放弃理想人生的追求,甘心做现在社会的顺民了。要防御这两方面的堕落,一面要保持我们求知识的欲望,一面要保持我们对人生的追求。
有什么好方法子呢?依我个人的观察和经验,有三种防身的药方是值得一试的。
第一个方子只有一句话:“总得时时寻一两个值得研究的问题!“问题是知识学问的老祖宗;古往今来一切知识的产生与积聚,都是因为要解答问题,—要解答实用上的困难和理论上的疑难。所谓"为知识而求知识”,其实也只是一种好奇心追求某种问题的解答,不过因为那种问题的性质不必是直接应用的,人们就觉得这是无所谓的求知识了。
我们出学校之后,离开了做学问的环境,如果没有一二个值得解答的问题在脑子里盘旋,就很难保持求学问的热心。可是,如果你有了一个真有趣的问题逗你去想他,天天引诱你去解决他,天天对你挑衅你无可奈何他,—这时候,你就会同恋爱一个女子发了疯一样,坐也坐不下,睡也睡不安,没工夫也得偷出工夫去陪她,没钱也得缩衣节食去巴结她。没有书,你自会变卖家私去买书;没有仪器,你自会典押衣物去置办仪器;没有师友,你自会不远千里去寻师访友。你只要有疑难问题来逼你时时用脑子,你自然会保持发展你对学问的兴趣,即使在最贫乏的知识中,你也会慢慢的聚起一个小图书馆来,或者设置起一所小试验室来。所以我说,第一要寻问题。脑子里没有问题之日,就是你知识生活寿终正寝之时!古人说,“待文王而兴者,凡民也。若夫豪杰之士,虽无文王犹兴。“试想伽利略(GALIEO)和牛顿(NEWTON)有多少藏书?有多少仪器?他们不过是有问题而己。有了问题而后他们自会造出仪器来解决他们的问题。没有问题的人们,关在图书馆里也不会用书,锁在试验室里也不会有什么发现。
第二个方子也只有一句话:“总得多发展一点非职业的兴趣,“离开学校之后,大家总是寻个吃饭的职业。可是你寻得的职业未必就是你所学的,未必是你所心喜的,或者是你所学的而和你性情不相近的。在这种情况之下,工作往往成了苦工,就感觉兴趣了。为糊口而做那种非"性之所近而力之所能勉"的工作,就很难保持求知的兴趣的生活的理想主义。最好的救济方法只有多多发展职业以外的正当兴趣与活动。
一个人应该有他的职业,也应该有他非职业的玩艺儿,可以叫做业余活动。往往他的业余活动比他的职业还更重要,因为一个人成就怎样,往往**他怎样利用他的闲暇时间。他用他的闲暇来打麻将,他就成了个赌徒;你用你的闲暇来做社会服务,你也许成个社会改革者;或者你用你的闲暇去研究历史,你也许成个史学家。你的闲暇往往定你的终身。英国十九世纪的两个哲人,弥儿(J。S,MILL)终身做东印度公司的秘书,然而他的业余工作使他在哲学上,经济学上,政治思想史上都占一个很高的位置;斯宾塞(SPENCER)是一个测量工程师,然而他的业余工作使他成为前世纪晚期世界思想界的一个重镇。古来成大学问的人,几乎没有一个不善用他的闲暇时间的。特别在这个组织不健全的中国社会,职业不容易适合我们的性情,我们要想生活不苦痛不堕落,只有多方发展。
有了这种心爱的玩艺,你就做六个钟头抹桌子工作也不会感觉烦闷了,因为你知道,抹了六个钟的桌子之后,你可以回家做你的化学研究,或画完你的大幅山水,或写你的小说戏曲,或继续你的历史考据,或做你的社会改革事业。你有了这种称心如意的活动,生活就不枯寂了,精神也就不会烦闷了。
第三个方法也只有一句话:“你得有一点信心。“我们生当这个不幸的时代,眼中所见,耳中所闻,无非是叫我们悲观失望的。特别是在这个年头毕业的你们,眼见自己的国家民族沉沦到这步田地,眼看世界只是强权的世界,望极天边好像看不见一线的光明—-在这个年头不发狂自杀,已算是万幸了,怎么还能够保持一点内心的镇定和理想的信任呢?我要对你们说:这时候正是我们要培养我们的信心的时候!只要我们有信心,我们还有救。
古人说:“信心(FAITH)可以移山。” 又说:“只要工夫深,生铁磨成绣花针。“你不信吗?当拿破仑的军队征服普鲁士,占据柏林的时候,有一位教授叫做费希特(FICHTE)的,天天在讲堂劝他的国人要有信心,要信仰他们的民族是有世界的特殊使命的,是必定要复兴的。费希特死的时候,谁也不能预料德意志统一帝国何时可以实现。然而不满五十年,新的统一的德意志帝国居然实现了。
一个国家的强弱盛衰,都不是偶然的,都不能逃出因果的铁律的。我们今日所受的苦痛和耻辱,都只是过去种种恶因种下的恶果。我们要收获将来的善果,必须努力种现在新因。一粒一粒的种,必有满仓满屋的收,这是我们今日应有的信心。我们要深信:今日的失败,都由于过去的不努力。我们要深信:今日的努力,必定有将来的大收成。
佛典里有一句话:“福不唐捐。“唐捐就是白白的丢了。我们也应该说:“功不唐捐!“没有一点努力是会白白的丢了的。在我们看不见想不到的时候,在我们看不见的方向,你瞧!你下的种子早已生根发叶开花结果了!你不信吗?法国被普鲁士打败之后,割了两省地,赔了五十万万法朗的赔款。这时候有一位刻苦的科学家巴斯德(PASTEUR)终日埋头在他的化学试验室里做他的化学试验和微菌学研究。他是一个最爱国的人然而他深信只有科学可以救国。他用一生的精力证明了三个科学问题:(1)每一种发酵作用都是由于一种微菌的发展;(2)每一种传染病都是一种微菌在生物体内的发展;(3)传染病的微菌,在特殊的培养之下可以减轻毒力,使他们从病菌变成防病的药苗。
这三个问题在表面上似乎都和救国大事业没有多大关系。然而从第一个问题的证明,巴斯德定出做醋酿酒的新法,使全国的酒醋业每年减除极大的损失。从第二个问题的证明巴斯德教全国的蚕丝业怎样选种防病,教全国的畜牧农家怎样防止牛羊瘟疫,又教全世界怎样注重消毒以减少外科手术的死亡率。从第三个问题的证明,巴斯德发明了牲畜的脾热瘟的疗治药苗,每年替法国农家减除了二千万法朗的大损失;又发明了疯狗咬毒的治疗法,救济了无数的生命。所以英国的科学家赫胥黎(HUXLEY)在皇家学会里称颂巴斯德的功绩道:“法国给了德国五十万万法朗的赔款,巴斯德先生一个人研究 科学的成就足够还清这一笔赔款了。” 巴斯德对于科学有绝大的信心,所以他在国家蒙奇辱大难的时候,终不肯抛弃他的显微镜与试验室。他绝不想他有显微镜底下能偿还五十万万法朗的赔款,然而在他看不见想不到的时候,他已收获了科学救国的奇迹了。
朋友们,在你最悲观失望的时候,那正是你必须鼓起坚强的信心的时候。你要深信:天下没有白费的努力。成功不必在我,而功力必不唐捐。
原载1932年7月3日《独立评论》第7号
Read more...今天帮陈总研究一个奇怪的问题的时候误操作导致机器停止ssh响应,遂请机房重启。由于机房做的是power cycle,导致部分数据丢失。先前在配置OpenLDAP时,忘记在其中配置checkpoint,另外也没有对这台机器的LDAP进行备份,因此只好尝试从现有的数据库中恢复。冗余不做,日子甭过;备份不做,十恶不赦!
记录一下修复过程。
第一件事是把出问题的数据库做一份备份:rsync -av /var/db/openldap-data/ /var/db/openldap-data.old/
接着尝试slapcat。出现下面的错误:
bdb(dc=********.com): file id2entry.bdb has LSN 1/1476384, past end of log at 1/374639
bdb(dc=********.com): Commonly caused by moving a database from one database environment
bdb(dc=********.com): to another without clearing the database LSNs, or by removing all of
bdb(dc=********.com): the log files from a database environment
bdb(dc=********.com): /var/db/openldap-data/id2entry.bdb: unexpected file type or format
bdb_db_open: database "dc=********.com": db_open(/var/db/openldap-data/id2entry.bdb) failed: Invalid argument (22).
尝试使用BerkeleyDB的修复工具修复:
# db_recover-4.6 -vvf
Finding last valid log LSN: file: 1 offset 374639
recovery 0% completeRecovery starting from [1][374527]
recovery 67% completeRecovery complete at Tue Jul 13 16:41:59 2010
Maximum transaction ID 800000c0 Recovery checkpoint [1][374639]
slapcat发现问题依旧。搜索Google发现答案基本上都是从备份中恢复,看了一下Oracle的网站,关于这类问题也没有很好的办法。尝试将bdb文件dump出来再load回去:
db_recover-4.6 -vvf
db_dump-4.6 id2entry.bdb > /tmp/id2entry.dump
rm id2entry.bdb
db_load-4.6 id2entry.bdb < ~/id2entry.dump
db_recover-4.6 -vvf
再次slapcat,发现对另一文件报错,用类似的方法修补之后,slapcat成功。
将slapcat的输出导出到一个文件中: slapcat > /tmp/my.ldif
\[a-z\]*
最后,重新使用导出的ldif文件恢复:slapadd -l /tmp/my.ldif。
至此,恢复完成。
Read more...此配置确认可配合 FreeBSD/amd64 8.1-RELEASE 使用。实际运行时功率少于100W(110V电的情况下电流小于0.9A),供参考。
主板:Supermicro X8STi
机箱(含电源):SC813MTQ-350CB
CPU:Xeon L5630
内存:Apacer 4GB ECC Unbuffered * 6
硬盘:Seagate ST31500541AS * 4
说明:
此主板采用Intel X58芯片组(ICH10R,可使用 ichwd 配合 watchdogd 来启用OS监控),所选硬件支持AHCI故应在BIOS中配置为使用AHCI。L5630为低功耗版本,此主板兼容的其他CPU不会影响兼容性。此主板包含的网卡为82547L。
注意 X8STi系列主板早期的PCB与Xeon 5600系列CPU存在兼容性问题。Xeon 5600系列CPU需要使用Rev 2.0的PCB。此问题的现象是重启时过热LED闪烁且停止响应。
FreeBSD 8.1-RELEASE默认启用了MCA。如果对功耗有进一步的要求,并且机器负载不太重,可根据需要配置并运行powerd。powerd会将电源识别为"unknown",并选择HIADAPTIVE作为profile,即在CPU占用超过running mark/2时—-默认running mark为75%,若任意CPU占用超过95%或running mark时将CPU频率调高4倍,反之令负载趋近于running mark/2。当负载不足idle mark/2时—-默认idle mark为50%,按1/32的当前CPU频率为步长降频。
目前Intel尚未发布针对L5630的新版microcode。
Read more...周末抽时间对网站做了一些调整。主要是把网站迁移到nginx上,不过遇到一些问题。Movable Type以FCGI::Spawn运行的时候,有时会反复出现先前的页面(例如,在mt.cgi上登录时,在提交登录之后仍会出现登录界面,而不是正常完成登录)。用ktrace看了一下FastCGI进程,结果发现之前看到的资料里面有相当多的小问题,但这个问题最终没有解决,暂时起了一个Apache来以cgi方式处理来绕过问题了。
意外的收获是,过程中发现nginx和firefox bug各一枚。
Read more...以前一直以为这事必须由ISP以个案的方式去做,最近跟北美一家ISP接触加上查阅资料以后发现其实早就有办法,原理和普通的域名解析类似,也是可以使用delegate和glue去把解析权移交给持有IP的客户,从而减少ISP自己的负担,在这里记一笔。
为小于/24的网段实现解析主要是针对子网掩码长度为30-25这个范围。等于或大于/24的网段必须拆成/24的网段来解析,这个使用传统的DNS的做法就可以了;小于/30的网络因为地址太少,将其解析权代理出去的意义不太大。
正常的/24网段反解析最终是通过PTR记录给出的。例如,如果我们想要得到IPv4地址 1.2.3.4 的反解析结果,我们将向 DNS 解析器请求 4.3.2.1.in-addr.arpa. 的 PTR 记录。这样,系统会向上逐步查找3.2.1.in-addr.arpa.、2.1.in-addr.arpa.、1.in-addr.arpa.、in-addr.arpa.、arpa.各自的NS记录(如果本地没有缓存的话),并向其查询下一级的记录。
为了能够允许向下授权,RFC 2317 指出,我们可以进一步在最后一级,也就是 /24 的地址段的域中增加下一级的 NS glue。例如,对于从144开始的/28网段,可以将其命名为 144/28;另一方面,原本直接解析出 PTR 记录的地址,例如 1.2.3.144对应的 144.3.2.1.in-addr.arpa,则解析到一个CNAME记录,例如 144.144/28.3.2.1.in-addr.arpa。
受信域比较常用的命名规则主要有山寨的DeGroot法(使用subnet144.3.2.1.in-addr.arpa这样的名字)、RFC 2317 所推荐的起止地址法(144-159.3.2.1.in-addr.arpa这样的名字)以及 RFC 4138 所推荐的子网法(144-28.3.2.1.in-addr.arpa这样的名字)等。不过,在实际应用中,也可以使用类似的规则去完成同样的目的。
Read more...今天的话题都是我比较感兴趣的。
开场的Keynote是eBay的Oliver Ratzesberger的 Enterprise Analytics on Demand。eBay每天的数据增量是50TB,而每天的数据处理量是50PB。这个presentation讲了相当多的规划方面的细节。
第一篇 DFS: A File System for Virtualized Flash Storage 介绍的是一个把卷管理(并不完全是:包含了Flash的wear leveling)和文件系统集成在一起的设计。FusionIO公司提供了一种直接在PCIe接口上插的存储设备。类似这样的设计,感觉是未来Flash文件系统必须要走的一条路。
第二篇 Extending SSD Lifetimes with Disk-Based Write Caches 是一个很有意思的设计:现时磁盘的反复擦写寿命要远好于Flash,因此,在磁盘上做一个顺序写入的日志,然后再择机将数据擦写回Flash。不过这篇论文讨论的具体方案还有一定的改进余地。
第三篇 Write Endurance in Flash Drives: Measurements and Analysis 是关于 Flash 寿命的衡量方法。
Read more...今天去参加了在San Jose举行的 FAST ‘10 第一天的 Tech Session,FAST是 USENIX 主办的关于文件和存储技术的学术会议。记上几笔。
开场的Keynote其实讲的还算精彩,不过感觉跟会议本身关系不大(讲的主要是发展中国家的手机等设备的发展),就不介绍了。
Build a Better File System and the World Will Beat a Path to Your Door部分。第一个是本次的获奖论文 quFiles: The Right File at the Right Time,具体来说是实现了同一份data(文件)的不同view(例如,将其表现成不同分辨率、码流等)的一种通用的存取方法。个人对Semantic File System持保留态度,不过这个talk还是可以帮助拓宽一下思路。
第二篇是介绍在 WAFL 类型的文件系统(具体举例是 btrfs) 中实现倒排索引的 Tracking Back References in a Write-Anywhere File System。具体来说,是在 inode -> 块这样的单向关系基础上,增加了块->inode(包括inode版本、回收时间等)的倒排索引。paper值得看但是性能比较做的稍微有些瑕疵(用做B-Tree的时间去比较在FS中查询的时间,而没有比较建立倒排索引之后更新与在block中插入信息所引起的开销,以及两者对应的查询时间)。
第三篇指出了内存故障可能导致的问题,指出 ZFS 的 end-to-end 检查只能检测出磁盘介质或控制器偶然故障引起的问题,而系统主存中存在的问题则无法发现并可能导致数据损坏甚至系统崩溃,并提出了在 ext2 FS 中增加运行时checksum检查的方案。这篇的试验方法和结论受到了很多人的质疑。
午饭时间。
Read more...