SRPM 套用修補程式及重新編譯套件

自己已經很久沒有遇到需要重新編譯 SRPM 套件的情形了,顯得相當生疏,需要順便記錄下來……話說最近在等待 CentOS Stream/RHEL 9 的 net-snmp 套件釋出針對某項問題的修正,但不知何故,問題回報上去,而且 net-snmp 專案本身也已經有相應的更新,卻過了一個月都沒有後續的下文。

 

於是決定自己手工解決,在 CentOS Stream 9 環境中,本文的操作指令皆是統一在 root 權限下執行(儘管有些動作實際上並不依賴 root 權限),首先執行兩項 dnf 群組安裝指令:

  • dnf group install "Development Tools"
  • dnf group install "RPM Development Tools"

 

然後針對 net-snmp 套件重新編譯的依賴需求,再安裝以下套件:

  • dnf install bzip2-devel chrpath libselinux-devel lm_sensors-devel mariadb-connector-c-devel perl-ExtUtils-Embed perl-Test-Harness perl-blib perl-devel python3-devel rpm-devel

 

下載及安裝 net-snmp 的 SRPM(也就是 Source RPM):

  • dnf download --source net-snmp
  • rpm -ivh net-snmp-5.9.1-13.el9.src.rpm

 

前述操作會將套件原始碼安裝到 rpmbuild 目錄裡,接著下一步驟則是從 GitHub 下載指定的修補檔:

  • wget https://github.com/net-snmp/net-snmp/commit/7fc7edf676c527a0cfb661f9000a3d22738cf8e6.patch

 

將下載的修補檔移動到 rpmbuild/SOURCES/ 目錄內:

  • mv 7fc7edf676c527a0cfb661f9000a3d22738cf8e6.patch rpmbuild/SOURCES/

 

編輯 rpmbuild/SPECS/net-snmp.spec 這支設定檔,在其中的修補檔清單裡再增添新的套用項目。共有兩處需要增加,所添加的項目分別列舉如下:

Patch104:   7fc7edf676c527a0cfb661f9000a3d22738cf8e6.patch
%patch104 -p1

 

完成變更後,便執行套件的編譯及組建動作:

  • rpmbuild -ba rpmbuild/SPECS/net-snmp.spec

 

倘若仍有缺少的依賴套件,便會在此步驟顯示出來,就再使用 dnf 指令安裝起來。反之在順利組建完畢後,套件會存放在 rpmbuild/RPMS/x86_64/ 目錄裡。可以就地安裝,或者是複製到其它需要的主機上。若要單純地覆蓋安裝當前已安裝的套件版本,可以在 RPM 套件的所在路徑下,執行 dnf upgrade 或 reinstall:

  • dnf upgrade *.rpm
  • dnf reinstall *.rpm

 

分類: