AlmaLinuxのIMAPサーバーでAPNs(HTTP/2)プッシュ通知を利用する
2021年3月31日にAPNsがレガシーバイナリプロトコルのサポートを終了しました。その後はHTTP/2ベースでのプッシュ依頼を行う必要があります(再度のご案内:APNs Provider APIの要件、3月31日に開始)。別にそこまで不便でもないし放置していたのですが、今回光回線をフレッツ光クロスにするにあたりIPアドレスも変更になったこともあり、真面目にメールサーバーの設定をきちんとして再度APNsでのプッシュ通知に対応しました。IMAPサーバーとしてdovecotを利用していますので、そのプラグインとして使用する「dovecot-xaps-plugin」とxapsデーモンの「dovecot-xaps-daemon」をインストールして設定しました。どちらも、macOS Server 5.6.3より後のバージョンでメールサーバーがサポートされなくなったために有志の方が作成してくれているものです。あまり需要がないせいか日本語のサイトだとほぼ情報がないので参考になる方は参考にしてください。というか、macOS ServerからAlmaLinux 8.4に移行した際の設定や手順などをまとめて記事にしていたと思っていたら放置していたままですね。。普通にDNS、Mail、Calender、WEBサーバーを立ち上げただけに近いのでまぁいいか(以前の記事はこちら)。
大前提としてMac App StoreにてOS X Serverを購入した履歴及びその際のApple IDとパスワードが必要です。また、dovecotへのローカル配送にはLDAまたはLMTPの利用が必要です。私の環境ではdovecot-lmtpを利用しています。procmailを使っている場合、どこかでメーラーでIMAPサーバーにアクセスしている環境がないとプッシュ通知されない(ローカル配送時にキックされないから)ので辛いです。
インストールについては、上記の通り有志の方のgitのページの記載の通りとなります。
1. dovecot-xaps-pluginをインストールする
まずはgithubのこちらのサイトを確認します。ここに記載の通り進めます。ここではワークディレクトリとして、~/workとしておきます。また、dovecotの開発ツールやcmakeがインストールされていない環境の場合は事前にインストールしておいてください。
# dovecot-level and make install
$ sudo dnf install dovecot-devel cmake
$ mkdir ~/work
$ cd ~/work
# dovecot-xaps-plugin install
$ git clone https://github.com/freswa/dovecot-xaps-plugin.git
$ rm -rf ./dovecot-xaps-plugin/.git/
$ cd dovecot-xaps-plugin
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ sudo make install
設定ファイルをdovecotの設定ファイルディレクトリにコピーします。私の環境では編集不要です。
$ sudo cp xaps.conf /etc/dovecot/conf.d/95-xaps.conf
dovecotプラグインが必要な場所とは別の場所にインストールされているので、移動します。この辺りは環境に応じて変更してください。対象は「lib25_xaps_imap_plugin.so」「lib25_xaps_push_notification_plugin.so」です。
$ sudo mv /usr/lib/dovecot/modules/lib25_xaps_* /usr/lib64/dovecot
一旦dovecotサービスを再起動させておきます。
$ sudo systemctl restart dovecot
2. dovecot-xaps-daemonをインストールする
まずはgithubのこちらのサイトを確認します。ここに記載の通り進めます。ここもワークディレクトリとして、~/workとしておきます。また、xapsデーモンをインストールするためにGOが必要となるので、インストールされていない場合は事前にインストールしておいてください。私の環境では「/usr/local」に配置しています
# install and deploy about go lang
$ cd ~/work
$ wget https://storage.googleapis.com/golang/go${VERSION}.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go${VERSION}.linux-amd64.tar.gz
$ vi ~/.bash_profile
# add this line
----------------------------------------------------------
PATH=$PATH:$HOME/bin:/usr/local/go/bin
----------------------------------------------------------
$ source ~/.bash_profile
$ go version
go version go1.17.1 linux/amd64
# dovecot-xaps-daemon install
$ git clone https://github.com/freswa/dovecot-xaps-daemon.git
$ rm -rf ./dovecot-xaps-daemon/.git/
$ cd dovecot-xaps-daemon
$ go build ./cmd/xapsd
$ sudo cp xapsd /usr/bin/xapsd
$ sudo chown xapsd:xapsd /usr/bin/xapsd
$ sudo chmod 755 /usr/bin/xapsd
$ sudo cp configs/systemd/xapsd.service /etc/systemd/system/xapsd.service
「xapsd.yaml」に、OS X Serverを購入した際のApple IDとパスワードとを追記します。パスワードはハッシュ化して記載するので、まずは「xapsd -pass」コマンドでハッシュ化します。
$ xapsd -pass
Please enter the password -> XXXXXXXXXX # input passwd and press return key
This is the hash -> fc11d6f28e59d3cc33c0b14ceb644bf0902ebd63d61218dffe9e7dac7c254542
For security reasons, we don't fill in the hash automagically. Please do so yourself.
# add apple ID and passwd to xapsd.yaml file
$ vi configs/xapsd/xapsd.yaml
----------------------------------------------------------
appleId: <apple id>
appleIdHashedPassword: <fc11d6f28e59d3cc33c0b14ceb644bf0902ebd63d61218dffe9e7dac7c254542>
----------------------------------------------------------
「xapsd.yaml」は「/etx/xapsd」に配置します。また、「database.json」ファイルを「/var/lib/xapsd」に置いておくため、touchコマンドで作成しておきます。
$ sudo mkdir /etc/xapsd /var/lib/xapsd
$ sudo cp configs/xapsd/xapsd.yaml /etc/xapsd
$ sudo touch /var/lib/xapsd/database.json
$ sudo chown xapsd:xapsd /var/lib/xapsd /var/lib/xapsd/database.json
Unitファイルを新たに作成したので、systemdに反映させてから「xapsd.service」を起動させます。
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now xapsd.service
これでIMAPサーバーでプッシュサービスが利用できるようになりました。APNsサーバーへのプッシュ通知依頼はHTTP/2を利用したものなので、特にルーターへのフィルター追加は不要です。きちんと動作しているかどうかはメールログでもわかります。大体こんな感じでログに出てくるはずです。
Aug 15 12:00:00 ns dovecot[1111111]: lmtp(kiyoshi@mitsugi.jp)<1234567><3ij6Dod92GDeamlCyamcdde>: Debug: Sending notification: {"Username":"kiyoshi@mitsugi.jp","Mailbox":"INBOX","Events": ["MessageNew"]}
Aug 15 12:00:01 ns dovecot[1111111]: lmtp(1234567): Debug: Notification sent successfully: 200 OK
コメント
トラックバックは利用できません。
コメント (0)
この記事へのコメントはありません。