2011-09-14 7 views
16

Como tengo que instalar múltiples versiones de Python en múltiples servidores Oracle Linux que están construidos a través de un proceso kickstart, quería construir un rpm python para nuestro repositorio de yum. Pude construir Python manualmente usando 'make altinstall' que no se instala sobre la instalación predeterminada de Python del sistema, así que pensé que ese sería el camino a seguir.Python RPM que construí no instalará

Después de mucho ensayo y error, logró construir un rpm a partir de un paquete de 2,7 .bz2 pitón - pero ahora cuando intento instalarlo, me sale un error:

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

Lo que el .. ¿??? ¡Python es lo que intento 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 fue /tmp/python2.7/bin/python2.7). Entonces, ¿por qué está buscando en/usr/local/bin?

Aquí es el centro de mi SPEC RPM:

%prep 
%setup -q 

%build 
./configure --prefix=/tmp/python2.7 
make 

%install 

make altinstall 

echo un vistazo más de cerca el registro rpm acumulación 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, por lo que hay que/usr/local/bin entra ... Ahora, la pregunta es, ¿cómo está determinando estos requisitos? ¿Especifiqué algo mal? ¿Debo anular algo?

Como muchos novatos de rpm, obtengo la parte de compilación, pero realmente no "grok" lo que sucede al final de rpmbuild y lo que realmente se pone en el archivo rpm (aparte de los archivos que especifique en% files) y luego lo que sucede realmente cuando haces la instalación de rpm.

¿Alguien puede sugerir por qué mi instalación está fallando o lo que podría leer para entender por qué mi generación de rpm requiere lo que intento construir?

Respuesta

18

Usted debe ser capaz de solucionar este problema agregando la siguiente línea a su archivo de especificaciones:

AutoReq: no 

Aquí es 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 un requisito. No solo eso, si el shebang es #!/usr/bin/env python, agregará una dependencia para lo que resuelva (primer Python en $PATH).

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

+0

Suena prometedor - Lo intentaré ... – Ilane

+0

>>> print "¡Gracias, F.J !!!" Gracias, F.J !!! – Ilane

+1

No desea desactivar el procesamiento de dependencia en este caso. Esto puede romper el paquete de Python porque RPM no sabrá de qué archivos depende el paquete. Lo correcto es parchar el archivo que contiene la línea de shebang errónea. – jayhendren

6

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

#!/usr/local/bin/python 

en la parte superior. Pruebe grep'ing para esta ruta en los archivos dentro de su archivo bz2.

+0

Hay dos, sin embargo, no quiero ensuciar con las fuentes si no es necesario porque% setup las está desempaquetando del archivo original descargado. ¿Hay alguna forma de solucionar este problema? – Ilane

+1

Esta es la respuesta correcta. En el código fuente de python, hay un archivo con la línea shebang que contiene '/ usr/local/bin/python'. @Ilane, lo correcto es escribir un parche en el código fuente. Una parte estándar de construir RPM es escribir parches.Notará en el archivo que contiene el shebang ofensor, hay un comentario en el sentido de que los empaquetadores de python necesitarán escribir un parche si no instalan python en '/ usr/local'. – jayhendren

+1

Específicamente el problema es 'cgi.py'. Las especificaciones de Fedora ([python 3] (http://pkgs.fedoraproject.org/cgit/python3.git/tree/python3.spec), [python 2] (http://pkgs.fedoraproject.org/cgit/python .git/tree/python.spec)) corrige esto ejecutando 'Tools/scripts/pathfix.py'. –

Cuestiones relacionadas