Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14′ not found问题(zhuanzai)

前天,在Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误:

/lib64/libc.so.6: version `GLIBC_2.14′ not found

貌似是一个很普遍的错误,去网上搜集了相关的资料并整理了一下

出现这种错误表明程序运行需要GLIBC_2.14,但是系统中却并不存在,因此可以先用strings命令查看下系统中的GLIBC版本

strings /lib64/libc.so.6 | grep GLIBC

发现系统中最高只支持GLIBC_2.12,解决这个问题有多种方法。

在你准备升级GLIBC库之前,你要好好思考一下, 你真的要升级GLIBC么? 你知道你自己在做什么么?

http://baike.baidu.com/view/1323132.htm?fr=aladdin

glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现… 总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令,比如cp, rm, ll之类,都得依赖于它 网上很多人有惨痛教训,甚至升级失败后系统退出后无法重新进入了。。。。。。

对于CentOS这样的系统,为了追求稳定性(这个值得商榷)往往各种库版本都很低,比如6.5甚至7.0自带的还是glibc2.12, 而ubuntu 14.04带glibc2.19 如果升级基本C运行库到一个太新的版本,可能会影响CentOS的运行。所以大家如果遇到CentOS基本库的问题,影响了自己程序的运行,应该可以考虑: 1. 在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性 2. 用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内 3.利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。 好在我遇到的问题是glibc2.15就满足要求升级后暂时没发现问题,所以大家可以参考我的方法: 首先查看现有的情况,在CentOS6.5下

ll /lib64/libc.so.6

libc.so.6是一个软连接,当前的glibc是2.12版本,我遇到的是GLIBC_2.15找不到的问题,所以需至少升级到2.15 首先,从网上下载glibc 2.15的rpm安装包,但这个不容易,因为.rpm针对的是centOS和redhat,高版本安装包很少见。也可以直接从其他系统上拷一个编译好的文件libc.so.6(对应glibc 2.15或者更高的),不过最保险的方式就是下载源代码在本地编译一次(有的人实在编译不成功,那也只能从别的地方找一份了) 各个版本的glibc可以从http://ftp.gnu.org/gnu/glibc/找,包括其插件glibc-port 最新到2.20,我保守的选择2.15 对于低版本glibc,还有glibc-linuxthreads-2.x需要编译,可参考很多网上文档,但2.15没有,所以不用了

[plain] view plain copy

wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz tar -xvf glibc-2.15.tar.gz […]

用tophat和cufflinks分析RNAseq数据(转载)

链接地址:http://blog.sciencenet.cn/blog-635619-884213.html

人的基因组一共有两万多个基因,但是这些基因不是每时每刻都在表达,在不同发育时期和不同组织中,基因的表达是不同的,一个检测这些表达的有效的方法就是RNA-seq,它结合了下一代测序的技术来对细胞整个的mRNA进行测序,从而确定每一个基因的表达量和表达区段,主要用在分析不同条件下细胞内基因表达差异和分析基因表达的不同可变剪接上。

RNAseq分析大致分下面几个步骤,首先要把测到的序列map到基因组上,然后根据map到的区段对细胞构建转录本,然后比较几种细胞的转录本并且合并,最后衡量差异和可变间接和其他的分析。

Mapping

所有的序列分析的第一步,都是把测到的序列map到基因组上,这样就能知道序列原来是在基因组的什么地方。mapping一般基于两种快速索引算法,一种是哈希,MOSAIK,SOAP,SHRiMP用的就是这种算法,在对参照基因组建好哈希表之后,可以在常数次的运算里查找到给定序列的位置,虽然高效,但是由于基因组有些区段重复性很高,所以查找次数虽是常数,但有时会变得非常大,降低效率;还有一种叫Burrows-Wheeler变换,BWA,Bowtie 和SOAP2都是用它,Burrows-Wheeler变换的设计比哈希更加巧妙,它最开始是一种文本压缩算法,文本重复性越高,它的压缩比就越大,这正好克服了基因组重复性高的问题,而且对于一个精确的序列查找,最多在给定序列的长度的次数里就能找到匹配,所以说基于Burrows-Wheeler变换的软件在mapping里用得更加广泛。可是RNAseq的map还有另外一个问题,那就是要允许可变剪接的存在,因为一条RNA不一定是一个外显子表达出来的,也有可能是几个外显子结合在了一起,原来基因里的内含子被空了出来,这些内含子的长度从五十到十万个碱基不等,如果直接用DNAseq的方法的话去在基因组里寻找,有些正好在两个exon连接处的序列就会有错配,而且有些在进化过程中遗漏下来的假基因是没有intron的,这样就导致有些序列会被map到假基因上去,使假基因的表达变得很高,所以,传统的bwa和bowtie在RNAseq里都不是最好的选择。

更加适合RNA mapping的软件需要克服上面的两个问题,Tophat,subread, STAR, GSNAP, RUM, MapSplice都是为RNA测序而开发的,我只用过Tophat,它的新版Tophat2,在map的过程中分三个步骤,如果基因注释文件存在的话,它会先用注释文件的转录组来map,然后再对剩下的序列用bowtie进行普通的map,最后再用bowtie里用过的所有的序列做剪接map,所以跟其他的软件比起来会有比较高的正确率。在运行tophat之前,要对参考基因组作index,samtools可以轻松搞定。

samtools faidx hg38.fasta

如果用的是tophat的话,还需要用bowtie2做index.

bowtie2-build genome.fa genome

hg38.fasta是人类的参考基因组,对参考基因组做index是为了提高mapping时查找的效率.

(对懒人来说,在这里可以直接下载到Bowtie打包做好的index文件,这样就可以省略掉做index的步骤了 )

然后用Tophat开始mapping:

path/tophat

-p 8

-G $path_ref/Homo.GTF

-o tophat_output

$path_ref/hg38

single_end.fastq;

-p指定用几个线程来工作,-G指定注释文件的位置,-o指定输出文件的路径和文件名,最后两个参数分别告诉参考基因组的位置和要map的fastq文件。在参考基因组里不用加.fa的后缀,因为程序还要去寻找其他后缀的index文件。

这步的运行时间是根据fastq文件的大小和设定的线程数来决定的,一般单端8个线程需要每G一个小时,双端各4G,线程数设为16的话需要五六小时,运行完之后会在fastq文件的目录里产生一个-o命令指定的文件夹,这个文件夹里有几个bam文件和bed文件,还有一个summary,在下一步需要用到的是accepted_hits.bam这个文件。

注释文件的后缀是GTF,它包含了所有已知的基因的外显子在基因组中的位置。(hg38的注释文件可以在这里下载)所以对于已经map在基因组上的序列,我们可以直接根据它的位置从注释文件里查找它是不是属于一个外显子,或者是一个转录本。对于要不要在这一步提供注释文件,各有各的看法,我用单端测序的序列用两种方法做了实验,发现他们有些差别:

有注释的时候:

没注释的时候:

发现没注释的时候有更多的序列被map上去,但是重复的map也变多了,但是既然Tophat2三步map的第一步是根据注释文件来map,我还是觉得在运行tophat的时候用注释文件比较好。

Mapping的最后一步是去除map到基因组中多于一处的序列,如果出现好几个序列都map在完全相同的一个区段,那么就应该只保留一个这样的序列,所以,只保留匹配最高的那一个。而且这样的序列占很大一部分,这步也很简单,samtools里的rmdup可以轻松解决:

samtools rmdup -s input.bam output.bam

-s小写是告诉samtools,bam文件是单端测序的结果,不指定-s的话默认是双端。

2。构建转录本

Mapping完了以后,cufflinks就可以把map到基因组里的序列组装成一个转录组了,这个转录组理论上包含了所有当时细胞里的所有mRNA,组装好的转录组包含了可能的剪切信息和所有转录的表达量,这个表达量是根据map到基因组的序列的总数和每个转录片断的长度进行归一化的,听起来比较难懂,它是对于在转录片断里的每一千个碱基对,在每一百万个成功map的序列中,map在这一千个碱基对上的序列的比例,fragments per kilobase of transcript per million mapped […]

CentOS 6.3下Samba服务器的安装与配置(转载)

一、简介

Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。

Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。

SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中 其它windows系统或者Linux系统共享出来的文件。 Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。

组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。

例如,某台Samba服务器的IP地址为10.0.0.163,对应的工作组名称为davidsamba,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。 \\10.0.0.163\共享目录名称 \\davidsamba\共享目录名称

Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。

二、系统环境

系统平台:CentOS release 6.3 (Final)

Samba版本:samba-3.5.10-125.el6.x86_64

Samba Server IP:10.0.0.163

防火墙已关闭/iptables: Firewall is not running.

SELINUX=disabled

三、安装Samba服务

1、在可以联网的机器上使用yum工具安装,如果未联网,则挂载系统光盘进行安装。

# yum install samba […]