GNU social v2でのMisskeyとの通信問題

GNUsocial/issue

GNU social (GS) はv2.0.0beta0でActivityPubに対応しており、これによりMastodon v3やPleromaなどと通信できます。しかし、Misskeyとは相互にフォローできないという問題があります。

このMisskeyとの通信問題について、わかっている情報を整理して、今後の対応時の参考資料として役立てます。

前提

GNU socialのバグトラッカーに登録されているMisskey関係の課題は以下となります。

#226はGNU social v2.0.0beta0以前の課題ですので、現在は関係ないと思われます。

2個目の#279は不具合に対するPull Requestとなっており、マージ待ちとなっています。前提として、このPRがMisskeyとの通信で必須です。以下のコマンドで適用できます。

patch -Np 1 <<-'EOT'
--- a/plugins/LRDD/LRDDPlugin.php +++ b/plugins/LRDD/LRDDPlugin.php
@@ -82,7 +82,7 @@ class LRDDPlugin extends Plugin $all_ids = array_merge([$xrd->subject], $xrd->aliases); if (!in_array($uri, $all_ids)) { - $this->log(LOG_INFO, 'The original URI was not listed itself when doing discovery on it!'); + common_log(LOG_INFO, 'The original URI was not listed itself when doing discovery on it!'); return null; }

--- a/plugins/LRDD/lib/lrddmethod/webfinger.php +++ b/plugins/LRDD/lib/lrddmethod/webfinger.php
@@ -31,15 +31,24 @@ class LRDDMethod_WebFinger extends LRDDMethod */ public function discover($uri) { - $parts = explode('@', parse_url($uri, PHP_URL_PATH), 2); + $scheme = mb_strtolower(parse_url($uri, PHP_URL_SCHEME)); + switch ($scheme) { + case 'acct': + // We can't use parse_url data for this, since the 'host' + // entry is only set if the scheme has '://' after it. + $parts = explode('@', parse_url($uri, PHP_URL_PATH), 2); - if (!Discovery::isAcct($uri) || count($parts) != 2) { - throw new Exception('Bad resource URI: ' . $uri); - } - [, $domain] = $parts; - if (!filter_var($domain, FILTER_VALIDATE_IP) - && !filter_var(gethostbyname($domain), FILTER_VALIDATE_IP)) { - throw new Exception('Bad resource host.'); + if (!Discovery::isAcct($uri) || count($parts) != 2) { + throw new Exception('Bad resource URI: ' . $uri); + } + [, $domain] = $parts; + break; + case 'http': + case 'https': + $domain = mb_strtolower(parse_url($uri, PHP_URL_HOST)); + break; + default: + throw new Exception('Unable to discover resource descriptor endpoint.'); } EOT

上記パッチを見ればわかりますが、GNU social v2.0.0beta0では通信処理の部分に単純な関数名間違いがあり、Misskeyの投稿の検索、フォローなどMisskeyとの通信が伴う操作をすると共通で以下のエラーが発生します。画面上やログに表示されます。

Internal Server Error
Using $this when not in object context

これは上記パッチを適用すると解決します。ひとまず上記パッチは必須と思ってよさそうです。なぜマージされずに放置されているかは不明です。MIsskeyからGSをフォローできないなどの問題が残っているため、保留にしているのかもしれません。どこかのタイミングで、GSの開発チャットに乗り込んで催促したほうがよいかもしれません。

動作

上記パッチは適用済みとして、GSとMisskeyとの動作について整理します。

この状態だと、以下は問題なくできます。なお、パッチを適用していない場合、3の検索はMisskey側でのGSの投稿URL検索のみ問題なくできます。

正常動作
  1. GSからMisskeyのへのメンション、Misskeyの投稿に対する返信・お気に入りはMisskey側での通知も含めてOK。
  2. 投稿URLでの検索は双方問題なくヒット。アバター画像も表示。

逆に以下の処理は問題があります。

異常動作
  1. GS→Misskeyへのフォロー。フォロー一覧でMisskeyのアバター画像がGS側で表示されない。
  2. Misskey→GSへのフォロー。Misskey側で [処理中] となったまま処理が終わらずフォローできない。
  3. GS→Misskeyフォロー後、Misskeyの投稿はGSのホーム画面に流れてこない。
  4. Misskey→GSへのメンション、GSの投稿に対する返信はできるものの、共にGS側で該当投稿のURL検索後、投稿をお気に入りしないと通知を受信できない。
  5. GSの投稿に対するMisskeyからのお気に入りはGS側で通知を受信できない。

問題の内容をみると、MisskeyからGSへの通信に何か問題があるようです。GS側でデバッグを有効にして、サーバーログを確認しましたが、特にGS側でエラーは出ていないようでした。そのため、Misskey側で何か問題がある可能性が高いように思います。

特に、GSからMisskeyはフォローできるのに、MisskeyからGSをフォローできないというのが気になります。Mastodon v3やPleromaからGSをフォローできますので、基本動作は問題ないと思われるからです。

misskey.ioのアカウントからgnusocialjp@gnusocial.jpのフォローを試みると、以下の画像のように [処理中] となったままログイン・ログアウトしても解除されません。いくらなんでも時間がかかりすぎています

Misskeyは日本製のソフトウェアのため、日本人同士で解決するのが円滑でしょう。この課題を自分で登録しようと思ったところ、ありがたいことにMisskeyのGitHubに該当内容の登録が既にありました (GNU socialをフォローできない · Issue #9019 · misskey-dev/misskey)。後ほど中の人が情報を補足します。

なお、gnusocial.jpには上記パッチを本日から適用しており、アカウント作成に抵抗があれば、テストアカウントも用意していますので、特にMisskey開発者の方は自由にお試しください。

結論

GNU socialとMisskeyとの通信の問題について情報を整理しました。整理したところ、Misskey側で何か問題がある可能性が高いように感じました。

Misskeyは日本産ということもあり、外人がMIsskeyの修正や課題のやりとりをするのはハードルが高いと感じます。ひとまず、gnusocial.jpには当分パッチを適用しておいて、検証環境とわかっている情報を提供して、Misskey開発者の対応を仰ぎたいと思います。Misskey側で問題がなく、GNU social側の問題だと確定すれば、それはそれで収穫です。

なお、話が変わります、Misskeyとの通信問題について、以前Twitterで投稿したことがありました。

misskey.devの管理人から反応がありました。MIsskey陣営は同じ日本人同士というのもありますが、対応の温かみを感じました。

ひとまず、通信に一部問題はあるもののgnusocial.jpではMisskeyをフォローできるようになったので、片っ端からMisskey管理人をフォローしていきたいと思います。

2022-08-15 Monに該当PRが無事にマージされました。これにより、GNU socialのmasterを使えば手動パッチは不要です。

コメント

  1. […] 先日「GNU social v2でのMisskeyとの通信問題 | GNU social JP」で、GNU social v2とMisskeyと通信する際に、Misskey側からのアクションがとれないということを記しました。 […]

  2. […] 以前投稿した「GNU social v2でのMisskeyとの通信問題 | GNU social JP」で、Misskeyとの通信問題を取り扱いました。この問題はマージされて解決したのですが、これとは別に、GNU social (GS) からMissk […]

Copied title and URL