書き置き

何かを書き残す

vagrantでansibleでelixir

パソコン買い変えました!無印MacBookのマシマシで!快適!

ということで、せっかくなのでイチからelixir載ったlinuxを作り直し &vagranのprovisioningで済ませちゃおう作戦

モノはこちら→

GitHub - utonn/vagrant-elixir

elixirのインストールについて

今回は、erlangとelixirともにソースインストールしてます。なぜってyum出来なかったからね。 とりあずtry&erroしつつ、事前に必要そうなパッケージがこちら

yum install -y git autoconf gcc ncurses-devel
yum install -y openssl openssl-devel unixODBC unixODBC-devel gcc-c++ fop

上はビルドに必要なもの。
下はelixirが力を十分発揮するのに必要なもの。

あとjinterface(Javaのライブラリとか使えるようになるっぽいやつ)は使わなそうだから無視
wxも、GUIとか開発予定ないので無視

ansible_localでのプロビジョン

vagrantからansible使ってプロビジョニングは、普通にansible使うのとansible_localってのがあるらしいです。

ansibleは、hostマシンからansibleする
ansible_localは、guestマシンからansibleする

ansible_localの場合、当然guestマシン上にansibleが必要になるのですが、そこはvagrant様が自動で入れてくれます。便利。
ということで今回はansible_localを採用。

使う側の環境に左右されないっていうのはいいよね。

playbook

ansible初心者なので、いろいろ試行錯誤がありました。
ansible_localを採用したので、ほぼansibleをローカルにかける時と同じはず。

inventoryにhostsがないと実行してくれない

今回ローカルだけなので、hostsとか別ファイルじゃなくてもいいかなーとか思ってたら
inventoryにないhostは対象にならない仕様っぽい。要調査。

なので127.0.0.1とだけ書いたファイルを用意して、Vagrantfileにてinbentoryファイルとして指定しました。

特定のディレクトリで複数コマンドを実行する

commandモジュールを使うとき、chdirで実行ディレクトリを指定できるわけですが、複数コマンドを同じディレクトリで実行するときって毎回これ書くの?って感じでした。

with_itemsっていうタスクをループできる機能があるってことなので、それを使うことで楽に書けるっぽい

    - name: build & install erlang
      command: "{{ item }}"
      args:
        chdir: /usr/local/src/otp
      with_items:
        - ./otp_build autoconf
        - ./configure
        - make
        - make install

インストールしたライブラリのパスを使う

erlangインストール後、elixirのインストールでerlangのパスが必要になのですが、
普通にPATH=hogehogeってのをコマンドモジュールで実行したらうまいこといかなかった。

で、結局うまく行かなかった理由は分からないのだが、
コマンド(というかタスク?)実行時にPATHを指定するには、environmentを設定すれば良いらしい

    - name: build & install elixir
      command: "make clean test"
      args:
        chdir: /usr/local/src/elixir
      environment:
        PATH: "{{ ansible_env.PATH }}:/usr/local/bin"