LoginSignup
0
0

More than 1 year has passed since last update.

t4g(Armベース)のEC2にunisonを入れて2台間で同期をとる

Last updated at Posted at 2022-07-14

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/ に設定ファイルを作成します。(片方のサーバーのみ)

~/.unison/hoge.prf
# 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などで実行します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0