저는 CentOS Linux 서버 세트의 최신 git 버전을 유지하는 작업을 해왔습니다. 저는 간단한 설치를 위해 로컬 Yum 미러에 게시할 수 있는 바이너리 RPM을 생성하고 정기적인 유지 관리의 일환으로 나머지 OS와 함께 모든 것을 쉽게 최신 상태로 유지하고 싶습니다.
일반적으로 운영 체제의 패키지 관리자(yum)에서 git 바이너리를 설치하는 것이 좋습니다. 그러나 최신 CentOS/RHEL 7에서도 사용 가능한 최신 패키지는 최신 2.7.1에 비해 상대적으로 오래된 1.8.3.1에 머물러 있습니다. RPMForge는 최신 git 패키지를 제공하는 데 사용된 것처럼 보이지만 EL 6부터는 더 이상 제공하지 않습니다. 따라서 소스에서 빌드하는 것이 실제로 여기에 남은 유일한 옵션인 것처럼 보입니다. 그러나 여기서는 사용자 정의 RPM 패키지를 사용하여 이를 유지하는 것이 좋습니다.
- 인용하다:
- https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
- https://stackoverflow.com/questions/21820715/how-to-install-latest-version-of-git-on-centos-6-x-7-x
- https://stackoverflow.com/questions/28365026/update-to-latest-git-version-2-2-x-in-centos
- https://www.digitalocean.com/community/tutorials/how-to-install-git-on-centos-7
- https://serverfault.com/questions/709433/install-a-newer-version-of-git-on-centos-7
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
- 인용하다:
- https://fedoraproject.org/wiki/How_to_create_an_RPM_package
- https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
- https://wiki.centos.org/HowTos/RebuildSRPM
- http://www.thegeekstuff.com/2015/02/rpm-build-package-example/
- (부적격, 루트로 소스 RPM 빌드!)
- http://blog.packagecloud.io/eng/2015/05/11/building-rpm-packages-with-mock/
어떻게 진행해야 할지 잘 모르겠습니다. 대체 설치 접두사를 다르게 지정해야 합니까, 아니면 다른 방법을 시도해 볼 수 있습니까?
답변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 패키지의 대체 항목으로 간주하고 패키지가 설치될 때 제거할 가능성이 높습니다.