Rspamdをfedora41にインストールする

Rspamd

Rspamdが動作しているサーバのOSをアップグレードした(fedora 39 → fedora 40、–allowerasing付)ところ、Rspamdがきれいさっぱり消えてしまった…。また、再インストールしようとしたがパッケージの依存関係が解決できずにインストールできずに、fedora39のまま運用することになっていたのだが…

今回、rspamdをfedora41環境にインストールしてみたいと思う。

最初にcoprの他のrspamdも試みたが同様に他のパッケージの依存関係のエラーが出てうまくインストールできなかった。また、coprを使わずにrpmfusion(rpmsphere?)リポジトリを利用してみたが、失敗編に書いてあるようにこれもエラーがでて正常に動作しなかった。

そこで、rpmfusion(rpmsphere?)リポジトリで利用しているSRPMをビルドしてみることにしてみた。

これに伴い、rspamdのバージョンも3.6-1から3.10.2-1へアップデートされる。

Rspamdのインストール(失敗編)

ここでのインストールおよび設定作業は失敗するので実際には実行しなくてもよい。

急ぐ人は、テスト用サーバを用意して、「Rspamdのビルド」からどうぞ。

テスト用サーバの用意

テスト用のVMを作成し、fedora41をインストールしておく。これ以後の作業はこのサーバに対して行う。

rpmfusionリポジトリのインストール

以下のスクリプトを実行しrpmfusionリポジトリをインストールする。

#!/bin/sh
dnf repolist
dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

rpmsphere(-release)リポジトリのインストール

つづいて、rpmsphere(-release)リポジトリをインストールする。以下のコマンドを実行する。

# wget https://github.com/rpmsphere/noarch/tree/master/r/rpmsphere-release-40-1.noarch.rpm
# rpm -Uvh rpmsphere-release-40-1.noarch.rpm

rspamdのインストール

以下のコマンドを実行してrspamdをインストールする。

# dnf -y install rspamd

インストール結果

この方法でfedora41にすんなりとrspamdがインストールすることができた。が…

Rspamdの設定(失敗編)

サーバ証明書の作成(コピー)

letsencryptのサーバ証明書をこのサーバにコピーしておく。

nginxのインストールおよび起動

nginxをインストールしておく。特に問題なくインストールできるはず。

redisのインストールおよび起動

つづいてredisをインストールしたのだが、実際にインストールされたのは以下の二つのパッケージであった。

valkey-8.0.2-1.fc41.x86_64
valkey-compat-redis-8.0.2-1.fc41.noarch

調べてみると redis はライセンスが変更されfedoraのライセンスと整合性が取れないらしく外されたみたい。redisから派生しているvalkeyというパッケージが代わりにインストールされている。

確かwordpressでもnextcloudでもredisを利用していたのでそちらのサーバを調べてみると、古いパッケージがそのまま残って稼働していた。/usr/libexec/migrate_redis_to_valkey.shという定義体の移行スクリプトがあるのでこれを利用して移行をする予定である。

systemctl enable/start edis した後 status を見ると以下のようになっている。

# systemctl status redis
● valkey.service - Valkey persistent key-value database
     Loaded: loaded (/usr/lib/systemd/system/valkey.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             mq10-timeout-abort.conf, 50-keep-warm.conf
     Active: active (running) since Wed 2025-01-22 17:13:42 JST; 4h 11min ago
 Invocation: d6a2658c10834739802127ab40e6e28b
   Main PID: 3197 (valkey-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 9414)
     Memory: 2.8M (peak: 3.3M)
        CPU: 27.141s
     CGroup: /system.slice/valkey.service
             mq3197 "/usr/bin/valkey-server 127.0.0.1:6379"

Jan 22 17:13:42 test.yo7612.com systemd[1]: Starting valkey.service - Valkey persistent key-value database...
Jan 22 17:13:42 test.yo7612.com systemd[1]: Started valkey.service - Valkey persistent key-value database.
#

以前rspamdを設定したときの値を/etc/valkey/valkey.confに設定する。

maxmemory 500mb
maxmemory-policy volatile-ttl

以下の行はデフォルトで設定されていた。

bind 127.0.0.1 -::1

設定コマンドでエラー

最初に以下のコマンドを実行する。

# rspamadm configwizard

すると、以下のエラーがでた。原因はすぐにはわかりそうにないので作業を中断した。

rspamadm: symbol lookup error: /usr/lib64/rspamd/librspamd-server.so: undefined symbol: __cpu_model

そこでSRPMからビルドすることに。

Rspamdのビルド

というわけで、ビルドしてみる。

SRPMのダウンロード

以下のファイルをダウンロードする。2025/1/22現在最新と思われる。

https://github.com/rpmsphere/source/raw/master/r/rspamd-3.10.2-1.src.rpm

rpmbuildのインストール

# dnf -y install rpm-build

その他のパッケージのインストール

ま、以下のパッケージは、rpmbuildしている最中に必要とわかったのだが…

# dnf -y install cmake file-devel glib2-devel gmime-devel libevent-devel libsodium-devel libunwind-devel lua-devel openssl-devel pcre-devel ragel sqlite-devel gcc g++
# dnf -y install libicu-devel
# dnf -y install libarchive-devel
# dnf -y install perl-Digest-MD5

openssl関連ファイルのインストール

/usr/include/openssl/{engine,engineerr}.hがないといってビルドが失敗するのであらかじめこれらのファイルをインストールしておく。

以下のコマンドで上記ファイルが含まれているパッケージを見つけることができる。

# dnf provides /usr/include/openssl/engine.h
Updating and loading repositories:
Repositories loaded.
openssl-devel-engine-1:3.2.2-11.fc41.x86_64 : Files for development of applications which will use OpenSSL and use deprecated ENGINE API.
Repo         : @System
Matched From :
Filename     : /usr/include/openssl/engine.h

openssl-devel-engine-1:3.2.2-11.fc41.i686 : Files for development of applications which will use OpenSSL and use deprecated ENGINE API.
Repo         : updates
Matched From :
Filename     : /usr/include/openssl/engine.h

openssl-devel-engine-1:3.2.2-11.fc41.x86_64 : Files for development of applications which will use OpenSSL and use deprecated ENGINE API.
Repo         : updates
Matched From :
Filename     : /usr/include/openssl/engine.h

openssl-devel-engine-1:3.2.2-9.fc41.i686 : Files for development of applications which will use OpenSSL and use deprecated ENGINE API.
Repo         : fedora
Matched From :
Filename     : /usr/include/openssl/engine.h

openssl-devel-engine-1:3.2.2-9.fc41.x86_64 : Files for development of applications which will use OpenSSL and use deprecated ENGINE API.
Repo         : fedora
Matched From :
Filename     : /usr/include/openssl/engine.h

libressl-devel-4.0.0-1.x86_64 : Development files for LibreSSL, an SSL/TLS protocol implementation
Repo         : rpmsphere
Matched From :
Filename     : /usr/include/openssl/engine.h

#

dnfコマンドでインストール

# dnf -y install openssl-devel-engine

ビルド

以下のコマンドでビルドする。

# rpmbuild --rebuild ~/src/rspamd-3.10.2-1.src.rpm

正常にコンパイルできれば、~/rpmbuild/RPMS/x86_64 に以下のパッケージが作成される。

rspamd-3.10.2-1.x86_64.rpm
rspamd-debuginfo-3.10.2-1.x86_64.rpm
rspamd-debugsource-3.10.2-1.x86_64.rpm

インストール

直前にインストールしたrspamdパッケージを削除し、上記のファイルを指定してrspamdをインストールする。

# dnf -y remove rspamd
# dnf -y install ~/rpmbuild/RPMS/x86_64/rspamd-3.10.2-1.x86_64.rpm

なお、ビルドおよびインストール時、rpmfusionおよびrpmsphereリポジトリは不要であった。ので、消した。

Rspamdのインストールおよび設定(成功するか?)

rspamadmコマンドの実行

以下のコマンドを実行する。

# rspamadm configwizard

今回は正常に起動できたようだ。

今日は上記のコマンドは終了して設定は後日。

ちょっと方針転換(cloneしてアップデートしてみる)

ビルドしたパッケージがfedora41環境で動作することが確認できたので、以下のような手順でアップグレードを行うことにした。

  • rspamdが動いているVMをクローン
  • OSのアップデート(fedora 39 —> fedora 40 —> fedora 41)
  • ビルドしたrspamdのインストールおよびテスト
  • クローン元のVMをアップグレード

VMのクローン

rspamdサーバをシャットダウンし、Proxmox VE 上でrspamdが動作しているVMをcloneする。

クローン先のVM(以後clone VMと呼ぶ)のネットワーク設定で別のVLANに変更しておく。

clone VMを起動し、IPアドレスを変更する。その後、PVEのネットワーク設定でVLANを元に戻す。

OSのアップデート

fedora 39 から fedora 40へ

前述の通りパッケージの依存関係の問題で、公式の通りのコマンドではアップデートできないので–allowerasingオプションをつけてアップグレードを実行する。

# dnf -y install dnf-plugin-system-upgrade --best
# dnf -y system-upgrade download --refresh --releasever=40 --allowerasing
# dnf -y system-upgrade reboot

fedora 40 から fedora 41 へ

公式の手順で問題なくアップグレードできるはず。

ただし、redisパッケージがなくなり(fedora 40までは存在した)代わりにvalkeyパッケージがインストールされる。その際、redisで定義していた内容は/etc/valkey/valkey.confに引き継がれるようだ。

2025/01/23 ここまで。

valkey関連の修正

valkeyについて前述の通りredisから定義が引き継がれているが、OS起動時自動起動していなかった。以下のコマンドを実行して自動起動するようにしておく。

# systemctl enable valkey
# systemctl start valkey

ただ移行直後はstartしてもvalkeyが起動しなかった。原因は/etc/valkey/valkey.confの以下の行のファイルでアクセス権がredisのものであったから。ので定義でファイルをデフォルトのものに変更しておくか、ファイルのアクセス権を変更しておく。この現象は40から41にアップグレードする際にredisが入っていなければ起きないと思われる(が、定義を移行してくれない)。

pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis.log

今回は定義を以下のようにデフォルトのものに変更した。

pidfile /run/valkey/valkey.pid
logfile /var/log/valkey/valkey.log

nginxの設定

以前の定義が残っていれば特に何もすることはない。

rspamdのインストール・実行

インストールされているrspamdを削除し、ビルドしたバイナリをコピーしインストールする。なお、削除しても、/etc/rspamd/local.d以下のファイルは削除されずに残るのでこれを利用する。

# dnf -y remove rspamd
# dnf -y install rspamd-3.10.2-1.x86_64.rpm

このままrspamdをstartすると起動に失敗する。以前のrspamdと新しいrspamdでは利用するユーザ名とグループ名が変更されているのが原因で、すでに作成されているログファイルの所有者名とグループ名が違う。以下のコマンドを実行してログファイルのアクセス権を変更する。

# cd /var/log
# chown -R _rspamd:_rspamd rspamd

初期設定コマンドを実行する。

つづいて以下のコマンドを実行して、有効化と起動を行っておく。

# systemctl enable rspamd
# systemctl start rspamd

テスト

rspamdが起動していることと、Webブラウザでアクセスできることを確認する。

メールサーバ側の変更とテスト

postfixの設定変更と再起動

/etc/postfix/main.cfのsmtpd_milters で指定しているアドレスを新規サーバに変更する。変更が終わったらpostfix を再起動する。

メール送受信テスト

メール送受信テストを行う。

本運用環境

rspamdの本運用環境はこのclone VMの環境を利用してもいいし、旧rspamdのOSを上記の手順でアップグレード —> rspamdインストールしてもよい。今回は後者を選択した。

現在のところ、移行後30分程度だが特に問題ないようだ。

コメント

タイトルとURLをコピーしました