Windowsホストのvagrantでmastodonを動かす

|

PerlでOStatusインスタンスを動かすのに外部インスタンス相手にいろいろやるだけでは限界が出てきたのでテスト用にローカルでmastodonを立てることに。

Vagrantfileが付いてるから楽勝、と思いきやWindowsホストだと色々あるようなので調べて解決した。

いきさつ

mastodonはdockerにも対応してて、世の中的にはこちらが主流なのかもしれないのだけど、自分としてはvagrantの方がいろいろ潰しがきいてありがたい。mastodonはvagrant起動にも対応しているのでvagrant up一発で起動するのかな、と思ったら途中でいろいろエラーが出てしまった。

検索してヒットしたMastodon - Windows10のVagrantで動かしてみるというページを見てみるとやはりWindowsホストだとエラーになるようなのでうちだけの症状ではないな、と。そしてOSイメージだけ使って後は手動でコマンドを叩けば動くらしいということも分かった。

このページの通りに作業すればおそらく動くのだろうけど、せっかくvagrant使ってるんだからVagrantfile修正してコマンド一発で起動したい。ということでいろいろ試行錯誤した結果原因が判明した。mastodonのvagrant起動は:

  1. ホスト側でgit cloneしてソースを取得しておく
  2. そのトップディレクトリにVagrantfileがあるのでそこでvagrant upする
  3. 仮想環境側でそのディレクトリを共有してそこに色々インストールする
  4. 環境が揃ったところで起動

という流れになっているのだけど、エラーの原因は「共有ディレクトリでシンボリックリンクを張ろうとして失敗する」ということらしい。まあWindowsのディレクトリをマウントしてるからそうなる。

一応yarnだと--no-bin-linksオプションで回避できたりもするようなのだけど、自分で試行錯誤した限りではこれだけではエラーをなくすことはできなかった。

解決策

共有ディレクトリ上に色々インストールしようとするからエラーが出るのであって、仮想ディスクイメージ上にインストールすれば問題ないはず。ということで:

  1. 専用のVagrantfileだけを用意してそこでvagrant upする
  2. スクリプトでホームディレクトリ上にソースをgit cloneする
  3. そこに移動して色々インストール
  4. 環境が揃ったところで起動

という流れに変えることにした。これならインストール先はlinuxファイルシステムなので問題ないはず。

ということで変更したVagrantfileをgistに置いた。このファイルでは上述の変更の他に[Vagrant]forwarded_portでIPアドレスが0.0.0.0になった時の解消法に書かれている問題を解消するためにconfig.vm.networkにhost_ipオプションを追加してある。これで手元のWindowsホスト環境ではvagrant up一発でmastodonが起動、http://127.0.0.1:3000/にアクセスして画面が表示されるところまで確認できた。

今後

これでmastodon側のエラーとかを確認できるようになったのでPerlでリモートフォローできるようにしたい。