Compiling
在 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
。我認為這可能暗示我需要通過LDFLAGS
orCFLAGS
,但我不知道應該是什麼。- 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。