t4gは安くて早いのでどんどん使っていこう!と思っていたのですが、Armベースなので、バイナリパッケージがない場合があり、ちょっと一般的ではないものを入れようと思うとちょっと大変な場合があります。
というわけで、unison を入れるのに手こずったので、記録を残そうと思います。
ちなみに unison は、サーバー間のファイル同期とかができるツールです。
https://www.cis.upenn.edu/~bcpierce/unison/
opam のインストール
unison は OCaml という言語で書かれていて、opam は OCaml のパッケージマネージャーだそうです。
というわけで、まず opam をインストールします。
opamのインストール手順に書いてあるように、スクリプトを実行します。
$ sudo bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
途中、どこにインストールするか聞かれて、デフォルトだと /usr/local/bin/opam ができます。
その他に必要なものをインストール
opam を使い始める時に、opam init
を実行するのですが、必要なコマンドがないと言われるので入れておきます。
$ sudo yum install patch
$ sudo amazon-linux-extras install epel
$ sudo yum install bubblewrap
unison をインストールする時に必要なものも入れておきます。
$ sudo yum install gtk2-devel
opam 初期設定
$ opam init
実行したユーザーの ~/.opam/
以下に色々できます。
最後に
# Run eval $(opam env --switch=default) to update the current shell environment
と出ているので実行します。
$ eval $(opam env --switch=default)
unison インストール
$ opam install unison
最後に
# Run eval $(opam env) to update the current shell environment
と出るので実行します。
$ eval $(opam env)
unison -version
を実行して、unison と ocaml のバージョンが出たらインストールできています。
$ unison -version
unison version 2.52.0 (ocaml 4.14.0)
これで unison が使えるようになった!…と思ったのですが、EC2の2台間で同期するには ssh する必要があって、~/.opam/
以下に実行ファイルがあって、~/.bash_profile
の設定でパスを通しているので、
ssh 同期先サーバー
(接続後)
unison -version
は実行できても、
ssh 同期先サーバー unison -version
では実行できません。(sshの設定については割愛します。)
というわけで、実行ファイルを /usr/local/bin/
にコピーします。
$ which unison
~/.opam/default/bin/unison
$ sudo cp -i ~/.opam/default/bin/unison /usr/local/bin/
私は2台それぞれで同じようにインストールしたのですが(ちなみに2台に同じバージョンのunisonを入れる必要があります)、1台にインストールして、できた unison ファイルをもう1台にコピーするので良かったのかもしれません。(未確認ですが)
同期の設定
同期を実行するユーザーの ~/.unison/
に設定ファイルを作成します。(片方のサーバーのみ)
# times ファイルの時刻をコピー元のままに保存する
times = true
# prefer newer 新しい方を優先する
prefer = newer
# ルート・ディレクトリの指定
root = /path/to/testdir
root = ssh://同期先サーバー//path/to/destdir
# 無視するディレクトリやファイル名を指定
ignore = Path */cache/*
設定したファイルを実行してみます。
$ unison -batch hoge
実行したサーバーの /path/to/testdir
と同期先サーバーの /path/to/destdir
が同期されたら成功です。
定期的に同期したい場合は、crontabなどで実行します。