2010 年開始正式接觸 Linux,入門發行版是 Ubuntu 10.10,後來過渡到 Ubunu 11.04, 這其中也嘗試了許多其他主流的發行版。進入實驗室之後,開始用 CentOS 5,然後是 CentOS 6,現在進化到 CentOS 7。
使用了四年的 Linux,前三年都是在瞎折騰,浪費了不少時間,也得到了不少經驗與教訓。現在可能是真的老了,已經不願意折騰了,只希望配置好一個系統之後,就一直使用下去。
為什麼要寫/讀這篇
使用 Linux 尤其是 CentOS 會遇到一些坑,或是一些有潔癖的人不能忍受的事情:
官方來源中的軟體包版本太老,在功能上無法滿足需求; 多個來源的軟體包存在版本衝突; 手動編譯軟體,預設會將不同檔案放置在 /usr/local 下不同的子目錄下,使得軟體的更新和刪除變得麻煩。等等…
在經歷了幾次重裝 CentOS 之後,特總結出以下幾條軟體安裝的方法與原則,以盡可能保證當前系統的穩定、整潔,盡可能降低系統潔癖引起的重裝衝動。
以下所說,僅限於 CentOS7,對其他發行版,或許有借鏡意義。
官方來源
CentOS 自帶的四個官方來源中,預設開啟的有 base、updates、extras,這三個來源中包含了約 9000 個軟體包,是最穩定、也是最值得信賴的來源。
因而若一個軟體包在官方來源內,則應透過官方來源安裝:
sudo yum install PackageName
第三方來源
官方來源雖然包含了許多軟體包,但無法滿足日常需求。幸好有第三方源,可以作為官方來源的補充。
在使用第三方來源的過程中,最怕遇到這兩個問題:
第三方來源和官方來源中有相同的包,導致官方來源的包被第三方來源取代; 多個第三方來源中存在同一個軟體包,且版本不一致,存在衝突;
這兩個問題常常是致命的,出現各種預料不到的後果,因而選擇第三方來源要遵循以下原則:
只選擇可靠的第三方來源,確保第三方來源不會取代官方來源中的套件; 使用盡量少的第三方來源,以確保第三方來源之間不會衝突;
就 CentOS 而言,根據
大型第三方來源,已確認不會取代官方來源的包,且相互之間無衝突EPEL:包含6500 多個軟體,科研必備ELRepo:包含數十個各種硬體的驅動程式Nux Dextop:多媒體相關的軟體包(與EPEL 的個別軟體相衝突,可忽略)
有些小型第三方來源,只包含了幾個軟體,確認與官方來源和EPEL 來源不會衝突,也可以新增Google Chrome:包含了Google Chrome,不會與官方來源和EPEL 來源衝突; Adobe:僅包含flash 插件,已確認不會衝突;dropbox: 僅包含dropbox 一個軟體,已確認不會衝突;
因而,若一個軟體包位於 EPEL、ELRepo 中,或一些小型的第三方來源中,則加入該第三方來源,並以 yum 指令安裝:
sudo yum install PackageName
官方 rpm 套件
#大部分非開源的軟體,在 CentOS 官方來源或 EPEL 中是沒有的。有些軟體的官方網站會提供官方 rpm 套件。此時可從官方網站下載與目前系統對應的 rpm 包,直接用以下指令安裝:
sudo rpm -i PackageName.rpm
#例如,WPS for Linux 就是其中一個。在安裝的過程中 rpm 指令會自動檢查依賴關係,若軟體所依賴的套件在官方來源和 EPEL 來源中可以找到,則自動安裝。
直接安裝 rpm 套件的做法相當省事,但軟體不能由 yum 更新,稍稍麻煩一點。有些軟體,例如前面提到的 Google、Dropbox 和 Adobe 其實也可以透過這種方法安裝,在安裝的同時會為系統添加來源,對於這類軟體依然可以很方便的更新與刪除。
解壓縮即用
有些軟體,官方提供了壓縮包,解壓縮之後即可直接運行其中的二進位文件,例如許多 Java 寫的軟體。這類軟體沒有給原始碼,而是給了一個可以在目前平台下直接執行的二進位檔案。大多數非開源的商業軟體都採取這種辦法。
例如 sublime_text、pycharm、mendeley、TauP、sac 等,直接解壓縮,然後將解壓縮後的資料夾複製到 /opt 目錄下,然後將該軟體的 bin 目錄加入 PATH 即可。例如 Mathematics、Matlab、intel studio,軟體包中提供安裝腳本,執行此腳本即可安裝;
Linux 下的習慣是,商業軟體或第三方軟體都安裝到 /opt 目錄下,這也是大多數商業軟體套件的預設安裝路徑,盡量遵循該習慣。
第三方 rpm 套件
有些軟體,CentOS 來源和 EPEL 來源找不到,官方又沒有提供 rpm 包,但是其他第三方來源提供了 rpm 套件。分情況討論:
若該第三方來源只包含了很少量的套件,且確定這些套件與官方來源以及其他已使用的第三方來源不衝突,則可以新增該第三方來源。若該第三方來源包含了許多軟體,很可能與官方來源或EPEL 來源有衝突,則不添加該來源若該軟體包沒有複雜的依賴關係,則直接安裝該來源中的rpm 套件; 若該軟體套件依賴該第三方來源中的其他包,則放棄,尋找其他方法;
第三方套件管理器
不同的發行版使用不同的軟體套件管理器,CentOS 使用 yum,Ubuntu 使用 apt-get。近年來又出現了一些與發行版無關的第三方套件管理器,例如 Linuxbrew、Gentoo Prefix、pkgsrc。
Linuxbrew
Linuxbrew 是由 OS X 平台下非常流行的 Homebrew 移植到 Linux 下的。 Linuxbrew 可以作為系統隨附的套件管理器的一個補充。其特色在於:
所有軟體都安裝在 ${HOME}/.linuxbrew 目錄下;軟體的版本相對很新;install、uninstall、info、list、update、upgrade 等功能若庫中沒有需要的軟體包,可以很簡單地自己創建formulae
試用了一下,一個比較坑的地方是,linuxbrew 會自己內部解決依賴問題。例如,我試著透過linuxbrew 安裝terminator,然後發現terminator 依賴Python,儘管系統已經安裝了python,linuxbrew 還是會安裝一份python,又由於python 依賴於更多的東西,導致又安裝了更多軟體包在home 下。而且,linuxbrew 是從原始碼編譯軟體的,所以相對來說速度較慢。
編譯原始碼
##大部分軟體用前面的幾種方法應該都可以安裝上了。如果沒安裝上,就得問問自己,真的需要安裝這個軟體麼。如果不是非常必要的話就不要安裝啦。如果是必須的軟體,那就必須手動編譯了。
常見的原始碼編譯,一般也就是如下幾步。當然,具體情況具體對待:
tar -xvf xxxx.tgz ./configure --prefix=/opt/xxxx make sudo make install
#一般來說,這類軟體的預設安裝目錄都是 /usr/local ,最終檔案會被分別放在 /usr/local 的 bin、lib、share、man 目錄下。
我個人非常不喜歡這種方式,因為作為一個透過原始碼編譯的軟體來說,意味著編譯者要完全負起管理該軟體的義務,這樣的放置方式會來更新或卸載軟體帶來很多麻煩。所以我總是會在 configure 的時候加上 prefix 手動指定安裝路徑。要卸載軟體就直接刪除 /opt 下對應的目錄,要更新的話,也可以先刪除,再重新編譯一遍。這樣做稍微麻煩的一點是, 需要手動將該軟體的 bin 目錄加入 PATH 中,還有可能需要修改 LD_LIBRARY_PATH。但是一般來說,需要編譯原始碼的軟體很少,所以不會造成太大的麻煩。
編譯程式碼
好吧,其實我不知道該怎麼取標題了。 。
前一節 「編譯原始碼」 主要針對的是一些大型軟體包,這一節 「編譯程式碼」 指的是對一些 專業性很強的小程式碼包的處理方式。例如有些軟體包編譯之後實際需要的只是一個二進位文件,這個時候就沒有必要安裝到 /opt 了,合適的方式是在自己的HOME 下建立bin 目錄,並將其路徑加入到 .bashrc 中,然後將編譯產生的二進位檔案複製到該目錄下即可:
mkdir ${HOME}/bin echo 'export PATH=${HOME}/bin:$PATH'>> ~/.bashrc
##例如我的 ${HOME}/bin 目錄下有下列文件:distaz :給出地球上兩點經緯度,計算震中距和方位角pssac :在GMT 中繪製SAC 文件rdseed :SEED 格式轉SAC 格式win2sac_32 、 catwin32 :Hi-net 網站提供的用於處理Hi-net資料的程式st :sublime_text 被安裝到 /opt 目錄下,在此建立一個軟鏈接,方便在命令列調用sublime text wlt.pl :校內用於登陸網絡通的腳本,在命令行修改網絡端口,好happy fk 、 fk.pl 、 syn 、 trav :Prof. Lupei Zhu 的用於計算合成地震圖的程序,原始碼有不少,實際需要用的也就這三個可執行文件和一個perl 腳本。 matlab :指向 matlab 的一個軟連結;
不要隨便什麼二進位檔案都往 bin 放,這裡只應放一些常用的指令或很通用的工具。
###自成系統的軟體### ###有一類軟體,其擁有眾多模組或套件,為了管理這眾多的模組,就需要擁有一個自己的模組 / 套件管理器。這其中以 TeX、Perl 和 Python 為代表。對於這一類軟體,其眾多的模組是最大的優勢,也是最值得利用的資源,因而我通常會選擇手動安裝它們,原因如下:
系統的來源中不可能包含該軟體的所有模組; 系統的來源中該軟體的模組的更新要遠遠落後於最新版本;
當然,即便是使用系統自備的版本,仍可使用該軟體自備的套件管理器來安裝模組。但將導致:
部分模組以系統的 yum 管理,部分模組以軟體自帶的套件管理器管理;yum 安裝的模組一般版本較老,軟體的套件管理器要安裝的大多是最新版本;
這一方面會導致模組管理的混亂,另一方面用軟體自帶的套件管理其安裝模組時,可能會依賴其他模組的最新版本,若該模組是透過系統yum 安裝的較舊的版本,則可能導致模組的安裝失敗。
因而,對於這類軟體,一般單獨安裝,並用各自的套件管理器管理模組:
TeXLive:透過TeXLive iso 鏡像檔案安裝,使用其自帶的tlmgr 管理套件Perl:透過plenv 安裝最新版本的Perl,使用plenv 自帶的cpanm 安裝模組Python:透過pyenv 安裝最新版本的Python,使用Python自帶的pip 安裝模組
例外
有規則總有例外。
第三方來源
mosquito-myrepo 是一個私人維護的來源,其中包含了中文輸入法、QQ、飛信、為知筆記、有道字典、百度雲以及若干音訊、視訊播放器。我對這個來源的態度是又愛又恨,其提供了許多中國人需要的軟體,但因為其依賴於 EPEL 以外的其他第三方軟體來源,進而可能導致套件衝突。所以對該源的使用,要保持謹慎。
總結
簡單總結一下:
為系統添加EPEL 來源、Nux Dextop、ELRepo 來源和個別其他小型第三方來源能夠從來源安裝的就從來源安裝不能從來源安裝的盡量找rpm 套件安裝找不到rpm 套件的就試試linuxbrew 能不手動編譯的就不要手動編譯
以上是CentOS7軟體的安裝步驟與策略全解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!