用Modules優(yōu)雅地管理你的環(huán)境變量

我管理的基因組學(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

初始環(huán)境

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

加載BLAST

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

切換環(huán)境

如果你不需要BLAST了,那么就用module unload blast/2.7.1就能在環(huán)境變量中刪除這個(gè)工具。

小技巧: 對(duì)于一些依賴工具比較多的生信工具而言,用conda安裝會(huì)更加方便,那么如何將moduleconda進(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)加載的模塊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,979評(píng)論 25 709
  • php+mysql+apache+centos 編譯安裝 領(lǐng)導(dǎo)要求先保證php環(huán)境穩(wěn)定,然后再去考慮其他,例如性能...
    dnaEMx閱讀 2,472評(píng)論 1 16
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,620評(píng)論 9 468
  • 醒來(lái)覺得甚是恐慌。 從枕頭底下拿出手機(jī),屏幕上刺眼的,八點(diǎn)五十分。雙周的周四,才可以貪睡個(gè)懶覺。室友們都走了,只有...
    9th_of_October閱讀 286評(píng)論 0 0

友情鏈接更多精彩內(nèi)容