私はMisskeyフォークのFirefishを自分の契約したサーバーで動かしています。サーバー運用初心者ですので初めてぶつかる課題も多く、右往左往しながらどうにか7ヶ月ほどサーバーを運用できています。
Firefishのプロジェクトリーダーが突然(本当に突然)naskyaさんに譲られてから、Firefishはローリングリリースが採用され、活発に開発がなされています。時間を空けてソフトウェアをアップデートするのにはかなりの労力が要されますので、気が向いた時にアップデートするようにしていました。今日の朝はWikipediaに「ADEAC」の記事を書きつつ、湧いてきたspamを潰していたので、ついでにアップデートを行うことにしました。
しかしながらよく分からない理由でアップデートが出来ず、危うくc.osumiakari.jpを放棄しかねない事態になってしまいました。ここではその概要と対処した方法を書き留めておこうかと思います。
結論
- Rustのバージョンが足りなかった
- naskyaさんにメンションしたら即日対応してくださった
- ちなみにドキュメントに書かれていた
Firefishのアップデート
Firefishは現在firefish.devで開発が行われており、ここで開発状況を見ることが出来、私のような鯖缶(サーバー管理者)は時々ここを覗いてアップデートする機会を伺っています。アップデートの方法はv20240206のリリースノートに書かれている通りで、大まかに言えば
- 動いているサービスを止める
git pull -ff
をする- パッケージを更新する
- ビルドする
- マイグレーションする
- 再度サービスを動かす
といった流れになっています。この流れはそこまで難しいものではなく、コピペで大体どうにかなったりするものです。そのため気が向いた時に適当な形で実行しても大きな問題にならないもので、直近では2024年2月12日に実行していました。
本日2月16日も同じように実行しようと思ったのですが、4番のビルドの段階で以下のエラーが出てこけてしまいました。
/home/(インストールディレクトリ)/packages/backend-rs:
ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL [email protected] build: `napi build --features napi --platform --release --cargo-flags=--locked ./built/`
Exit status 1
file:///(インストールディレクトリ)/node_modules/.pnpm/[email protected]/node_modules/execa/lib/error.js:60
error = new Error(message);
^
Error: Command failed with exit code 1: pnpm --recursive --parallel --filter=backend-rs --filter=firefish-js run build
at makeError (file:///(インストールディレクトリ)/node_modules/.pnpm/[email protected]/node_modules/execa/lib/error.js:60:11)
at handlePromise (file:///(インストールディレクトリ)/node_modules/.pnpm/[email protected]/node_modules/execa/index.js:124:26)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async file:///(インストールディレクトリ)/scripts/build.mjs:8:2 {
shortMessage: 'Command failed with exit code 1: pnpm --recursive --parallel --filter=backend-rs --filter=firefish-js run build',
command: 'pnpm --recursive --parallel --filter=backend-rs --filter=firefish-js run build',
escapedCommand: 'pnpm --recursive --parallel "--filter=backend-rs" "--filter=firefish-js" run build',
exitCode: 1,
signal: undefined,
signalDescription: undefined,
stdout: undefined,
stderr: undefined,
cwd: '(インストールディレクトリ)',
failed: true,
timedOut: false,
isCanceled: false,
killed: false
}
Node.js v20.5.0
ELIFECYCLE Command failed with exit code 1.
ELIFECYCLE Command failed with exit code 1.
不幸なことにバックアップを取得せずにアップデート作業を始めてしまったため、この問題を解決できない限りc.osumiakari.jp
はずっと502エラーを吐き続けてしまいます。これは悲しいので何としても避けたいことです。本質的な解決としてはこのエラーに素直に向き合い、どうにかして解決することですがそんな技能と余裕が存在しなかったため、git reset
の力を借り、動作していたv20240212
へダウングレード(?)を無理矢理行い、動いていたバージョンを再度ビルドすることで事なきを得ました。サクッと書きましたが、この方法を思いつきビルドが成功するまで15分くらい焦りっぱなしでした。
naskyaさんへの問い合わせ
ダウングレード(?)でどうにか事なきを得ましたが、このまま放置することは明らかに望ましくありません。そのためnaskyaさんへ問い合わせを行いました。すると即日で対応して下さり、cargoのバージョンとgit reset
で何をしたかを問われました。
その結果Rustのバージョンが足りない可能性を指摘して下さり、rustup update
でRustを上げてから例のアップデートプロセスを実行してみると、無事にアップデートに成功しました。嬉しいですね。
その後notice-for-adminsにv20240214
で「Required Rust version has been bumped from v1.70 to v1.74.」という案内がなされていた(Rustのバージョンがv1.7.3でした)ことをこっそりと教えていただき、顔も無くすことに成功しました。悲しいですね。
最後に
次回の技術関係の記事: ThreadsがActivityPubへベータ版として対応
というわけでかなりしょうもない理由でFirefishのアップデートに失敗してしまったという記事でした。このようなしょうもない話であるにもかかわらずnaskyaさんには丁寧に対応していただいて申し訳ない…という気持ちでいっぱいです。
参考になるかどうかは分かりませんが、バージョンが足りないことでアップデートに失敗することもある(それはそう)ということを知っていただければなと思いこの記事を書きました。何かの参考になれば幸いです。