現在のGitバージョンのCentOS RPMビルド、代替プレフィックスで再ビルドに失敗する

現在のGitバージョンのCentOS RPMビルド、代替プレフィックスで再ビルドに失敗する

私はCentOS Linuxサーバーセットの最新のgitバージョンを維持する作業をしてきました。私は簡単なインストールのためにローカルYumミラーに公開できるバイナリRPMを作成し、定期的なメンテナンスの一環として、残りのOSですべてを簡単に最新の状態に保ちたいと思います。

通常、オペレーティングシステムのパッケージマネージャ(yum)からgitバイナリをインストールすることをお勧めします。ただし、最新のCentOS / RHEL 7でも利用可能な最新のパッケージは、最新の2.7.1に比べて比較的古い1.8.3.1にとどまります。 RPMForgeは最新のgitパッケージを提供するために使用されているように見えますが、EL 6以降は提供されません。したがって、ソースからビルドすることは、実際にここに残った唯一のオプションのようです。ただし、ここではカスタムRPMパッケージを使用してそれを維持することをお勧めします。

RPMパッケージングにFedoraの「模擬」を使用することがこの問題を解決するための最良の方法であるようです。最悪のことは、SPECファイルをインポート、生成、維持するようです。幸いなことに、Fedora Rawhideはこの作業に非常に便利なようです。https://rpmfind.net/linux/RPM/fedora/devel/rawhide/src/g/git-2.7.0-1.fc24.src.html

SRPMで簡単な再構築を成功させました。

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

しかし、既存のオペレーティングシステムが提供するgitインストールと競合が多く、インストールに失敗しました。いずれにせよ、他のOS提供パッケージ(以前のgitバージョンが必要な場合があります)との互換性や依存関係の問題が発生する危険性があるため、OS提供バージョンを削除/交換したくありません。私はプレフィックス付きのカスタムRPMを使用することを好みます/usr/local

rpm -qpiデフォルトのRPMレポートは、これらの代替場所にインストールするフラグを使用してrpmを(not relocatable)実行できないことを意味します。--prefixただし、yumでデフォルトのインストールを実行するのは複雑になるため、この方法を使用したくありません。生成されたRPMがクラッシュしないように、ソースRPMビルドで簡単にカスタマイズできると思います。

私は_prefix次のようにSPECファイルでマクロの代替値を定義するのと同じくらい簡単だと思いました。

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

完全に失敗するまではうまくいくようです。次のエラーで終わりました。

+ 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

または、SPECSとSOURCESを最初に抽出して(from)inprefixに変更してから再構築すると、問題はまだ失敗しますが、別の場所にあります。/usr/local%{_prefix}SPECS/git.spec

+ 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

(私は以前にマクロを定義しようとすると、SPECファイルを強制的に変更するよりも成功に近かったと思います_prefixprefix_prefix

どうすればいいのか分かりません。別のインストールプレフィックスを別々に指定する必要がありますか、それとも別の方法を試すことができますか?

ベストアンサー1

私はいくつかのgit repoの人々がgit 2.7.2用のSRPMを持っていることを発見しました。それがあなたにとって十分に新しいものであれば。

Centos 6でうまく構築しました。

https://github.com/nkadel/git27-srpm

それは私のためにすべてのパッケージと依存関係を作成し、それを私のプライベートリポジトリに追加してgitをインストールすることができました。 2.9.3の変更ログで私の推測では、2.9.3を得るには仕様ファイルのバージョン番号を修正するだけです。 (作成時の最新バージョン)

おすすめ記事