Linux系統(二)軟體的安裝與解除安裝

張龍豪發表於2017-02-22

序言 

上一篇我們瞭解啦Linux系統中,根目錄下的各個資料夾是做什麼用的啦,也學會檔案如何壓縮打包。那麼接下來我們就該用到這個系統啦。用這個系統,就是用這個系統的軟體,那麼我們對我們需要的軟體如何安裝,對不需要的軟體如何解除安裝,本篇就此做個詳解。

我們針對的系統為Centos,那麼Centos的主要軟體管理有3種,原始碼與tarballrpmsrpmyum

我會在講解每一種安裝方式的同時,寫一個我們開發常用到的軟體例項的安裝,原始碼安裝redisrpm安裝rabbitmqyum安裝nginx 

原始碼與tarball方式安裝軟體的幾個名詞

在安裝之前我們先說幾個名詞,對於開發人員來說應該是一目瞭然的。

開放原始碼:就是用程式語言寫的程式程式碼,人懂機器不懂,無法在系統中執行。

編譯程式:將程式程式碼轉譯成為機器看得懂的語言。

gcc:Liunx系統中最常見的語言為c語言,而c語言在linux上面最標準的編譯程式就是gcc。它是由GNU計劃所維護。對GNU有興趣的話大家可以網上搜下資料。

利用gcc編譯器進行程式的編譯流程示意圖:

 

可執行檔案:經過編譯程式變成二進位制程式後機器能夠看得懂所以稱為可執行的檔案。

函式庫:類似子程式的角色,可以被呼叫來執行的一段功能函式。又分為動態函式庫與靜態函式庫,動態函式庫以so結尾,通常被命名為libxxx.so,編譯時程式中只儲存起指向地址,不合併到主程式中,所以主程式不能獨立執行,需包含動態庫,且動態庫不可隨意修改路徑。靜態函式庫以.a結尾,通常被命名為libxxx.a,編譯時會將其功能合併至主程式中,執行是不需要靜態庫的支援。

程式執行時引用外部動態函式庫的示意圖如下:

Tarball:這個更容易理解啦,就是為啦方面在網路上下載,軟體開發者把原始碼打包壓縮後,放到網上釋出的軟體檔案。一般包含,原始碼檔案,檢測程式檔案(可能是configure或config等檔名),本軟體的簡易說明與安裝說明(install或readme)。

Tarball方式安裝Redis例項演練

基本步驟:

1、下載原始檔至/usr/local/src目錄下解壓縮。

2、取得步驟流程:進入新建的目錄下面,去查閱install與readme等相關檔案內容。

3、相關屬性軟體安裝:根據install與readme的內容檢視並安裝好一些相關的軟體

4、建立makefile:以自動檢測程式(configure或config)檢測操作環境,並建立makefile這個檔案

5、編譯:以make這個程式並使用該目錄下的makefile作為他的引數配置檔案,進行make(編譯)操作

安裝:以make這個程式,並以makefile這個引數配置檔案,依據install這個目標的指定來安裝到正確的路徑。 

常用命令:

./configure:這個步驟就是在建立 Makefile 這個檔案囉!通常程式開發者會寫一支 scripts 來檢查你的 Linux 系統、相關的軟體屬性等等,這個步驟相當的重要, 因為未來你的安裝資訊都是這一步驟內完成的!另外,這個步驟的相關資訊應該要參考一下該目錄下的 README 或 INSTALL 相關的檔案!

make clean:make 會讀取 Makefile 中關於 clean 的工作。這個步驟不一定會有,但是希望執行一下,因為他可以去除目標檔案!因為誰也不確定原始碼裡面到底有沒有包含上次編譯過的目標檔案 (*.o) 存在,所以當然還是清除一下比較妥當的。 至少等一下新編譯出來的可執行檔案我們可以確定是使用自己的機器所編譯完成的嘛!

make:make 會依據 Makefile 當中的預設工作進行編譯的行為!編譯的工作主要是進行 gcc 來將原始碼編譯成為可以被執行的 object files ,但是這些 object files 通常還需要一些函式庫之類的 link 後,才能產生一個完整的可執行檔案!使用 make 就是要將原始碼編譯成為可以被執行的可可執行檔案,而這個可可執行檔案會放置在目前所在的目錄之下, 尚未被安裝到預定安裝的目錄中;

make install:通常這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裡面關於 install 的專案,將上一個步驟所編譯完成的資料給他安裝到預定的目錄中,就完成安裝啦!

通過configure與make進行編譯的示意圖如下:

Redis例項安裝:

下載:

解壓:

編譯:

設定配置引數:

 

啟動:

驗證使用redis:

總結下:其實在安裝某些軟體時,可能沒有那麼繁瑣,就比如redis官方也有安裝示例,大家看看就會啦,安裝的方式有很多種,不必過於居於模式,但是一定要看官方的文件,不能胡亂一起瞎搞。

rpm與srpm基礎理解

RPM全名是“RedHat Package Manager”,是RedHat公司發展出來的以一種資料庫記錄的方式來將你所需要的軟體安裝到linux系統的一套管理機制。

那麼什麼叫一種資料庫記錄的方式呢?就是開發釋出者將軟體編譯過之後,打包成rpm基礎的包檔案,包中的軟體都有標頭檔案,標頭檔案中記錄這個軟體需要依賴的軟體,所需的伺服器配置,及自身版本的一些資訊,當我們安裝這個軟體時,rpm會根據這個標頭檔案與liunx主機中的安裝軟體的記錄資訊做匹配,然後反饋環境是否滿足,是否已存在,等等資訊。

那麼編譯過後的軟體,直接安裝有什麼優缺點呢?優點不用編譯可快速安裝,缺點:我們安裝的主機環境必須要跟開發釋出者編譯時的環境一致。

那麼什麼叫做依賴的軟體呢?很簡單就想你安裝MSSQL需要.NetFramwork一樣,安裝rabbitmq需要安裝erlang環境一樣。他們安裝時都有依賴的軟體或平臺。

那麼rpm與srpm的區別是什麼呢?一張圖搞定,如下:

rpm的包是什麼樣子呢?

首先先掛載cdrom到media下

檢視rpm什麼樣子 

看看有多少自帶的Rpm包

哇自帶3725個,基本夠你用的啦。如果處理一些依賴軟體或者自帶的不能滿足你的話,除啦軟體官網下載之外,哥哥推薦三個網站:

http://rpm.pbone.net/

http://rpmfind.net/

http://www.rpmseek.com/index.html

Rpm命名規則

操作硬體平臺

Rpm安裝語法:

[root@localhost ~]# rpm -ivh package_name

選項與引數:

-i :install 的意思

-v :察看更細部的安裝資訊畫面

-h :以安裝資訊列顯示安裝進度

一般情況下這一句命令,配上系統自帶的rpm包與上面三個網站中的包就足夠啦,如果不能解決你的問題的話,那要檢視軟體官方提供的安裝文件。

如果你對軟體足夠的熟悉那麼也可以採用下面的引數進行安裝。

Rpm的升級與更新

Rpm的查詢

Rpm驗證與數碼簽章

上面查詢是否被改動過中有......T. 這是什麼意思呢? 

  • S :(file Size differs) 檔案的容量大小是否被改變
  • M :(Mode differs) 檔案的型別或檔案的屬性 (rwx) 是否被改變?如是否可執行等引數已被改變
  • 5 :(MD5 sum differs) MD5 這一種指紋碼的內容已經不同
  • D :(Device major/minor number mis-match) 裝置的主/次程式碼已經改變
  • L :(readLink(2) path mis-match) Link 路徑已被改變
  • U :(User ownership differs) 檔案的所屬人已被改變
  • G :(Group ownership differs) 檔案的所屬群組已被改變
  • T :(mTime differs) 檔案的建立時間已被改變
  • P :(caPabilities differ) 功能已經被改變

如果一個檔案都被改動過,那麼如下顯示:SM5DLUGTP c filename

至於那個 c 代表的是“ Config file ”的意思,也就是檔案的型別,檔案型別有下面這幾類:

  • c :配置檔案 (config file)
  • d :檔案資料檔案 (documentation)
  • g :鬼檔案~通常是該檔案不被某個軟體所包含,較少發生!(ghost file)
  • l :授權檔案 (license file)
  • r :讀我檔案 (read me)

Rpm反安裝與重建資料庫

rpm --rebuilddb   ==重建資料庫

Rpm安裝rabbitmq實戰 

首先開啟rabbitmq.com官網,他的安裝頁有rpm包。安裝文件指示我們安裝rabbitmq需要2大步驟

1、先安裝erlang環境,2、安裝rabbitmq。

由此可知rabbitmq是依賴erlang環境的,下面我們先安裝下erlang。

[root@localhost src]# wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm
--2017-02-07 14:10:27--  https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm
正在解析主機 packages.erlang-solutions.com (packages.erlang-solutions.com)... 31.172.186.53
正在連線 packages.erlang-solutions.com (packages.erlang-solutions.com)|31.172.186.53|:443... 已連線。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:43611864 (42M) [application/x-redhat-package-manager]
正在儲存至: “esl-erlang_19.2~centos~7_amd64.rpm”

100%[==================================================================================================================================>] 43,611,864   446KB/s 用時 80s    

2017-02-07 14:12:04 (530 KB/s) - 已儲存 “esl-erlang_19.2~centos~7_amd64.rpm” [43611864/43611864])

[root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm 
錯誤:依賴檢測失敗:
    libodbc.so.2()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_baseu-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_baseu-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_baseu_xml-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_adv-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_adv-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_aui-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_aui-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_aui-2.8.so.0(WXU_2.8.5)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_core-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_core-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_core-2.8.so.0(WXU_2.8.10)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_gl-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_gl-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_html-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_html-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_stc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_stc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_xrc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
    libwx_gtk2u_xrc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要

由此可見安裝erlang環境也是需要環境支援的。那麼我們安裝erlang需要的安裝環境,那麼我們首先需要安裝非預設的第三方yum庫。

[root@localhost bin]# yum install epel-release

然後安裝erlang需要的安裝環境

[root@localhost bin]# yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl
已載入外掛:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirror.premi.st
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
軟體包 unixODBC-2.3.1-11.el7.x86_64 已安裝並且是最新版本
軟體包 unixODBC-devel-2.3.1-11.el7.x86_64 已安裝並且是最新版本
軟體包 wxBase-2.8.12-20.el7.x86_64 已安裝並且是最新版本
軟體包 wxGTK-2.8.12-20.el7.x86_64 已安裝並且是最新版本
軟體包 SDL-1.2.15-14.el7.x86_64 已安裝並且是最新版本
軟體包 wxGTK-gl-2.8.12-20.el7.x86_64 已安裝並且是最新版本

然後就可以順利的把erlang安裝上啦

[root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm

最後安裝rabbitmq那也是順溜的很啦。

[root@localhost src]# rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm 

啟動/關閉rabbitmq服務 

  • Whereis rabbitmq 找到bin/rabbitmq-server
  • ./rabbitmq-server 啟動  Starting broker... completed with 0 plugins.  說明安裝成功。
  • ./rabbitmq-server  -detached 後臺啟動方式
  • ./rabbitmqctl stop 關閉

啟動埠 

找到/etc/sysconfig/iptables 如果不存在,隨便一個iptalbles命令即可出現,如iptables -F 清除iptables已有的所有規則。配置如下埠對外開放。 

[root@localhost src]# vim /etc/sysconfig/iptables
#RabbitMQ  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5671 -j ACCEPT  
#RabbitMQ  

啟動外掛 

./rabbitmq-plugins enable rabbitmq_management(執行一次以後不用再次執行)

客戶端開啟管理頁面 

輸入:伺服器地址:15672    預設gust,不可用。只能在服務端可用。

關於rabbitmq的詳細內容以後我還會補充,以前也有一篇我自己的博文,有興趣的可以點開看下:.Net使用Rabbitmq詳解

yum安裝軟體詳細

關於yum的使用是非常簡單的,大家可以看下 http://man.linuxde.net/yum 多敲敲練練就會啦。 

 

而文章一開始說yum方式安裝nginx,那麼命令看仔細啦啊。

[root@localhost src]# yum install nginx

對,你沒有看錯,線上安裝,自動解決軟體相互依賴問題,安裝成功啦,就是這麼簡單。

這裡值得一說的是yum的包源配置是在下面的檔案中:

[root@localhost etc]# ll /etc|grep yum
drwxr-xr-x.  6 root root       95 2月   7 20:09 yum
-rw-r--r--.  1 root root      970 11月 15 23:30 yum.conf
drwxr-xr-x.  2 root root     4096 2月   7 20:10 yum.repos.d

在yum.repos.d這個資料夾下,你如何看懂檔案中的內容,以及如何配置,那麼你需要自行百度,我不想寫啦

總結

接下來是大家最喜歡的總結內容啦,內容有三,如下:

1、希望能關注我其他的文章。

2、部落格裡面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流群,我們一起學習探討。

3、你可以忘記點贊加關注,但千萬不要忘記掃碼打賞哦。

相關文章