Rustコンパイラをクラウドでビルドする備忘録
概要
Rustコンパイラをいじっているとビルドの遅さのせいで作業に支障をきたすため、クラウドでビルドするようにしてみる。
EC2を立ち上げる
Ubuntu 16.04 (HVM) の c5.4xlarge を使うことにする。使うインスタンスの強さは財布と相談して決めることにする。
高くて強いインスタンスを使っていくので、使わないときは落とし忘れないように気をつける(停止時はEBSやEIPだけ課金される)。このあたりも必要なら自動でシャットダウンする仕組みを考えるといいかもしれない。
セットアップ
手元から rust-builder
という名前でSSHできるようにする。依存関係として以下を入れておく。
$ sudo apt update && sudo apt upgrade && sudo apt install build-essential python-minimal cmake curl git
スクリプトの配置
Rustコンパイラを手元にcloneして、 x.py
があるのと同じ位置に以下の y.sh
を置いてexec permissionをつける。
#!/usr/bin/env bash set -ue # Remote side: # sudo apt update && sudo apt upgrade && sudo apt install build-essential python-minimal cmake curl git builder_host=rust-builder local_host="$(hostname)" dirpath="$(realpath --relative-to "$HOME" "$(pwd)")" git submodule update --init --recursive rsync -avz --delete --exclude '.git' --exclude '/build' "$HOME/$dirpath/" "$builder_host:$local_host/$dirpath" ssh -t "$builder_host" "cd $local_host/$dirpath; ./x.py $@"
やっていることは以下。
- rsyncで送って向こうでビルドを叩く。
- gitを全部転送したくないので
.git
は省く。ただしsubmoduleが必要なのでsubmodule updateを自動で叩く。 (x.pyは.gitがあるときはsubmodule updateを自動でやってくれる) build
も当然省く。手元のbuildと衝突しうるし、--delete
に巻き込まれないようにする意図もある。ただしbuildというディレクトリがソースツリーの中にあるので、/build
と指定する必要がある。- tmuxを立ち上げたりはしない。ビルドが短くなることが期待されているので途中で切れてもよい。むしろ自動アタッチとか考えるのが面倒。
ビルド
./x.py
のかわりに ./y.sh
をつけてビルドする。(例: ./y.sh test --stage 1
)