Rhel

如何使用 src.rpm 中的 -DPURIFY 編譯 OpenSSL

  • March 14, 2018

我正在嘗試在 Valgrind 下執行一個使用 OpenSSL 的程序,但 OpenSSL 做了一些有趣的事情,導致很多“誤報”,所以經過一番搜尋後,我發現我需要使用 -DPURIFY 選項編譯 OpenSSL。

因此,我從 RedHat 伺服器 (openssl-1.0.0-10.el6.src.rpm) 下載了與系統目前使用的相同版本的 OpenSSL(舊系統)。然後我嘗試以下命令:

rpm2cpio openssl-1.0.0-10.el6.src.rpm | cpio -idmv
tar -xvf openssl-1.0.0-usa.tar.bz2
cd openssl-1.0.0
./config
make

但是make會拋出一個error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token

我在提取 src.rpm 文件時看到了很多更新檔文件,我想我需要手動應用這些文件(如何以及以什麼順序?)還是我做錯了什麼?

目標:使用 -DPURIFY 編譯 OpenSSL 的這個版本(1.0.0-10.el6)

通常,當我需要更改時,我更喜歡建構和安裝自己的軟體包,因為這樣,您的系統中就沒有未計入的文件/二進製文件。

從 src.rpm 源包(重新)建構包通常有特定的步驟。

該過程大部分是自動化的,您不需要手動編譯或應用所有更新檔。

CentOS - 重建源 RPM

首先解壓 SRPM,然後使用 rpmbuild -ba 從規範文件重建它的優點是您可以修改規範文件(可能添加一些更新檔甚至升級源 tarball)以滿足您的需要。這是一個比僅僅重建 SRPM 更複雜的情況,但是,如果您沿著這條路線走,您可能應該閱讀更多關於該主題的內容,如下所述,但過程如下:

cd ~/rpmbuild/SPECS/

rpmbuild -bp mypackage.spec

cd ~/rpmbuild/BUILD/

cp existing_directory existing_directory.orig

cd 現有目錄

找到您要更改的文件,修改它。

cd ~/rpmbuild/BUILD/

diff -Npru existing_directory.orig existing_directory > name_of_your_patch_file.patch

cp name_of_your_patch_file.patch ~/rpmbuild/SOURCES/

cd ~/rpmbuild/SPECS/

編輯 mypackage.spec 文件以添加 name_of_your_patch_file.patch 的定義和 your_patch_file 的應用程序 - 請查看文件以了解如何完成。

rpmbuild -ba mypackage.spec

最後,使用您的更改安裝軟體包:

rpm -i mypackage

根據 OP 評論,如果您已經安裝了該軟體包,則可以使用以下命令升級到您的版本:

rpm -Uvh --force mypackage

引用自:https://unix.stackexchange.com/questions/429919