RPM Build Issue

3

Eu construo minha rpms como tal:

rpmbuild -bb SPECS / python.spec

Com o seguinte arquivo de especificações:

%define _topdir /home/rpmbuild/python
%define name Python
%define release 1
%define version 2.6.4
%define buildroot %{_topdir}/%{name}-%{version}-root

BuildRoot: %{buildroot}
Summary: python
License: GPL
Name: %{name}
Version: %{version}
Release: %{release}
Source: %{name}-%{version}.tar.bz2
Group: Python

%description 
Python, compiled by Jon Haddad for CentOS

%prep
%setup -q

%build
./configure --prefix=/usr/local
make

%install 
%makeinstall

%files
%defattr(-,root,root)
/usr

Aqui está o erro que recebo quando tento instalar:

[root@puppet rpms]# rpm -ivh Python-2.6.4-1.x86_64.rpm error: Failed dependencies: /home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6 is needed by Python-2.6.4-1.x86_64 /usr/local/bin/python is needed by Python-2.6.4-1.x86_64 /usr/local/bin/python2.6 is needed by Python-2.6.4-1.x86_64

Eu realmente não tenho experiência em construir meus próprios RPMs, mas estou tentando montar um servidor de marionetes, e parece favorecer a instalação via RPM. Eu preciso usar versões de software que não estão disponíveis como RPM ainda no CentOS.

O arquivo RPM é criado no diretório RPM - mas não tenho idéia do que o erro significa.

Alguma ideia? Agradecemos antecipadamente.

    
por Jon Haddad 05.02.2010 / 03:58

1 resposta

2

Isso ajuda a entender um pouco sobre como o RPM funciona aqui.

O RPM adicionará automaticamente requisitos para classificações específicas de arquivo que ele conhece (por exemplo, bibliotecas compartilhadas ELF, #! scripts, etc):

link

O que está acontecendo aqui é que alguns dos conteúdos da carga foram coletados com requisitos que não são empacotados:

/home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6
/usr/local/bin/python2.6

Podemos verificar isso executando rpmbuild -bi Python.spec para executar o build até o estágio de instalação. Com base nas informações fornecidas acima, você pode pesquisar arquivos:

find /home/rpmbuild/python/Python-2.6.4-root/ -type f -exec grep \ /home/rpmbuild/python/Python-2.6.4-root/usr/bin/python2.6

Eu diria que você está olhando:

/home/rpmbuild/Python-2.6.4-root/usr/bin/python2.6-config para o arquivo que tem um shebang que se refere ao buildroot completo e um monte de scripts que se referem a /usr/local/bin/python2.6

O RPM não está fazendo nada de errado aqui, e os detalhes do caminho certo para consertar isso geralmente serão específicos para a compilação do pacote que você está construindo.

Uma abordagem para corrigir isso seria definir AutoProvReq: no no preâmbulo do arquivo SPEC, por exemplo, diretamente após Group: Python . Isso deve dar a você um RPM instalável, mas você poderia argumentar que não está aproveitando ao máximo o modelo de dependência do RPM e que você teria caminhos incorretos em alguns dos seus arquivos de pacote Python.

Vamos ver especificamente a compilação do Python e tentar entender o que poderíamos fazer para corrigir isso de uma maneira mais abrangente.

Sua seção% install usa a macro% makeinstall que se expande por padrão como:

[pnasrat@centos5 ~]$ rpm -E '%makeinstall'

  /usr/bin/make \
    prefix=/usr \
    exec_prefix=/usr \
    bindir=/usr/bin \
    sbindir=/usr/sbin \
    sysconfdir=/etc \
    datadir=/usr/share \
    includedir=/usr/include \
    libdir=/usr/lib64 \
    libexecdir=/usr/libexec \
    localstatedir=/var \
    sharedstatedir=/usr/com \
    mandir=/usr/share/man \
    infodir=/usr/share/info \
  install

Para referência, eu costumo consultar o Fedora upstream SPEC , que é muito mais complicado, mas pode ser feito para construir (com alguma modificação e um patch para versões de autotools IIRC) um pacote python26 paralelo. Eu não vou entrar em detalhes sobre isso agora, mas se olharmos como eles instalam a linha chave é:

make install DESTDIR=%{buildroot}

Eu recomendo strongmente que você faça isso em vez de desabilitar o AutoProvReq. Como Python é uma compilação baseada em libtool que provavelmente é melhor que a macro% makeinstall como você já configurou o prefixo. Isso parece fazer a coisa certa inspecionando aqui. Observe que, se você estiver reconstruindo com essa alteração, também desejará adicionar:

%clean
rm -rf $RPM_BUILD_ROOT

E deseja uma linha de rm semelhante no início da seção %install . Isso tudo parece funcionar para mim:

[pnasrat@centos5 RPMS]$ rpm --test -ivh x86_64/Python-2.6.4-1.x86_64.rpm 
Preparing...                ########################################### [100%]

Pode valer a pena usar um pacote python2.6 fornecido em outro lugar, acredito que o IUSCommunity forneça pacotes, como documentado aqui - link . Estes são provavelmente muito mais próximos dos pacotes do fedora.

    
por 05.02.2010 / 08:32

Tags