序言
上一篇我們了解啦Linux系統中,根目錄下的各個文件夾是做什么用的啦,也學會文件如何壓縮打包。那么接下來我們就該用到這個系統啦。用這個系統,就是用這個系統的軟件,那么我們對我們需要的軟件如何安裝,對不需要的軟件如何卸載,本篇就此做個詳解。
我們針對的系統為Centos,那么Centos的主要軟件管理有3種,源碼與tarball,rpm與srpm,yum。
我會在講解每一種安裝方式的同時,寫一個我們開發常用到的軟件實例的安裝,源碼安裝redis,rpm安裝rabbitmq,yum安裝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://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、你可以忘記點贊加關注,但千萬不要忘記掃碼打賞哦。