TwitterIrcGatewayをmono 6で動かす
twitterがTLS 1.2限定になって無事TwitterIrcGatewayが死亡したわけですが、ここはソースいじってLinux(debian 9)環境のmono(6.0.0.319)で動かそうという話。ソースはopentigリポジトリから、編集はVisual Studio 2017 Community版で行いました。なおそれまでdebian 7で動かしていたものをTLS 1.2対応が必要になって環境ごとバージョンアップしたら動かなくなったのであれこれやりましたが、先に結論から言うとmono 6で動かないのはTLS 1.2関係なかったです。
この記事はやったことを羅列していくのであまり原因について調べていませんというかそんな余裕ないです。
蛇足
ちなみに本稿と関係ないですが、WindowsでTLS 1.2の対応はターゲットフレームワークを.NET 4.5にしてMainの頭に
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
と書いておけばいいです。monoではなくても動きました。理由はよくわかってません。レジストリをいじるハックが出回ってるのでソースいじりたくない人はそちらでもいいと思います。
本題
本題に入ります。まず、debian公式のmonoは古いのでまず公式のmonoをインストールします。何度も言うように動かない原因は別にあったので今となっては必要あるかはわかりませんが!
# apt install apt-transport-https dirmngr gnupg ca-certificates # apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF # echo "deb https://download.mono-project.com/repo/debian stable-stretch main" | tee /etc/apt/sources.list.d/mono-official-stable.list # apt-get update # apt-get install mono-devel ca-certificates-mono
次にローカル環境にソースコードをcloneしてきて、Visual Studioで開き、すべてのプロジェクトのターゲットフレームワークをv4.5にします。これも必要あるかはわかりません!がこの記事はやったことをただ書いていきます。
git clone https://github.com/opentig/TwitterIrcGateway.git
ここから本題です。monoでTwitterIrcGatewayが動かないのは、TwitterIrcGatewayCore内AddInManager.cs 150行目_sessionがnullになっておりここで止まるからです。ということでnullにならないようにしましょう。同ファイル63,64行目に問題がります。
_server = ServerProxy.GetTransparentProxy() as Server; _session = SessionProxy.GetTransparentProxy() as Session;
これを
_server = (Server)ServerProxy.GetTransparentProxy(); _session = (Session)SessionProxy.GetTransparentProxy();
こうします。なんでこれで動くのかは例によってわかっていません。これでRelease設定でビルドしてBin/Releaseディレクトリ内ファイルをアップロードすれば終わりです。
お疲れ様でした。