记一次ORFfinder本地化所遇到的问题

本地化ORFfinder本来是一件相当简单的事情,NCBI已经做的足够简洁,下载ORFfinder二进制文件,然后就可以了。

但是我这边却出现了两个问题:

1. libstdc++库太旧

系统版本的libstdc++版本为libstdc++.so.6.0.19,而ORFfinder依赖的CXXABI_1.3.8GLIBCXX_3.4.20libstdc++.so.6.0.19中的版本太低

$ strings /lib64/libstdc++.so.6 | grep -i cxxabi
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1

所以运行ORFfinder会出现如下问题:

$ /opt/orf-finder/ORFfinder -dryrun
/opt/orf-finder/bin/ORFfinder: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /opt/orf-finder/bin/ORFfinder)
/opt/orf-finder/bin/ORFfinder: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/orf-finder/bin/ORFfinder)

这个问题比较好解决,直接安装新版的libgcc,然后把安装位置加入到LD_LIBRAY_PATH里面就行了。

2. 114的DNS问题

安装了新版的libgcc,ORFfinder的运行还是不能成功,显示错误为:

Error: (308.5) [ID2]  Service not found
Error: (315.2) CConn_Streambuf::CConn_Streambuf():  NULL connector: Unknown
Error: (308.5) [ID2]  Service not found
Error: (315.2) CConn_Streambuf::CConn_Streambuf():  NULL connector: Unknown
Error: (308.5) [ID2]  Service not found
Error: (315.2) CConn_Streambuf::CConn_Streambuf():  NULL connector: Unknown
Error: (308.5) [ID2]  Service not found
Error: (315.2) CConn_Streambuf::CConn_Streambuf():  NULL connector: Unknown
Error: (308.5) [ID2]  Service not found
Error: (315.2) CConn_Streambuf::CConn_Streambuf():  NULL connector: Unknown
Error () : cannot open initial connection

显示错误为不能初始化连接,我想着可能是服务器的网络问题(因为我本地的电脑是可以正常运行ORFfinder的),但是服务器是可以正常的访问NCBI的,我灵机一动,有可能是DNS污染问题(纯属猜测),于是我在自己电脑上解析了一下NCBI的域名:

$ dig ncbi.nlm.nih.gov
; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> ncbi.nlm.nih.gov
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 105
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ncbi.nlm.nih.gov.              IN      A

;; ANSWER SECTION:
ncbi.nlm.nih.gov.       16456   IN      A       130.14.29.110

;; Query time: 4 msec
;; SERVER: ***.***.***.***#53(***.***.***.***)
;; WHEN: Mon Sep 18 19:27:20 CST 2017
;; MSG SIZE  rcvd: 61

可以发现,我的电脑解析到了:130.14.29.110这个IP,再在服务器上运行一下:

$ dig ncbi.nlm.nih.gov

; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> ncbi.nlm.nih.gov
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 41493
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ncbi.nlm.nih.gov.              IN      A      101.200.194.167

;; Query time: 3 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: 一 9月 18 19:34:21 CST 2017
;; MSG SIZE  rcvd: 45

可以看到域名被解析到:101.200.194.167了,那么问题就浮出水面了。

因为我的电脑是用的ISP提供的DNS,但是服务器的DNS被设置成了114.114.114.114,可能就是这个问题导致ORFfinder找不到正确的服务器(话说ORFfinder一个离线应用为什么要连接NCBI的服务器?)。

这时我把服务器的DNS也设置为ISP提供的DNS,问题解决!

03-05 15:16