1. 程式人生 > >CentOS7下的軟體安裝方法及策略詳解

CentOS7下的軟體安裝方法及策略詳解

使用了四年的 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 能不手動編譯的就不要手動編譯 。

原文:http://www.jb51.net/os/RedHat/529749.html

相關推薦

CentOS7軟體安裝方法策略

使用了四年的 Linux,前三年都是在瞎折騰,浪費了不少時間,也得到了不少經驗與教訓。 現在可能是真的老了,已經不願意折騰了,只希望配置好一個系統之後,就一直使用下去。為什麼要寫/讀這一篇 使用 Linux 尤其是 CentOS 會遇到一些坑,或是一些有潔癖的人不能忍的事情:官方源中的軟體包版本太老,在功能上

CentOS 7軟體安裝方法策略

編譯原始碼 大部分軟體用前面的幾種方法應該都能安裝上了。如果沒安裝上,那就得問問自己,真的需要安裝這個軟體麼。如果不是非常必要的話就不要安裝啦。如果是必須的軟體,那就必須要手動編譯了。 常見的原始碼編譯,一般也就是如下幾步。當然,具體情況具體對待: tar -xvf xxxx.tgz ./config

Linux Redis叢集安裝部署使用

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linu

CentOS系統docker的安裝配置使用

http://www.server110.com/docker/201411/11105.html 1 docker簡介    Docker 提供了一個可以執行你的應用程式的封套(envelope),或者說容器。它原本是 dotCloud 啟動的一個業餘專案,並在前些時候開

Linux Redis叢集安裝部署使用(線上和離線兩種安裝+相關錯誤解決方案)

一、應用場景介紹   本文主要是介紹Redis叢集在Linux環境下的安裝講解,其中主要包括在聯網的Linux環境和離線的Linux環境下是如何安裝的。因為大多數時候,公司的生產環境是在內網環境下,無外網,伺服器處於離線狀態(最近公司要上線專案,就是無外網環境的Linux,被離線安裝坑慘了,走了很多彎路,說多

Windows安裝Resin配置與釋出應用

    關於Resin的好處,網上介紹了一大堆,小編經不住誘惑,決定試用一下。目前Resin的最新版本為:4.0.40,可以從官網直接下載。     1. 將下載下來的Resin包解壓開,會看到一大堆的檔案,有一些關鍵的檔案,我們需要了解一下。 resin-4.0.4

Oracle筆記(二)——虛擬機器Centos7 x64位安裝Oracle 11g R2

win7 x64位+VMware12+centos7 x64位+oracle 11g R2安裝詳解(二) 一、準備安裝的軟體及需要的工具    1、Oracle11g R2 ,下載連結,選擇Lin

ubuntu軟體安裝方法

Linux系統中,軟體通常以原始碼或者預編譯包的形式提供。(1)軟體原始碼需要編譯為二進位制的機器程式碼才能夠使用,安裝比較耗時,不過您可以自行調節編譯選項,決定需要的功能或元件,或者針對硬體平臺作一些優化。(2)預編譯的軟體包,通常是由軟體的釋出者進行編譯,您只要將軟體拷

Linux軟體安裝方法彙總

Linux系統中,軟體通常以原始碼或者預編譯包的形式提供。軟體原始碼需要您親自編譯為二進位制的機器程式碼才能夠使用,安裝比較耗時,不過您可以自行調節編譯選項,決定您需要的功能或元件,或者針對您的硬體平臺作出優化。預編譯的軟體包,通常是由軟體的釋出者進行編譯,您只要將軟體拷貝

Intellij IDEA 安裝 lombok使用

junit equal 排查 code 數據 undefine img get 導致   在項目開發中會經常使用到bean,entity等類,絕大部分數據類中都需要get、set、toString、equals和hashCode方法,雖然eclipse和idea開發環境下都

Docker的安裝配置使用

yum ava 數據 進入容器 article symbol tracking 支付 資源 Docker的安裝配置及使用詳解 基本概念 Dock

Linux安裝vsftpd配置

技術 第一個 config vpd b2c 大端 工具 端口修改 系統 1 安裝vsftpd組件 安裝完後,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件。[root@bogon ~]# yum -y install vsftpd 2、FTP

Intellij IDEA 安裝lombok使用

name equal logging for 自動 pack filesize 環境 1.3 項目中經常使用bean,entity等類,絕大部分數據類類中都需要get、set、toString、equals和hashCode方法,雖然eclipse和idea開發環境下都有自

異地VCS雙機全同步方法步驟

  異地雙機容災常見命令 命令 含義 vxdctl -c mode 找到mater節點 vradmin -l printrvg 檢視節點是否是pr

轉載:Torch7在Ubuntu安裝與配置教程(torch入門使用)

原文;https://www.aliyun.com/jiaocheng/147256.html   摘要:Torch7的本系列教程的主要目的是介紹Torch的入門使用。今天首先分享一下Torch7的安裝。(在Ubuntu14.04安裝torch7)為什麼選擇TorchTo

快速安裝Nginx配置(未完待續)

導讀: Nginx (engine x) 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器,從2007年被德國人開發出來後可以說在市場的佔有率一路飆升,因為它支援高併發,而且還能阻止dos攻擊,它是當前較具影響力的一個http伺服器軟體,像百度等大廠都使用它,所以這是作為一

Intellij IDEA 安裝lombok使用(轉載)

最近專案中用到了 IDEA 的 Lombok 外掛,這裡做一個記錄。      Lombok 官方說明文件:http://plugins.jetbrains.com/plugin/6317-lombok-plugin 轉載原文地址:

java集合的方法使用

Collection集合共有15中方法,下面分別對15種方法進行詳解:   Collection coll=new ArayList();   //建立ArrayList集合物件 方法1. size() :  返回集合中元素的個數;    coll.size();

APK 安裝過程 原理

APK為AndroidPackage的縮寫 Android應用安裝有如下四種方式: 1.系統應用安裝――開機時完成,沒有安裝介面 2.網路下載應用安裝――通過market應用完成,沒有安裝介面 3.ADB工具安裝――沒有安裝介面。 4.第

一目瞭然 jquery中的ajax方法屬性

jquery中的ajax方法引數屬性內容:1.url: 要求為String型別的引數,(預設為當前頁地址)傳送請求的地址。2.type: 要求為String型別的引數,請求方式(post或get)預設為get。注意其他http請求方法,例如put和delete也可以使用,但僅