如何查看Git二进制文件是否使用OpenSSL或GnuTLS?

8

我正在尝试调试一个奇怪的问题,使用 Ubuntu 和企业代理,在 https 协议下,对特定仓库进行 git clone。相同的操作在 CentOS、Fedora 发行版上可以正常工作,但在我们的环境中无法在 Ubuntu 或 Debian 上运行。

显然,在 Ubuntu 包中,git 使用 gnutls,而在其他平台上使用 openssl。然而,即使在 Ubuntu 上构建源代码,也会根据 this 使用 openssl。

有没有办法让我检查给定的 git 安装是使用哪个程序的?是否有一些输出可以告诉我这个信息?

这些 问题是相关的,但都涉及更改运行时或构建时 - 在这一点上,我只需要关于它使用的是哪个程序的信息。

1个回答

11
$ cd /usr/lib/git-core
$ ./git --version
git version 1.9.1
$ ldd git-http-fetch | grep libcurl
    libcurl-gnutls.so.4 => /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 (0x00007f8d5dcdf000)

$ cd /usr/libexec/git-core
$ ./git --version
git version 2.8.1
$ ldd git-http-fetch | grep libcurl
    libcurl-gnutls.so.4 => /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 (0x00007f6bd1e42000)

所以显然我使用的操作系统提供的版本和自编译的版本都不支持gnutls。

当运行相同的命令时,openssl的输出就像这样,没有libcurl-gnutls,但是

libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007fe96267e000)

看着这个答案,似乎在运行时git只是使用系统设置的任何libcurl,所以我的问题有点误导人。无论如何,这个答案是正确的,它会告诉你正在使用哪一个。


也许这并不相关,但是即使我使用--with-openssl标志进行编译,并且在使用ldd git-http-fetch时,我看到该库也被使用:libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f7f8b8de000)它真的使用的是OpenSSL而不是GNU TLS吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接