我正在尝试在 Valgrind 下运行一个使用 OpenSSL 的程序,但是 OpenSSL 做了一些有趣的事情,导致了很多“误报”,所以经过一番搜索后,我发现我需要使用 -DPURIFY 选项来编译 OpenSSL。
因此,我从 RedHat 服务器下载了与当前系统(旧系统)相同的 OpenSSL 版本(openssl-1.0.0-10.el6.src.rpm)。然后我尝试以下命令:
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
但品牌抛出了一个error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
当我提取 src.rpm 文件时,我看到了很多补丁文件,我想我需要手动应用这些文件(如何以及以什么顺序?)或者我做错了什么?
目标:使用 -DPURIFY 编译此版本 (1.0.0-10.el6) 的 OpenSSL
答案1
通常,当我需要更改时,我更喜欢构建和安装自己的软件包,这样,您的系统中就不会有未解释的文件/二进制文件。
从 src.rpm 源包(重新)构建包通常有特定的步骤。
该过程大部分是自动化的,您不需要手动编译或应用所有补丁。
首先解压 SRPM,然后使用 rpmbuild -ba 从spec文件重建它的优点是您可以修改spec文件(并且可能添加一些补丁,甚至升级源tarball)以满足您的需要。不过,这是一个比仅仅重建 SRPM 更复杂的情况,如果您要沿着这条路线走下去,您可能应该阅读有关该主题的更多内容,如下所述,但过程如下:
cd ~/rpmbuild/SPECS/
rpmbuild -bp mypackage.spec
cd ~/rpmbuild/BUILD/
cp 现有目录 现有目录.orig
cd 现有目录
找到你要修改的文件,修改它。
cd ~/rpmbuild/BUILD/
diff -Npru 现有目录.orig 现有目录 > 你的补丁文件名称.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