python rpm rpmbuild rpm-spec

Python RPM que construí no se instalará



rpmbuild rpm-spec (2)

Debido a que tengo que instalar varias versiones de Python en varios servidores Oracle Linux que se crean a través de un proceso kickstart, quería construir un rpm de Python para nuestro repositorio yum. Pude construir Python manualmente usando ''make altinstall'' que no se instala sobre su instalación predeterminada de Python del sistema, así que pensé que ese sería el camino a seguir.

Después de muchas pruebas y errores, logré crear un rpm a partir de un paquete .bz2 python 2.7, pero ahora cuando intento instalarlo, aparece un error:

error: Failed dependencies: /usr/local/bin/python is needed by Python-2.7.2-1.i386

Que...??? ¡¡Python es lo que estoy tratando de instalar !!! Y el sistema por defecto Python (2.4) está en / usr / bin / python !!! Y mi ubicación de creación de prototipos para el directorio de python es /tmp/python2.7 (y el ejecutable era /tmp/python2.7/bin/python2.7). Entonces, ¿por qué está buscando en / usr / local / bin?

Aquí está el núcleo de mi RPM SPEC:

%prep %setup -q %build ./configure --prefix=/tmp/python2.7 make %install make altinstall

Miro más de cerca el registro de compilación de rpm y veo:

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]

Ok, ahí es donde entra / usr / local / bin ... Ahora, la pregunta es, ¿cómo está determinando estos requisitos? ¿Especifiqué algo mal? ¿Necesito anular algo?

Al igual que muchos novatos en rpm, obtengo la parte de compilación, pero realmente no "asimilo" lo que sucede al final de rpmbuild y lo que realmente se coloca en el archivo rpm (aparte de los archivos que especifica en% archivos) y luego qué En realidad sucede cuando haces la instalación de rpm.

¿Alguien puede sugerir por qué falla mi instalación o qué puedo leer para entender por qué mi compilación de rpm requiere lo que estoy tratando de compilar?


Debería poder solucionar este problema agregando la siguiente línea a su archivo de especificaciones:

AutoReq: no

Aquí está mi comprensión de por qué esto es necesario. Cuando rpmbuild se ejecuta en archivos .py con un #! (shebang) agregará automáticamente el binario que el shebang especifica como requisito. No solo eso, si el shebang es #!/usr/bin/env python , agregará una dependencia para lo que se resuelva (primer python en $PATH ).

O bien es necesario desactivar el procesamiento automático de requisitos o encontrar todos los shebangs que causarán problemas y cambiarlos a otra cosa.


rpmbuild puede ser bastante inteligente y este es uno de esos casos. Probablemente extrajo el /usr/local/bin/python de uno de sus archivos de script que contiene algo como:

#!/usr/local/bin/python

en la cima. Intente grep''ing para esta ruta en los archivos dentro de su archivo bz2.