尝试根据安装 Git博客上的说明在 Unix 和 Linux 计算机上安装 git,但失败并出现以下错误
make prefix=/usr/local all
GIT_VERSION = 1.8.3.4
* new build flags
CC credential-store.o
In file included from cache.h:4,
from credential-store.c:1:
git-compat-util.h:221:25: warning: openssl/ssl.h: No such file or directory
git-compat-util.h:222:25: warning: openssl/err.h: No such file or directory
In file included from credential-store.c:1:
cache.h:11:21: warning: openssl/sha.h: No such file or directory
cache.h:19:18: warning: zlib.h: No such file or directory
In file included from credential-store.c:1:
cache.h:21: syntax error before "z_stream"
cache.h:21: warning: no semicolon at end of struct or union
cache.h:28: syntax error before '}' token
cache.h:28: warning: type defaults to `int' in declaration of `git_zstream'
cache.h:28: warning: data definition has no type or storage class
cache.h:30: syntax error before '*' token
cache.h:31: syntax error before '*' token
cache.h:32: syntax error before '*' token
cache.h:33: syntax error before '*' token
cache.h:35: syntax error before '*' token
cache.h:36: syntax error before '*' token
cache.h:37: syntax error before '*' token
cache.h:38: syntax error before '*' token
cache.h:39: syntax error before '*' token
cache.h:40: syntax error before '*' token
cache.h:41: syntax error before '*' token
cache.h:42: syntax error before '*' token
cache.h:769: syntax error before '*' token
make: *** [credential-store.o] Error 1
我知道这是因为缺少 openssl 的库,但我无法获取这些库。
我的机器上没有 yum/apt-get 来按照建议运行以下命令:
$ yum install curl-devel expat-devel gettext-devel \
openssl-devel zlib-devel
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
我该如何在这些机器上获取这些库。这些机器无法访问互联网,如果需要,我可以执行 scp。有什么建议吗
对于 RHEL 和 RHEL 衍生产品(如 CentOS 系统),安装即可解决此问题。
$ yum install -y openssl-devel
对于 Ubuntu,我安装了
openssl
和 libssl-dev
sudo apt install openssl libssl-dev
检查配置文件代码后,我发现它正在预定义路径中搜索
include/openssl/ssl.h
您可以在您的系统上找到它,并可以使用
--with-openssl
运行配置
例如如果您在
ssl.h
中找到 /usr/include/openssl/ssl.h
那么您可以运行以下命令
./configure --with-openssl=/usr/
如果无法访问 yum、apt-get 等(例如位于没有 sudo 访问权限的集群机器上),请在本地手动安装新版本的 openssl,如下所示:
获取源码,解压,进入目录并建立build目录(非常重要):
wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
tar -xvzf openssl-1.0.2r.tar.gz
cd openssl-1.0.2r
mkdir builddir
配置到您的本地构建目标(确保其与源目录不同,不要仅使用 /home/yourdir/openssl-1.0.2r/),制作并安装:
./config --prefix=/home/yourdir/openssl-1.0.2r/builddir --openssldir=/home/yourdir/openssl-1.0.2r/builddir
make
make install
将构建目录中的 bin 和库路径添加到 shell 配置文件(即 ~/.bashrc)中的相应变量中,并获取它:
export PATH=/home/yourdir/openssl-1.0.2r/builddir/bin:$PATH
LD_LIBRARY_PATH="/your/other/dirs/libs:/home/yourdir/openssl-1.0.2r/builddir/lib:"
source ~/.bashrc
默认情况下,OpenSSL 现在应该位于您的新目录中:
which openssl
> /home/yourdir/openssl-1.0.2r/builddir/bin/openssl
现在尝试重新安装 git,也许可以使用 make distclean。
如果您无法访问所需库的预构建包,则必须诉诸包管理器出现之前的古老做法:在本地构建库,以及它们所依赖的库,以及它们所依赖的库,等等。
换句话说,您可能面临一个巨大且复杂的依赖追逐迷宫,其中可能包括修复平台的可移植性错误(如果源代码未开箱即用编译)。
Debian PTS 具有许多软件包上游项目的链接,因此您可能不需要猜测从“openssl 源”的 Google 结果中选择哪个结果。 参见例如http://packages.qa.debian.org/o/openssl.html(“浏览源代码”链接是一个好的开始;每个包的 Debian 版权文件还应该包含一个上游 URL,尽管它可能是历史)。
还有:
如果您本地有一个包管理器(在 Debian 上,这将是基本的
dpkg
),那么您可以避免查找和编译的困境,只需从连接互联网的主机复制所需的依赖包层次结构即可;但同样,请确保您获得完整的递归依赖项集(您所依赖的包反过来依赖的任何东西,递归地)。例如。 https://packages.debian.org/stable/openssl 显示 openssl
Debian 软件包所依赖的软件包;其中一些将依次拥有类似的依赖项列表。
以下修复了使用 ssl 编译 python 3.8.1
locate ssl.h
/usr/include/openssl/ssl.h
$ pwd
/var/opt/python381/Python-3.8.1
$ ln -s /usr/include/openssl
结果
./configure
~~
checking whether compiling and linking against OpenSSL works... yes
checking for X509_VERIFY_PARAM_set1_host in libssl... yes
自 2013 年(本页问题所在年份)以来,请确保使用足够新的
curl
版本。
在 Git 2.34(2021 年第 4 季度)中,围绕 libcURL 版本的条件编译已得到理顺。
参见 提交 32da6e6、提交 e4ff3b6、提交 905a028、提交 2a7f646、提交 7ce3dcd、提交 2d4032c、提交 59a399e (2021 年 9 月 13 日),并 提交 e54e502,提交5b95244(2021 年 9 月 11 日),作者:Ævar Arnfjörð Bjarmason (
avar
).gitster
-- 合并于 commit 8f79fb6,2021 年 9 月 23 日)
的值
:不要硬编码http
CURL_SOCKOPT_OK
签字人:Ævar Arnfjörð Bjarmason
标头将git-curl-compat.h
定义为其已知值。CURL_SOCKOPT_OK
它被硬编码在 a15d069中的http.c
(“:在 TCP 套接字上启用 keepalive”,2013 年 10 月 12 日,Git v1.8.5-rc0 -- merge)。http