1. 程式人生 > >CentOS 7下的軟體安裝方法總結

CentOS 7下的軟體安裝方法總結

使用Linux尤其是CentOS會遇到一些坑,或是一些有潔癖的人不能忍的事情:

  • 官方源中的軟體包版本太老,在功能上無法滿足需求;

  • 多個源的軟體包存在版本衝突;

  • 手動編譯軟體,預設會將不同檔案放置在/usr/local下不同的子目錄下,使得軟體的更新和刪除變得麻煩。

  • 等等…

在經歷了幾次重灌CentOS之後,特總結出如下幾條軟體安裝的方法與原則,以儘可能保證當前系統的穩定、整潔,儘可能降低系統潔癖引起的重灌衝動。

以下所說,僅限於CentOS7,對其他發行版,或許有借鑑意義。
1.使用源安裝
1.1官方源

CentOS自帶的四個官方源中,預設開啟的有base、updates、extras,這三個源中包含了約9000個軟體包,是最穩定、也是最值得信賴的源。

因而若一個軟體包在官方源內,則應通過官方源安裝:

sudo yum install PackageName

1.2第三方源

官方源雖然包含了很多軟體包,但無法滿足日常需求。幸好有第三方源,可以作為官方源的補充。

在使用第三方源的過程中,最怕遇到這兩個問題:

  • 第三方源和官方源中有相同的包,導致官方源的包被第三方源替代;
  • 多個第三方源中存在同一個軟體包,且版本不一致,存在衝突;

這兩個問題經常是致命的,出現各種預料不到的後果,因而選擇第三方源要遵循如下原則:

  • 只選擇可靠的第三方源,要確保第三方源不會替換官方源中的包;
  • 使用盡量少的第三方源,以保證第三方源之間不會衝突;

就CentOS而言,根據以上的原則,使用如下第三方源:

  • 大型第三方源,已確認不會替換官方源的包,且相互之間無衝突
    EPEL:包含6500多個軟體,科研必備
    ELRepo:包含幾十個各種硬體的驅動程式
  • 有些小型第三方源,僅包含了幾個軟體,確認與官方源和EPEL源不會衝突,也可以新增:
    Google Chrome:包含了Google Chrome,不會與官方源和EPEL源衝突;
    Adobe:僅包含flash外掛,已確認不會衝突;
    dropbox:僅包含dropbox一個軟體,已確認不會衝突;

因而,若一個軟體包位於EPEL、ELRepo中,或一些小型的第三方源中,則新增該第三方源,並用yum命令安裝:

sudo yum install PackageName
//原文基礎上的補充。例如:下載並安裝EPEL
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  //wget是linux最常用的下載命令, 一般的使用方法是: wget + 空格 + 要下載檔案的url路徑
[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm
[root@localhost ~]# yum repolist      ##檢查是否已新增至源列表

原文基礎下補充:
RPM Package Manager(原Red Hat Package Manager,現在是一個遞迴縮寫)
註解:一種用於網際網路下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM副檔名的檔案

2.使用官方rpm包安裝

大部分非開源的軟體,在CentOS官方源或EPEL中是沒有的。有些軟體的官方網站會提供官方rpm包。此時可以從官方網站下載與當前系統對應的rpm包,直接用如下命令安裝:

sudo rpm -i PackageName.rpm  //sudo,允許普通使用者使用root的權利
//或者
rpm -ivh PackageName.rpm //rpm -ivh rpm檔案【安裝】 
//rpm -Uvh rpm檔案【更新】
//2)刪除一個rpm 包:  rpm -e 軟體名

比如,WPS for Linux就是其中一個。在安裝的過程中rpm命令會自動檢查依賴關係,若該軟體所依賴的包在官方源和EPEL源中可以找到,則自動安裝。

直接安裝rpm包的做法相當省事,但該軟體不能由yum更新,稍稍麻煩一點。有些軟體,比如前面提到的Google、Dropbox和Adobe其實也可以通過這種方法安裝,在安裝的同時會給系統新增源,對於這類軟體依然可以很方便的更新與刪除。
3.解壓即用

有些軟體,官方提供了壓縮包,解壓之後即可直接執行其中的二進位制檔案,比如很多Java寫的軟體。這類軟體沒有給原始碼,而是給了可以在當前平臺下直接執行的二進位制檔案。大多數非開源的商業軟體都採取這種辦法。

比如sublime_text、pycharm、mendeley、TauP、sac等,直接解壓,然後將解壓後的資料夾複製到/opt目錄下,然後將該軟體的bin目錄加入到PATH中即可。
比如Mathematics、Matlab、intel studio,軟體包中提供安裝指令碼,執行該指令碼即可安裝;

Linux下的習慣是,商業軟體或第三方軟體都安裝到/opt目錄下,這也是大多數商業軟體包的預設安裝路徑,儘量遵循該習慣。
4.第三方rpm包

有些軟體,CentOS源和EPEL源中找不到,官方又沒有提供rpm包,但是其他第三方源提供了rpm包。分情況討論:

  • 若該第三方源只包含了很少量的包,且確定這些包與官方源以及其他已使用的第三方源不衝突,則可以新增該第三方源。

  • 若該第三方源包含了很多軟體,很可能與官方源或EPEL源有衝突,則不新增該源

  • 若該軟體包沒有複雜的依賴關係,則直接安裝該源中的rpm包;

  • 若該軟體包依賴於該第三方源中的其他包,則放棄,尋找其他方法;

5.第三方包管理器

不同的發行版使用不同的軟體包管理器,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是從原始碼編譯軟體的,所以相對來說速度較慢。
6.編譯原始碼

大部分軟體用前面的幾種方法應該都能安裝上了。如果沒安裝上,那就得問問自己,真的需要安裝這個軟體麼。如果不是非常必要的話就不要安裝啦。如果是必須的軟體,那就必須要手動編譯了。

常見的原始碼編譯,一般也就是如下幾步。當然,具體情況具體對待:

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。但是一般來說,需要編譯原始碼的軟體很少,所以不會造成太大的麻煩。
7.編譯程式碼

好吧,其實我不知道該怎麼起標題了。。

前一節“編譯原始碼”主要針對的是一些大型軟體包,這一節“編譯程式碼”指的是對一些專業性很強的小程式碼包的處理方式。比如有些軟體包編譯之後實際需要的只是一個二進位制檔案,這個時候就沒有必要安裝到/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裡放,這裡只應放一些常用的命令或很通用的工具。
8.自成系統的軟體

有一類軟體,其擁有眾多模組或包,為了管理這眾多的模組,就需要擁有一個自己的模組/包管理器。這其中以TeX、Perl和Python為代表。對於這一類軟體,其眾多的模組是最大的優勢,也是最值得利用的資源,因而我通常會選擇手動安裝它們,原因如下:

  • 系統的源中不可能包含該軟體的所有模組;
  • 系統的源中該軟體的模組的更新要遠遠滯後於最新版本;

當然,即便是使用系統自帶的版本,也依然可以用該軟體自帶的包管理器來安裝模組。但將導致:

  • 部分模組用系統的yum管理,部分模組用軟體自帶的包管理器管理;
  • yum安裝的模組一般版本較老,軟體的包管理器要安裝的大多是最新版本;

這一方面會導致模組管理的混亂,另一方面用軟體自帶的包管理其安裝模組時,可能會依賴於其他模組的最新版本,若該模組是通過系統yum安裝的較舊的版本,則可能導致模組的安裝失敗。

因而,對於這類軟體,一般單獨安裝,並用各自的包管理器管理模組:

  • TeXLive:通過TeXLive iso映象檔案安裝,使用其自帶的tlmgr管理包

  • Perl:通過plenv安裝最新版本的Perl,使用plenv自帶的cpanm安裝模組

  • Python:通過pyenv安裝最新版本的Python,使用Python自帶的pip安裝模組

9.例外

有規則總有例外。
第三方源

mosquito-myrepo是一個私人維護的源,其中包含了中文輸入法、QQ、飛信、為知筆記、有道詞典、百度雲以及若干音訊、視訊播放器。我對這個源的態度是又愛又恨,其提供了很多中國人需要的軟體,但因為其依賴於除EPEL外的其他第三方軟體源,進而可能導致包衝突。所以對該源的使用,要保持謹慎。
總結

簡單總結一下:

  • 為系統新增EPEL源、ELRepo源和個別其他小型第三方源

  • 能夠從源中安裝的就從源中安裝

  • 不能從源中安裝的儘量找rpm包安裝

  • 找不到rpm包的就試試linuxbrew

  • 能不手動編譯的就不要手動編譯

自己的補充:
軟體安裝命令rpm和yum的區別:
yum
yum = Yellow dog Updater, Modified 主要功能是更方便的新增/刪除/更新RPM包. 它能自動解決包的倚賴性問題. 它能便於管理大量系統的更新問題

相關推薦

CentOS 7軟體安裝方法總結

使用Linux尤其是CentOS會遇到一些坑,或是一些有潔癖的人不能忍的事情: 官方源中的軟體包版本太老,在功能上無法滿足需求; 多個源的軟體包存在版本衝突; 手動編譯軟體,預設會將不同檔案放置在/usr/local下不同的子目錄下,使得軟體的更新和刪除

Linux CentOS 7 jdk安裝

$path 環境變量 創建 mkdir jdk1.8 jdk .tar.gz file 設置環境變量 1.在/usr/目錄下創建java目錄 [[email protected]/* */ ~]# mkdir /usr/java[[email prot

uWSGI+Nginx+Flask在CentOS 7安裝使用

一、建立虛擬環境 Python 3 內建了用於建立虛擬環境的 venv 模組。 mkdir一個喜歡的路徑python_project資料夾,然後建立並激活py3,處於py3字首下 建立虛擬環境py3:python3 -m venv py3

CentOS 7sublime_text_3安裝及解決不能輸入中文問題

一.安裝 下載並解壓到/opt下: ]$ wget https://download.sublimetext.com/sublime_text_3_build_3176_x64.tar.bz2 -P ~/Downloads/ ]$ sudo tar -xvf sublime_text_3

CentOS 7yum安裝Apache及不解析php問題的解決

首先,說一下問題發生的場景: 安裝完畢後,apache 不解析 php ,不解析的現象是瀏覽器直接顯示或下載了 php 檔案的原始碼 過程略帶說一下了,具體步驟自行搜尋,然後重點說下容易踩的幾個坑 1. yum 安裝 apache 後,必須安裝依賴包 httpd-devel ,否則是不存在檔案 apx

centos 7原始碼安裝mysql5.7--一步一步親測操作完成

安裝依賴包         #yum -y install libaio libaio-devel 更改服務區時區       &

02_Docker在CentOS 6和CentOS 7安裝

force str l命令 centos 7 -a emc default 修改 itl CentOS 7 環境下安裝docker 安裝Docker 檢查系統內核是否高於Linux3.10版本 uname -r 使用root權限操作,確保yum包是最新版本 sudo

CentOS 7 Nginx安裝以及配置

一、Nginx介紹 Nginx(發音同 engine x)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。由俄羅斯的程式設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎R

Centos 7編譯安裝Apache

相關 apache chmod src 開機自啟 啟用 prefix 目錄 col (1)下載apr、apr-util、httpd源碼包 百度雲下載地址:https://pan.baidu.com/s/1HyW_9XTLhhhf5j_IuNCQsQ 提取碼:pg4d (2

centOS 7yum安裝MySQL5.7

1、刪除centOS7預設安裝的mariadb資料庫   yum remove mariadb-libs.x86_64 2、下載Mysql源   https://dev.mysql.com/downloads/repo/yum/ wget ht

CentOS 7 yum 安裝MariaDB10.3詳解

前言 mariadb 和mysql就像親兄弟的關係,各種語法、驅動啥的,在mysql上能上的,在mariadb上基本都可以直接使用。更多的細節在此不多說。 1、刪除舊版本 centos7下預設安裝有mariadb資料庫,但是是舊版本,在安裝新版本前需要先把舊版本刪除,有些系統還預

CentOS 7 yum安裝時下載的rpm包存放路徑

centos下執行yum install xxx後。 系統會從yum源下載rpm,將rpm放置到快取目錄下: /var/cache/yum/ 說明: yum源的不同則下載後存在的路徑也有所

CentOS 7原始碼安裝MySQL 5.7

網上說linux安裝mysql服務分兩種安裝方法: ①原始碼安裝,優點是安裝包比較小,只有幾十M左右,缺點是安裝依賴的庫多,安裝編譯時間長,安裝步驟複雜容易出錯; ②使用官方編譯好的二進位制檔案安裝,優點是安裝速度快,安裝步驟簡單,缺點是安裝包很大,300M左右(5.7版

Centos 7yum安裝R

在linux下安裝軟體不如windows方便,在windows下我們一般針對可安裝的檔案(如R.exe)直接雙擊執行就可以了。而在linux下我們首先要學會使用安裝軟體的專門工具如centos下的rpm。這個工具可以幫助我們安裝我們想要的軟體,但是並不方便,主要

Centos】常用軟體安裝方法

Java8 先檢視是否有安裝java,或者自帶了jdk # 檢視是否安裝java java -version # 檢視是否自帶jdk rpm -qa | grep jdk # 如果自帶了j

Centos 7編譯安裝Linux-3.18.44-rt47核心

獲取原始碼以及補丁 從Linux核心官網上下載3.18.44版本的核心原始碼,並且從rt.wiki上下載相對應的補丁,用於支援核心實時性。 安裝編譯所依賴的庫 yum -y groupin

CentOS 7 常用軟體安裝彙總

說明:本文執行環境是騰訊雲主機(VPS),CentOS 7.3 64Bit以下是各種預設路徑彙總:Apache的主頁預設路徑: /var/www/html/Apache的配置檔案路徑:/etc/httpd/conf/httpd.confMySQL配置檔案:/etc/my.cn

CentOS 7常用軟體安裝彙總(更新)

建議:登陸root賬戶進行操作 2017-11-21 *安裝Nvidia獨立顯示卡驅動(重要:在雙顯示卡的筆記本上測試失敗,最後一次重啟系統後無法正常進入centOS) //匯入公鑰 rpm --import https://www.elrepo.org/RPM-GPG-

Ubuntu軟體安裝方法總結

1.sudo apt-get install 安裝資料來源中的軟體包 2.sudo dpkg -i 在軟體包(.deb檔案)所在目錄下安裝本地軟體包,無法解決依賴關係) 可通過命令 sudo apt-get -f install(或sudo apt-get -f dist

CentOS 7編譯安裝Nginx+PHP+MySQL環境

1、前言 本文適合於已經對Linux作業系統具有基本操作經驗,並且能夠在Linux或Windows上通過一鍵搭建工具或者yum命令列進行環境搭建的讀者,閱讀本文需具有一定的專業知識,本文不建議初學者閱讀。 本文所描述的是在標準的CentOS 7