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를 사용하여 OpenSSL의 이 버전(1.0.0-10.el6)을 컴파일합니다.
답변1
일반적으로 변경이 필요할 때 시스템에 해석되지 않은 파일/바이너리가 없도록 자체 패키지를 만들고 설치하는 것을 선호합니다.
일반적으로 src.rpm 소스 패키지에서 패키지를 (재)빌드하기 위한 특정 단계가 있습니다.
프로세스는 대부분 자동화되어 있으므로 모든 패치를 수동으로 컴파일하거나 적용할 필요가 없습니다.
먼저 SRPM의 압축을 풀고 rpmbuild -ba를 사용하여 사양 파일에서 다시 빌드하는 것의 장점은 필요에 맞게 사양 파일을 수정할 수 있다는 것입니다(일부 패치를 추가하거나 소스 tarball을 업그레이드할 수도 있음). 이는 단순히 SRPM을 재구축하는 것보다 더 복잡한 상황입니다. 이 경로를 따라가려면 아래 설명된 대로 해당 주제에 대해 더 읽어야 하지만 프로세스는 다음과 같습니다.
CD ~/rpmbuild/사양/
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/사양/
mypackage.spec 파일을 편집하여 name_of_your_patch_file.patch 정의와 your_patch_file 애플리케이션을 추가하세요. 이 작업이 어떻게 수행되는지 보려면 파일을 살펴보세요.
rpmbuild -ba mypackage.spec
마지막으로 변경 사항이 포함된 패키지를 설치합니다.
rpm -i mypackage
OP 의견에 따르면 이미 패키지가 설치되어 있는 경우 다음을 사용하여 버전으로 업그레이드할 수 있습니다.
rpm -Uvh --force mypackage