Construa o RPM do CentOS para a liberação atual do git, reconstrução malsucedida com prefixo alternativo

1

Estou preso em um esforço para fornecer uma versão atualizada do git para uma coleção de servidores CentOS Linux. Eu estava esperando poder criar RPMs binários que eu poderia ter publicado em um espelho yum local - para simplesmente instalar, e manter facilmente tudo atualizado como parte da manutenção regular junto com o resto do sistema operacional. .

É uma recomendação comum simplesmente instalar os binários git do gerenciador de pacotes do sistema operacional (yum). No entanto, mesmo sob o último CentOS / RHEL 7, os últimos pacotes fornecidos estão presos em um 1.8.3.1 relativamente antigo - comparado com o mais recente 2.7.1. Parece que o RPMForge costumava fornecer alguns pacotes git atualizados, mas não desde o EL 6. Portanto, parece que construir a partir da fonte é realmente a única opção restante aqui - mas usar um pacote RPM personalizado aqui para manter isso seria uma boa idéia. / p>

Parece que usar o "mock" do Fedora para embalagem RPM será a melhor maneira de lidar com isso. Parece que o pior disso seria obter / criar / manter um arquivo SPEC. Felizmente, parece que o Fedora Rawhide será inestimável para isso - como disponível em link .

Tive sucesso em fazer uma reconstrução simples do SRPM:

$ mock -r epel-7-x86_64 rebuild /tmp/git-2.7.0-1.fc24.src.rpm

No entanto, a instalação falha devido a muitos conflitos da instalação do git fornecida pelo sistema operacional. Eu não gostaria de remover / substituir as versões fornecidas pelo sistema operacional, correndo o risco de ter problemas de compatibilidade ou dependência no futuro com outros pacotes fornecidos pelo sistema operacional que podem esperar a versão mais antiga do git. Eu prefiro um RPM personalizado que use um prefixo /usr/local .

Usar rpm -qpi em relação a qualquer um dos RPMs nativos informa que eles são (not relocatable) - o que significa que não posso executar o rpm com% flag --prefix para instalar em um local alternativo. No entanto, eu não acredito que eu queira depender de usar isso de qualquer maneira, pois complicaria a possibilidade de executar instalações padrão do yum. Eu acho que isso poderia ser facilmente customizado na construção do RPM de origem, para que os RPMs resultantes não entrem em conflito.

Eu pensei que isso seria tão simples quanto definir um valor alternativo para a macro _prefix no arquivo SPEC, como tal:

$ mock -r epel-7-x86_64 -D "_prefix /usr/local" rebuild /tmp/git-2.7.0-1.fc24.src.rpm

Parecia que estava progredindo bem, até falhar espetacularmente - terminando com os seguintes erros:

+ sed -e 's@^/builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64@@'
find: '/builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/share/perl5/vendor_perl': No such file or directory
+ find /builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/share/perl5/vendor_perl -mindepth 1 -type d
+ sed -e 's@^/builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64@%dir @'
find: '/builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/share/perl5/vendor_perl': No such file or directory
+ grep Git/SVN perl-git-files
error: Bad exit status from /var/tmp/rpm-tmp.sw2Kfy (%install)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.sw2Kfy (%install)
ERROR: Exception(/tmp/git-2.7.0-1.fc24.src.rpm) Config(epel-7-x86_64) 2 minutes 39 seconds
INFO: Results and/or logs in: /var/lib/mock/epel-7-x86_64/result
ERROR: Command failed. See logs for output.
# bash --login -c /usr/bin/rpmbuild -bb --target x86_64 --nodeps  /builddir/build/SPECS/git.spec

Como alternativa, se eu extrair primeiro o SPECS e as SOURCES, altere prefix para /usr/local (de %{_prefix} ) em SPECS/git.spec e, em seguida, reconstrua, as coisas ainda falharão - mas em um ponto diferente:

+ install -pm 644 contrib/emacs/git.el /builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/share/emacs/site-lisp/git
+ install -Dpm 644 /builddir/build/SOURCES/git-init.el /builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/share/emacs/site-lisp/site-start.d/git-init.el
+ install -pm 755 contrib/credential/gnome-keyring/git-credential-gnome-keyring /builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/libexec/git-core
install: cannot create regular file '/builddir/build/BUILDROOT/git-2.7.0-1.el7.centos.x86_64/usr/libexec/git-core': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.CJFTef (%install)
    Bad exit status from /var/tmp/rpm-tmp.CJFTef (%install)


RPM build errors:
ERROR: Exception(git-build/2/git-2.7.0-1.el7.centos.src.rpm) Config(epel-7-x86_64) 1 minutes 37 seconds
INFO: Results and/or logs in: /var/lib/mock/epel-7-x86_64/result
ERROR: Command failed. See logs for output.
 # bash --login -c /usr/bin/rpmbuild -bb --target x86_64 --nodeps  /builddir/build/SPECS/git.spec

(Eu estou supondo que a primeira tentativa com a definição da macro _prefix foi mais próxima do sucesso do que alterar com força prefix no arquivo SPEC - já que agora pode haver outros usos de _prefix que ainda estão usando o padrão valor.)

Não sei exatamente como proceder. Existe uma maneira diferente de especificar um prefixo de instalação alternativo ou há algo mais que eu possa tentar?

    
por ziesemer 07.02.2016 / 02:35

1 resposta

0

Eu encontrei alguns caras git repo que tinham SRPM para git 2.7.2 Se isso é novo o suficiente para você.

Eu consegui construir isso no Centos 6.

link

Ele cria todos os pacotes e dependências para mim, e eu pude adicioná-lo ao meu repositório particular para instalar o git. Eu estou supondo que a partir do changelogs em 2.9.3 você poderia apenas aumentar o número da versão no arquivo spec para obter 2.9.3. (última versão no momento da redação deste texto)

    
por 19.08.2016 / 13:50