今まで c.osumiakari.jpは「Firefish(Codeberg)」というソフトウェアで動いていました。これのサポートが2024年末で終了される(投稿)とのことでしたので、「Iceshrimp」というソフトウェアにデータごと移行することにしました。元々早くやろうと思っていたのですが、時間がかかることが予見されていたこと及びデータベースを破損してしまった時には目も当てられなくなってしまうことからあまり手を出したくなかったことなどから、12月30日という年末年始シーズンまで放置されてしまっておりました。
しかしながら、やらない理由もありませんので、2024年のうちに終わらせられることは終わらせてしまおうということで移行を実施しました。基本的に私がケチケチなため引っ掛かってしまっている点が多いのですが、同じようにケチケチな皆様の参考になれば幸いです。
結論
- きちんとドキュメントに目を通す
- ディスク容量に心配がある場合は注意
- Iceshrimpにお世話になります
ダウングレード
Firefishv20240206
が出た際に、このバージョンから任意のkey(Misskeyとか)に変更できます、といったリリースノートが出ていたことは覚えているかと思います。今回はIceshrimpへ移行するため、まずはこのバージョンへ自鯖のFirefishのバージョンを落としていきます。
Firefishのdocsにある「downgrade.md(Codeberg上のアーカイブ)」を参照しながらダウングレードをしていきます。
容量が足りない
ダウングレード用のSQLを実行している最中に以下のエラーが出ました。
psql:/tmp/downgrade.sql:154: ERROR: ファイル"base/16385/793108.2"を拡張できませんでした: デバイスに空き領域がありません
HINT: ディスクの空き容量をチェックしてください。
ご丁寧にヒントが出ているため、そのヒントの通りデバイスの空き容量をチェックするとディスクフルになってしまっていました。そのため、思いつく限りのことを行ってみました。
まず初めに、aptのアップグレードに伴って溜まる旧パッケージのお掃除を行いました。これはsudo apt autoremove
及びsudo apt autoclean
を行うことで実施できます。私の場合これによって584MBを解放することに成功しました。sudo apt upgrade
を行う度に行えばよいのですが、めんどくさいためやっていなかったことがバレてしまいました。
他に簡単に行えることとしてジャーナルログの削除を行いました。これはsystemd環境におけるログのことで、設定によってはほぼ永続的に保存されてしまっています。私の環境では2.6GB分も溜まってしまっていたため、sudo journalctl --vacuum-time=3weeks
などとすることにより、新しいデータを残しつつログの削除を行いました。ついでにsudo vim /etc/systemd/journald.conf
で設定ファイルを開き、圧縮を有効にしておきました。今回は取り敢えずディスクフルを解消するために行ったため、根源的な対策は出来ておりませんが、気概が出たら再度編集したいと思います。
この段階でエラーが出た場合ロールバックが行われているため、再度起動すれば既存のFirefishはそのまま使うことが可能となります。そのためFirefishを起動し、リモートのメディアキャッシュを吹き飛ばすことにしました。またリモートのメディアキャッシュが占める容量は割と馬鹿にならないので、こちらを削除しました。結果的にはこれが大きく効き、その後のインストールに何ら支障とならずに済みました。
他にもRustのビルドキャッシュが大量に残っている場合もございますので、pnpm run clean-all
を(自己責任で)実行しても良いかもしれません。
Firefish v1.0.5-rcへ落とす
ダウングレード用のSQLの実行は時間がかかるため、のんびりお風呂に入っていました。私の環境ですと30分ほどかかったと思います。
ここにおいてはIceshrimpへの移行を行うため、こちらにある通り、v20240206
ではなくv1.0.5-rc
まで落とします。以前インストール失敗の原因となったRustのバージョンを1.79まで落とします。落とすと勝手にインストールを始めてくれます。めちゃくちゃ優秀ですね。
そしてv1.0.5-rc
をインストールします。Firefishのロゴの バカでかい アートがインストール画面に出てくるの、大変懐かしかったです。一応インストールが終わった後、念のため起動するかどうかを確認しておくと良いでしょう。私の場合は問題なくFirefishv1.0.5-rc
が動作しました。その後ダウングレードガイドにある通り、revertmigrationを実施し、Iceshrimpのインストールへと移ります。
Iceshrimpのインストール
IceshrimpはFirefish(Calckey)から直接派生したフォーク(Misskey v12から見たら孫)ですので、移行はそこまで難しいものではありませんでした。こちらのマイグレーションガイドに沿って、丁寧に実行していったため、大きな問題は発生しませんでした。
一点失敗した点としては、ビルド時にメモリ不足に関係するエラーが出てしまったことでしょうか。私のようなケチケチマシンで実行している人にとっては、ビルド時にメモリが足りなくなってしまうことがあります。同じような問題はCalckeyからFirefishへとアップデートした際にも発生しており、対処法は知ってはいるのですが、完全に忘却していました。どうやらバックエンドのビルド時ではなくフロントエンドのビルド時にその問題が発生した、ということもあり、表面上はマイグレーションまで進めた(この時、全文検索用のインデックスに40分ほどかかり、SSH接続が失われないか大変にひやひやした)ものの、フロントエンドとしては完全にビルドできていない、といったような形となってしまっていたようです。そのため、インストールに成功したと思って c.osumiakari.jp を開いてみるとエラー画面が出てしまいました。
そのため再度インストールしてみたのですが、その際に以下のエラーが出ました。
[client]: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
(中略)
The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph
Failed with errors in 27s 40ms
対処法としては、コマンド実行時に以下のものを実行することです。
yarn && NODE_ENV="--max_old_space_size=3072" yarn build && yarn migrate
Firefishには 私がケチケチインスタンスを運営していたせいで 記載されていたのですが、タイミング的にIceshrimpのガイドには記載されていなかったようです。普通はメモリをそんなにケチケチしたインスタンスで実行しませんからね。
最後に
前回の技術関係の記事: TeamsのGitHub通知をWorkflowに置き換えたかった
というわけで、c.osumiakari.jpはFirefishサーバーからIceshrimpサーバーになりました(報告ノート)。個人的にはFirefishのデフォルトダークテーマの方が好きでしたので、装いこそFirefishに似通ってはいますが、Iceshrimp様、今後ともよろしくお願いいたします。そして、Firefish様、大変お世話になりました!