현재 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 ) in prefix으로 변경 한 다음 다시 빌드하면 문제가 여전히 실패하지만 다른 위치에 있습니다./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 파일을 강제로 변경하는 것보다 성공에 더 가까웠다고 추측합니다 _prefix. 왜냐하면 이제 여전히 기본값을 사용하는 다른 사용법이 있을 수 있기 때문입니다.)prefix_prefix

어떻게 진행해야 할지 잘 모르겠습니다. 대체 설치 접두사를 다르게 지정해야 합니까, 아니면 다른 방법을 시도해 볼 수 있습니까?

답변1

나는 일부 git repo 사람들이 git 2.7.2용 SRPM을 가지고 있다는 것을 발견했습니다. 그것이 당신에게 충분히 새로운 것이라면 말이죠.

Centos 6에서 성공적으로 구축했습니다.

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

그것은 나를 위해 모든 패키지와 종속성을 생성했으며 이를 내 개인 저장소에 추가하여 git을 설치할 수 있었습니다. 2.9.3에 대한 변경 로그에서 내 추측으로는 2.9.3을 얻으려면 사양 파일의 버전 번호를 수정하기만 하면 된다는 것입니다. (작성 당시 최신 버전)

답변2

접두사를 설정하려는 시도가 부분적으로 유효한 것 같습니다 /usr/local.

CentOS SRPM을 다운로드하여 압축을 풀고 .spec파일을 읽어보세요. 구성이 설정되는 위치를 확인하고 거기에서 접두사를 수정하세요. 최신 git tarball을 다운로드하고 소스(및 버전!)에 대한 참조를 변경한 후 빌드해 보세요. 대부분의 패치는 적용 가능하지 않을 수 있으며 해당 패치의 적합성/요구 사항을 확인해야 합니다.

패키지 이름을 git-local또는 이와 유사한 이름으로 변경하십시오. 그렇지 않은 경우 패키지 관리자는 이를 공식 git 패키지의 대체 항목으로 간주하고 패키지가 설치될 때 제거할 가능성이 높습니다.

관련 정보