사전 빌드된 RPM 패키지에 어떤 빌드 플래그가 사용되는지 확인할 수 있습니까?

사전 빌드된 RPM 패키지에 어떤 빌드 플래그가 사용되는지 확인할 수 있습니까?

저는 CentOS 6 가상 머신에서 Quagga 동적 라우팅 데몬을 사용해 왔습니다. --multipath=X이 플래그를 사용하여 RPM을 빌드할 때만 액세스할 수 있는 기능을 사용하고 싶습니다 . 내가 사용하고 있는 RPM은 CentOS 저장소에서 빌드되어 가져왔습니다.

RPM이 이 플래그로 빌드되었는지 확인할 수 있는 방법이 있습니까? 아니면 소스에서 빌드하고 플래그를 직접 제공해야 합니까?

RPM 소스 패키지를 다운로드했는데 제공된 사양 파일에서 다중 경로 매개변수가 64로 설정되어 있는 것을 확인했습니다. 그래서 필요하다면 내가 직접 만들 수도 있다.

답변1

일반적으로 사용자 공간 바이너리를 빌드하는 데 사용되는 특정 컴파일러 플래그는 바이너리에 유지되지 않습니다. 그들은 이렇게 할 이유가 없습니다.

일반적으로 바이너리를 빌드하는 데 사용된 컴파일러 및 컴파일러 버전을 확인하여 알 수 있지만 crt0해당 정보도 를 사용하여 사용자 정의할 수 있습니다 crt0.

정적 바이너리가 아니라고 가정하면 바이너리가 사용하는 공유 개체(".so")와 바이너리가 사용하는 각 공유 개체 내의 기능을 확인하여 특정 컴파일/빌드 시간 옵션을 유추할 수 있습니다.

소스 코드가 있는 경우 디스어셈블리 목록을 검사하고 바이너리를 빌드할 때 특정 옵션 플래그가 사용되었는지 여부를 합리적인 정확도로 확인할 수 있습니다.

답변2

@fpmurphy가 말했듯이 컴파일러 플래그는 일반적으로 바이너리에 유지되지 않습니다. 이와 같은 빌드 타임 옵션은 스크립트에 대한 옵션 --multipath=X일 가능성이 높 으므로 컴파일러 플래그에 전혀 영향을 주지 않고 빌드 프로세스에 참여할 파일 생성을 제어하는 ​​것과 같은 작업을 수행할 수 있습니다../configureconfig.h

그러나 프로그램에 그러한 옵션이 많으면때때로(항상 그런 것은 아님) 관련 빌드 시간 옵션의 상태를 확인하는 방법입니다. 이 정보를 사용할 수 있는 경우 일반적 programname --version으로 버전 정보를 표시하는 유사한 옵션을 통해 표시 할 수 있습니다 .

저는 콰가를 전혀 모르지만,터미널 모드 명령을 설명하는 문서 섹션매우 유망해 보이는 명령이 있습니다.

주문하다:버전 표시

Quagga의 현재 버전과 해당 빌드 호스트 정보를 표시합니다.

"빌드 호스트 정보"에는 빌드 시간 옵션에 대한 정보만 포함될 수 있습니다. 아니면 아닐 수도 있습니다. 그러나 더 쉬운 정보 소스가 없다면 그곳은 제가 가장 먼저 찾아볼 곳 중 하나가 될 것입니다.

소프트웨어가 패키지되어 있고 해당 소스 패키지를 찾을 수 있는 경우 일반적으로 소스 패키지에는 해당 소프트웨어에 배포된 바이너리만큼 기능적인 바이너리를 생성하는 데 필요한 모든 빌드 시간 구성이 포함되어 있습니다. 100% 동일합니다. 동일한 배포판에 대한 바이너리 패키지입니다. 배포판이 새로운 "재현 가능한 빌드" 기술을 사용하는 경우 결과 바이너리는 비트 단위로 동일할 수도 있습니다.

따라서 소스 패키지(그리고 RPM, 특히 해당 .spec파일의 경우)는 해당 바이너리 패키지에 사용되는 빌드 시간 옵션에 대한 좋은 정보 소스입니다.

.spec확인 중인 파일의 소스 RPM도 CentOS 저장소에 있고 바이너리와 동일한 버전이라고 가정하면 , 표준 가정은 --multipath=64바이너리 RPM을 생성하는 데 사용되었다는 것입니다. 이것이 사실이 아니라고 판단되면 버그 보고서를 제출하거나 대리점에 연락하여 불일치를 보고하는 것이 좋습니다.

관련 정보