Mastodon @ FreeBSD

タグ: #<Tag:0x00007f02217edea0>

仲間がいないこともないと、期待して立てました。
たまには真面目な話もしますw

ネットにはこのテーマについてほとんど情報がなく。 Mastodon FreeBSD などとググると、網羅性のかけらもない私の雑魚ブログが上のほうに出てきてしまう、まことに申し訳ない有り様。
今後は、ブログよりまずはフォーラム。カジュアルに話せる場所のほうが知見が蓄積してゆくのではないかと期待して。

何故FreeBSDを使っているのか?

身も蓋もない理由ですが、慣れていて愛着があるからです。
もう少し真面目な理由が必要ならば、FreeBSD以上にZFSの扱いが容易なサーバOSは、多分ないと思います。よく知らないだけで実はあるのかもしれない。(実はかつて、Macがその地位につくシナリオもあり得たのですが)

Mastodonインスタンス用のOSとして

本来は動作対象外と思われ、メジャーバージョンアップの度にすんなり動作せずに苦しみますw
ですが、一旦それを受け入れれば、きわめて低コストに生成できるZFSのスナップショット機能は、Mastodonインスタンスの運用にも大いに役立つものと思います。

最初から網羅的なものを書こうとするときっと挫折するので。
これ以降、ゆるくカジュアルにつなげていきます。

1 Like

ステージング環境に対し、2.8rc3の適用が、先ほどようやく完了しました。
動作させるのにこれほど苦戦したのは初めてかも知れない。
以下、2.8系を動作させる為に必要だった対応です。

Rubyは2.5系

そもそも前提として、rbenvを使用していませんw
OSに提供されるRuby環境で構築を行うのですが、Ruby 2.6系が未だOSに提供されておらず(bundlerが本体に付属するようになったことへの調整が難航している様です)、2.5系でだましだまし運用する状況になっています。

Mastodonを構成するいくつかのネイティブgem(たとえばcld3とか、charlock_holmesとか)がgemコマンドからインストールすることが出来ず、portsコレクション(ソースパッケージ)から導入しています。この構築がrbenvと共存できません。
portsの実体(/usr/ports 以下に展開されている)を開くとパッチのファイルがいくつか含まれており、内容を調べた上であれば、セオリー通りrbenvで運用できる可能性はありそうです。

Railsのバージョンを落とす

かように、Rubyが2.5系であることをふまえて、Gemfile上で5.2.3から5.2.2へ書き換える必要がありました。


このIssueはだいぶ早く見つけられたんですが、Railsのバージョンを落とすという対策に結びつきませんでした。ちょっとダメダメですねw

この作業、ちょうど先ほど完了しました。
どうやら、2.8系のリリースにギリギリ間に合った様です。

1 Like

どうやらぼっちの様だけどw、空気を読まずに進行していきますよ。
先ほど、Mastodon 2.8.0を適用しました。

本番でこいつが出て焦りました。

Could not open library '/usr/local/lib/ruby/gems/2.5/gems/cld3-3.2.3/lib/../ext/cld3/libcld3.so': /usr/local/lib/ruby/gems/2.5/gems/cld3-3.2.3/lib/../ext/cld3/libcld3.so: Undefined symbol "_ZNK6google8protobuf11MessageLite39InternalSerializeWithCachedSizesToArrayEbPh" (LoadError)

protobufに含まれるシンボルの様なのですが。
portsコレクションのcld3ではなく、gemコマンドからインストールするノーマルのcld3に差し替えたら止まりました。

pkg install protobuf25

事前に行ったこいつが効いた可能性もあり。
よくわかっていません。割とアドリブです。結果オーライ。

明日以降、過去に行った対応をひとつずつ上げていきます。
コミットを漁れば、過去の変更を全て網羅できるはずw

Mastodon 2.8.1は、無事に適用できました。
2.8.0からであれば、FreeBSD向けに特別にやらなければいけないことはなかったです。

MastodonサーバにFreeBSD使っている人、何人か観測してるんですけど、基本的に使っていることを伏せているんですよね。私もFreeBSDで立ててみたことあるので、ちゃんと動くなー、FreeBSDでやるのもありだなーと思ったりしていました。

Mastodonは、Ubuntu 18.04などリファレンス環境では楽なもんですが、その他の環境だと利用している周辺ソフトウェアの動作条件で引っかかることが多く、CentOSなどで苦労している人が多い印象です。

ここはFreeBSDで運用する知見が蓄積されている上に、何かあったときにはすぐにディスカッションを開始できるので、大事にしていきたいですね。

2 Likes

報告が遅れましたが、2.8.2も正常動作しております。
特別な対応は不要でした。

FreeBSD勢、いるところにはいるんですね。私は会ったことがありませんw
Ruby 2.6で動かすことが出来ている方、いないかな〜。

過去に行った個人的な対応を、近々ひとつずつ上げていきますね。

1 Like

恐らく今日、FreeBSD portsにRuby 2.6が届きました。
https://svnweb.freebsd.org/ports/head/lang/ruby26/

Rubyのリリースは毎年のクリスマスの様ですが、少なくともそれまでの間は小細工が不要になると期待して。
近々色々試してみます。

1 Like

当方ステージング環境で、Ruby 2.6での動作に成功しました。
以下、ざっくりとした流れ。
FreeBSDっ子のほとんどはportmasterを使ってるだろうから、その前提で。

Ruby 2.6

su
portmaster lang/ruby26
pkg unlock ruby25-gems
pkg delete ruby25-gems
portmaster devel/ruby26-gems
pkg lock ruby26-gems

ここまでがRuby自体のインストール。

bundle install

引き続き、Mastodon環境の更新。

cd ~mastodon
bundle install

おっと。ひとつだけ、bundlerから入れられないgemがありました。

portmaster security/rubygem-bcrypt
pkg lock rubygem-bcrypt

改めて、 bundle install 続行。
正常終了。

起動

ウチは、Mastodonをgodで起動しているので、以下実行。

service god restart

syslogに以下のエラーを検知。

/usr/local/lib/ruby/gems/2.6/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': cannot load such file -- /usr/local/lib/ruby/2.6/csv/delete_suffix (LoadError)

Gemfileに、以下追記。(これ、本来必要な記述ではないの?知らないけどw)

gem 'csv'

bundle installservice god restart を再実行し、Mastodonの起動を確認。

Rails 5.2.3

Mastodon 2.8系の導入時に、本来要求されるRails 5.2.3を5.2.2に落としていたことを忘れてはいけない。
Gemfileでの指定を5.2.3に戻し(Gemfile.lockを再構築しないとgem ‘rails’ の入れ替えはできない)、

rm Gemfile.lock
bundle install
service god restart

改めて正常起動を確認。

今後

2.5で動作させるよりだいぶ素直な構成になりました。bundlerから入れられないgemはもっと多かったです。
Gemfileを書き換えてバージョンを落として運用しているgemが他にもあるので、ひとつずつ戻してみます。

Ruby 2.6での検証を続けます。
paperclipを6.1.0から6.0.0に落としていました。
これを元に戻しても、残念ながらgifファイルのアップロードでエラーがでます。

以下、syslogへの出力。

Link failed with No such file or directory @ rb_file_s_link

paperclipは、相変わらず6.0.0での運用が無難なようです。
Gemfileに、以下の様な感じに戻し。

gem 'paperclip', '~> 6.0.0'

gifファイルの正常アップロードを確認しました。(含アニメーションgif)

1 Like

Mastodon 2.8.3を適用しました。特別な対応は不要でした。
という話だけで終わってしまうのもアレなので、もうひとネタ持ってきました。

さる事情で最近、インスタンスをふたつ(本番とステージング)立てました。
bundle installyarn を実行した時に、別途入れなければいけなかったパッケージを確認したところ、以下のものが該当しました。OSインストール直後のすっぴんに近い状態からのものです。

pkg install protobuf25
pkg install libidn

あと話は逸れますが、 yarn 実行中にpythonを実行する箇所があります。
すっぴんのFreeBSDだと、python2/python3のパッケージがインストールされているにも関わらず、状況によっては/usr/local/bin/pythonが存在しなかったりします。
私は雑にシンボリックリンクを張ったりしますが…。

近々、最初にちらっと触れた「さる事情」の件について、もしかしたら相談にのって頂くかも。
それでは、Enjoy mastodoning! (←マストドニングと読んでください)

1 Like

皆さまお久しぶりです。
最近は鯖缶(見習い)業が忙しく、変なBOTを書いたぐらいでw、アウトプットが全くできておりません。

当方のステージング鯖での話ですが、Mastodon 2.9.0rc1が無事に適用できましたので、今日はそのご報告です。
少し前にRubyを2.6系に上げたこともあってか、特別な対応は不要でした。

ウチはRCの間にステージングに適用して問題点を洗い出し、リリースしてから本番適用するという、石橋叩き系運用です。

ご存知の方もいるでしょうが、ストリーミングAPIのWebSocketに手が入ったようで。
↓これを使った実装に変わったみたい。

↓今まで使ってたこれ、FreeBSDではすんなりビルドできなかったし。
そもそももうEOLだから、使うのやめて欲しいなぁと思ってて。

↓しばらくここのパッチを拝借して、ストリーミングAPIはだましだまし運用してました。


このパッチが実際にコミットされることはなかったけど、私は大変助かりました。感謝です。
かくして、ウチの streaming/index.js は本家のものと同じになりました。

1 Like

今朝、Mastodon 2.9.0を無事に適用しました。
モロヘイヤ等にも修正が発生して、慌ただしい朝でしたが、それはFreeBSDとは無関係な話w

1 Like

Mastodon 2.9.1自体は適用できました。
ffmpegがノーマルのもの(pkg install ffmpeg でインストールしたもの)だと、*.mp3のアップロード時に以下のエラーが出ました。

Automatic encoder selection failed for output stream #0:0. Default encoder for format mp3 (codec mp3) is probably disabled. Please choose an encoder manually.

*.mp3以外は試せていません。対策検討中。

ffmpegをリビルドし、*.mp3のアップロードには成功しました。
MP3を扱えるcodec。まぁ、すぐに思い当たるのはLAMEなんですが。チェック入れてビルドすればOKです。

500エラーを返すのはイマイチと思ってて、そこも直すべきと個人的には感じます。
余力あったら、我こそがPRを送りたいものだけど。

こんな現象に悩まされており。
昨日から対応中ですが、解決の目処が立っていません。

解決したら、または解決を諦めたらw、その旨報告させて頂きます。

やはり、サンドボックス的な環境のほうがよかろうと思い、ステージング環境にてrbenv環境の構築に再度挑戦しました。
rbenv環境からMastodonを起動すること自体には成功したものの、起きる現象は全く変わらず。

以下、syslogへの出力。

2019-07-12T11:30:40.027555+09:00 dev5.b-shock.local mastodon_sidekiq[8128] 2019-07-12T02:30:40.025Z 8125 TID-7y9ixbt WARN: Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
2019-07-12T11:30:40.027790+09:00 dev5.b-shock.local mastodon_sidekiq[8128] 2019-07-12T02:30:40.025Z 8125 TID-7y9ixbt WARN: /usr/local/www/mastodon/.rbenv/versions/2.6.3/lib/ruby/2.6.0/net/protocol.rb:217:in `rbuf_fill'
2019-07-12T11:30:40.027933+09:00 dev5.b-shock.local mastodon_sidekiq[8128] /usr/local/www/mastodon/.rbenv/versions/2.6.3/lib/ruby/2.6.0/net/protocol.rb:191:in `readuntil'
2019-07-12T11:30:40.028268+09:00 dev5.b-shock.local mastodon_sidekiq[8128] /usr/local/www/mastodon/.rbenv/versions/2.6.3/lib/ruby/2.6.0/net/protocol.rb:201:in `readline'
(以下バックトレース)

以下、rbenv導入の手順を記します。
pkg install ruby-build にてrbenv一式を導入し、実行環境に適用したものとして)

su mastodon #実行ユーザー
cd ~
rbenv install 2.6.3
rbenv rehash
gem install bundler rake
bundle config build.charlock_holmes --with-icu-dir=/usr/local
bundle config build.idn-ruby --with-idn-dir=/usr/local
bundle install

特別なビルドオプションが必要なgemは2コにまで減っていました。
以前試したときよりだいぶよい状況です。

進捗があったら、また報告致しますw

もしかしてtootle利用していませんか?現在tootleの通知サーバが死にかけているっぽくていくつかのサーバで同じような障害が発生しているようです。

1 Like

情報ありがとうございます。まさに該当のTootleユーザーです。
ちょうど同じ時期にFreeBSDでパッケージ大量更新があり、適用直後のタイミングだったのは不幸でした。
おとなしく回復を待ちます。まぁ、rbenvの構築ができたのはよかったかな。

それにしても、こうした情報は自力で拾えるよう、もう少し広いアンテナを持ちたいものですね。
まずは作者どのの本人垢をフォローか。