結論

Redisのパスワードに # を使用していると Redis URL did not parse で怒られる

環境

  • Google Compute Engine (Ubuntu 22.04.4 LTS)
  • Rust v1.75.0 / 1.79.0
  • Redis v7.2.5
  • Firefish v20240413~
    • アンテナに関してはこれ以前から発生していた可能性高

事象

Firefish v20240413 より、以下の事象が発生していた

  1. タイムラインが自動更新されない
  2. アンテナが更新されない (これはそれ以前のバージョンでも発生していた)

Firefishは下記のログを出力している ( journalctl -b | grep your.firefish.service )

[Error:
      raw: RedisConn(Redis(Redis URL did not parse- InvalidClientConfig))
  message: bad Redis connection
caused by: failed to initialize Redis connection pool
] {
  code: 'GenericFailure'
}

やったこと

Rustのバージョンを上げてみる

  • 夜坂さん @[email protected] より皆尽村のRustのバージョン情報を提供いただき、それに比べると弊鯖のバージョンが低かったので、念のためバージョンアップを試みる
    • 夜坂さんありがとうございました 助かりました本当に🙇
  • v1.79.0 に上げてみたが変化はなかった

Redisの接続情報を確認してみる

$ redis-cli

> ping
(error) NOAUTH Authentication required.

> auth your#password
OK

> ping
PONG
  • 特に問題はなさそう
  • というかFirefishのバージョンアップ前後で触っていないのでここで死ぬはずがないのはそう

Redisのパスワードを変えてみる

when i set password have # symbol ,will get this error : thread ‘main’ panicked at ‘called Result::unwrap() on an Err value: Redis URL did not parse’,

You need to encode the password that is set in the connection info URL. See examples in:

  • Redis URL did not parse に見覚えがありすぎる
  • あとパスワードの # にも見覚えがありすぎる
    • 上記の接続情報確認はもちろんサンプルだが、実際 # はパスワード内に含まれている
  • Firefishが参照しているパッケージについて全然把握はしていない上にRedis/Rustについても詳しくないため redis-rs との繋がりは追えていない
  • が、ちょっと見覚えがありすぎるので、パスワードの変更を試みる
    • 上記に類似・関連する理由が原因であるとすると「実装内でいいかんじにエンコードしてくれ」と言っているようなので、実装に手を入れないと解決しない可能性がある → じゃあ私としてはパスワードのほうが変更の敷居が低い
  • 弊鯖はCalckey時代に ubuntu.sh を使用して構築されており、その場合のRedisのパスワードは下記ファイルで管理されているので、よしなに更新する
/etc/redis/calckey.conf
  • Firesifhのconfigファイルが持っているパスワードもよしなに更新する
yourdir/.config/default.yaml
  • Firefishを再起動する
sudo systemctl restart your.firefish.service
  • TLの自動更新が動くこと、アンテナが動作することを確認

反省

  • このテのパスワードに特定の記号を用いると様子がおかしくなるケース自体は認識していたが、そのあたりを勘案せずパスワードジェネレータで生成したパスワードを適当に利用したのは大変によろしくなかった
  • Calckey時代に ubuntu.sh を使用してお手軽に構築したので利用しているミドルウェアに関する理解が浅く、このテの調査に際してすこぶる手間がかかる
  • 結局なんで # がよろしくないのかは分かっていない
    • 最初「Redisのパスワードは .conf に書いてるからよくないのかな~」と思ったけれど、行頭の # でなければ別にコメントアウト扱いされなかったと思うし、そもそも redis-cli で問題なく # は使えているからそこではなさそう
    • Rustが # をメタデータ付与のための書式に使用している兼ね合いとかあるのだろうか
    • なにもわからない