Mastodon @ FreeBSD

mastodon
タグ: #<Tag:0x00007f6c049089f0>
#1

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

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

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

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

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

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

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

1 Like
#2

ステージング環境に対し、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
#3

どうやらぼっちの様だけど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

#4

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

#5

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

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

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

2 Likes
#6

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

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

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

1 Like
#7

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

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

1 Like
#8

当方ステージング環境で、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が他にもあるので、ひとつずつ戻してみます。

#9

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
#10

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

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

pkg install protobuf25
pkg install libidn

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

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