整理一下四月在工作上遇到的一些開發瓶頸,以及其解法。大部分都是跟linux或者c++有關。
GSL篇
GSL,也就是 GNU Scientific Librarary 是一個號稱可以取代 Numerical Recipe 的科學計算函示庫。
安裝篇
如果是在國網上,不可能取得 sudo 安裝在 /usr/local/lib/
,所以要另外找地方放,例如自己開一個 ~/local/
。安裝步驟如下
./configure --prefix ~/local/
make
make install
安裝後
附加新的 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/local/lib/
compile的時候要加上的flag
-lgsl -lgslcblas -lm
MPI 篇
重新載入 .bashrc
以前都以為改完 .bashrc
之後要重登才會生效(其實確實也是如此),不過其實有偷吃步,可以直接執行
. ~/.bashrc
就可以重新載入了
LINUX 主機管理篇
我們實驗室自己的機器,不知道為什麼從半年前開始就無法 sudo ,系統說 /etc/sudoers
這個檔案壞掉了。麻煩就麻煩在,因為 sudo 壞掉了,所以要修一定要用 root;但是為了安全因素,我們的機器根本沒有啟用 root ,最後發現可以在開機的時候按住 shift 進入 GRUB menu,然後有 root 模式可以用。講起來好像很容易,不過我們的主機實體是託管在中研院地下三樓的機房裡面,所以還是特地去了三次,才把問題解決。
進到了 root 模式之後,按照系統的錯誤訊息,照理來說執行 chmod 0440 sudoers
就好,結果系統又說 file system read-only,靠夭,這是什麼巫術?
mount -o remount,rw /
不要問我這是怎麼辦到的,總之就是 magic!
remount好之後,再跑 chmod 0440 /etc/sudoers
即可
另外筆記一下,我發現被限制用 ssh 登入的帳號,也就是只能先用一般帳號登入再su過去的帳號,不能用 screen。
釋放swap
先查詢swap所在地點
swapon -s
假設查出來是 /dev/sda5/
,接下來先執行
sync
然後執行
swapoff /dev/sda5/; swapoff /dev/sda5/
大功告成!可以跑top
檢查一下是否已經釋放成功。
jspr 是美國普渡大學的 Wen Jiang 教授團隊所開發的單顆粒重組( single particle reonstruction)軟體包,一直以來我同事都是在Windows 上面開 Virtual box ,跑該團隊所提供的 ova 檔案裡面的 linux系統。但是跑顆粒重組本身是很耗能的事情,在虛擬機器上跑效能一定不會太好,所以我今天幫我同事在原生的 linux 系統上弄了一樣的環境給他用。原本以為一切順利,但是最後他要跑最重要的 reconstruction 的步驟的時候,在 terminal 出現了這樣的錯誤:
File "/home/alanfan101/cryoem/x86_64/jiang/jspr.py", line 1417, in createBTSession
import libtorrent
ImportError: libboost_system.so.1.53.0: cannot open shared object file: No such file or
directory
查了一下,發現這個libtorrent
在軟體解壓縮後的目錄中的cryoem/x86_64/lib64
和cryoem/x86_64/lib
都有,如果使用ldd
去查詢,會發現:
[user@linux lib]# ldd libtorrent-rasterbar.so
linux-vdso.so.1 => (0x00007fffd51ff000)
libboost_system.so.1.54.0 => not found
librt.so.1 => /lib64/librt.so.1 (0x00007f25a579d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f25a5580000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f25a527a000)
libm.so.6 => /lib64/libm.so.6 (0x00007f25a4ff5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f25a4c61000)
/lib64/ld-linux-x86-64.so.2 (0x0000003044c00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f25a4a4b000)
嗯,沒錯就是少了這個libboost_system.so.1.54.0
。但是 Wen Jiang 的團隊號稱這個 jspr 軟體包,是自給自足,什麼都有啊。於是我去找了他們提供的 ova 映像檔,去查裡面那個可以動的版本,到底是去哪裡找libboost_system.so.1.54.0
的。一查,發現居然就在cryoem/x86_6x/lib
下面,原來,應該只是忘記在自己的 .bashrc
下面 source 他們提供的bashrc設定而已,虛驚一場!
我們group的博後說 Wen Jiang 的 jspr 每次用一陣子都會出error,他只好把linux系統砍掉重裝 @@,我叫他拜託不要再這麼做了!
遇到這個問題,可能會在 terminal 上面看到的錯誤訊息如下:
Traceback (most recent call last):
File "/home/alanfan101/cryoem/x86_64/EMAN2/lib/EMAN2db.py", line 1289, in put
self.bdb.put(key,val,txn=txn)
DBPageNotFoundError: (-30985, 'DB_PAGE_NOTFOUND: Requested page not found')
********** Warning: problem writing ▒U
micrographsq. to importMicrograph.py .
Retrying (0/10)
********** Warning: problem writing ▒U
micrographsq. to importMicrograph.py .
或者
Traceback (most recent call last):
File "/home/alanfan101/cryoem/x86_64/EMAN2/lib/EMAN2db.py", line 1289, in put
self.bdb.put(key,val,txn=txn)
DBPageNotFoundError: (-30985, 'DB_PAGE_NOTFOUND: Requested page not found')
********** Warning: problem writing ▒U
micrographsq. to importMicrograph.py . Retrying
(9/10)
NOT Writing notes, ppid=-1
解法很簡單
rm -rf ~/EMAN2DB
就這樣。雖然如此可能會把記憶在EMAN2裡面的參數消掉,但是這總比把整個Linux系統打掉重來簡單吧?
剛才學弟問我,他不小心砍了機器上面的.ssh
資料夾,怎麼辦?
這是新手滿常犯的錯誤,也就是第一次用(S)FTP連上機器太興奮,就把隱藏資料夾也一起都砍了。大部分的東西其實砍了也無所謂,機器會再自動長出來;但也有的東西,例如 .bashrc
,砍了也是很麻煩的。 .ssh
我覺得應該也是會自己長回來,不過它的性質跟其他的內建資料夾有點不一樣:它不能動用 root 複製其他使用者的資料夾備份過來就好,因為 .ssh
下面的東西是獨一而二的。說了這麼多,其實重建 .ssh
只要三個步驟。
mkdir ~/.ssh
首先當然就是建立資料夾囉
chmod 700 ~/.ssh
給 owner全部的權力,包含執行!
ssh-keygen
接著就是重新產生 key pair。系統會問你一些問題,都按 enter 略過即可。
以上,這樣就完成了。