编译并安装 OpenLDAP
本节讨论 Senior Level Linux Professional(LPIC-3)考试 301 的 302.1 主题的内容。这个主题的权值为 3。
在本节中,学习如何:
从源代码编译和配置 OpenLDAP
理解 OpenLDAP 后端数据库
管理 OpenLDAP 守护进程
排除安装期间的错误
OpenLDAP 是一个实现 LDAP 服务器和相关工具的开放源码应用程序。因为它是开放源码的,所以可以免费下载它的源代码。OpenLDAP 项目并不直接发布二进制代码,但是大多数主流的发行版都打包了二进制代码。在本教程中,学习如何从源代码和软件包安装 OpenLDAP。perl下载安装教程
从源代码编译
第一步是从项目站点下载 OpenLDAP 的最新版本(见 参考资料 中的下载链接)。这个项目通常有两个当前版本:一个是稳定版本,另一个是测试版本。本教程使用稳定版 2.3.30 和 2.3.38。如果按照本教程进行操作,一些目录名可能会随版本而变化。
为了从下载的文件中提取源代码,输入 tar -。这会将下载的文件解压到一个目录中。用 cd openldap-2.3.38 命令进入这个新目录(根据需要替换您的 OpenLDAP 版本号)。
现在的位置在源代码目录中。现在必须配置系统的构建环境,然后构建这个软件。OpenLDAP 使用脚本 configure 执行这些操作。输入 ./configure --help 就可以看到可用的所有选项。一些选项定义安装文件的位置(比如 --prefix):其他选项定义希望安装的 OpenLDAP 特性。清单 1 列出特性及其默认设置。

清单 1. 与 OpenLDAP 特性相关的配置选项
                   
SLAPD (Standalone LDAP Daemon) Options:
  --enable-slapd          enable building slapd [yes]
    --enable-aci          enable per-object ACIs (experimental) [no]
    --enable-cleartext    enable cleartext passwords [yes]
    --enable-crypt        enable crypt(3) passwords [no]
    --enable-lmpasswd    enable LAN Manager passwords [no]
    --enable-spasswd      enable (Cyrus) SASL password verification [no]
    --enable-modules      enable dynamic module support [no]
    --enable-rewrite      enable DN rewriting in back-ldap and rwm overlay [auto]
    --enable-rlookups    enable reverse lookups of client hostnames [no]
    --enable-slapi        enable SLAPI support (experimental) [no]
    --enable-slp          enable SLPv2 support [no]
    --enable-wrappers    enable tcp wrapper support [no]
SLAPD Backend Options:
    --enable-backends    enable all available backends no|yes|mod
    --enable-bdb          enable Berkeley DB backend no|yes|mod [yes]
    --enable-dnssrv      enable dnssrv backend no|yes|mod [no]
    --enable-hdb          enable Hierarchical DB backend no|yes|mod [yes]
    --enable-ldap        enable ldap backend no|yes|mod [no]
    --enable-ldbm        enable ldbm backend no|yes|mod [no]
      --enable-ldbm-api  use LDBM API auto|berkeley|bcompat|mdbm|gdbm [auto]
      --enable-ldbm-type  use LDBM type auto|btree|hash [auto]
    --enable-meta        enable metadirectory backend no|yes|mod [no]
    --enable-monitor      enable monitor backend no|yes|mod [yes]
    --enable-null        enable null backend no|yes|mod [no]
    --enable-passwd      enable passwd backend no|yes|mod [no]
    --enable-perl        enable perl backend no|yes|mod [no]
    --enable-relay        enable relay backend no|yes|mod [yes]
    --enable-shell        enable shell backend no|yes|mod [no]
    --enable-sql          enable sql backend no|yes|mod [no]
SLAPD Overlay Options:
    --enable-overlays    enable all available overlays no|yes|mod
    --enable-accesslog    In-Directory Access Logging overlay no|yes|mod [no]
    --enable-auditlog    Audit Logging overlay no|yes|mod [no]
    --enable-denyop      Deny Operation overlay no|yes|mod [no]
    --enable-dyngroup    Dynamic Group overlay no|yes|mod [no]
    --enable-dynlist      Dynamic List overlay no|yes|mod [no]
    --enable-lastmod      Last Modification overlay no|yes|mod [no]
    --enable-ppolicy      Password Policy overlay no|yes|mod [no]
    --enable-proxycache  Proxy Cache overlay no|yes|mod [no]
    --enable-refint      Referential Integrity overlay no|yes|mod [no]
    --enable-retcode      Return Code testing overlay no|yes|mod [no]
    --enable-rwm          Rewrite/Remap overlay no|yes|mod [no]
    --enable-syncprov    Syncrepl Provider overlay no|yes|mod [yes]
    --enable-translucent  Translucent Proxy overlay no|yes|mod [no]
    --enable-unique      Attribute Uniqueness overlay no|yes|mod [no]
    --enable-valsort      Value Sorting overlay no|yes|mod [no]
SLURPD (Replication Daemon) Options:
  --enable-slurpd        enable building slurpd [auto]
Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE      do not use PACKAGE (same as --with-PACKAGE=no)
  --with-subdir=DIR      change default subdirectory used for installs
  --with-cyrus-sasl      with Cyrus SASL support [auto]
  --with-fetch            with fetch(3) URL support [auto]
  --with-threads          with threads [auto]
  --with-tls              with TLS/SSL support [auto]
  --with-yielding-select  with implicitly yielding select [auto]
  --with-odbc            with specific ODBC support iodbc|unixodbc|auto [auto]
  --with-gnu-ld          assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]
                          include additional configurations [automatic]
在清单 1 中,可以看到许多特性在默认情况下是禁用的,比如元目录和模块。另外,许多选项被标为 “auto”,如果系统上有适当的库,这些选项就会打开。最好不要依赖这种自动行为,而是明确建立所需特性的列表并启用它们。如果缺少任何库,就会在编译时收到错误消息,而不是在以后才发现。
一些配置选项可以传递 noyesmodno 禁用这个选项,yes 将选项静态链接到最终的二进制代码,mod 将选项构建为单独的共享库。共享库在运行时装载到服务器中(参见下面的 “服务器参数(全局)”)。在默认情况下,模块是静态链接的;所以它们是二进制代码不可分割的组成部分。如果希望使用动态模块,那么还需要 --enable-modules 选项。动态模块的好处是可以在不修改二进制代码的情况下测试各种选项,而且可以单独打包模块。
清单 2 给出一个基于 Fedora 7 中的配置的配置行,它启用了许多有帮助的特性。所选的大多数选项将启用后面教程中需要的特性,比如 --enable-slurpd--enable-multimaster(用于复制)和 --enable-meta(用于元目录)。其他选项启用各种后端,比如 ldab、bdb、null 和 monitor。


清单 2. 一个构建配置示例
                   
./configure --enable-plugins --enable-modules --enable-slapd --enable-slurpd \
  --enable-multimaster --enable-bdb --enable-hdb --enable-ldap --enable-ldbm \
  --enable-ldbm-api=berkeley --enable-meta --enable-monitor --enable-null \
  --enable-shell --enable-sql=mod --disable-perl \
  --with-kerberos=k5only --enable-overlays=mod --prefix=/tmp/openldap
清单 2 启用了插件和多个后端,包括基于 Structured Query Language(SQL)的后端和 Berkeley Database 文件。后端是 OpenLDAP 存储和获取数据的方式,下面的 “后端和数据库” 和以后的教程会详细讨论后端。
清单 2 还构建单独的守护进程 slapd 和复制守护进程 slurpd。为了进行测试,还启用了覆盖,覆盖允许更容易地定制后端数据库。因为这是一个用于测试的设置,安装前缀被改为 /tmp/openldap,所以生成的二进制代码放在 /tmp/openldap/libexec 中。
当执行 configure 脚本时,它会检查所需的库,然后生成构建环境。如果 configure 成功完成,那么用 make depend; make 编译 OpenLDAP。
编译代码之后,可以用 make install 命令安装 OpenLDAP。这会把所有二进制代码、手册页和库复制到 /tmp/openldap 中的相应位置。
从包安装
您可能会觉得从源代码编译太麻烦。从源代码编译很耗费时间,而且如果缺少适当的开发库,那么会更棘手。如果您的 C 语言开发经验不足,那么可能无法理解构建错误消息的意思。幸运的是,大多数发行版打包了 OpenLDAP 的二进制代码,并预先进行了配置。这些二进制代码通常包含所需的所有特性。
基于 RPM 的发行版
Fedora 和 CentOS 使用 yum 工具安装来自存储库的 RedHat 软件包(RPM)。为了查明可用的包,应该使用 yum list 命令,还可以传递一个正则表达式来过滤返回的包列表。清单 3 搜索包含 openldap 这个单词的所有包。

清单 3. 查明可以通过 yum 获得哪些包
                   
# yum list \*openldap\*
Loading "installonlyn" plugin
Setting up repositories
Reading repository metadata in from local files
Installed Packages
openldap.i386                            2.3.30-2.fc6          installed     
openldap-clients.i386                    2.3.30-2.fc6          installed     
openldap-devel.i386                      2.3.30-2.fc6          installed     
openldap-servers.i386                    2.3.30-2.fc6          installed     
openldap-servers-sql.i386                2.3.30-2.fc6          installed     
Available Packages
compat-openldap.i386                    2.3.30_2.229-2.fc6    updates       
       
在 OpenLDAP 这样的大型应用程序中,客户机和服务器工具常常分成两个单独的包。另外,还可能到一些兼容库(为了确保链接老版本软件的应用程序仍然可以正常工作)。安装包的方法是使用 yum install 和包的名称,比如 yum install openldap-clients openldap-servers;这会下载并安装客户机和服务器包以及所需的所有依赖关系。
对于 Red Hat Enterprise Linux,搜索 openldap 的包的命令是 up2date --showall | grep openldap。安装包的方法是将包名称作为参数传递给 up2date,比如 up2date openldap-clients openldap-servers
使用 chkconfig ldap on 确保在系统引导时启动 OpenLDAP 服务器。
基于 Debian 的发行版
基于 Debian 的发行版(比如 Ubuntu)使用 Advanced Packaging(APT)工具安装包。首先,使用 apt-cache search openldap 命令搜索 OpenLDAP 包,见清单 4。

清单 4. 列出 Ubuntu Linux 中可用的 OpenLDAP 包
                   
notroot@ubuntu:~$ apt-cache search openldap
libldap2 - OpenLDAP libraries
libldap2-dev - OpenLDAP development libraries
python-ldap - A LDAP interface module for Python. [dummy package]
python-ldap-doc - Documentation for the Python LDAP interface module
python2.4-ldap - A LDAP interface module for Python 2.4
ldap-utils - OpenLDAP utilities
libldap-2.2-7 - OpenLDAP libraries
slapd - OpenLDAP server (slapd)
       
清单 4 显示几个可用的包。slapd 包提供服务器,并在安装时解析所有依赖软件。运行 sudo apt-get install slapd 安装服务器。还可能需要 ldap-utils 包,这个包包含命令行客户机。

回页首
配置软件
安装 OpenLDAP 之后,必须配置它。为了进行测试,只需要指定几个设置;但是对于真实环境(和 LPIC 考试),必须充分了解各个选项。
有两个配置文件控制 OpenLDAP 的行为;这两个文件在默认情况下都放在 /etc/openldap/ 中。第一个文件是 f,它控制 LDAP 客户机的全局行为。所有 LDAP 服务器的配置
文件称为 f。f 还包含复制守护进程 slurpd 的配置。本文主要关注 f,尤其是与 slapd 守护进程相关的部分。
f 的格式很简单:一个关键字,后面是一个或多个参数,它们要符合以下条件:
关键字必须从 0 列开始 — 即,前面没有空格。
如果参数中有空格,那么这个参数必须加上双引号("")。
如果一行以空格开头,它就是前一行的延续。
关键字不是大小写敏感的,但是根据所用的关键字不同,参数可能是大小写敏感的。
与大多数 UNIX® 工具一样,hash 符号(#)表示注释。hash 符号后面的所有内容都被忽略。
f 分成两部分:全局选项和后端数据库选项。尽管对于次序没有限制,但是必须注意放置指令的位置,因为一些指令会改变处理后续指令的上下文。例如,如果还没有遇到 backenddatabase 关键字,那么选项就是全局的。遇到 database 指令之后,所有后
续选项都应用于这个数据库。这种情况一直持续到另一个 database 指令,此后的指令应用于新的数据库。
本系列后面的教程会讨论一些全局选项,比如用于访问控制和复制的选项。下面讨论常用的配置指令。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。