在 Alpine 上正确编译 OpenDKIM

在 Alpine 上正确编译 OpenDKIM

背景

你好,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。我认为这可能暗示我需要通过LDFLAGSCFLAGS,但我不知道那些应该是什么。
  • 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。

相关内容