我管理的基因組學(xué)群里,今天有人提出了這樣一個(gè)問題,如果有多個(gè)版本的BLAST,并且都是用conda安裝,應(yīng)該如何調(diào)用不同版本的BLAST

對(duì)于這個(gè)問題,其實(shí)存在多種解決方案:
- 用絕對(duì)路徑進(jìn)行調(diào)用
- 使用conda創(chuàng)建多個(gè)環(huán)節(jié),用
source activate xxx啟動(dòng)該環(huán)境 - 使用
export /path/to/ncbi-blast-x.x:PATH, 將對(duì)應(yīng)版本的BLAST提前
在我還是一個(gè)普通用戶的時(shí)候,我用的就是上面的方法進(jìn)行解決,直到有一天我成為服務(wù)器管理員,我決定用過一個(gè)更加裝13點(diǎn)工具對(duì)環(huán)境變量進(jìn)行管理,這個(gè)工具你也能在一些腳本看到,類似于module load gcc/6.3.1.這種。
何為Environment Modules
大部分Linux用戶管理環(huán)境變量的方式都是,export PATH=/path/to/some/bin:/$PATH >> ~/.bashrc,長(zhǎng)期以往,當(dāng)你echo $PATH時(shí)就會(huì)發(fā)現(xiàn)出現(xiàn)了大量的軟件路徑,在我眼里,降低系統(tǒng)對(duì)工具的搜索速度是其次的,主要是不太好看。而Module則是由管理員將不同軟件的環(huán)境配置寫好,然后用戶在登陸之后,只需要用module load xxx在環(huán)境增加自己所需的工具即可。
工具安裝和配置
由于Modules本來(lái)就是給管理員用于配置服務(wù)器環(huán)境,因此下面的安裝操作都是以Root權(quán)限進(jìn)行。
在安裝Modules之前,先確保自己的系統(tǒng)上安裝tcl-devel >= 8.4。隨后是編譯的常規(guī)步驟,
git clone https://github.com/cea-hpc/modules.git
cd modules
./configure && make && make install
相對(duì)于安裝,配置則是比較麻煩一些,為了保證用戶在登錄服務(wù)器的時(shí)候,能夠調(diào)用module,你得現(xiàn)將module的初始化腳本復(fù)制到/etc/profiled.d目錄下
ln -s /usr/local/Modules/init/profile.sh /etc/profile.d/modules.sh
# ln -s /usr/local/Modules/init/profile.csh /etc/profile.d/modules.csh
這樣子每個(gè)用戶在登錄服務(wù)器的時(shí)候,shell會(huì)先執(zhí)行/etc/profile,而/etc/profile的任務(wù)之一就是執(zhí)行/etc/profile.d/下的所有shell腳本,也就將module的運(yùn)行環(huán)境加入了用戶登錄的shell環(huán)境中。
之后是配置用戶能夠調(diào)用的模塊。你需要先在/usr/local/Modules/modulefiles增加不同軟件的配置信息,才能用module load進(jìn)行加載。例如我希望用多個(gè)版本的blast,我的BLAST的軟件分別安裝在/opt/biosoft/ncbi-blast-2.2.31+,/opt/biosoft/ncbi-blast-2.7.1+/bin。,我的操作如下。
先創(chuàng)建存放不同blast配置文件的文件夾
mkdir -p blast
然后在該目錄下,我編輯了兩個(gè)modulefile文件
"blast/2.2.31"為
#%Module1.0#####################################################################
## modules modulefile
module-whatis "NCBI BLAST 2.2.31"
prepend-path PATH /opt/biosoft/ncbi-blast-2.2.31+/bin
"blast/2.7.1"為
#%Module1.0#####################################################################
## modules modulefile
module-whatis "NCBI BLAST 2.7.1"
prepend-path PATH /opt/biosoft/ncbi-blast-2.7.1+/bin
當(dāng)一個(gè)普通用戶登錄到服務(wù)器之后,他直接用module list是沒有加載任何模塊的,也不能用blast

module load blast/2.2.31 加載環(huán)境后,用戶就能在環(huán)境中找到blast

如果想要換個(gè)環(huán)境,就可以用switch進(jìn)行切換。module switch blast blast/2.7.1

如果你不需要BLAST了,那么就用module unload blast/2.7.1就能在環(huán)境變量中刪除這個(gè)工具。
小技巧: 對(duì)于一些依賴工具比較多的生信工具而言,用conda安裝會(huì)更加方便,那么如何將module和conda進(jìn)行整合呢?分為兩步,
第一步,每一個(gè)分析流程都要新建一個(gè)環(huán)境,安裝到指定的目錄,以pb-assembly為例
conda create -p /opt/biosoft/pb-assembly pb-assembly
第二步,為將conda安裝的軟件新建一個(gè)modulefile,命名為"pb-assembly"
#%Module1.0#####################################################################
## modules modulefile
module-whatis "FALCON"
prepend-path PATH /opt/biosoft/pb-assembly/bin
那么就能用module load pb-assembly進(jìn)行環(huán)境加載了。
推薦閱讀
上面僅僅是module的簡(jiǎn)單用法,你還需要閱讀https://modules.readthedocs.io/en/latest/modulefile.html`了解更多和"modulefile"有關(guān)的知識(shí)。
以及閱讀https://modules.readthedocs.io/en/latest/INSTALL.html#configuration 定義一些默認(rèn)加載的模塊。