The error you're encountering during the build process for Dovecot
2.3.16—specifically, "checking whether fd passing works... no"—likely
relates to missing dependencies or system capabilities for file
descriptor (fd) passing. File descriptor passing is typically required
for IPC (Inter-Process Communication) between processes and is often
linked to the socket and file handling mechanisms in Unix-like operating
systems.
Here are some suggestions and troubleshooting steps you can take to
address this issue:
1. *Install Required Libraries for FD Passing*
Ensure that the necessary libraries and kernel capabilities for file
descriptor passing are available on your system. These may include:
* *libcap*: This is necessary for capabilities handling in Linux. The
|--with-libcap| flag suggests you are already trying to link against it.
* *libc*: Make sure the GNU C library (glibc) is up-to-date, as this
supports file descriptor passing.
* *Linux kernel version*: Ensure that the Linux kernel you're building
on supports file descriptor passing (fd passing is supported in most
modern Linux kernels, but older versions might lack it).
If you're building on a system like RHEL or CentOS, you may need to
install development packages related to these libraries using a command
like:
|sudo yum install libcap-devel |
2. *Configure Options for fd Passing*
Ensure that the system checks for fd passing capabilities and other
related checks are not being overridden. Sometimes, the |autoreconf| or
|configure| steps may fail if certain options are incorrectly set.
Revisit the |configure| options in your spec file and consider adjusting
them to explicitly enable fd passing:
|--enable-fd-passing |
This flag might not exist explicitly for Dovecot, but it ensures the
system checks aren't being skipped.
3. *Kernel Capabilities*
File descriptor passing might be disabled in your system if the kernel
capabilities are restricted. Ensure that:
* Your kernel has support for |SO_PASSCRED| (used for file descriptor
passing).
* SELinux or other security frameworks aren't blocking IPC mechanisms.
You can check kernel configuration and modules by running:
|zgrep CONFIG_FD_PASSING /proc/config.gz |
If it's not enabled, you might need to recompile the kernel with this
option, though this is a rare case for modern distributions.
4. *Ensure Correct Autotools and Compiler Configuration*
The error may also be linked to outdated |autoconf|, |automake|, or
|libtool| versions. You mentioned that for EL6, the autoconf is too old.
Consider updating them if possible, or ensuring you are using the latest
versions:
|sudo yum install autoconf automake libtool |
You can also explicitly set paths to the correct versions of these tools
by exporting them in your build script.
5. *Examine the Build Logs*
Check the full build logs for more detailed errors around fd passing.
The specific point in the build process where this check fails might
give you more clues. Running the |configure| command manually outside of
the spec file to see the full output might also help:
|./configure --with-all-your-flags-here |
6. *Modify Build Flags*
The build flags you're using (|-fno-strict-aliasing -fstack-reuse=none|)
may affect some optimizations. Consider compiling without these flags to
see if that resolves the issue:
|export CFLAGS="%{__global_cflags}" export LDFLAGS="%{?__global_ldflags}" |
This would help determine if the issue is related to these flags.
Am 26.09.2024 um 18:14 schrieb wbw78281234 via dovecot:
During the build phase, it shows:
Copy Code
checking whether fd passing works... no
configure: error: fd passing is required for Dovecot to work
The version of Dovecot I am compiling is 2.3.16, and the version of the
GCC tool is 8.5.0. My spec file's build section is as follows:
Copy Code
%build
# required for fdpass.c line 125,190: dereferencing type-punned pointer
will break strict-aliasing rules
%global _hardened_build 1
export CFLAGS="%{__global_cflags} -fno-strict-aliasing -fstack-
reuse=none"
export LDFLAGS="-Wl,-z,now -Wl,-z,relro %{?__global_ldflags}"
# el6 autoconf too old to regen; use packaged files (#1082384)
mkdir -p m4
autoreconf -I . -fiv # required for aarch64 support
%configure \
INSTALL_DATA="install -c -p -m644" \
--with-rundir=%{_rundir}/%{name} \
--with-systemd \
--docdir=%{_docdir}/%{name} \
--disable-static \
--disable-rpath \
--with-nss \
--with-shadow \
--with-pam \
--with-gssapi=plugin \
--with-ldap=plugin \
--with-sql=plugin \
--with-pgsql \
--with-mysql \
--with-sqlite \
--with-zlib \
--with-libcap \
--with-lucene \
--with-ssl=openssl \
--with-ssldir=%{ssldir} \
--with-solr \
--with-systemdsystemunitdir=%{_unitdir} \
--with-docs \
sed -i 's|/etc/ssl|/etc/pki/dovecot|' doc/mkcert.sh doc/example-
config/conf.d/10-ssl.conf make %{?_smp_mflags} # pigeonhole pushd
dovecot-2*3-pigeonhole-%{pigeonholever} # required for snapshot [ -f
configure ] || autoreconf -fiv [ -f ChangeLog ] || echo "Pigeonhole
ChangeLog is not available, yet" >ChangeLog %configure \
INSTALL_DATA="install -c -p -m644" \ --disable-static \ --with-
dovecot=../ \ --without-unfinished-features make %{?_smp_mflags} popd
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org