
저는 CentOS 6 VM에서 Quagga 동적 라우팅 데몬을 사용해 왔습니다. RPM이 플래그로 빌드된 경우에만 액세스할 수 있는 기능을 사용하고 싶습니다 --multipath=X
. 내가 사용하고 있는 RPM은 이미 CentOS 저장소에서 구축되어 얻어졌습니다.
RPM이 이 플래그로 빌드되었는지 확인할 수 있는 방법이 있습니까? 아니면 소스에서 빌드하고 해당 플래그를 직접 제공해야 합니까?
RPM 소스 패키지를 다운로드하고 제공된 사양 파일에서 다중 경로 매개변수가 64로 설정되어 있음을 확인했습니다. 따라서 필요한 경우 직접 빌드할 수 있었습니다.
답변1
일반적으로 사용자 공간 바이너리를 빌드하는 데 사용되는 특정 컴파일러 플래그는 바이너리 내에 보존되지 않습니다. 그럴 이유가 없습니다.
일반적으로 바이너리를 빌드하는 데 사용된 컴파일러 및 컴파일러 버전을 검사하여 파악할 수 있지만 crt0
사용자 정의 crt0
.
정적 바이너리가 아니라고 가정하면 바이너리가 사용하는 공유 개체(".so")와 바이너리가 사용하는 각 공유 개체의 기능을 검사하여 특정 컴파일/빌드 시간 옵션을 추론할 수 있습니다.
소스 코드가 있는 경우 디스어셈블리 목록을 검사하고 바이너리가 빌드될 때 특정 옵션 플래그가 사용되었는지 여부를 합리적인 정확도로 확인할 수 있습니다.
답변2
@fpmurphy가 말했듯이 컴파일러 플래그는 일반적으로 바이너리 내에 보존되지 않습니다. 그리고 빌드 타임 옵션은 스크립트 --multipath=X
에 대한 옵션일 가능성이 가장 높 ./configure
으므로 파일 생성을 제어하는 것과 같은 작업을 수행할 수 있으며 config.h
, 그런 다음 컴파일러 플래그에 전혀 영향을 주지 않고 빌드 프로세스에 참여할 수 있습니다.
하지만 프로그램에 그러한 옵션이 많으면때때로(항상 그런 것은 아님) 관련 빌드 타임 옵션의 상태를 확인하는 방법입니다. 이 정보를 사용할 수 있는 경우 programname --version
버전 정보를 표시하는 유사한 옵션을 통해 표시될 수 있는 경우가 많습니다.
저는 콰가를 전혀 모르지만,터미널 모드 명령을 설명하는 문서 섹션유망해 보이는 명령이 하나 있습니다.
명령:버전 표시
Quagga의 현재 버전과 해당 빌드 호스트 정보를 표시합니다.
"빌드 호스트 정보"에는 빌드 시간 옵션에 대한 정보가 포함될 수 있습니다. 아니면 그렇지 않을 수도 있습니다. 그러나 더 쉬운 정보 소스가 없다면 그곳은 내가 가장 먼저 찾아볼 곳 중 하나가 될 것입니다.
소프트웨어가 패키지되어 있고 해당 소스 패키지를 찾을 수 있는 경우 일반적으로 소스 패키지에는 해당 패키지에 배포된 것과 기능적으로 100% 이상 동일한 바이너리를 생성하는 데 필요한 모든 빌드 시간 구성이 포함되어 있습니다. 동일한 배포판의 바이너리 패키지. 배포판이 새로운 "재현 가능한 빌드" 기술을 사용하는 경우 결과 바이너리는 비트 단위로 동일할 수도 있습니다.
따라서 소스 패키지(특히 RPM의 경우 해당 .spec
파일)는 해당 바이너리 패키지에 사용되는 빌드 타임 옵션에 대한 좋은 정보 소스입니다.
파일을 확인한 소스 RPM이 .spec
CentOS 저장소에서 왔으며 바이너리와 동일한 버전을 가지고 있다고 가정하면 표준 가정은 예, --multipath=64
바이너리 RPM 생성에 사용되었다는 것입니다. 이것이 실제로 사실이 아닌 경우 버그 보고서를 작성하거나 배포자에게 연락하여 불일치를 보고하는 것이 좋습니다.