Shell's Home

Feb 11, 2014 - 1 minute read

长白山旅游——第三天

今天去长白山天池玩,总的来说比较坑爹。 早上跑出来,大概要开两个小时。路程还好,不好的是,导游居然连续说了两个小时的东北特产。。。 最后还特意强调了一下天池的寒冷,我大概猜到后面会拉我们去租衣服。果然,景区外一个租衣服的点。我租了双鞋子,万一上面雪进鞋子里面,也不会让我没得穿。至于大衣邦腿,去你妈的吧。另外我特别说明一点——山上租衣服的和山下的价格一样,都是50。 今天人太多,你们先去看冰瀑布吧 进长白山公园,坐上大巴,我们本来以为是先去天池的。结果司机告诉我们,天池人太多,公园自动分流,你们先得去看瀑布。 瀑布就瀑布吧。下车我一眼看去——啥都没看见。最后看半天,在一堆冰柱子中间看到一条细细的瀑布。看看手里55mm的头,算了,来都来了,还是照吧。 往前走个一公里,到了一个观景台。这个观景台很有特色——他的地板是斜的。准确的说,雪在一边堆积的高,一边堆积的低,于是站上面就会不由自主的往下滑。。。 再往前是一堆温泉泉眼,在漫山白雪间,有一条清澈的小溪流过,而且上面烟雾蒸腾。不过昨天见识了雪乡温泉,这个就有点见怪不怪了。旁边有温泉水煮蛋可以吃。蛋黄几乎凝结,蛋白还是软的。轻轻一吸,蛋黄就到了嘴里。总体来说,味道还不错。 车的情况不确定,能坐就坐吧 下山的时候,我们坐了一辆中巴。结果不知为啥,理论上必须坐下的山路站了两个人。这还没啥,下午的时候,调度给我们派上了车又给我们拽下来让上另外一辆,原因未知。下午的时候有三辆车不发让我们等了10分钟坐一辆有人的车。更夸张的是上面还有个伤员——想也知道,摔的呗。 车的情况简单来说只有两个字——混乱。 见识到了比学校还难吃的午餐 吐槽完了交通来吐槽一下午餐吧,我终于吃到了比学校还难吃的伙食。 我们到的时候,自助餐还没开始准备。所以我拿到的头几分餐食都是凉的。酸菜没酸味,洋葱没洋葱味,肉没肉味。猫咪好歹帮我拿了一份热一点的汤和鱼来,结果鱼还不够入味。不是说东北菜都口味比较重么?这厨师是广东来的吧。 这是唯一一次不需要导游催促的集合——我估计大部分人宁可早点玩好了回去吃点别的。 由于天气情况随时变化,所以猎豹的钱没算在行程里 下午要上天池了,导游告诉我们,上山坐的猎豹的钱没算在行程里面,所以要自负。虽然我估计如果我现在去找,大概有无数地方会写着这个注意事项。可是无论是喵还是我事先都没留意到这点。 来都来了,洗干净脖子吧。 都说师傅的车比较猛,实际上和朱哥的车比起来天上地下。不说扎村乃村,就是珠峰十八道拐就足够甩掉这条路。除了过弯速度比较快,车的扭矩比较大之外,其余没啥好多说。 这边是中国,那边是朝鲜 上天池看了一眼,没想像中好看。想像中一汪碧水,结果现在千里冰封,上面全是雪。下面到底是个池子还是个阿里郎表演场或者根本是个足球场,完全看不清,统统一片白。而且说到雪山的雄伟壮丽,和西藏比起来差很远。不过这里倒是有几点好处。 中朝边境。我想大部分人都无缘见识朝鲜的土地,现在给你见识见识。 周围没有其他的高山,于是有种一览众山小的快感——大概就跟区重点里面年级考试前十差不多。 最后关于冷。确实是很冷。可是主要是冻脸和手指头,护膝大衣不顶事。而且穿的不是太薄的,你忍个一刻钟该照的照完是没问题的。照不完的,我想你的问题不是一条棉衣能解决的。至于还考虑到经常受冷可能以后会留下隐患——你是打算镇守祖国的边疆呢吧。 终于赶上了博物馆,可为什么是闪电 晚上我们送一批人去泡温泉,其余人去博物馆。平时博物馆是5点下班,可8号正常上班,4点关门。至于为什么正常上班的结束时间和平时不一样——不知道。 其实我也不大紧张。导游都讲了两个小时了,就指望这次的购物呢。我还没见过购物点会提前关门的。 果然,到了之后没关门。但是神奇的事情发生了。讲解员以迅雷不及掩耳盗铃之势开始讲解,语速之快连郭德纲也要自愧不如。贝壳的中文阅读能力一直很出色,可是这次完全没有发挥余地。要跟上讲解员的节奏需要的不是阅读速度,而是奔跑速度。 直到出来的时候,贝壳还是满耳朵的——东北有三宝,blahblah和blah。东北新三宝,blahblah和blah。他们能够blahblah和blah,对你很有好处。最倒霉的是,讲解员说的和导游还不一样,结果我一个没记住。在购物点终于迎来了四五个满脸兴奋的导购员,可是他们面前的是一群一脸茫然的大人和小孩。想当然,这次购物点的收银员甚至没捞到出场机会。 上车看到导游一脸不爽的样子。这个你们自己沟通去吧。 开还是不开,你猜 晚饭吃的是汉拿山韩式烤肉。照例说应该挺高级的一家馆子,没想到意外的物美价廉。 ——换个说法,就是坑爹。东西倒是不错,服务员严重不足。 我们吃了一个牛肉拼盘,上面写着四种肉任选两种,可是直到吃完服务员也没空问我们要哪两种组合。不过还好,他们总算在我们结帐要走人的前夕把我们一开始要的热水给送来了。 还有牛板筋金针菇什么的。上菜速度挺快的,10多分钟就上来了,连送碳火的服务员都没来得及反应呢。我其实最后没吃饱想加两道,人来了话到嘴边改成了——服务员,买单,结帐。 然后往前走走,散个步,到雪圈公园那里打车回来。不走没事,一走一肚子气。今天雪圈公园居然开了。可是因为我们在烤肉花了太长时间,只开半个小时了。问题是,租雪圈一律30。。。 妈的,明天还是继续滑雪吧。

Feb 10, 2014 - 1 minute read

长白山旅游——第二天

下雪道22次无事,最后一次破功 今天早上一出门,我们就去滑雪。滑雪中心人很多,排队排半天。9点出门,折腾到10点才换好装备。 以前贝壳只在银七星滑过两三次,只会简单的下坡,刹车。而且还不保证每次都能顺利下坡。唯一值得自傲的,大概只有摔跤技术(喂)。大家知道银七星一场只有一个半小时,摔个几次基本就没了。 出了门,暂时有点不适应。前两次滑的比较小心,也比较消耗体力。后面就越滑越快越顺利。到后来,基本大部分时间都在牵引道上。基本每次下坡都能控制速度和方向,正正好好停在牵引道的入口,省去无效的时间。 猫咪滑的也不错,开始的时候撞牵引道摔了一次,但是后来滑的还很顺。就是体力不怎么好,滑到中午12点左右就没体力先回去了。 至于贝壳,保持了连续22次下坡到底无事故的记录。最后一次想了想,既然能控制方向了,试试左右转弯保持速度?结果一个弯没转过来——要撞防护栏了。所以只能中心偏移大一点,然后就摔了。 看看表,已经下午一点了,索性不滑了,回去吃饭去。 从索道上下山很省事 上楼找到猫咪,我们从索道上山观光。这个索道其实直通几个特级下山雪道。只是如果换我们下,雪道就会变成血道了。。。 这里的索道设计很有趣。坐出租到小镇要10元。坐索道不要钱(是的,无论多少次都不要钱),上山观光再坐另一根索道下山也可以到小镇。时间上也没长多少,还能顺道去山上观光一下。唯一的缺点是晚上不开放。 老北京火锅味道不错 老北京火锅是整个小镇点评有评价的餐厅里,唯一没被人猛吐槽的。今天试了试,果然不错。220元吃了精品牛肉,牛舌,牛肉丸,墨鱼,手擀面,金针菇,冻豆腐。两个人都能吃饱。 不过牛肉的费瘦分层很奇怪,而且肥肉一下水就消失了,我怀疑是注脂肪做的。牛肉丸淀粉含量太高,几乎没有牛肉味道。而且服务员给我们下错了单,一份手擀面出了两份。要不是我顺口问了一句,估计就付两份钱了。 不得不说,整个小镇里面的餐饮业很奇怪。有当地特色的餐饮价格比上海还高(你见过100元两位的饺子么?我们还只点了凉菜!),价格平易近人的味道就有点勉强。只有肯德基和麦当劳等快餐连锁还保持了一贯的价格和品质。 温泉一般,只是毛巾受到追抢,而且更衣室里面有人吸烟 吃过火锅,我们去泡温泉。这里的温泉很有趣,是开在雪地里的。人在里面泡温泉,一伸手就能摸到雪。 听起来很好,不错实际上有点问题——浴巾没货。不带浴巾出门试试?以贝壳的体质尚且觉得冷爆了。泡到温泉里面觉得暖和,只要上岸统统皮抖抖。即使雪再近也要站起来一伸手么——啊,好冷好冷——差不多是这个样子。 我们一起泡的一个池里面有对情侣在照相,妹子在那里说,我站起来咯。三二一。然后男生喀嚓喀嚓三张。整个过程不超过10秒——超过估计就能看到妹子的颤抖了。 另一个池里,有一对情侣在讨论什么东西。不过两个人在温泉池里面——吸烟??!!怎么点着的?啊不对,怎么把烟带进来的?不会是放在。咳咳,问点重点的吧。烟灰缸呢。。。说着妹子烟头上掉下一截。。。 贝壳回去后(你们知道为什么),毛巾终于到货了。在短短的半分钟内又被争抢一空,然后就是屋外人数爆增。不知道他们是不是看到了贝壳刚刚看到的东西。 所以,这种噱头听起来很有趣,实际么——就要看执行的情况了。 而且就算是擦干回去的时候,我也找不到毛巾。问了一下服务员。服务员先问了我是出去还是穿衣服。我说穿衣服。服务员从一个隐蔽的地方给了我一条小毛巾——好吧,看来他们因为没毛巾让顾客穿衣服出门被骂过。 擦干到了更衣室。我去,有个大叔在吸烟。虽然说一头白发慢慢吞云吐雾看起来是挺帅的。可是我说大叔——您能不能换一包不怎么呛的烟。那个味道我在洗澡的地方都能闻到。至于服务员——大概是去解决毛巾问题了。 哪个混蛋说的晚上雪圈乐园也开门的? 老婆问了一下,据不知道哪个混蛋(她现在自己都不记得了,不过坚持说不是自己的妄想)说,雪上乐园晚上开门到10点。 开你妹啊。我们好容易走过去。发现门口一条告示——不开门。然后只能后天起早去玩了。 然后就是更坑爹的RPG时间。我们的套餐里面包括看一场表演(表演细节后表)。所以我们就致电剧院预约。剧院说现在都6点了,表演7点半开始。直接来吧不用预约了好位置都有。我们很开心的走了过去(从乐园到剧院,对穿整个小镇,大约300-500米雪地。其实剧院就在刚刚的温泉旁边,我们刚刚走过去),结果剧院说,不好意思。如果你们订的是春秋的套票,需要在哪里哪里拿票,然后到我这里换座位。 哦,好,春秋的那家店在哪? 雪圈公园旁边。。。 好,于是贝壳和猫咪就走回刚刚的地方(这是第三次从这条路上走过了),拿到了彩虹的水滴。啊呸,是拿到了票。然后再走回剧院(第四次),换了票,出门吃饭。 小鸡炖蘑菇和猪肉酸菜水饺 不要误会,小鸡没有炖猪肉酸菜水饺。 晚饭本来是去炖锅吃的。结果猫咪喜欢的一锅炖没有。而且只有那个便宜,188。剩下都是2XX,3XX,4XX这种节奏。而且XX你们明白。要是加上我每天单程公交车钱,就会进位。。。 所以我被猫咪拽出来了。 商量了一下,还是去昨天的小吃街吧。那里的水饺看起来便宜很多。 果然便宜很多。24个水饺半斤,猪肉酸菜,只要12。价格只有山珍水饺的一半,量大一倍。可是自古说了,便宜没好货。难吃程度果然也是成正比的。幸好小鸡炖蘑菇味道相当鲜美。我们花了50多点就吃了一顿不错的晚餐。下次点个好点的水饺也许就能感受到高性价比的优势了。 我们看了一场奇葩的表演 晚上这场表演是最值得吐槽的了。风格有点像我们在成都看的川剧变脸传奇,但是更加奇葩一些。 首先是一个采参人,跌入时空隧道,穿越回了——大清朝? 又穿越,你们打算把大清朝的所有阿哥都配上现代女汉子么?我本以为这已经够奇葩了,谁知道只是个开始。 第二幕,一群穿着溜冰鞋(不是直排,就是人民广场卖玩具的小贩经常滑来滑去那种)的大臣和一群让皇帝痛不欲生的妃子在那里跳舞。由于角度关系,皇帝的脸一直看不清。等皇帝终于走了出来,没10秒,就被一个人参娃娃给吓跑了。 所以说不要以为皇帝一定就是主角,你看看甄嬛传,再看看杨家将,再看看水浒,再看看末代皇帝——不好意思搞错了。这个真是主角,但是不是皇上了。 后面更奇葩的事出现了。采参人跟着人参娃娃跑——结果丫变成了个美丽的仙子。你是想说源氏物语还是说采参人变成了萝莉控? 反正结果就是仙子和屌丝——啊不对,仙子和萝莉控——啊呸,仙子和采参人陷入了热恋。但是一个奇怪的妖怪看上了采参人(这年头有本事的都爱屌丝)。于是用毒药迷惑了采参人(啥玩意那么好使,哪买的?),还把仙子给冰进了冰山里面。 我擦,有本事的人怎么都会陷入奇怪的麻烦。是不是都等着被一个无名小卒救了然后说你骨骼清奇是万中无一的奇才,跟着我学做菜吧。你看看D2里面的大天使,能锤碎世界之石却被一条虫子困住了。主角还在菜鸟的时候干掉了这条虫子救出了大天使,可是到最后都没能锤碎世界之石。 后面更奇怪的东西出来了——变脸?收回我刚刚说的话。这个不是有点像川剧变脸传奇,这根本就是。这是川剧还是东北二人转?我刚这么说着,两个人推着一个像健身用的大呼啦圈一样的东西缓缓出场。。。 到后面八个饺子妖出场的时候,我已经完全不惊讶了。 结局还是很不错的,屌丝——啊不对,采参人用鲜血唤醒了女主角。于是女主叫召唤世界之石还不知道是什么玩意把男主复活成了——一颗人参。于是两颗人参就快乐的生活在了一起。 但是,天啊,我终于知道为什么进门的大厅里面那么奇怪的放着两锅人参汤了。。。那两个主角养老的地方不会就是在。。。 好吧,不要在意这些细节。

Feb 7, 2014 - 1 minute read

长白山旅游——第一天

这次去长白山旅游,是坐春秋的航班,从上海经停大连到白山机场。照例,是没有航空餐供应的。 长白山这里离朝鲜很近(好像在朝鲜被称作白头山,是金家的诞生地),从飞机上看下去全是白茫茫的雪。白山机场很小,从停机坪下去就是一个小小的转盘。转盘出去就是机场了。 气温没有想像中那么可怕,即使是夜晚,穿一件衬衫,一件毛衣,一件大衣,身上一点都不冷。在室外只要注意细节保暖(耳朵,手指,各种穿戴中间露出的部分),其他都不是什么问题。 镇子上的东西价格参差不齐。山珍水饺,两盘水饺(12个一盘),两盘凉菜要价100。另一边的小吃街,水饺只有30上下,却有24个的量。价格基本差上一倍。我们要了份羊汤,20,份量不错,味道一般。 不过小吃街实在是坑爹了点,说是一条街,实际上这条街全是银行。小吃只有街口的两家店面,每家里面有四五个小摊位上面在卖各种吃的。人很少,人气不足。当然,也可能是夜晚的原因。 而且这里的餐厅都很奇怪。菜异常的少,或者菜谱异常简单(好像东北都是这个风格)。山珍饺子菜谱上只有两页,一页写着饺子一页写着酒,中间稀稀拉拉几个凉菜。好像除了本店主打你们只要喝酒就好了的样子。另一家黄上煌则是四五页,开头几页都是XX锅,后面几页把前面的锅拼起来,然后一页酒,最后推荐多人套餐(就是把拼锅打包了卖)。小吃到还可以理解,每个小吃摊位上都是几样东西,不会太多的。 往前走能看到一条雪道。夜间看到的雪道很吓人,30-45度的坡度,大约每80米一个弯。以我的水平就这么往下滑,有没有拐弯真是一个困难的选择呢。有拐弯的地方当场撞到送医,没拐弯的地方接着往下滚,到山下一团雪人去送医。 回来才发现,那是特级雪道。我们明天大概就是在滑雪场里面简单滑一下初级就得了。

Jan 28, 2014 - 1 minute read

google authenticator的特性

算法 双方预先共享一对密码。 时间对30秒求整,用密码unbase64后HMAC签署。 如果当前时间前后一定时间内(几个误差)的值和用户提供值一致,就验证通过。 攻击者获得了数个时间和序列对,但是根据HMAC特性,他无法反向出密码。 因此 gauth不需要联网。但是双方时间必须同步。 gauth的优势在于,即使有人可以获得一次密码(例如keylogger),只要不在1分30秒内登录,获得的输入就无法使用。 对于可以取得gauth共享密码的人,gauth不能提供安全性加强。例如sudo,验证的是自己的身份。而用户密码只要登录即可读,因此没有提供加强的安全性。 对于ssh,在登录后也可以获得密码。因此只要给别人获得了一次登录权限,后续gauth不能保护你。反之,如果能保证对方一次登录都不会成功,则可以作为辅助。因此用于ssh上必须加上一个token只能使用一次,以确保对方获得了token也是作废的。 如果有人可以从手机中读取应用的信息,就可以一直冒充用户。因此越狱和root肯定会降低系统安全性。这就是为什么很多TOTP使用硬件来做这个事情。系统单纯,而且没有读取API。 缓慢的重试,每次命中概率都是1/1000000。持续试1000000次,也不能肯定猜中。实际上只有63.2%的概率猜中。如果30秒内连续重试1000000次,肯定破解了。合每秒重试3万多次,不算多。所以必须防止暴力破解。 如果没有紧急密码,安全性大约是20bit。但是数个紧急密码为破解提供了帮助。因此紧急密码一般是7位数字,综合复杂度一般评估为20bit上下。 以复杂度而言,不足以作为身份验证工具,只能作为身份验证辅助。所以gauth叫做two-factor-authentication。

Jan 24, 2014 - 2 minute read

openvpn auth with google authentication

client config # base config client dev tun proto udp remote 192.168.1.122 1194 nobind user nobody group nogroup persist-key persist-tun mute-replay-warnings comp-lzo # authentication config ca ca.crt cert shell.crt key shell.key ns-cert-type server tls-auth ta.key 1 auth-user-pass Group should be nogroup, not nobody in debian. auth-user-pass is needed for google auth. pam config account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so account requisite pam_deny.so account required pam_permit.

Jan 23, 2014 - 7 minute read

lxc和virtualbox和物理机的简单性能测试和对比

说明 测试各种虚拟化系统下的虚拟机性能。 测试使用sysbench。 CPU采用如下指令测试。 sysbench --test=cpu --num-threads=2 --cpu-max-prime=50000 run 文件IO采用如下指令测试。 sysbench --test=fileio --file-total-size=10G prepare sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run 内存采用如下指令测试。 sysbench --test=memory --num-threads=2 --memory-access-mode=seq run sysbench --test=memory --num-threads=2 --memory-access-mode=rnd run 线程采用如下指令。 sysbench --test=threads --num-threads=2 run sysbench --test=mutex --num-threads=2 --mutex-locks=1000000 run 裸硬盘测试采用如下指令。 hdparm -tT <dev> 物理机上有三个文件系统,ext4/xfs/btrfs,前两者仅做fileio测试以对比性能。 另外做两个特殊文件系统对比,aufs带复制和aufs无复制。前者在只读层上准备好测试文件,而后进行随机读写测试。其中就附带了文件复制开销。后者在aufs建立后初始化测试文件,因此消除了文件复制开销。 所有测试都是测试数次,取最高者(因为低者可能受到各种干扰)。一般是2-3次。 物理机是一台DELL Intel 64位桌面系统,支持硬件虚拟化,有4G内存。系统采用debian jessie,测试于2014年1月17日-20日执行,内核3.12.6-2 (2013-12-29) x86_64。 虚拟机lxc是使用lxc切分的一台虚拟机,没有做资源限制。 虚拟机vbox是使用virtualbox切分的一台虚拟机,分配了所有CPU,打开了硬件虚拟化,分配了1G内存。 文件系统 ext4 Operations performed: 21311 Read, 14207 Write, 45440 Other = 80958 Total Read 332.

Jan 22, 2014 - 1 minute read

在PAM中使用google authentication

PAM是linux系统身份验证的核心,在用户登录/ssh身份校验中均有很大用途。但是很少有人想到,其实这个东西还可以用google authentication来进行身份校验。 安装 sudo apt-get install libpam-google-authenticator 设定 使用前,需要对用户做一个用户级配置,生成配置文件。这个文件就是这个用户的身份验证凭证。配置请使用用户执行google-authenticator。 上来先会问你是否使用基于时间的验证,肯定选是。但是注意,基于时间的验证要求服务器时间必须精确。更准确的说,是服务器时间和手机时间校准在30秒以内。由于手机一般都采用GSM校时,因此只需要在意服务器时间。建议是使用ntpdate来校准时间。特别注意,linux的时钟是会漂移的,必须按天级校准。 然后程序会给出一个url,还可能有QR码(真够不容易的,Console级别的QR码。。。)。记住,一定要用url去获得QR码给程序扫描。因为url获得的QR码算法是最新的,而直接生成的有可能不能跑。 下面是secret key和verification code,一般来说这两个不用关心。但是你需要记住emergency scratch codes。libpam-google-authenticator默认给你生成了5个,一般都够用了。通常用到3个就更新一遍吧。 是否生成配置,选是。 是否拒绝使用同一个token的人登录。如果选是,30秒内只能登录一个人。建议选是。 是否放送时间验证,从1分30秒到4分钟。如果选是,允许更大的服务器时间偏差。看你服务器时间是不是够准。 是否防止暴力破解,30秒内尝试不超过3次。建议选是。 OK,你的配置就完成了。如果有多个用户,请多次配置。 手机app 按照系统安装以下app,下面以android版为例介绍。 Google Authenticator Android Google Authenticator iOS Authenticator for Windows Phone Blackbarry 选择setup account,然后scan a barcode。程序会要求你使用barcode扫描软件扫描(推荐barcode scanner)。这时去扫描设定一节中访问url显示的那个qr码。 pam配置 对于ssh而言,请在/etc/pam.d/sshd的最后一行增加这句。 auth required pam_google_authenticator.so 注意,这样其实是密码/校验码双重验证。如果你不需要密码请注释掉下面这句。 @include common-auth 或者其他包含以下这句的地方。 auth required pam_permit.so 如果你希望增强sudo安全性,也可以把这句加入/etc/pam.d/sudo后面。如果同样不需要密码,请注释上面那句。 sshd配置 保证/etc/ssh/sshd_config里面,以下参数都处于正确的配置。 ChallengeResponseAuthentication yes PasswordAuthentication no UsePAM yes 如果你使用openssh6.

Jan 15, 2014 - 2 minute read

golang和nginx的简单性能对比

说明 测试都是ab做的,中等并发量,统一采用10000并发,100000个请求。都是本机请求本机,避免公司内网IDS的干扰。 机器是一台双核CPU的DELL:Intel® Pentium® CPU G2030 @ 3.00GHz。配4G内存。 第一组数据是ab测试nginx,nginx的配置如下: worker_processes 4; pid /run/nginx.pid; worker_rlimit_nofile 30000; events { worker_connections 20000; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; ... } 第二组是ab测试golang,返回固定是个OK。 第三组是ab测试golang,返回某个目录或文件。 err := http.ListenAndServe(":8080", http.FileServer(http.Dir("/home/shell/photo"))) nginx Concurrency Level: 10000 Time taken for tests: 5.720 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 172100000 bytes HTML transferred: 160000000 bytes Requests per second: 17482.

Jan 2, 2014 - 1 minute read

lxc简单介绍

基本安装 安装lxc包。 注意修改/bin/sh,链接到/bin/bash。lxc在某些版本上有一个bug,声明为/bin/sh却使用bash语法,导致不如此链接会出现错误。 lxc on debian wiki 镜像和设定 使用lxc-create -n name -t template生成镜像。 在/usr/share/lxc/templates可以看到可用的模板。 在/var/cache/lxc/debian会缓存生成过程的临时文件。 生成的镜像需要在镜像内安装lxc,否则无法使用lxc-execute。 资源限制 在config文件内,写入cgroup限定规则。注意,使用内存限定的话,需要在内核参数中加入cgroup_enable=memory。 在debian下,可以修改/etc/default/grub文件,使用update-grub重新生成规则。 GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet" 在config文件中可以如下限定。 lxc.cgroup.memory.limit_in_bytes = 512M # 限定内存 lxc.cgroup.cpuset.cpus = 0 # 限定可以使用的核 lxc.cgroup.blkio.throttle.read_bps_device = 8:0 100 # 读取速率限定 lxc.cgroup.blkio.throttle.write_bps_device = 8:0 100 # 写入速率限定 lxc.cgroup.blkio.throttle.read_iops_device = 8:0 100 # 读取频率限定 lxc.cgroup.blkio.throttle.write_iops_device = 8:0 100 # 写入频率限定 cgroups blkio-controller cpusets memory 执行 lxc-start -n name /bin/echo hello 还可以用以下指令,在已经启动的container里执行进程。

Dec 30, 2013 - 1 minute read

一个神奇的故事——为什么程序能够工作

故事的原因 今天被一个妹子问到一个专业问题。每天看你们在写程序,为什么你们写一些东西,就会出现很多神奇的功能。 好吧,这是很多“外行”很难理解的问题。大多数职业非职业程序员,只要写过一点程序,就不会对这种事情表示惊奇。然而问题是,很多人并没有深刻的认识到,这个问题其实非常难解答,可以算是计算机本质性问题之一。 我当时的解答有点奇怪和玄幻色彩。我打了个比方,例如你有个萝卜头,你扇它一下,它会往前蹦一下。你又有个电灯,按一下开关就亮,按一下开关就灭。那么你把两者组装起来,在旁边立个牌子,扇一下萝卜头灯就亮,再扇一下就灭。事情看起来就很神奇了。至于萝卜头为什么会这么做,这个事情我并不了解。 实际上,这个回答很让人莫名其妙。什么萝卜头和奇怪的世界观阿,这不是在讲程序吧。好吧,我把整个故事讲的稍微完整一点。作为对所有有这个问题的人的解答。 原型 在讲整个故事前,让我们稍微的放开一点想象力。例如我们有一个老鼠,一盒一碰就会掉下奶酪的奶酪盒,一个转笼(就是老鼠经常在里面跑的那种),一个小的皮带环,一个风扇,一个导轨,就是扔个铁球,就能沿着导轨滚动的那种。 我们把转笼和风扇用皮带环连接起来,然后里面放上白老鼠,上面放上奶酪盒,旁边放一个导轨,然后用黑盒子罩住,旁边放一张纸。这是一个神奇的设备,当你向里面投入一块钱,就会有风吹出来。因为钱沿着导轨滚下来,会碰到奶酪盒。老鼠就会开始跑,带动风扇吹出风来。 好像很神奇的样子哎,投币式风扇。 哎哎等等,你弄了那么复杂的一堆东西,就是为了吹风扇?那为什么不用电风扇呢? 其实我们的老鼠盒子和电风扇具有一样的结构。老鼠是动力源,奶酪盒是开关,皮带环是传动系统,风扇负责执行。我们只要正确的将每个具备功能的部件组合起来,就可以产生奇妙的效果。至于每个部件为什么能达到他自己的功能,这个我们并不关心。设计部件的人会为我们做出合适的实现。 同样的组合,如果是电扇,我想大部分人都不会表示不理解。然而如果换成老鼠盒子,大家就会觉得很神奇,如果换成程序,就会觉得更神奇了。 其实程序和老鼠盒子非常类似。程序的每个部件都有自己独特的功能,我们只要负责将这些部件以合适的逻辑连接起来,就可以完成新的功能。当然,如何连接部件是一个非常有技术含量的问题,需要专门的培训。 然而,程序比老鼠盒子更加复杂,更加让人觉得神秘莫测的地方是。程序经常出现一些我们听不懂的东西。同样用老鼠盒子做比方,请想象一下以下事件: 不可往复 这个系统还没上线,就被产品经理吐槽了一把。这个系统的第一个问题,就是能开不能关。一旦老鼠开始跑,直到没有力气之前系统是不会停的,无论人在不在。为了修正这点,我们再弄了一个传送带,用皮带环和转笼连接。当老鼠跑上一分钟后,传送带就会把奶酪传送到老鼠面前,老鼠就会吃掉奶酪,从而停止奔跑。 白老鼠的不稳定性 系统终于上线了,不过有奇怪的问题。系统不知道为什么,有的时候工作有的时候不工作。 经过工程师的检测,这主要是老鼠会吃饱。一旦老鼠吃饱了,奶酪就失去了吸引力。因此每隔三四块奶酪就会停止工作。不过老鼠饿的很快。所以十分钟后又恢复了工作。所以表现就是不稳定。 工程师为了紧急修复这个问题,让每次掉出来的奶酪减小到了很小的尺度,大约是原来的三分之一。这样就算十分钟连续工作,也不会吃饱。 老鼠盒子的黑客事件 没多久,这个盒子碰到了黑客。有个人掀开盒子看了一眼,发现导轨只辨识撞击,不辨识是否是货币。因此出现了大量铁球替代硬币的事情,扔个铁球就开始吹风。市场部表示工程师需要紧急解决这个问题。 工程师巧妙的将轨道绕了几个弯,并减小了弯上的轨道宽度。如果投入物是硬币,那么他的重量和形状就会使得他正确的通过弯。而铁球或轻或重会从导轨上掉下去。从而解决了这个问题。 并发请求 很快,系统又遇到了一个问题。有人一次性的投入了两个硬币,因此击中了奶酪盒两次。老鼠只跑了一分钟就吃了两块奶酪。因此这个人又重复的连续投了多次货币。这导致老鼠吃饱了,因此盒子不工作了。客户大发雷霆,打电话到售后骂人,老板很生气。 工程师发现这是因为奶酪被连续放置的缘故。于是他们设计了一个连杆。当老鼠开始工作的时候,就会启动连杆,关闭投币口。这样就不会引起老鼠连续吃东西了。而老鼠停下的时候,连杆就会打开。就可以继续投币。 老鼠饿死了 经过了一个圣诞节,大家都不去玩老鼠盒子,老鼠饿死了,老板把运营骂了一顿。 运营乖乖去换了一只老鼠,并让工程师在盒子里装了一个摄像系统,可以让他们看到老鼠是否存在。 现状 现在我们有一个神奇的盒子,投币就可以吹风。这个盒子是由一个带着摄像系统的黑色外壳,一个盘旋的及其复杂的导轨,一个奶酪盒子,一个传送带,一个连杆,两组皮带环,一个转笼,一只老鼠,一个风扇组成。为什么会这样?一个妹子问。。。