ななめも

メモ書き的なブログ的なメモ的なブログ

Mastodonの~/liveを飛ばした時の復旧

Mastodonに強い人に会って話題に出したので復旧した時の手順を書いておく。
記憶を元に書いてるので合ってるかわからないけどそもそもこんな状態が稀だと思う。
Non Docker前提

飛ばすとどうなるのか

動かない。だって本体がないんだもの。

慌てない

ここで絶望して「もうだめだ...DBを飛ばして0からやりなおそう...」とか考えてはいけない。
まだDBは生きてるし設定ファイルもある。

とりあえずソースを戻す

MastodonLGPLなので、カスタムしてる場合は自分のリポジトリにソースがあるし、そうじゃないなら普通に公式にソースがあります。
(まさか自分のサーバーにzipで置いてるわけないよね?)

とりあえずそれをgit clone URLするなりなんなりして持ってくる。
私の場合はlive/でrm -rf *したのでgit checkout .で戻ってきた。

アップデートの要領で動作するようにする

cd ~/live
# 任意のバージョン
git checkout v1.4.7 
# ライブラリを復元
bundle install --deployment --without development test
yarn install --pure-lockfile
# どっかから.env.productionを持ってくる
cp ~/backup/2018/07/30/.env.production .
# 一応migrateしてprecompile
env RAILS_ENV=production bundle exec rails db:migrate
env RAILS_ENV=production bundle exec rails assets:precompile
# 再起。
systemctl restart mastodon-web
systemctl restart mastodon-sidekiq
systemctl restart mastodon-streaming

これでとりあえず動く(はず)。

画像をできるだけ復元

動いてもそこは画像がない虚無の世界です。
なので画像を復元します。

アイコン

まずローカルのアイコンはどうしようもないので、ローカルの人達に謝罪してアイコンを再設定してもらいましょう。
ユーザーが上げた画像はもう戻ってきません。これも同時に謝罪しましょう。

そしてリモートはリモートの鯖に画像があるのでとりあえず
env RAILS_ENV=production bundle exec rails mastodon:media:redownload_avatars
を叩きましょう。(そもそも本来の用途じゃないらしいのであまり効果は期待できない。)

それでも取得できない場合は、モデレーションのアカウントからアバターの更新を叩くと完全に再取得されます。(といっても全部叩くことになるとDBを飛ばしたくなる。)

カスタム絵文字

これはローカルのものも比較的安易に復元できます。

  1. まず自分の鯖のカスタム絵文字の一覧をどこかにメモしておく。この時自分の鯖の絵文字がコピーされている鯖もメモする。 f:id:Non0920:20180807210318p:plain

  2. カスタム絵文字をローカル、リモート見境なく全部消す。

  3. 自分の鯖のカスタム絵文字をコピーした鯖に行き、自分の鯖の自分のアカウント宛てにカスタム絵文字をDMで送る。
    f:id:Non0920:20180807210706p:plain

  4. 自鯖でそれをコピーする。コピーされてなかったものはがんばって復旧する。

他鯖の絵文字は時が復旧してくれます。(全部削除したので勝手に取得される。)

その後

私の鯖は、その後は普通に動作しています。
飛ばした場合に楽に復旧できないかMastodonに強い人に聞いたら「できる限り全部バックアップして」だそうです。

なのでバックアップを大事にして鯖運営しようね。

Mastodonが壊れた話

タイトルの通りです。運営しているMastodonが壊れました。そして直しました。

雑に言うと大体::1が悪いです。

環境

  • 一般的な自宅鯖
  • Non-docker Mastodon
  • Ubuntu 18.04
  • ネットワークをIPv4のみに制限

昨日この環境で再起動したらMastodonのSidekiqが暴走しました。

どうやらredisが動いていないようなので確認したところ

redis-server.service: Can't open PID file /var/run/redis-server.pid (yet?) after start: No such file or directory
redis-server.service: Start operation timed out. Terminating.
redis-server.service: Failed with result 'timeout'.

これを最初に見た時は完全にredis-server.service: Can't open PID file /var/run/redis-server.pid (yet?) after start: No such file or directoryしか見ていなくて「pidファイルが生やせないのか!?なぜだ!?」ってなったわけです。

そんなわけでパーミッションをいじったりconfigをいじったりしていたんですが、どうにもならないわけです。

そうして苦しんでいたらその時通話していた人から「IPv6を無効化してるとredisが起動できないとかいう記事が」って言ってきたんです。

ええ...と思いつつIPv6を有効化して再起動したら動きました。

どうやら/etc/redis/redis.confbind 127.0.0.1 ::1の行が地雷らしくbind 127.0.0.1にすると動きました。

やはりIPv6に対応しないと洗礼を受けるのか...(途中のコマンドミスで画像飛ばしたし...)

Mastodonのアカウントの全投稿を削除するスクリプトを作った話

ふと自分のアカウントの全投稿を削除したくなる事ってありますよね?

でもMastodonTwitterの様に豊富に投稿全削除ツールがあるわけではありません。

なので自作しました。

ホストとトークンを引数として渡すと/api/v1/accounts/verify_credentialsのIDを参照して/api/v1/accounts/#{id}/statusesの投稿を取得、取得した投稿を3秒ごとに1件ずつ削除するだけの簡単なスクリプトです。

Rubyとネットワーク環境があれば動作するのでアカウントを爆破したい方は↓からどうぞ

github.com

MC-R500を買った話

みなさん、ジャンクしてますか?
私は月始めに財布の半分を溶かす程度にはジャンクしてます。

というわけで勢いで秋葉原行ってきました。 f:id:Non0920:20180202214927j:plain

そして古いホッカイロArrowsとか通話ができない高級文鎮IS04が売っている中古屋に行ったらカゴに10台ぐらいPCが入っていて
そこで手に入れてきたのがタイトルにもなってるコイツ

f:id:Non0920:20180202215442j:plain

NECのMC-R500です。

いわゆるハンドヘルドPCというやつでスペックは以下の通りです。同時発売のMC-R300と同時にどうぞ。

型番 MC-R500 MC-R300
CPU NEC VR4111
RAM(最大) 16MB(32MB) 8MB(32MB)
OS Windows CE 2.0
液晶 8.1インチカラーSTN
(640×240ドット、256色)
7.3インチモノクロEL
(640×240ドット、4階調)
モデム 33.6kbps FAXモデム内蔵
インターフェイス RS-232C、モジュラージャックRJ-11、モニタ(VGA)、IrDA 1.0、PCMCIA Type2、コンパクトフラッシュスロット、マイク、スピーカー
標準バッテリ リチウムイオン 単3乾電池×2
駆動時間(非通信時) 約8時間 約30時間
サイズ(幅×奥行×高さ) 245×138×31.4mm 245×122×30.5mm
重量(電池含む) 850g 670g
標準仕様以外のアプリケーション MGメール、MG FAX、MGエディタ、MGパソコン通信、MG運用アシスタント、MGオートダイヤラー、MGボイスレコーダのほか、パソコン通信入会用プログラムなど

???「でもこんな低スペックじゃ何もできないでしょ?」

f:id:Non0920:20180202224705j:plain f:id:Non0920:20180202224717j:plain

普通に遊べます!楽しいです!

タッチパネルも生きてるしキーボードも快調です。

お値段3218円とお高いですが私は満足です。

初投稿がこれでいいのか?まあ気にしない!