CentOS 8 (Stream)编译OpenDKIM

提醒:本文最后更新于 1700 天前,文中所描述的信息可能已发生改变,请仔细核实。

早在CentOS 8发布时,就开始使用,后续也用上了CentOS 8 Stream。实际体验下来,十分舒服。

但在之前文章《CentOS 8初体验》中,我也提到了一些问题。

其中有个邮件系统常用的应用OpenDKIM的包缺失,解决办法很简单就是编译。。。

编译,是很基础的事情,但是有些小伙伴在编译总能遇到各种奇怪的问题。。。也时不时来问,所以本篇文章出来了,希望能解决这块的疑问。

已尽量以简洁的写法写出以下命令,并简单介绍。小伙伴们可以按步骤直接复制黏贴就可以完成安装(在原版CentOS 8及CentOS 8 Stream下测试通过)。

首先是安装epel并更新系统本地包版本,然后安装相关依赖:

rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
yum -y install epel-release
yum config-manager --set-enabled PowerTools
yum config-manager --set-enabled Stream-PowerTools

yum -y update

yum -y install libtool pkgconfig curl wget gcc gcc-c++ gcc-gfortran libgcc m4 automake autoconf make patch libdb-devel libmemcached-devel openssl-devel openldap-devel sendmail-milter-devel libbsd libbsd-devel shadow-utils

接着下载OpenDKIM并编译:

cd /tmp/
wget -c http://downloads.sourceforge.net/opendkim/opendkim-2.11.0.Alpha0.tar.gz
tar zxvf opendkim-2.11.0.Alpha0.tar.gz && cd opendkim-2.11.0/
curl "https://dl.kn007.net/directlink/opendkim.ticket35+37.patch" | patch -p1
./configure --prefix=/usr --libdir=/usr/lib64 --with-db --with-libmemcached --with-openldap --enable-query_cache
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
make `rpm --eval "%{?_smp_mflags}" ` && make install

为OpenDKIM添加systemd服务及规范位置:

sed 's#\${exec_prefix}#/usr#;' contrib/systemd/opendkim.service > /usr/lib/systemd/system/opendkim.service
chmod 0644 /usr/lib/systemd/system/opendkim.service
systemctl daemon-reload

chmod 0644 /usr/share/doc/opendkim/convert_keylist.sh

cp -fr contrib/init/redhat/opendkim-default-keygen /usr/sbin/opendkim-default-keygen
chmod 0755 /usr/sbin/opendkim-default-keygen
cp -fr stats/opendkim-reportstats /usr/sbin/opendkim-reportstats
chmod 0755 /usr/sbin/opendkim-reportstats
sed -i 's|^OPENDKIMSTATSDIR="/var/db/opendkim"|OPENDKIMSTATSDIR="/var/spool/opendkim"|g' /usr/sbin/opendkim-reportstats
sed -i 's|^OPENDKIMDATOWNER="mailnull:mailnull"|OPENDKIMDATOWNER="opendkim:opendkim"|g' /usr/sbin/opendkim-reportstats

mkdir -p /etc/opendkim
mkdir -p /etc/opendkim/keys
mkdir -p /var/spool/opendkim
mkdir -p /var/run/opendkim
chmod 0750 /etc/opendkim/keys

创建基础配置文件:

cat > /etc/opendkim.conf <<EOF
PidFile /var/run/opendkim/opendkim.pid
Mode v
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 002
SendReports yes
SoftwareHeader yes
Canonicalization relaxed/relaxed
Selector default
MinimumKeyBits 1024
KeyFile /etc/opendkim/keys/default.private
OversignHeaders From
EOF

cat > /etc/sysconfig/opendkim <<EOF
# Set the necessary startup options
OPTIONS="-x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid"

# Set the default DKIM selector
DKIM_SELECTOR=default

# Set the default DKIM key location
DKIM_KEYDIR=/etc/opendkim/keys
EOF

cat > /etc/tmpfiles.d/opendkim.conf <<EOF
D /var/run/opendkim 0700 opendkim opendkim -
EOF

cat > /etc/opendkim/TrustedHosts <<EOF
127.0.0.1
::1
EOF

touch /etc/opendkim/SigningTable
touch /etc/opendkim/KeyTable

chmod 0640 /etc/opendkim/TrustedHosts
chmod 0640 /etc/opendkim/SigningTable
chmod 0640 /etc/opendkim/KeyTable

修复权限并更新动态链接库:

groupadd -r opendkim
useradd -r -g opendkim -G mail -d /var/run/opendkim -s /sbin/nologin -c "OpenDKIM Milter" opendkim

chown -R opendkim:opendkim /etc/opendkim
chown -R opendkim:opendkim /var/spool/opendkim
chown -R opendkim:opendkim /var/run/opendkim
chmod -R 0775 /var/run/opendkim

ldconfig

如此安装完的OpenDKIM,使用上跟之前旧的CentOS版本中的OpenDKIM一致。

唯一区别是少了OpenDBX支持,但是这个功能很少用到(一种数据库存储方式,我直接文件存储),所以无所谓了,如果要满足这一支持,那么你需要自己编译OpenDBX,然后在编译参数中加入--with-odbx来编译OpenDKIM。

更多关于邮件系统的资料和教程,请见之前专题《Postfix小结》。

以上方法编译的OpenDKIM版本输出:

opendkim: OpenDKIM Filter v2.11.0
        Compiled with OpenSSL 1.1.1 FIPS  11 Sep 2018
        SMFI_VERSION 0x1000001
        libmilter version 1.0.1
        Supported signing algorithms:
                rsa-sha1
                rsa-sha256
        Supported canonicalization algorithms:
                relaxed
                simple
        Active code options:
                QUERY_CACHE
                USE_DB
                USE_LDAP
        libopendkim 2.11.0: query_cache

目前OpenDKIM已经加入包管理套餐了(包括OpenDBX),直接yum/dnf就行了。
2020-04-25

转载请注明转自:kn007的个人博客的《CentOS 8 (Stream)编译OpenDKIM