Linux-什麼是二進制包,源碼包,RPM包,軟件倉庫

博文說明【前言】:html

    本文將經過我的口吻介紹什麼是二進制包,RPM包,源碼RPM包(SRPM包),源碼包,以及RPM經常使用命令,源碼rpm的安裝(*.src.rpm),源碼包的安裝步驟知識(./configure,make,make install)相關知識。前端

     在目前時間點【2017年6月12號】下,所掌握的技術水平有限,可能會存在很多知識理解不夠深刻或全面,望你們指出問題共同交流,在後續工做及學習中如發現本文內容與實際狀況有所誤差,將會完善該博文內容。mysql


本文參考文獻引用連接:linux

一、http://man.linuxde.net/rpm
二、http://blog.csdn.net/simplekaizai/article/details/70055719
三、http://blog.csdn.net/u014242496/article/details/51645812【rpm包格式】
四、http://www.2cto.com/os/201501/366397.html
五、http://blog.csdn.net/u010154760/article/details/45955857【推薦,必看】
六、https://my.oschina.net/weiweiblog/blog/488919【源碼包三步講解】
七、http://www.cnblogs.com/einyboy/archive/2012/09/13/2683015.html【講解安裝src.rpm】
八、https://yq.aliyun.com/articles/43220【如何將源碼包製做成RPM包】 後期新寫一篇博文
九、http://www.gkstk.com/article/wk-78500000726568.html【Linux軟件包管理基本操做命令入門】
十、http://studys.blog.51cto.com/9736817/1608958【必看,軟件倉庫講解】
十一、http://os.51cto.com/art/201109/291547.htm
sql



正文:ubuntu

從事Linux運維工做的小夥伴們必需要和軟件安裝打交道,咱們知道將軟件安裝到服務器上有多種方法,好比源碼包方式單獨安裝(通常格式爲xx.tar.gz),rpm包形式單獨安裝(通常格式爲xx.rpm),經過Linux發行版本提供的軟件包管理軟件進行安裝(例如RHEL和Centos的yum,SUSE的yast和zypper,ubuntu的apt等等),那麼咱們安裝的這些軟件包有什麼區別呢。vim


在Linux中,咱們將軟件包分爲三種類型,分別是二進制包、RPM包、源碼包。windows


一:二進制包

緩存

一、概念:服務器

二進制包是軟件包的一種形式,二進制包是已經通過編譯,能夠立刻運行的程序軟件包。你只須要下載和解包(安裝)它們之後,就立刻可使用。軟件包的內容是01二進制代碼(通常以16進制顯示),也就是說,這些文件是計算機能直接識別的(計算機只能識別處理01二進制)


二、格式:

格式1:xxxx-devel-6b-33.x86_64.rpm格式(rpm -ivh安裝以後能直接使用),

格式2:mysql-5.5.32-linux2.6-x86_64.tar.gz格式(tar -zxvf解壓以後就能直接使用),這裏注意和源碼包的區別,二進制格式的包名字很長,通常都會帶有版本號、適應平臺、適應的硬件類型等,而源碼格式僅僅就是一個版本號的tar包,例如httpd-2.4.25.tar.gz。   


咱們通常說的二進制包其實默認指的就是RPM包,也就是說二進制包包含RPM包,RPM包是二進制包的一個子集
 

三、特性:

咱們可使用UE編輯器,打開/bin下的文件查看,打開Windows中的.exe文件查看,打開rpm包查看,你會發現,這些文件的內容都是01二進制代碼(通常以16進制顯示),也就是說,這些文件是計算機能直接識別的(計算機只能識別處理01二進制)



二:RPM包


一、概念:

在一個操做系統下,須要安裝實現各類功能的軟件包。這些軟件包通常都有各自的程序,可是同時也有錯綜複雜的依賴關係。同時還須要解決軟件包的版本,以及安裝,配置,卸載的自動化問題。爲了解決這些問題,RedHat針對本身的系統提出了一個較好的辦法來管理成千上百的軟件。這就是RPM管理系統。在系統中安裝了rpm管理系統之後,只要是符合rpm文件標準的打包的程序均可以方便的安裝,升級,卸載


也就是說rpm本來是Red Hat公司專門用來管理Red Hat的Linux發行版本的各項程序套件的管理程序,因爲它遵循GPL規則且功能強大方便,於是廣受歡迎。逐漸受到其餘Linux發行版本的採用。RPM套件管理方式的出現,讓Linux易於安裝,升級,間接提高了Linux的適用度。
而yum(Yellowdog Update  Manager)是RPM的前端工具,是基於RPM的一個管理工具,他能自動的解決安裝rpm包產生的依賴關係。

RPM包也就是二進制包的一種,rpm包很好區分,以rpm結尾的通常都是rpm包
注意:RPM分爲兩種,分別是:package和srcpackage,也就是binary rpm和source rpm;前者是已經編譯好的二進制包,能夠直接安裝使用,然後者是包含了源代碼的rpm包,須要重組rebuild以後才能夠安裝使用,其實從嚴謹的角度上來講,*.src.rpm算是特殊的源碼包,特殊在它能直接生成rpm包

二、格式:

格式1:name-version-release.arch.rpm

格式2:name-version-release.arch.src.rpm


name:表示包的名稱,包括主包名和分包名
version:表示包的版本信息
release:用於標識rpm包自己的發行號,可還包含適應的操做系統
arch:表示主機平臺,noarch表示此包能安裝到因此平臺上面
i386指這個軟件包適用於intel 80386以上的x86架構的計算機(AI32)
i686指這個軟件包適用於intel 80686以上(奔騰pro以上)的x86架構的計算機(IA32)
noarch指這個軟件包於硬件架構無關,能夠通用。    

i686軟件包的程序一般針對80686及以上CPU進行了優化,因此,一般能夠向前兼容,可是不支持向後兼容。而i386的包在x86機器上均可以用,支持向前兼容。不過如今的計算機,奔騰pro如下的CPU已經不多用,一般配置的機器都使用i686軟件包,也就是說咱們認爲i686的效率會更高
總結下就是說i686軟件包不能在i386平臺上運行,而i386的軟件包沒有限制,能夠在任何平臺上運行使用

可能會有人會向前向後兼容不太清楚,解釋一下:

向後兼容=向後看,向歷史兼容,也就是如今的新版本能讀取運行舊版本的數據,例如win10能向後兼容win7的軟件,win7能向後兼容win xp的軟件,office 2016可以打開office2010的文件,64位的CPU可以向後兼容處理針對32位CPU所開發的32位應用程序

向前兼容=向前看,向新版本或新數據兼容,向新事物兼容,或者說新版本生成的數據,可以在舊版本上運行處理,例如針對32位CPU開發的應用程序不能再64位CPU上運行,那麼這裏這個應用程序就是向前不兼容,若是假設能運行,那麼就是向前兼容的,office 2007可以處理office 2016產生的數據,咱們就說是向前兼容

示例:
gd-devel-2.0.35-11.el6.x86_64.rpm
gd是這個包的主包名,devel是這個包的分包名,     
2.0.35是表示版本信息,2爲主版本,0爲此版本,35爲修訂號,
11.el6中的11是表示發行號,el6表示是RHEL6,
x86_64是表示包適合的平臺,若是是noarch這表示與平臺無關

三、特性:
RPM包優勢:
1)RPM包管理簡單,只須要經過幾個簡單的命令就能夠實現軟件包的安裝升級卸載和查詢
2)安裝速度比源碼包形式快(源碼包主要是make編譯花費時間較長)
RPM包缺點:
1)RPM包是事先已經通過編譯的二進制包,能夠直接安裝使用,所以沒法再看到源碼
2)如上所述,功能已經被固定,沒法靈活的刪除或新增功能
3)RPM包存在很強的依賴性,大部分RPM包的順利安裝須要安裝不少個依賴RPM包
4)卸載軟件包的時候,若是不當心,會卸載涉及到依賴關係,頗有可能就會卸載移除掉系統所需軟件,致使系統奔潰

對於已經編譯成二進制的rpm包,因爲操做系統環境不一樣,通常不能混用。
可是以src.rpm形式發行的軟件包,因爲須要安裝時進行本地編譯,因此一般能夠在不一樣系統下安裝。


【補充】:源碼rpm包(*.src.rpm)和下文所說的tar包形式的源碼包有什麼區別,以及如何安裝*.src.rpm?

解釋:

一、tar包形式包含的內容是明文可見的源代碼,若是有足夠的能力,能夠自行修改源代碼,而且在安裝的時候能夠自由選擇要安裝的所需功能(./configure中的各類參數),而且卸載移除的時候也比較方便

二、源碼rpm包即*.src.rpm結尾的這類軟件包是包含了源代碼的rpm包,使用rpm -ivh來進行安裝,生成源程序和SPEC文件,可以直接生成RPM包,而tar形式源碼包是不支持生成RPM包的。針對src.rpm文件,咱們有兩大種安裝方式。


源碼rpm包(*.src.rpm)的安裝:


1)、將rpm文件移動到指定目錄下執行,這裏是移動到/usr/src/packages/SRPMS目錄(SUSE系統)下,使用重組命令rpmbuild --rebuild --clean setarch-1.3-1.src.rpm,將源代碼直接編譯成普通的二進制rpm包.執行以後能夠到/usr/src/packages/RPMS/x86_64目錄下找到可用的二進制rpm包setarch-1.3-1.x86_64.rpm進行安裝。
重組命令:rpmbuild --rebuild *.src.rpm 或者 rpm --rebuild *.src.rpm 或者 rpm --recompile *.src.rpm)

示例(以SUSE系統安裝setarch-1.3-1.src.rpm爲例):
suse11sp3-1:~ # cp setarch-1.3-1.src.rpm /usr/src/packages/SRPMS/
suse11sp3-1:~ # cd /usr/src/packages/SRPMS/
suse11sp3-1:/usr/src/packages/SRPMS # rpmbuild --rebuild --clean setarch-1.3-1.src.rpm
suse11sp3-1:/usr/src/packages/SRPMS # cd ../RPMS/x86_64
suse11sp3-1:/usr/src/packages/RPMS/x86_64 # rpm -ivh setarch-1.3-1.x86_64.rpm


2)、在非指定目錄下直接執行rpm -ivh *.src.rpm,切換至/usr/src/packages/SPECS目錄下,執行rpmbuild命令執行spec文件,具體使用什麼參數控制生成源碼包仍是rpm包,請自行選擇(-ba參數能夠同時生成tar.gz格式的源碼包以及rpm包,-bp是隻生成tar.gz格式源碼包,-bb是隻生成二進制格式rpm包,而且默認的rpmbuild爲i386平臺,若是軟件包是i686平臺軟件包,則需指定到別的平臺,指定參數爲--target=i686)
註釋:直接執行rpm -ivh *.src.rpm以後實際會生成*.tar.gz的源碼包和spec文件,其餘文件(例如rpm包等)須要執行其餘命令生成。

示例(以SUSE系統安裝setarch-1.3-1.src.rpm爲例):
suse11sp3-1:~ # rpm -ivh setarch-1.3-1.src.rpm 
suse11sp3-1:~ # cd /usr/src/packages/SPECS

suse11sp3-1:/usr/src/packages/SPECS # rpmbuild -bb [–target=i686] setarch.spec  #這裏是直接生成RPM包(-bb參數)
suse11sp3-1:/usr/src/packages/SPECS # cd ../PRMS/x86_64
suse11sp3-1:/usr/src/packages/RPMS/x86_64 # rpm -ivh setarch-1.3-1.x86_64.rpm
or
suse11sp3-1:/usr/src/packages/SPECS # rpmbuild -bp [–target=i686] setarch.spec  #這裏是直接生成源碼包(-bp參數)
suse11sp3-1:/usr/src/packages/SPECS # cd ../BUILD/your-package
suse11sp3-1:/usr/src/packages/BUILD/setarch-1.3 # ./configure
suse11sp3-1:/usr/src/packages/BUILD/setarch-1.3 # make
suse11sp3-1:/usr/src/packages/BUILD/setarch-1.3 # make install 


三:源碼包

一、概念:

源碼包是Linux中軟件包的另外一種形式,須要在計算機上進行編譯之後才能夠產生能夠直接運行的二進制程序。源代碼包裏面包括了程序的程序代碼,通常就是咱們能認識的C語言文件,所以在安裝源碼包的時候一般會檢索系統中是否正確安裝gcc編譯器,而且源代碼安裝的時間會比較長。

源碼包通常的安裝過程是:
1)、解壓、
2)./config、
3)make、
4)make install、
5)

ln -sv /usr/local/xxx/lib/xxx  /usr/lib64/xxx  【動態連接庫文件較少的狀況下】或者

vim /etc/ld.so.conf   文件末尾追加/usr/local/xxxx/lib,保存退出後執行ldconfig 【建議這種方式】

6)vim /etc/profile,文件末尾添加PATH=/usr/local/xxx/bin:$PATH,而後 source /etc/profile

二、格式:

*.tar.gz、*.tgz、*.bz2

源碼包的格式通常是一個版本號的tar包,例如httpd-2.4.25.tar.gz,文件名包含信息沒有上述提到的二進制包多

三、特性:
tar包形式的源碼包包含的內容是明文可見的源代碼,若是有足夠的能力,能夠自行修改源代碼,而且在安裝的時候能夠自由選擇要安裝的所需功能(./configure中的各類參數)及路徑等,而且卸載移除的時候也比較方便。 建議在安裝線上的生產服務器軟件包時都用源碼安裝,這是由於源碼安裝能夠自行調整編譯參數,可以最大化地定製安裝結果。
可是使用源碼包也存在一些缺點不足,例如:
1)安裝過程步驟過多,尤爲安裝較大及較多軟件時,添加各類參數時容易出現問題
2)編譯時間較長,執行make編譯的時間一般較長,一會都會比安裝二進制包時間長
3)由於編譯手動安裝,涉及系統環境比較複雜,可能會出現各類問題,一旦出現問題,新手很難解決(通常都會出現問題)

【補充】:./configure、make、make install等概念講解

./configure
1)、定義須要的功能選項
2)、檢測系統環境是否符合安裝要求
3)、把定義好的功能選項和檢測環境系統信息都寫入Makefile文件,用於後續的編輯
注意1:每一個源碼包都會有configure命令,就算極個別沒有這個命令也會用其餘的命令取代(例如openssl的./config)
注意2:執行過./configure以後,會生成Makefile文件,make和make install都是依賴這個文件進行編譯安裝的

make
1)將源碼包翻譯成機器能識別的語言(也就是將源代碼-->可執行的二進制文件,相似生成Windows中的.exe可執行文件)
2)一旦編譯出錯,須要修改以後再次編譯,請使用make clean,清除以前的編譯產生的緩存文件。
注意:這一步執行時間通常是最長的。

make install
1)真正的安裝(例如在windows中執行qq.exe或者wechat.exe安裝qq和微信到電腦)
2)一旦這步出錯,須要執行make clean,並刪除對應的目錄(例如./configure使用--prefix參數指定安裝到/usr/local/openssl,則須要刪除該目錄)


四:軟件源/軟件倉庫(repository)


一、概念:

軟件源,顧名思義就是軟件的來源,軟件的來源就是存放各類軟件包的軟件倉庫或者官方發佈的ISO文件,其中包含各類應用軟件。


多數Linux發行版都有本身的軟件安裝、配置方案,同時還有各自的軟件包管理系統。爲了省去用戶四處尋找合適軟件安裝包的麻煩,這些發行版將經常使用的軟件集中到一個服務器上,併爲用戶提供了自動下載、安裝軟件的接口,這就是咱們所說的「軟件倉庫」。爲了方便大衆訪問,人們爲這些軟件倉庫創建了大量的「鏡像」,使世界各地的用戶都能方便地使用。不一樣發行版的軟件倉庫通常不一樣,如用戶接口各異、軟件豐富程度不一樣、鏡像分佈不一樣等等


軟件倉庫管理軟件,例如yum和zypper,配置文件格式爲*.repo,能夠在倉庫中自動地定位並獲取正確的RPM軟件包。多數Linux發行版都有本身的軟件安裝、配置方案,同時還有各自的軟件倉庫管理系統,例如RHEL的yum,suse的zypper,Debian和Ubuntu的apt。


2:、格式:

軟件倉庫有幾種類型:

1)、在線網絡訪問獲取方式,包含各種軟件的二進制包或者源碼包,能夠自定義軟件種類及數量,軟件倉庫的獲取方式能夠是http、FTP、nfs等,通常官方也會提供這種軟件倉庫。

2)、離線本地訪問獲取方式,官方發行版本的離線ISO文件,內部包含的軟件都是通過篩選的,掛載出來後也能夠稱之爲是一個軟件倉庫

軟件倉庫的的配置文件格式通常是:*.repo(RHEL的yum,SUSE的zypper)


三、特性:

軟件倉庫中包含的不止只有軟件包,還有其餘信息(軟件包的信息,位置信息,軟件包的依賴關係,索引文件等),就比如咱們實際生活中的圖書館,不可能把書塞進去就能夠,咱們會有一個表格,詳細記錄每本書的摘要信息(做者,發表時間,國家等),所屬類別,所在位置等信息,之後就能夠快速的檢索到該書

在Linux操做系統中,軟件包的安裝實際上是文件的拷貝,即把軟件所用的各個文件拷貝到特定目錄。固然RPM安裝軟件包,也不例外。但RPM更「先進」一些,由於它在安裝前,還會執行檢查軟件包的依賴(Dependency)、檢查軟件包的衝突(Conflicts)。最後纔將軟件包裏面的相關文件解出並存放到相應位置。也就是說軟件倉庫中包括了全部RPM包的頭信息(header)描述,好比依賴性等。客戶端使用例如yum等倉庫管理軟件在安裝的時候就會去下載header文件並加以分析,這樣才能自動地從服務端下載相關軟件,並正確地完成安裝任務。

注意:Linux軟件包的基本組成部分一般有:共享庫、應用程序、依賴關係,服務和文檔。對軟件包的使用和管理被稱爲包管理。


五:補充知識點

一、軟件包卸載:

1)源碼包卸載:直接刪除安裝目錄便可,不會殘留任何垃圾,若是建立了軟連接及編輯了額外文件請自行記錄移除。
2)RPM包卸載:rpm -e 軟件名(注意,這裏不要帶.rpm,帶的是安裝後系統顯示的軟件名)
不過RPM卸載軟件包的時候,若是不當心,會卸載涉及到依賴關係,頗有可能就會卸載移除掉系統所需軟件,致使系統奔潰,因此卸載的時候務必當心




結尾:


     感謝閱讀,祝有收穫的一天,謝謝!

相關文章
相關標籤/搜索