当前位置: 首页 > news >正文

手把手教你从OpenSSL开始,在CentOS/Ubuntu上编译一套支持HTTPS的Git(避坑libcurl链接错误)

从OpenSSL到HTTPS支持的Git:CentOS/Ubuntu编译全指南

当你在一台新配置的Linux服务器上尝试使用git clone命令时,可能会遇到令人沮丧的错误提示:"fatal: Unable to find remote helper for 'https'"或"Protocol 'https' not supported or disabled in libcurl"。这通常意味着系统自带的Git版本缺少对HTTPS协议的支持。本文将带你从OpenSSL开始,一步步编译安装完整的Git工具链,确保HTTPS功能正常工作。

1. 环境准备与依赖安装

在开始编译之前,我们需要确保系统具备必要的编译工具和依赖库。不同Linux发行版的包管理命令有所不同,以下是针对CentOS和Ubuntu的具体操作:

1.1 安装基础编译工具

CentOS 7/8:

sudo yum groupinstall "Development Tools" -y sudo yum install wget unzip zlib-devel perl-ExtUtils-MakeMaker gettext-devel -y

Ubuntu 18.04/20.04:

sudo apt-get update sudo apt-get install build-essential wget unzip libz-dev libssl-dev gettext libcurl4-openssl-dev -y

注意:Ubuntu系统可能会提示某些包已是最新版本,这通常不会影响后续操作。

1.2 清理可能冲突的旧版本

为了避免编译过程中出现库冲突,建议先移除系统自带的旧版本开发包:

CentOS:

sudo yum remove openssl-devel curl-devel -y

Ubuntu:

sudo apt-get remove libssl-dev libcurl4-openssl-dev -y

2. 编译安装OpenSSL

OpenSSL是支持HTTPS协议的基础加密库,我们需要先编译安装最新稳定版本。

2.1 下载并解压OpenSSL源码

wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar zxf openssl-1.1.1w.tar.gz cd openssl-1.1.1w

2.2 配置与编译

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib make -j$(nproc) sudo make install

2.3 配置环境变量

为了让系统找到新安装的OpenSSL库,需要添加以下环境变量:

echo 'export PATH="/usr/local/openssl/bin:$PATH"' >> ~/.bashrc echo 'export LD_LIBRARY_PATH="/usr/local/openssl/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc source ~/.bashrc sudo ldconfig

验证安装:

openssl version

应该显示类似"OpenSSL 1.1.1w"的版本信息。

3. 编译安装cURL

cURL是Git用于处理HTTP/HTTPS请求的底层库,必须正确编译以支持HTTPS。

3.1 下载并解压cURL源码

wget https://curl.se/download/curl-7.88.1.tar.gz tar zxf curl-7.88.1.tar.gz cd curl-7.88.1

3.2 配置与编译

./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl --with-zlib make -j$(nproc) sudo make install

3.3 配置环境变量

echo 'export PATH="/usr/local/curl/bin:$PATH"' >> ~/.bashrc echo 'export LD_LIBRARY_PATH="/usr/local/curl/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc source ~/.bashrc sudo ldconfig

验证安装:

curl --version

输出中应包含"https"协议支持和"OpenSSL/1.1.1w"字样。

4. 编译安装Git

现在我们可以编译支持HTTPS的Git了。

4.1 下载并解压Git源码

wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.40.1.tar.gz tar zxf git-2.40.1.tar.gz cd git-2.40.1

4.2 配置与编译

make configure ./configure --prefix=/usr/local/git --with-curl=/usr/local/curl --with-openssl=/usr/local/openssl make -j$(nproc) all sudo make install

4.3 配置环境变量

echo 'export PATH="/usr/local/git/bin:$PATH"' >> ~/.bashrc source ~/.bashrc

验证安装:

git --version

应显示类似"git version 2.40.1"的版本信息。

5. 常见问题排查

即使按照上述步骤操作,仍可能遇到一些问题。以下是常见问题的解决方案:

5.1 编译时出现"RAND_egd"错误

如果编译cURL时出现类似以下错误:

vtls/openssl.c:438:15: error: implicit declaration of function 'RAND_egd'

这是因为新版本OpenSSL移除了这个函数。解决方法是在配置cURL时禁用egd支持:

./configure --prefix=/usr/local/curl --with-ssl=/usr/local/openssl --without-egd

5.2 运行时找不到动态库

如果执行git命令时出现类似以下错误:

error while loading shared libraries: libssl.so.1.1: cannot open shared object file

这是因为系统找不到OpenSSL库。确保已正确设置LD_LIBRARY_PATH并执行了ldconfig

export LD_LIBRARY_PATH="/usr/local/openssl/lib:$LD_LIBRARY_PATH" sudo ldconfig

5.3 Git仍不支持HTTPS

如果git clone https://...仍然失败,检查Git是否找到了正确的cURL库:

ldd /usr/local/git/bin/git | grep curl

输出应指向/usr/local/curl/lib下的库文件。

6. 系统集成与优化

为了确保系统范围内使用新编译的Git,可以创建符号链接:

sudo ln -sf /usr/local/git/bin/git /usr/bin/git

同时,可以设置Git的全局配置以优化HTTPS性能:

git config --global http.sslVerify true git config --global http.postBuffer 1048576000

对于需要频繁访问的仓库,可以启用Git的凭证缓存:

git config --global credential.helper cache git config --global credential.helper 'cache --timeout=3600'

7. 验证HTTPS支持

最后,通过克隆一个HTTPS仓库来验证一切工作正常:

git clone https://github.com/git/git.git

如果克隆成功且没有警告信息,说明已正确编译安装支持HTTPS的Git。

http://www.jsqmd.com/news/656854/

相关文章:

  • XAMPP环境下Pikachu靶场搭建与常见端口冲突解决方案
  • 用 xv6 的 Lab1 理解 Unix 管道与进程:手把手教你实现 pingpong 和 primes 筛子
  • DL-2007数字水准仪:从外业数据采集到内业精度验证全流程解析
  • 半导体工程师必看:Calibre DESIGNrev 命令行模式全解析,告别GUI提升效率
  • 一站式免费Switch模拟方案:用Ryujinx在PC上畅玩任天堂游戏
  • 2026年4月北京校园餐智慧监管平台/膳食营养/食安监管/智慧厨房/餐饮智能品牌公司五强深度测评与选型指南 - 2026年企业推荐榜
  • 2026年挤压造粒机厂家大比拼:谁更具竞争力?大型粉碎机/微型粉土机/大型有机肥生产设备,造粒机公司推荐分析 - 品牌推荐师
  • 告别弹窗变黑!Cesium PostProcessStage 精准滤镜实现天地图暗黑科技风(附完整GLSL代码)
  • 2025.04.15【技术前沿】| scran:单细胞RNA测序数据分析的全流程解决方案
  • 5个StreamFX进阶技巧:从普通直播到专业制作的无缝升级
  • Hadoop MapReduce深度解析:从Shuffle机制到性能调优实战
  • 华为防火墙实战:5分钟搞定NAT64,让IPv6主机和IPv4主机互访(附完整配置命令)
  • 实战指南:基于专业工具的服务器电子数据取证全流程解析
  • 海关数据推荐公司怎么选?这些主体值得了解 - 品牌排行榜
  • 如何理解人类意图和模糊指令?
  • GetQzonehistory:一键备份你的QQ空间历史说说,让青春记忆永不丢失![特殊字符]
  • 用Python模拟复杂世界:Mesa智能体建模框架深度解析
  • 告别复制粘贴!Chrome二维码插件让网页分享效率提升300%
  • 手把手教你实现异步电机DTC控制:从理论到实践的保姆级教程
  • 2026年华东、华中、华南集中供热保温管道系统与蒸汽节能输送技术应用现状 - 企业名录优选推荐
  • 终极Qobuz音乐下载指南:快速构建个人无损音乐库
  • ComfyUI-Impact-Pack终极安装指南:如何快速解锁AI图像增强的完整功能
  • 如何轻松将 VCF 文件导入Android (已解决)
  • SuperPoint深度学习特征检测与描述技术:从原理到实战的完整指南
  • 告别性能瓶颈:在PyQt5中用QAbstractItemModel自定义Model优化大型QTreeView数据加载
  • Flutter异步编程实战:用async/await告别回调地狱
  • 用微信小程序云开发+艾宾浩斯曲线,我给自己做了个“笨”但有效的背单词工具
  • 谁是水质监测的“隐形冠军”?2026硅磷钠表品牌实力大比拼 - 品牌推荐大师1
  • el-upload 多文件上传优化:如何利用 FormData 实现批量请求
  • Rescuezilla:系统恢复的瑞士军刀,让数据安全触手可及