LoginSignup
9
11

More than 5 years have passed since last update.

rbenvをインストール・設定するAnsibleのPlaybook(Vagrantfileもあり)

Last updated at Posted at 2016-06-17

はじめに

CentOS6等でruby 2.xを利用したい(Serverspecを使いたい)などで、
rubyのバージョンをあげるためにrbenvのインストールと設定を行う
Ansibleのplaybookを作成しました。
pyenvはこちら
http://qiita.com/tbuchi888/items/d44d15dcc6f63ae440d9

構築の主な手順

CentOSに対して以下をrootで実施します

1. rbenvのインストール
2. rubyバージョン2.2.3のインストール

site.yml
---
 - include: install_rbenv_without_proxy.yml

以下playbookのvars: ruby_ver: 2.2.3でrbenvでインストール・設定するrubyのバージョン指定を行っていますので適宜変更して利用してください。
また、rbenvのインストール後に、続けてServerspecなどをgemでインストールしたい場合は
# Please remove the following comment '#' when you want to do, for example,gem install Serverspecusing rbenv.
より下の行のをコメントを外して、適宜インストール対象を変更してご利用ください。
なお、rbenvでは、仕組み上~/.bash_profileでrubyのバージョンを指定を実施しているので、Ansible等でrubyのコマンドを実行する場合は、コマンド実行前にsource ~/.bash_profile;とつけて、~/.bash_profileを事前に読込むところがポイントです。

install_rbenv_without_proxy.yml
---
- hosts: all
  gather_facts: no
  become: yes
  vars:
    ruby_ver: 2.2.3
  tasks:
    - name: check install rbenv by which command
      shell: source ~/.bash_profile; which rbenv
      register: rbenv_install
      failed_when: rbenv_install.rc == 0

    - block:
        - debug: msg="---------- block start ----------"
        - name: yum install
          yum:
            name:  '{{ item.name }}'
            state: '{{ item.state }}'
          register: RESULT
          with_items:
            - name: gcc
              state: latest
            - name: zlib-devel
              state: latest
            - name: openssl-devel
              state: latest
            - name: mysql-server
              state: latest
            - name: mysql-devel
              state: latest
            - name: libffi-devel
              state: latest
            - name: libxml2-devel
              state: latest
            - name: libxslt-devel
              state: latest
            - name: httpd-devel
              state: latest
            - name: curl-devel
              state: latest
            - name: apr-devel
              state: latest
            - name: apr-util-devel
              state: latest
            - name: readline-devel
              state: latest
            - name: ImageMagick
              state: latest
            - name: ImageMagick-devel
              state: latest
            - name: git
              state: latest
            - name: rubygems
              state: latest
        - name: results
          debug: var=RESULT.results

        - name: git clone rbenv,ruby-build
          git:
            repo: '{{ item.repo }}'
            dest: '{{ item.dest }}'
          register: RESULT
          with_items:
            - repo: https://github.com/sstephenson/rbenv.git
              dest: ~/.rbenv
            - repo: https://github.com/sstephenson/ruby-build.git
              dest: ~/.rbenv/plugins/ruby-build
        - name: results
          debug: var=RESULT.results

        - name: install rbenv and ruby
          shell: '{{ item.cmd }}'
          register: RESULT
          with_items:
            - cmd: echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
            - cmd: echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
            - cmd: source ~/.bash_profile; rbenv -v
            - cmd: source ~/.bash_profile; rbenv install '{{ ruby_ver }}'
            - cmd: source ~/.bash_profile; rbenv rehash
            - cmd: source ~/.bash_profile; rbenv global '{{ ruby_ver }}'
            - cmd: source ~/.bash_profile; rbenv rehash
            - cmd: source ~/.bash_profile; ruby -v
        - name: results
          debug: var=RESULT.results

#  Please remove the following comment '#' when you want to do, for example, `gem install Serverspec` using rbenv.
#        - name: install serverspec and ansiblespec
#          shell: '{{ item.cmd }}'
#          register: RESULT
#          with_items:
#            - cmd: source ~/.bash_profile; gem install serverspec
#            - cmd: source ~/.bash_profile; gem install ansible_spec
#        - name: results
#          debug: var=RESULT.results

        - debug: msg="---------- block end   ----------"
      when: rbenv_install.rc == 1

以下はVagrant環境の場合

vagrant upにてCentOS6のServer起動とAnsible provisonerを利用してrbenv環境の構築と設定を行います。
なお、boxファイル名については、適時自環境のファイル名に置き換えて利用してください

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  # Please replace it with a BOX name of CentOS6 for one's own 32bit when your host is 32bit machine.
  config.vm.box = "geerlingguy/centos6"

  # Add ansible provisioner
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "site.yml"
  end
end

 使い方

- OSX等でAnsible provisonerが利用できるVagrant環境の場合
  - 上記playbook等資材を用意した上でvagrant upしてください。
- Ansible環境のみの場合
  - インベントリホストファイルを各自用意してCentOS6サーバに対してPlaybookを実行してください。ansible-playbook -i インベントリファイル site.yml

上記プレイブック等の実行環境

Ansible provisioner and Vagrant,Virtulbox Host

 - OS:OSX yosemite
 - Virtulbox:バージョン 5.0.10 r104061
 - Vagrant: Vagrant 1.8.1
 - Ansible:

$ansible --version
ansible 2.1.0 (devel c600ab81ee) last updated 2016/04/20 11:11:25 (GMT +900)
  lib/ansible/modules/core: (detached HEAD 98322a777f) last updated 2016/04/20 11:11:54 (GMT +900)
  lib/ansible/modules/extras: (detached HEAD 1aecfc1e19) last updated 2016/04/20 11:11:55 (GMT +900)
  config file = 
  configured module search path = Default w/o overrides

rbenv install Server

- OS: CentOS6.8

9
11
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
9
11