CentOS7通过rpm包离线安装git

前言

如果能连接外网,谁甘愿在离线状态下折腾,重新安装git的起因是服务器上的git版本(1.8.3.1)过低,Mac客户端升级后git版本(2.40.0)太高,导致无法验证密钥来进行拉取操作,所以要把服务器上的git升级一下,而git的1.8.3.1版本貌似是CentOS7的默认版本,我在多篇文章中看到了这个版本号,本来以为分分钟搞定,结果的折腾到半夜。

初次安装失败

开始觉得挺顺利的,如果能升级就直接升级,不能升级就直接移除掉然后安装就行了,然后我就直接通过 sudo yum remove git 删除了git,刷的一下很快啊。

据说在 CentOS 7 上安装新版本 git 最快的方法是通过 End Point 库,所以我跟着找到的教程输入下面的命令企图添加 “End Point Package Repository”,但是报错:

1
2
yum install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
yum install git

官网 packages.endpointdev.com/有专门讲解安装git 2.x的帖子,看起来很轻松,但是这条路我可能走不通了

我这里提示 “curl:(6) Could resolve host: packages.endpointdev.com; Unknown error”,我的天,难道这台机器不能访问外网?

尝试修改软件源

然后我尝试ping了几个常见的域名均已失败告终,所以我只能离线安装了?后来我发现它不是不能访问外网,只是不能访问域名,所以我自作聪明的把软件源/etc/yum.repos.d/CentOS-Base.repo里的域名都改成了IP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#mirrors.cloud.aliyuncs.com被我改成了100.100.2.148

enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

接着我就发现这样是无法使用的,这个域名的IP一直在变,然后我又找了公司内部的软件源直接把IP替换上去,发现访问超时,看来得解决无法解析域名的问题,后来查到的修改 /etc/resolv.conf,于是在文件中添加一下内容:

1
2
nameserver 114.114.114.114
nameserver 8.8.8.8

保存之后可以解析域名了,将软件源修改为域名的形式依旧访问超时,这条路彻底走不通了。

离线安装git

离线安装类似于Window上安装一个.msi文件,不过git貌似没有特别方便的安装包,看看Linux下这些安装方式,基本都是需要联网下载的,其中CentOS还是最麻烦的,需要编译安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Debian/Ubuntu
For the latest stable version for your release of Debian/Ubuntu

# apt-get install git
For Ubuntu, this PPA provides the latest stable upstream Git version

# add-apt-repository ppa:git-core/ppa # apt update; apt install git
Fedora
# yum install git (up to Fedora 21)
# dnf install git (Fedora 22 and later)
Gentoo
# emerge --ask --verbose dev-vcs/git
Arch Linux
# pacman -S git
openSUSE
# zypper install git
Mageia
# urpmi git
Nix/NixOS
# nix-env -i git
FreeBSD
# pkg install git
Solaris 9/10/11 (OpenCSW)
# pkgutil -i git
Solaris 11 Express
# pkg install developer/versioning/git
OpenBSD
# pkg_add git
Alpine
$ apk add git
Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux, et al.
RHEL and derivatives typically ship older versions of git. You can download a tarball and build from source, or use a 3rd-party repository such as the IUS Community Project to obtain a more recent version of git.

Slitaz
$ tazpkg get-install git

但是编译git需要有依赖项,还好它依赖的不多,很多教程上来就装一堆,不管有用没有了:

1
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel gcc perl-ExtUtils-MakeMaker package

但是我的机器上 yum 命令已经废了,无法联网安装新的东西,所以这些依赖项我必须找到安装包来离线安装,这就要用到rpm包了。

什么是rpm

rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎,逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 上的软件易于安装和升级,说白了就是可以通过它来安装软件包。

RPM包里面包含可执行的二进制程序,还包括程序运行时所需要的文件有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系,这和Windows的软件包结构类似。

安装准备

  • 下载指定版本git源码 source code
  • 下载zlib-devel-1.2.7-15.el7.x86_64.rpm RPM库
  • 机器上本来有gcc,如果没有自己想办法装吧

幸运的是我的机器上有gcc,并且经过实践发现只要成功安装了zlib-devel就可以完成git的编译,如果没安装会报编译错误:

1
2
3
4
5
cache.h:21:18: fatal error: zlib.h: No such file or directory
#include <zlib.h>
^
compilation terminated.
make: *** [fuzz-commit-graph.o] Error 1

在有网的情况下,CentOS使用 yum install zlib-devel 解决,Ubuntu安装 apt-get install zlib1g-dev 解决

安装zlib-devel

如果版本正确通过rpm安装还是挺快的,但是我一开始下载了另一个版本 zlib-devel-1.2.7-18.el7.x86_64.rpm,安装时提示我:

1
2
3
[root@demo software]# rpm -i zlib-devel-1.2.7-18.el7.x86_64.rpm
error: Failed dependencies:
zlib = 1.2.7-18.el7 is needed by zlib-devel-1.2.7-18.el7.x86_64

我又去下载了 zlib-1.2.7-18.el7.x86_64.rpm ,结果安装时出现冲突:

1
2
[root@demo software]# rpm -i zlib-1.2.7-18.el7.x86_64.rpm
file /usr/lib64/libz.so.1.2.7 from install of zlib-1.2.7-18.el7.x86_64 conflicts with file from package zlib-1.2.7-15.el7.x86_64

最后找了兼容的版本 rpm -i zlib-devel-1.2.7-15.el7.x86_64.rpm 解决了这个问题。

编译git

  • 解压git源码 tar -zxf git-2.28.0.tar.gz
  • 进入解压后的目录,执行安装前检查 make configure
  • 指定安装目录 ./configure --prefix=/usr/local
  • 执行编译安装 make install
  • 查看git版本 git --version

终于装完了,呼~

总结

  • 服务端和客户端的git版本差距过大时可能导致无法验证密钥的问题
  • 在CentOS上git可以采用yum安装,也可以使用 “End Point Package Repository” 来安装
  • 如果想通过编译安装git需要有gcc,还要能安装上zlib-devel依赖项
  • 参考文档:https://zhuanlan.zhihu.com/p/352955774

补充

yum失败

终于找到了我的yum更新源一直超时的原因,是因为我通过 Wandisco GIT存储库 方式尝试安装过 git,步骤如下:

  • 先写入新yum存储库配置文件启用Wandisco GIT存储库,在终端输入 vim /etc/yum.repos.d/wandisco-git.repo
  • 文件中加入如下内容,保存退出

    1
    2
    3
    4
    5
    6
    [wandisco-git]
    name=Wandisco GIT Repository
    baseurl=http://opensource.wandisco.com/centos/7/git/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
  • 导入存储库GPG密钥 sudo rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

  • 安装Git yum install git

结果 opensource.wandisco.com 无法正常访问,导致 yum update 报错,把 wandisco-git.repo 文件删掉就好了

rpm 和 yum 的关系

之前讲到rpm是由Red Hat公司开发的软件包管理方式,使用它可以方便的进行软件的安装、查询、卸载、升级等工作。但处理rpm软件包之间的依赖性问题往往会很繁琐,尤其是当软件由多个rpm包组成时,比如我们在离线安装git时遭遇到的问题。

Yum(Yellow dog Updater, Modified)是一个在Fedora和RedHat等系统上基于RPM包管理前端软件包管理软件,能够从指定的服务器自动下载RPM包并且安装,并自动处理软件包的依赖关系,可以一次安装所有依赖的软体包。

总结来说就是, rpm命令只能安装已经下载到本地机器上的rpm包,并且自己解决依赖问题,yum能在线下载并安装rpm包、更新内核、并自动处理包与包之间的依赖问题。

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

死去元知万事空,但悲不见九州同~

2023-3-21 23:11:12

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客