linux原始碼NTP構建rpm包的方法

2021-10-21 19:40:46 字數 3666 閱讀 7924

linux運維經常遇到漏洞修復問題,針對這些漏洞需要修復。一般採用更新該服務的方式修復漏洞。當機器較少是一台一台的編譯安裝比較輕鬆,當機器達到幾十上百台時,服務的安裝將成為乙個繁重的工作,如果能叫服務的原始碼包製作成rpm格式的安裝包,這將降低了安裝服務的難度和減輕了安裝公升級的工作量。本文將介紹如何通過ntp官方原始碼包生產rpm的安裝包。

rpm的全稱是redhat package manager,常見的使用rpm軟體包的系統主要有fedora、centos、opensuse、suse企業版、pclinuxos以及mandriva linux、mageia等,使用deb軟體包字尾的類debian系統最常見的有debian、ubuntu、finnix等。

pm這個軟體管理的機制是由 red hat 這家公司發開發出來的, rpm 是以一種資料庫記錄的方式來將你所需要的軟體安裝到你的 linux 系統的一套管理機制。

它最大的特點就是將你要安裝的軟體先編譯過, 並且打包成為 rpm 機制的包裝檔案,通過包裝好的軟體裡預設的資料庫記錄, 記錄這個軟體要安裝的時候所依賴的軟體,當在你的 linux 主機進行安裝時, rpm 會先依照軟體裡的資料查詢 linux 主機的依賴軟體是否滿足, 若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該軟體的資訊整個寫入 rpm 的資料庫中,以便未來的查詢、驗證與解除安裝!

優點是:

由於已經編譯完成並且打包完畢,所以軟體傳輸與安裝上很方便 (不需要再重新編譯)

由於軟體的資訊都已經記錄在 linux 主機的資料庫上,很方便查詢、公升級與解除安裝

缺點是:

3. 軟體檔案安裝的環境必須與打包時的環境需求一致或相當

需要滿足軟體的相依屬性需求

解除安裝時需要特別小心,最底層的軟體不可先移除,否則可能造成整個系統的問題

srpm 是什麼呢?顧名思義,他是 source rpm 的意思,也就是這個 rpm 檔案裡面含有原始碼。特別注意的是,這個srpm 所提供的軟體內容『並沒有經過編譯』, 它提供的是原始碼!

先將該軟體以 rpm 管理的方式編譯,此時 srpm 會被編譯成為 rpm 檔案

然後將編譯完成的 rpm 檔案安裝到 linux 系統當中

怎麼 srpm 這麼麻煩呢!還要重新編譯一次,那麼我們直接使用 rpm 來安裝不就好了?通常乙個軟體在發布的時候,都會同時發布該軟體的 rpm 與 srpm 。我們現在知道 rpm 檔案必須要在相同的 linux 環境下才能夠安裝,而 srpm 既然是原始碼的格式,自然我們就可以通過修改 srpm 內的引數配置檔,然後重新編譯生成能適合我們 linux 環境的 rpm 檔案,如此一來,不就可以將該軟體安裝到我們的系統當中,而不必與原作者打包的 linux 環境相同了?這就是 srpm 的用處了!

一:實驗環境

[root@centos7 x86_64]

# cat /etc/redhat-release

centos linux release 7.6.1810 (core)

虛擬機器:vmware xx.xx.xx.xx (能聯網)```

打包軟體:[root@centos7 builder]

# ll

total 4244

-rw-r--r-- 1 builder builder 4343547 mar 11 14:34 ntp-4.2.6p5-28.el7.centos.src.rpm

2:先說一下軟體包**本次打包原因是一部分伺服器系統已經過了生命週期,官網已經不提供更新服務,那麼就的找到舊版本的原始碼包打包成rpm方便公升級。

於是我就到centos官網位址去找src.rpm包:

3:安裝編譯環境

安裝相應的軟體包

yum -y install vim  wget rpm-build  gcc  make  redhat-lsb-core   libuuid-devel mock
然後建立乙個使用者,如果你不建立這個使用者打包的時候就會出現

warning: user mockbuild does not exist. using root

這樣的警告,雖然不是報錯,但是我測試建立這個使用者就不會出現警告了。

useradd -s /sbin/nologin mockbuild
最後安裝ntp服務所需要的依賴,因為我測試的時候出現了報下面這個缺少依賴,所以這提前安裝依賴,如果你打包的時候還包缺依賴那報啥就你安裝啥就行了。

yum install -y  libcap-devel  libedit-devel   perl-html-parser  pps-tools-devel   autogen  autogen-libopts-devel  libedit-devel.x86_64
error: failed build dependencies:

libcap-devel is needed by ntp-4.2.6p5-28.el7.x86_64

libedit-devel is needed by ntp-4.2.6p5-28.el7.x86_64

perl-html-parser is needed by ntp-4.2.6p5-28.el7.x86_64

pps-tools-devel is needed by ntp-4.2.6p5-28.el7.x86_64

autogen is needed by ntp-4.2.6p5-28.el7.x86_64

autogen-libopts-devel is needed by ntp-4.2.6p5-28.el7.x86_64

# useradd builder
[root@centos7 builder]

# cp ntp-4.2.6p5-28.el7.centos.src.rpm /home/builder/

編譯前看一下這個包的詳細資訊:

rpmbuild --rebuild --clean ntp-4.2.6p5-28.el7.centos.src.rpm
然後嗶哩吧啦一堆東西,最後看到這說明成功了

可以看到,程式根據作業系統的架構,在 /home/builder/rpmbuild/rpms/x86_64/ 目錄下編譯生成用於安裝的rpm包。

就可以拿這些包去公升級了

cd /home/builder/rpmbuild/specs/

rpmbuild -bb nginx.spec

細心的你可能會發現,咦,怎麼和方式一生成安裝用的rpm包方式一樣?

其實不一樣,相比方式一,在 rpmbuild -bb nginx.spec 之前,我們是可以編輯修改nginx.spec 之前,自定一些東西的,只是我們這裡用的預設的nginx.spec檔案而已,關於nginx.spec檔案,不是本文的關注點,感興趣可以檢視相關文件。

構建linux核心原始碼樹

編寫驅動程式時,需要核心原始碼樹的支援。核心原始碼樹時從核心源 編譯得到的。下面開始構造核心源 的步驟。以ubuntu為例子 2.配置核心 進入解壓過的核心目錄,開始配置核心選擇最快的原版的配置 預設 方式。root desktop make oldconfig 當然也可以使用其他配置方式,如 me...

Doxygen Graphviz構建原始碼組態檔

當檢視專案的源 時,乙個好的查詢文件能夠幫助提高 閱讀和理解的速度。使用doxygen和grapviz生成專案源 組態檔,包括類之間的繼承關係,函式之間的相互呼叫關係等。doxygen根據 注釋生成文件,說明類之間的繼承關係和函式呼叫關係 grapghviz進行圖形展示。doxygen配置介面 1....

Vue原始碼解讀(二) Vue原始碼構建

vue.js 原始碼是基於 rollup 構建的,它的構建相關配置都在 scripts 錄下。通常 個基於 npm 託管的項 都會有 個 package.json 件,它是對項 的描述 件,它的內容實際上是 個標準的 json 物件。我們通常會配置 script 字段作為 npm 的執 指令碼,vu...