![¿Es posible determinar qué indicadores de compilación se utilizaron en un paquete RPM prediseñado?](https://rvso.com/image/178467/%C2%BFEs%20posible%20determinar%20qu%C3%A9%20indicadores%20de%20compilaci%C3%B3n%20se%20utilizaron%20en%20un%20paquete%20RPM%20predise%C3%B1ado%3F.png)
He estado usando el demonio de enrutamiento dinámico Quagga en una máquina virtual CentOS 6. Me gustaría usar una función a la que solo se puede acceder si el RPM se creó con la --multipath=X
bandera. El RPM que estoy usando ya fue creado y obtenido del repositorio de CentOS.
¿Hay alguna manera de saber si el RPM se creó con este indicador o tengo que compilarlo desde la fuente y proporcionar ese indicador yo mismo?
Descargué el paquete fuente RPM y noté que en el archivo de especificaciones proporcionado el parámetro de ruta múltiple está configurado en 64. Así que podría compilarlo yo mismo si fuera necesario.
Respuesta1
En general, los indicadores del compilador específicos utilizados para crear un binario de espacio de usuario no se conservan dentro del binario. No hay razón para que lo sean.
Por lo general, puede determinar qué compilador y versión del compilador se usó para construir el binario examinándolo, crt0
pero incluso esa información se puede ofuscar usando un archivo crt0
.
Suponiendo que no es un binario estático, es posible que pueda inferir opciones particulares de tiempo de compilación/compilación examinando qué objetos compartidos (".so") está usando el binario y qué funciones de cada objeto compartido está usando el binario.
Si tiene el código fuente, puede examinar la lista de desensamblado y determinar con precisión razonable si se utilizó un indicador de opción en particular cuando se creó el binario.
Respuesta2
Como dijo @fpmurphy, los indicadores del compilador generalmente no se conservan dentro del binario. Y las opciones de tiempo de compilación --multipath=X
son probablemente opciones para el ./configure
script, por lo que podrían hacer algo como controlar la generación de un config.h
archivo, que luego participará en el proceso de compilación sin afectar necesariamente los indicadores del compilador.
Pero cuando un programa tiene muchas opciones de este tipo, haya veces(no siempre) una forma de conocer el estado de las opciones de tiempo de construcción relevantes. Si esta información está disponible, a menudo se puede mostrar a través de programname --version
una opción similar que muestra información de la versión.
No conozco a Quagga en absoluto, perola sección de documentación que describe sus comandos del modo terminaltiene un comando que parece prometedor:
Dominio:mostrar versión
Muestra la versión actual de Quagga y la información del host de compilación.
La "información del host de compilación" podría incluir información sobre las opciones de tiempo de compilación. O puede que no. Pero si no tuviera fuentes de información más fáciles, ese sería uno de los primeros lugares donde buscaría.
Si el software está empaquetado y puede encontrar el paquete fuente correspondiente, la idea general es que el paquete fuente incluya toda la configuración de tiempo de compilación necesaria para producir un binario que sea al menos 100 % funcionalmente equivalente al distribuido en el paquete fuente correspondiente. paquete(s) binario(s) de la misma distribución. Si la distribución utiliza las nuevas técnicas de "compilaciones reproducibles", el binario resultante podría incluso ser idéntico bit a bit.
Por lo tanto, el paquete fuente (y en el caso de un RPM, su .spec
archivo en particular) es una buena fuente de información sobre las opciones de tiempo de compilación utilizadas en el paquete binario correspondiente.
Suponiendo que el RPM de origen cuyo .spec
archivo verificó también provenía del repositorio de CentOS y tenía la misma versión que su binario, la suposición estándar sería que sí, --multipath=64
se usó para producir el RPM binario. Si descubre que eso no es realmente cierto, sería una muy buena razón para hacer un informe de error o contactar al distribuidor e informar la discrepancia.