GitHub: https://github.com/storagezhang
Emai: debugzhang@163.com
华为云社区:https://bbs.huaweicloud.com/blogs/250281
今天在服务器上使用 git 访问 GitHub 时,出现了如下两种错误:
gnutls_handshake() failed: Error in the pull function.gnutls_handshake() failed: Error in the push function.
服务器配置:
Ubuntu 18.04.4 LTSLinux Ubuntu 4.15.0-54-generic #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019 x86_64 x86_64 x86_64 GNU/LinuxIntel(R) Xeon(R) CPU E5-26xx v4
经过分析,问题应该在
gnutls
模块上。
该错误可以通过从源码构建 git 安装包,并将
gnutls
替换为
openssl
解决。
步骤如下:
# 安装软件包依赖sudo apt-get install -y build-essential fakeroot dpkg-devsudo apt-get -y build-dep gitsudo apt-get install -y libcurl4-openssl-dev# 创建目录mkdir git-opensslcd git-openssl# 获取 git 源码apt-get source gitcd git-*# 修改 git 安装包配置文件# 将 libcurl4-gnutls-dev 替换为 libcurl4-openssl-devsed -i -e \'s/libcurl4-gnutls-dev/libcurl4-openssl-dev/g\' ./debian/control# 删除 TEST=test,缩短安装包构建时间sed -i -- \'/TEST\\s*=\\s*test/d\' ./debian/rules# 构建安装包sudo dpkg-buildpackage -rfakeroot -b# 安装,git 版本号可能不一致cd ../sudo dpkg -i git_2.17.1-1ubuntu0.8_amd64.deb# 清理cd ../../sudo rm -rf git-openssl
完成