SRPM 套用修補程式及重新編譯套件
自己已經很久沒有遇到需要重新編譯 SRPM 套件的情形了,顯得相當生疏,需要順便記錄下來……話說最近在等待 CentOS Stream/RHEL 9 的 net-snmp 套件釋出針對某項問題的修正,但不知何故,問題回報上去,而且 net-snmp 專案本身也已經有相應的更新,卻過了一個月都沒有後續的下文。
於是決定自己手工解決,在 CentOS Stream 9 環境中,本文的操作指令皆是統一在 root 權限下執行(儘管有些動作實際上並不依賴 root 權限),首先執行以下的 dnf 群組安裝指令:
- dnf group install "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