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分程度だが特に問題ないようだ。
コメント