Compiling

在 Alpine 上正確編譯 OpenDKIM

  • August 13, 2021

背景

您好,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。我認為這可能暗示我需要通過LDFLAGSor CFLAGS,但我不知道應該是什麼。
  • Debian Buster確實包含我需要的編譯標誌
  • 在 APKBUILD 文件中,我不知道 的值CFLAGS是什麼,也無法輕鬆弄清楚是什麼default_prepare。除非通過實驗,否則似乎很難找到這些問題的答案。
  • 我見過其他嘗試創建整個 alpine 建構環境並用於sed修改 APKBUILD 文件以包含額外標誌的嘗試。這似乎有點矯枉過正。
  • 對於 Google 員工,我在驗證模式下嘗試執行 opendkim 時收到的錯誤消息是opendkim: verify mode requires rsa-sha256 support.

好吧,我想通了。我完全不明白為什麼,但我需要將此環境變數設置為./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。

引用自:https://unix.stackexchange.com/questions/664611