2

我正在尝试配置 postgres (8.4.13) 以使用 Kerberos。我似乎无法让它工作。我一直在阅读的一个“陷阱”是 postgres 必须在 kerberos 支持下构建。好吧,我拥有的 postgres 是从 Internet 下载的 rpm。我如何判断这个 postgres 是否是在 Kerberos 支持下构建的?有没有办法列出“已安装的组件?谢谢!!!

4

2 回答 2

6

pg_config可能会有所帮助,例如:

pg_config --configure

于 2013-01-28T19:59:57.117 回答
3

一些二进制文件具有类似命令的选项,可让您查看它们是如何编译的。我不确定postgres是否会这样做。您可以使用 --version (但这通常非常简约)和 --describe-config 将转储如下值:

Security and Authentication    STRING  FILE:/usr/local/etc/postgresql/krb5.keytab 
                 Sets the location of the Kerberos server key file

如果为 postgresql 安装配置了 kerberos 功能。

许多打包系统也有捕获传递给构建过程的编译时间选项的方法(pkg info -f例如,FreeBSD 就是这样做的)。自从我使用 rpm 以来已经有一段时间了,较新的版本可能有直接在二进制文件上进行此类查询的方法。在我管理的基于 rpm 的系统上,我会将手头的 src.rpm 和 .spec 文件保存在每个已安装应用程序的本地存储库中。这是为了遵守内部“政策”:-) 并跟踪配置和 OPTFLAGS 设置、构建中使用的源代码等。

以下是对类似问题的回复:

https://serverfault.com/questions/36037/how-can-i-find-what-options-an-rpm-was-compiled-with

查看二进制文件链接到哪些库的通用 UNIX 方法是使用“ldd”,如下所示:

$~/ ldd /usr/local/bin/postgres                              
/usr/local/bin/postgres:
    libgssapi.so.3 => /usr/local/lib/libgssapi.so.3 (0x800a38000)
    libxml2.so.5 => /usr/local/lib/libxml2.so.5 (0x800b74000)
    libpam.so.5 => /usr/lib/libpam.so.5 (0x800dc4000)
    libssl.so.6 => /usr/lib/libssl.so.6 (0x800ecc000)
    libcrypto.so.6 => /lib/libcrypto.so.6 (0x80101f000)
    libm.so.5 => /lib/libm.so.5 (0x8012bf000)
    libc.so.7 => /lib/libc.so.7 (0x8013df000)
    libintl.so.9 => /usr/local/lib/libintl.so.9 (0x801621000)
    libheimntlm.so.1 => /usr/local/lib/libheimntlm.so.1 (0x80172a000)
    libkrb5.so.26 => /usr/local/lib/libkrb5.so.26 (0x801830000)
    libheimbase.so.1 => /usr/local/lib/libheimbase.so.1 (0x8019ad000)
    libhx509.so.5 => /usr/local/lib/libhx509.so.5 (0x801ab1000)
    libwind.so.0 => /usr/local/lib/libwind.so.0 (0x801bf9000)
    libsqlite3.so.8 => /usr/local/lib/libsqlite3.so.8 (0x801d21000)
    libasn1.so.8 => /usr/local/lib/libasn1.so.8 (0x801ec3000)
    libcom_err.so.2 => /usr/local/lib/libcom_err.so.2 (0x802058000)
    libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x80215b000)
    libroken.so.19 => /usr/local/lib/libroken.so.19 (0x802358000)
    libcrypt.so.5 => /lib/libcrypt.so.5 (0x802469000)
    libthr.so.3 => /lib/libthr.so.3 (0x802589000)
    libz.so.5 => /lib/libz.so.5 (0x8026a2000)

正如您在我的系统上看到的,postgresql 二进制文件与 libkrb5.so.26、libgssapi.so.3、libheimntlm.so.1 等链接(这些是 Heimdal Kerberos 库)。

[编辑:我仍然认为 Milen 的响应很可能是最好、最彻底和推荐的方法,但我今天遇到了一个警告:在我的大多数系统(其中大部分是 FreeBSD)上,pg_config 似乎与 postgresql-client 一起安装pkg 等可能会设置与构建 postgresql-server 时选择的选项不同的选项。我倾向于在客户端中构建大量功能,以便它们可以连接到通常在不同机器上运行的一系列服务器。带有客户端命令行 shell 和库(大多数基于 RPM 或 Linux 系统中的 postgresql-devel)的包为连接到数据库服务器的 python、perl 等数据库模块和库提供了功能。当您有一个在数据库后端抓取和存储数据 (CRUD) 的 Web 应用程序时,客户端库通常驻留在单独的主机上。也就是说,最有可能的二进制客户端/服务器/开发包是使用相同的选项集构建的;-) 无论如何,只是另一个数据点......干杯。]

希望有帮助。

干杯,

于 2013-01-28T20:09:09.543 回答