背景
你好,OpenDKIM可以在官方 apk 存储库,但不包括我需要的重要配置标志,例如--with-odbx
和--with-sql-backend
。
我能够相对容易地编译它。然而,生成的 OpenDKIM 二进制文件无法验证 DKIM 标头,因为它不支持 RSA-SHA256。我发现这很奇怪,因为apk add opendkim
做支持 RSA-SHA256。
问题
如何使用这些附加配置标志在 Alpine 3.14 上编译 OpenDKIM和仍然支持 RSA-SHA256 吗?
重现步骤
首先,我将 OpenDKIM 2.11.0-Beta2 和 OpenDBX 1.4.6 预先下载到一个packages
文件夹中。
mkdir packages
wget -P packages \
https://github.com/trusteddomainproject/OpenDKIM/archive/refs/tags/2.11.0-Beta2.tar.gz \
http://linuxnetworks.de/opendbx/download/opendbx-1.4.6.tar.gz
然后我写了这篇文章Dockerfile
,主要是基于APKBUILD 文件。
FROM alpine:3.14
COPY packages /opt/data
RUN apk add --no-cache \
alpine-sdk \
automake \
autoconf \
db-dev \
libtool \
mariadb-dev \
readline-dev \
&& cd /opt/data \
&& tar xzf opendbx-1.4.6.tar.gz \
&& cd opendbx-1.4.6/ \
&& CPPFLAGS="-I/usr/include/mysql" ./configure --with-backends="mysql" \
&& make install
RUN apk add --no-cache \
openssl-dev \
libmilter-dev \
&& cd /opt/data \
&& tar xzf 2.11.0-Beta2.tar.gz \
&& cd OpenDKIM-2.11.0-Beta2 \
&& autoreconf -vif \
&& ./configure \
--sysconfdir=/etc/opendkim \
--with-odbx \
--with-openssl=/usr/lib \
--with-sql-backend \
&& make \
&& make install
然后我构建并运行了 docker 镜像:
docker build -t opendkim-alpine .
docker run opendkim-alpine opendkim -V
“支持的签名算法”中缺少通知rsa-sha256
。与此处的输出进行比较:
docker run alpine:3.14 ash -c 'apk add opendkim && opendkim -V'
笔记
./configure
未能完成,并出现错误:在我指定之前无法找到 libssl--with-openssl=/usr/lib
。我认为这可能暗示我需要通过LDFLAGS
或CFLAGS
,但我不知道那些应该是什么。- Debian 巴斯特做包括我需要的编译标志。
- 在 APKBUILD 文件中,我不知道 的值是什么
CFLAGS
,也无法轻易弄清楚它的default_prepare
作用。除了通过实验之外,这些问题的答案似乎相对不透明且困难。 - 我见过其他尝试它创建整个 alpine 构建环境并用于
sed
修改 APKBUILD 文件以包含额外的标志。这似乎有点矫枉过正。 - 对于 Google 员工,当我尝试在验证模式下运行 opendkim 时收到的错误消息是
opendkim: verify mode requires rsa-sha256 support
。
答案1
好吧,我明白了。我完全不明白为什么,但我需要设置这个环境变量./configure
:
CPPFLAGS="-I/usr/include/openssl"
所以完整的RUN
命令变成:
RUN apk add --no-cache \
openssl-dev \
libmilter-dev \
&& cd /opt/data \
&& tar xzf 2.11.0-Beta2.tar.gz \
&& cd OpenDKIM-2.11.0-Beta2 \
&& autoreconf -vif \
&& CPPFLAGS="-I/usr/include/openssl" ./configure \
--sysconfdir=/etc/opendkim \
--with-odbx \
--with-openssl \
--with-sql-backend \
&& make \
&& make install
我通过反复试验解决了这个问题,并且希望能解释一下为什么 OpenDKIM 默认情况下找不到 openssl。