AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ansible2.1でRubyをコンパイルしてインストールする

シリーズと化してしまいましたね。

今回はRubyインストールです、2.3.1をインストールしました。

Rubyインストール

以下のようにする。

roles/web/tasks/ruby.yml

---

- name: get ruby 2.3.1
  get_url: >
    url=https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    dest=/usr/local/src/ruby-2.3.1.tar.gz
- name: uncompress ruby-archive
  command: >
    tar xvzf ruby-2.3.1.tar.gz
    chdir=/usr/local/src/
    creates=/usr/local/src/ruby-2.3.1/Makefile
- name: configure
  command: >
    ./configure --prefix=/usr/local/
    chdir=/usr/local/src/ruby-2.3.1/
    creates=/usr/local/src/ruby-2.3.1/Makefile
- name: make
  command: >
    make
    chdir=/usr/local/src/ruby-2.3.1/
    creates=/usr/local/bin/ruby
- name: make install
  command: >
    make install
    chdir=/usr/local/src/ruby-2.3.1/
    creates=/usr/local/bin/ruby

めっちゃハマったこと

./configureとmakeのタスクに「creates=/usr/local/bin/ruby-2.3.1」と指定して、ディレクトリが存在したら作業しないようにさせたかったんだけど、記述するとタスクがエラー吐いて爆発してしまう……。 結局解決方法がわからなくて、記述を削除して、make installの時だけ、rubyバイナリが見つかったら作業しない、というようにしました。

追記

Makefileで判断すりゃいいと気付いたので追加してます。 shellのcreatesを見ると「a filename」と書いてあるので動かないのは当然であった。

WARNING出てないのでcommand:を利用していますが本来はshell使うほうが良いでしょうね。