在 RHEL 8 上安装 OpenLDAP -- slapd.pid 问题

在 RHEL 8 上安装 OpenLDAP -- slapd.pid 问题

我已在新的 RHEL 8 实例上编译了当前版本的 OpenLDAP,并使用签名的 SSL 证书对其进行设置。当我开始打耳光时,我得到了unable to open pid file "/var/run/openldap/slapd.pid": 2 (No such file or directory)。惊讶,惊讶,openldap 目录不存在。

我创建了该目录并将所有权设置为 ldap:ldap。现在,当我开始 slapd 时,我得到了Can't open PID file /var/lib/openldap/slapd.pid (yet?) after start: No such file or directory。该服务不应该创建 pid 文件吗?

我尝试通过执行故障排除slapd -u ldap -g ldap -d 255,但它没有返回任何错误。它启动时拍打,然后无限期挂起。这是输出:

632b738b.28af1a7e 0x7fb91fe62840 slapd starting
632b738b.28b084a2 0x7fb918147700 daemon: added 4r listener=(nil)
632b738b.28b0e5e8 0x7fb918147700 daemon: added 7r listener=0x1789270
632b738b.28b11145 0x7fb918147700 daemon: added 8r listener=0x1789360
632b738b.28b2645c 0x7fb918147700 daemon: epoll: listen=7 active_threads=0 tvp=zero
632b738b.28b27b69 0x7fb918147700 daemon: epoll: listen=8 active_threads=0 tvp=zero
632b738b.28b28d61 0x7fb918147700 daemon: activity on 1 descriptor
632b738b.28b2a342 0x7fb918147700 daemon: activity on:632b738b.28b2aaae 0x7fb918147700
632b738b.28b2c02b 0x7fb918147700 daemon: epoll: listen=7 active_threads=0 tvp=zero
632b738b.28b2d2eb 0x7fb918147700 daemon: epoll: listen=8 active_threads=0 tvp=zero

知道接下来要尝试什么吗?

这是我的配置如果有帮助的话:

./configure --prefix=/usr --sysconfdir=/etc --disable-static --enable-debug --with-tls=openssl --with-cyrus-sasl --enable-dynamic --enable-crypt --enable-spasswd --enable-slapd --enable-modules --enable-rlookups --enable-backends=mod --disable-ndb --disable-sql --disable-shell --disable-bdb --disable-hdb --enable-overlays=mod

slapd服务

[Unit]
Description=OpenLDAP Server Daemon
After=syslog.target network-online.target
Documentation=man:slapd
Documentation=man:slapd-mdb

[Service]
Type=forking
PIDFile=/var/lib/openldap/slapd.pid
Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///"
Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS

[Install]
WantedBy=multi-user.target

答案1

你的第一个错误是:

unable to open pid file "/var/run/openldap/slapd.pid": 2 (No such file or directory)

有几种方法可以解决此错误。

修复文件系统

slapd正在尝试将 pid 文件写入/var/run/openldap/slapd.pid,但该目录/var/run/openldap不存在。/var/run是 的符号链接/run,它是一个临时目录:每次系统启动时都会重新创建它。

要在 中创建目录/run,您可以使用systemd-tmpfiles.在 中,创建一个包含以下内容的/etc/tmpfiles.d文件:slapd.conf

D /run/openldap 0755 ldap ldap

然后运行:

systemd-tmpfiles --create

这将确保它/var/run/openldap存在并且在系统启动时创建它。

您将需要更新您的 slapd systemd 单元以使用正确的路径:

[Service]
Type=forking
PIDFile=/var/run/openldap/slapd.pid
Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///"
Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
ExecStart=/usr/libexec/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS

从配置中删除 PidFile

您的 slapd 单元文件正在使用该PIDFile指令,因为您正在slapdType=forking.从 `systemd.service(5) 手册页:

PIDFile=

采用引用服务的 PID 文件的路径。建议对Type=设置为分叉的服务使用此选项。指定的路径通常指向下面的文件/run/。如果指定了相对路径,则其前缀为/run/.服务启动后,服务管理器会从该文件中读取该服务主进程的PID。

所以如果我们不需要使用的话Type=forking,我们可以去掉这里的PIDFile配置以及PidFileslapd中对应的配置。我们修改slapd命令行以包含-d0,这会导致slapd在前台运行:

[Service]
Type=simple
Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///"
Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
ExecStart=/usr/libexec/slapd -d0 -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS

然后从(或)中删除您的PidFile设置。slapd.confolcPidFilecn=config

相关内容