這篇博文記錄了我用CentOS 7搭建地震學科研環境的過程,供我個人在未來重裝系統時參考。對於其他地震學科研人員,也許有借鑑意義。
閱讀須知:
- 本文適用於個人電腦,不適用於服務器;
- 不推薦剛接觸Linux的人使用CentOS發行版;
- 本文儘量寫的淺顯易懂,但要求讀者掌握Linux基礎知識;
- 本文所有操作均在CentOS 7下完成,其他發行版或多或少與CentOS 7不同,因而僅供參考;
- 本文所安裝的軟件純粹出於個人習慣及喜好,讀者應自己判斷,按需安裝;
安裝CentOS
CentOS 7的安裝與其他Linux發行版的安裝差不多,個別地方稍有不同。
準備工作
-
準備材料
- U盤:容量700M以上,用於製作U盤啓動盤,因爲在製作啓動盤時會格式化U盤,所以U盤內不要包含重要資料
- CentOS 7.1 LiveCD ISO鏡像文件
- Universal USB installer:Windows下的U盤啓動盤製作工具
- 一個已安裝Windows的電腦:用於製作U盤啓動盤
- 運行Universal USB installer並製作U盤啓動盤
- 將U盤插入計算機,重啓,進入BIOS選擇從U盤啓動,即可進入CentOS的LiveCD
- 進入LiveCD後,點擊桌面的“Install to Hard Drive”即可安裝
注:Linux下可以通過 dd 命令製作啓動盤,但由於對原理不夠了解,偶爾會導致製作失敗,或製作成功後U盤容量有問題,還是用Windows下的Universal USB installer比較靠譜。
安裝過程
-
選擇安裝過程中使用的語言,這裏應使用英語,不要使用漢語。若安裝界面使用漢語,最終安裝的系統中會出現兩個比較麻煩的問題:
- 家目錄下的系統文件夾,比如Downloads、Desktop等會以中文表示,這使得在命令行 cd 變得很麻煩;
- 終端中某些字符用英文字體,某些字符用中文字體,效果非常差,需要自己修改終端字體方可;
- 選擇區域和城市:Asia和Shanghai
- 鍵盤使用English(US)而不是English(UK)
- Hostname可以改也可以不改,我用 saturn.geolab
- 安裝的目的地,選擇要使用的硬盤,在“Other Storage Options”處選擇“I will configure partioning”,即手動分區
分區
CentOS 7的分區似乎比較特別,自認爲經驗很豐富的我在第一次安裝CentOS7時還是在分區上耽誤了很多時間。後來找到比較合適的分區方法,如下:
- 點擊“Click here to create them automatically”,即讓安裝程序幫忙分區
- 默認的分區方案是使用LVM,其好處在於“當機器有多塊硬盤時,在使用的時候看上去只有一塊”
- 默認的文件系統爲XFS而不是以前常用的EXT4;
-
自動分區完成後,再根據自己的需求,手動修改分區細節
- /boot :CentOS自動分配,一定不要亂改;
- / :根目錄,合理使用並及時清理的話15G就夠了,不過建議30G以上;
- swap :與物理內存大小一致即可
- /opt :個人習慣是將第三方軟件都安裝在 /opt 下,所以分了70G
- /home :餘下的全部空間
- 點擊“Begin to Install”開始安裝
真正的安裝
- 設置root密碼
- 創建一般用戶
- 等待安裝完成
- 安裝完成,重啓
- 重啓後,同意License即可
對系統的若干修改
若干原則
爲了搭建一個穩定的系統,儘量避免因爲各種瞎折騰而導致的系統問題,特訂立了一些軟件安裝的原則。具體參見《CentOS 7下的軟件安裝方法與策略》。
給一般賬號root權限
默認情況下,一般賬號是沒有root權限的。爲什麼不直接用root賬號,而是要給一般賬號root權限呢?
- 日常工作中使用root賬號,是非常糟糕且危險的習慣!無論是服務器還是個人電腦都是如此。
- 安裝軟件時需要root權限,只能 su 切換到root賬戶再安裝。對於習慣使用 sudo 的人來說,還是有些麻煩。
假設賬戶名爲seisman,要授予他root權限,則要修改配置文件 /etc/sudoers
$ su # echo 'seisman ALL=(ALL) ALL' >> /etc/sudoers # 向配置文件中加入語句 # tail -1 /etc/sudoers # 檢查一下是否正確 seisman ALL=(ALL) ALL
其中seisman爲當前用戶名。
添加第三方源
CentOS由於很追求穩定性,所以官方源中自帶的軟件不多,因而需要一些第三方源,比如EPEL、ATrpms、ELRepo、Nux Dextop、RepoForge等。根據上面提到的軟件安裝原則,爲了儘可能保證系統的穩定性,此處大型第三方源只添加EPEL源、Nux Dextop和ELRepo源。
EPEL
EPEL即Extra Packages for Enterprise Linux,爲CentOS提供了額外的10000多個軟件包,而且在不替換系統組件方面下了很多功夫,因而可以放心使用。
|
sudo yum install epel-release
|
執行完該命令後,在 /etc/yum.repos.d 目錄下會多一個 epel.repo 文件。
Nux Dextop
Nux Dextop中包含了一些與多媒體相關的軟件包,作者儘量保證不覆蓋base源。官方說明中說該源與EPEL兼容,實際上個別軟件包存在衝突,但基本不會造成影響:
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
完成該命令後,在 /etc/yum.repos.d 目錄下會多一個 nux-dextop.repo 文件。
ELRepo
ELRepo包含了一些硬件相關的驅動程序,比如顯卡、聲卡驅動:
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
完成該命令後,在 /etc/yum.repos.d 目錄下會多一個 elrepo.repo 文件。
安裝yum-axelget
yum-axelget是EPEL提供的一個yum插件。使用該插件後用yum安裝軟件時可以並行下載,大大提高了軟件的下載速度,減少了下載的等待時間:
sudo yum install yum-axelget
安裝該插件的同時會安裝另一個軟件axel。axel是一個並行下載工具,在下載http、ftp等簡單協議的文件時非常好用。
第一次全面更新
在進一步操作之前,先把已經安裝的軟件包都升級到最新版:
sudo yum update
要更新的軟件包有些多,可能需要一段時間。不過有了yum-axelget插件,速度已經快了很多啦。
重啓
此處建議重啓。
刪除多餘的kernel
在前面的 yum update 執行之後,可能會將kernel也一起更新,則在啓動CentOS時啓動項中會有很多項。
確認當前使用的kernel版本號:
$ uname -r 3.10.0-123.9.3.el7.x86_64
查找當前系統安裝的所有kernel:
$ rpm -qa | grep kernel | sort kernel-3.10.0-123.8.1.el7.x86_64 kernel-3.10.0-123.9.2.el7.x86_64 kernel-3.10.0-123.9.3.el7.x86_64 kernel-devel-3.10.0-123.8.1.el7.x86_64 kernel-devel-3.10.0-123.9.2.el7.x86_64 kernel-devel-3.10.0-123.9.3.el7.x86_64 kernel-headers-3.10.0-123.9.3.el7.x86_64 kernel-tools-3.10.0-123.9.3.el7.x86_64 kernel-tools-libs-3.10.0-123.9.3.el7.x86_64
可以看出有三個版本的kernel,123.8.1、123.9.2和123.9.3。除了最新的kernel外,建議多保留一箇舊kernel,以免新kernel出現問題時可以通過舊kernel進入系統。因而此處刪除123.8.1版本的kernel:
sudo yum remove kernel-3.10.0-123.8.1.el7.x86_64 sudo yum remove kernel-devel-3.10.0-123.8.1.el7.x86_64
基礎開發環境
GCC系列
sudo yum install gcc # C編譯器 sudo yum install gcc-c++ # C++編譯器 sudo yum install gcc-gfortran # Fortran編譯器 sudo yum install compat-gcc-44 # 兼容gcc 4.4 sudo yum install compat-gcc-44-c++ # 兼容gcc-c++ 4.4 sudo yum install compat-gcc-44-gfortran # 兼容gcc-fortran 4.4 sudo yum install compat-libf2c-34 # g77 3.4.x兼容庫
軟件開發輔助工具
sudo yum install make sudo yum install gdb # 代碼調試器 sudo yum install cmake # Cmake sudo yum install git # 版本控制 sudo yum install tig # git的文本模式接口 sudo yum install git-svn # git的svn插件
驅動程序
顯卡驅動
Linux默認只使用開源的顯卡驅動,就目前的情況來看,開源驅動的效果還是不錯的,但跟官方的閉源驅動相比還是有一定差距。最明顯的區別是,在使用SAC的ppk功能放大波形時,使用開源驅動會出現延遲,而使用官方閉源則整個過程非常順暢。
關於顯卡驅動的安裝,請參考Linux下安裝nvidia顯卡驅動 一文中的“從ELRepo源中安裝驅動”部分。
注意:目前的顯卡驅動似乎有問題,安裝後終端有時會出現屏幕閃爍、一屏文字上下重複跳動的情況,稍微有些影響用vim寫代碼。是否要安裝顯卡驅動自己決定。
進階開發環境
Clang系列
Clang可以認爲是GCC的替代品,可以用於編譯C、C++、Objective-C和Objective-C++。其提供了更友好的報錯信息,在有些方面比GCC更友好,同時其提供了一個代碼靜態分析器,可以用於分析代碼中可能出現的bug和內存溢出問題。
sudo yum install clang # clang編譯器 sudo yum install clang-analyzer # clang靜態分析器
Intel系列
Intel的大部分軟件都是非開源且收費的,但同時部分軟件也提供了Linux下的非商業免費版。比如icc、mkl數學庫以及代碼性能分析工具等。
Intel軟件的申請以及安裝參考《Intel非商業免費開發工具》。
還有一點需要注意的是,Intel也提供了並行相關的幾個命令,比如mpicc、mpirun。所以openmpi、mpich和intel三者,在並行時只能用其中一個。
並行計算
並行可以用openmpi,也可以用mpich,二者應該是並列的。但是由於二者提供了幾乎一樣的命令,所以二者可以同時安裝,但是不可以同時處於使用狀態。
openmpi
安裝openmpi:
sudo yum install openmpi openmpi-devel
安裝後,二進制文件位於 /usr/lib64/openmpi/bin 下,動態庫文件位於 /usr/lib64/openmpi/lib 下,因而實際使用的話還需要額外的配置,在 .bashrc 中加入如下語句:
export PATH=/usr/lib64/openmpi/bin/:${PATH} module load mpi/openmpi-x86_64
PS:要使用 module 命令需要先安裝 environment-modules 包。
mpich
安裝mpich:
sudo yum install mpich mpich-devel
安裝後,二進制文件位於 /usr/lib64/mpich/bin 下,動態庫文件位於 /usr/lib64/mpich/lib 下,因而實際使用的話還需要額外的配置,在 .bashrc 中加入如下語句:
export PATH=/usr/lib64/mpich/bin/:${PATH} module load mpi/mpich-x86_64
腳本語言環境
Perl
CentOS 7.0自帶了Perl 5.16.3(2013年03月11日發佈),目前的最新版本爲5.20.1(2014年09月14日發佈)。
系統自帶Perl
系統自帶Perl,就目前來看,版本不算老,基本夠用。官方源和EPEL源中提供了1000多個模塊,可以直接用yum安裝:
sudo yum install perl-Parallel-ForkManager # 並行模塊
若源中沒有已打包好的模塊,也可以使用perl自帶的cpan來安裝模塊。
優先級:yum > cpan。
plenv管理新版本
若需要使用最新版本的perl,可以使用plenv安裝新版本的perl,並使用plenv提供的cpanm命令安裝模塊:
cpanm install Parallel::ForkManager # 並行模塊
Python
CentOS 7.0自帶Python 2.7.5,目前Python 2的最新版本爲2.7.8,Python 3的最新版本爲3.4.2。
系統自帶Python
系統自帶的Python 2.7.5,基本已經夠用,Python 2常用的模塊在官方源或EPEL源中也有有編譯好的包,因而直接通過yum安裝即可:
sudo yum install python-matplotlib # 2D繪圖庫 sudo yum install PyQt4 # Qt4的Python綁定 sudo yum install numpy # 數組操作庫 sudo yum install scipy # 科學計算庫 sudo yum install python-requests # 網頁請求 sudo yum install python-docopt # 命令行參數分析器 sudo yum install gdal-python # gdal的Python綁定
pyenv管理Python3
Python2與Python3之間是不完全兼容的,而我以Python3爲主,所以需要安裝一個Python3。
首先,安裝pyenv來管理多個Python版本,然後利用pyenv安裝anaconda3(即Python 3.4)。anaconda自帶了衆多科學計算所需的包,免去了安裝的麻煩,對於其他包,則可以利用Python自帶的pip安裝:
pip install requests pip install docopt
日常軟件
Office套件
LibreOffice
大多數Linux發行版都自帶LibreOffice:
sudo yum install libreoffice
LibreOffice與Microsoft Office的兼容性不太好,操作界面與MS Office也有較大差異,讓人不太習慣。
WPS Office
若在Linux下對於文檔處理有更高一些的要求,可以嘗試目前還處於測試版的WPS Office for Linux。WPS Office的兼容性以及界面都比LibreOffice要好很多,值得期待,當然還是不能做到完全兼容MS Office。
安裝過程參考CentOS下安裝WPS Office一文。
PS/PDF閱讀器
系統自帶的evince閱讀器,可以打開PS和PDF文件,基本足夠日常的使用了。
ghostscript
sudo yum install ghostscript
master-pdf-editor
官方網站: https://code-industry.net/free-pdf-editor/
sudo yum localinstall http://get.code-industry.net/public/master-pdf-editor3-3.2.62-1.x86_64.rpm
Mendeley
Mendeley是一個跨平臺的文獻管理軟件,其內部自帶了一個可以添加註釋的PDF閱讀器。
下載Generic Linux (64 bits) :http://www.mendeley.com/download-mendeley-desktop
安裝:
tar -xvf mendeleydesktop-1.12.3-linux-x86_64.tar.bz2 # 解壓 sudo mv mendeleydesktop /opt # 複製到/opt下 cd /opt/mendeleydesktop/bin # cd進去 ./install-mendeley-link-handler.sh /opt/mendeleydesktop/bin/mendeleydesktop sudo yum install qtwebkit # 安裝依賴包
註銷重新登陸,在Application->Education下即可看到mendeley的相關項目。不過是沒有軟件的圖標的,強迫症不能忍,用下面的命令解決:
cp /opt/mendeleydesktop/share/icons/hicolor/128x128/apps/mendeleydesktop.png ~/.local/share/icons/
Google Chrome瀏覽器
默認的瀏覽器是Firefox,還是更喜歡Chrome瀏覽器。
Google官方源在國內可能無法正常訪問,故而添加Fedora中文社區提供的鏡像源:
sudo wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo -P /etc/yum.repos.d/
安裝:
sudo yum install google-chrome-stable
Opera瀏覽器
也可以選擇Opera瀏覽器。
下載地址:http://www.opera.com/download/guide/?os=linux
選擇CentOS RPM package進行下載。下載完成後,執行:
sudo yum localinstall opera-12.16-1860.x86_64.rpm
想要卸載的話,就執行:
sudo yum remove opera
Flash插件
Flash插件主要是看在線視頻的時候要用。Google瀏覽器自帶了Flash插件,所以這裏安裝的flash插件主要是爲了firefox。
sudo rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux sudo yum install flash-plugin
解壓軟件
解壓7z或zip格式需要p7zip,由EPEL提供:
sudo yum install p7zip
解壓rar格式需要unrar,該軟件由Nux Dextop提供:
sudo yum install unrar
效率類軟件
這一類工具能夠在不同方面提高科研的效率,也提高了使用者的體驗。
終端模擬器
Gnome自帶的終端模擬器是gnome-terminal。經常會需要開十幾個終端,切換和管理起來比較麻煩。
terminator
terminator有很多功能,我只用到了終端分割的功能。 Ctrl+Shift+O 對終端水平分隔, Ctrl+Shift+E 對終端垂直分隔, Alt+上下左右 可以在各子終端中切換。terminator由Nux Dextop提供:
sudo yum install terminator
guake
有些時候需要臨時執行一兩個命令,但是又不想額外啓動一個終端的情況下,guake是個不錯的選擇。
sudo yum install guake
安裝完成後,在Application->System Tools裏找到guake Terminal即可啓動。按下F12即可呼出guake,再次按下F12即可隱藏。也可在終端執行 guake-prefs 對gauke進行配置。
zsh與oh my zsh
Linux下有很多shell,比如最常見的bash,除此之外還有csh、ksh。zsh也是一個shell。
zsh的特點在於:
- 語法基本完全兼容於bash,一般用戶完全體會不到其區別
- zsh提供命令補全特性,比bash的補全要更好用
- 可配置性強
完全不經配置的zsh已經很好用了,一般用戶也沒必要花時間研究配置。oh my zsh是一羣人一起維護的一套zsh配置文件。直接用這個配置文件,稍稍瞭解一點會有更好的體驗。
安裝zsh:
sudo yum install zsh
安裝oh my zsh:
curl -L http://install.ohmyz.sh | sh
上面的命令,做了如下幾件事情:
- 下載 oh my zsh 到 ~/.oh-my-zsh
- 備份已有的zsh配置文件 ~/.zshrc ,並複製新的 .zshrc 文件
- 將當前用戶的默認shell由bash改成zsh
第三步中,會報錯如下: chsh: "/usr/bin/zsh" is not listed in /etc/shells. ,需要手動修改默認shell:
chsh -s /bin/zsh
chsh命令修改的是login shell,因而需要退出當前用戶並重新登陸,以後用戶的默認shell就從bash變成了zsh,所有的配置都不用寫到 .bashrc 而要寫到 .zshrc 中。
在 .zshrc 中可以選擇喜歡的主題,以及適當數量的插件。下面列出我在用的插件:
-
該插件爲git的衆多常用命令提供了更簡單的別名,比如 git status 的別名是 gst ,大大減少了擊鍵數。但該插件中 git mergetool --no-prompt 的別名是 gmt ,與GMT軟件衝突,需要將該插件的目錄git複製到custom/plugins下,然後刪除其中的gmt別名;
-
命令補全插件: pip, pyenv
-
sudo:按兩下 ESC 即可在當前命令前加上 sudo
-
yum:爲常見的yum命令提供別名
autojump
autojump是一個非常智能的目錄快速切換的工具。簡單演示如下:
$ pwd /home/seisman $ cd Desktop $ cd /opt $ cd /usr/local # 用j命令迅速從/usr/local跳轉到與des匹配的目錄,這裏只有Desktop可以匹配 $ j des $ pwd /home/seisman/Desktop
用法差不多就這樣,具體看項目主頁。
安裝:
sudo yum install autojump sudo yum install autojump-zsh
中文輸入法
剛安裝的系統可能是沒有中文輸入法的,源中帶的中文輸入法應該是ibus,使用效果一般。fcitx是更好的選擇,基於fcitx框架的搜狗輸入法或許是更好的選擇。
HostTool
科學上網幾乎已經成爲每個搞科研的人的必備技能。
科學上網的方式有很多,這裏只說HostTool:https://hosts.huhamhire.com/
HostTool科學上網本質上就是用最新的host文件替代了系統自帶的host文件。
下載解壓後,進入目錄,直接 sudo python2 hoststool.py 即可運行,具體的用法自己研究一下。
等寬字體
編程要用等寬字體,這點是常識了。一款適合編程的等寬字體,至少要滿足如下幾個要求:
- 易於區分“1”、“i”和“l”
- 易於區分“0”、“o”和“O”
- 易於區分中文下的左引號和右引號
- 美觀
目前選擇的Source Code Pro。將解壓後的字體文件放在 ~/.fonts 目錄下,並修改終端、gedit以及其他編輯器、IDE等的默認字體。
虛擬機
有時候可能需要在Windows下做一些操作,如果機器性能足夠好的話,可以安裝虛擬機。
VirtualBox虛擬機
VirtuabBox的安裝:
wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo sudo mv virtualbox.repo /etc/yum.repos.d/ sudo yum install VirtualBox-5.0
需要注意兩點:
- 若機器性能不夠,虛擬機的使用體驗會非常差,所以不建議在老機器上使用;
- 更新kernel之後需要執行 sudo /etc/init.d/vboxdrv setup ;
- 在VirtualBox安裝虛擬系統後,記得使用“設備”->“安裝增強功能”,使用效果會更好;
同步網盤
網盤根據功能大概可以分爲兩類:同步網盤和備份網盤。既然是同步網盤,Linux下的客戶端必不可少。就目前已知的情況來看,CentOS7下能使用的同步網盤只有三個:Dropbox、MEGA和堅果雲。
我主要用同步網盤將Linux機器上的PDF文獻同步到iPad上。
Dropbox
又是一個被牆的工具,熟練掌握科學上網技巧的人可以使用,一般人還是不要用了。
wget https://www.dropbox.com/download?dl=packages/fedora/nautilus-dropbox-1.6.2-1.fedora.x86_64.rpm sudo rpm -i nautilus-dropbox-1.6.2-1.fedora.x86_64.rpm
MEGA
MEGA: https://mega.co.nz/
免費容量50G,作爲同步盤來說基本是夠用了。
# 下載主程序 wget https://mega.nz/linux/MEGAsync/CentOS_7/x86_64/megasync-CentOS_7.x86_64.rpm # 下載文件管理器擴展(可選) wget https://mega.nz/linux/MEGAsync/CentOS_7/x86_64/nautilus-megasync-CentOS_7.x86_64.rpm sudo yum localinstall megasync-CentOS_7.x86_64.rpm sudo yum localinstall nautilus-megasync-CentOS_7.x86_64.rpm
堅果雲
國內的全平臺同步網盤,不限空間,但限制每月上傳流量1G,下載流量3G。
# 堅果雲依賴於notify-python sudo yum install notify-python # 下載 wget https://jianguoyun.com/static/exe/installer/fedora/nautilus_nutstore_amd64.rpm sudo rpm -i nautilus_nutstore_amd64.rpm
工具軟件
視頻下載工具
you-get和youtube-dl <https://github.com/rg3/youtube-dl>是兩個用於從視頻網站上下載視頻文件的工具。其中,後者支持的網站更多,但前者對國內的視頻網站支持更好。
pip install you-get pip install youtube-dl # EPEL中提供了youtube-dl包,因而也可以使用yum安裝。一般來說,pip安裝的版本更新一些
PDF處理工具
cpdf是一個跨平臺的PDF處理工具,可以完成常見的PDF合併、切割、加密解密、書籤、水印等功能。
下載已編譯好的二進制包,解壓,並將與自己的平臺對應的二進制文件複製到 ${HOME}/bin 目錄下即可使用。
BT軟件
transmission是Linux下常用的Torrent下載軟件:
sudo yum install transmission
在“Application”->“Internet”->中可以啓動transmission。
uGet
uGet是Linux下的一個下載工具,支持HTTP、HTTPS、FTP、Torrent等,支持多連接,並可以監視剪貼板:
sudo yum --enablerepo=epel-testing install uget aria2
截圖軟件shutter
GNOME自帶了截圖工具。 PrtScn 爲截取整個屏幕; Alt+PrtScn 爲截取當前窗口; Shift+PrtScn 爲自定義截屏區域。
shutter是一個功能更強大的截圖工具,支持不同的截圖方式、圖片格式,還支持圖片的簡單編輯與註釋:
sudo yum install shutter
其他工具
sudo yum install nfs-utils # 掛載NFS文件系統所必須 sudo yum install xclip # 終端的文本複製工具 sudo yum install ImageMagick # 其中的import和convert命令很有用 sudo yum install dos2unix unix2dos # Windows和Linux換行符互相轉換 sudo yum install meld # 圖形界面下的文件差異比較工具