vagrant環境構築

# ドットインストールより

##手順
1.virtualBoxのインストール
2.vagrantのインストール
(どちらも公式のインストーラを利用)
3.Boxの作成（オフライン環境でも仮想環境を作成したい場合のみ）
4.仮想環境の定義ファイルの作成とipの設定
5.必要なアプリのインストール


##用語
###bentoとは
chef社が公開しているvagrant用のOSイメージ（box）
###boxとは
仮想マシンを作成する際に必要なOSのディスクイメージファイル等が入ったファイルの集まり

##チートシート
```terminal
$ cd vagrant 
$ mkdir centOS
$ cd centOS
$ vagrant init centos/7

# 下はvagrantfileの該当箇所を直接案コメントしてもよい
$ sed -i '' -e 's/# config.vm.network "private_network", ip: "192.168.33.10"/config.vm.network "private_network", ip: "192.168.33.10"/' Vagrantfile

# これでcentOSに入れる
$ vagrant ssh

# ubuntu　のapt的なやつ
$ sudo yum -y update

# git のインストール
$ sudo yum install git

# ドットインストールでAnsibleのスクリプトを書いていてくれるのでそちらを利用
$ git clone https://github.com/dotinstallres/centos6.git
$ cd centos6
$ ./run.sh

```

### トラブルシュート
ドットインストールの作ってくれたansibleスクリプトを実行すると出るエラー
Could not find the requested service iptables: host

```terminal
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find the requested service iptables: host"}
```

これはcentOSの7を使っている出るエラー
RHEL7以降だとiptablesというサービスが存在しないためこうなる。RHEL6なら発生しないはず。
RHEL7以降ではfirewalldというサービスを使っている。
main.ymlを見るとタスクが[disable iptables]となっている。つまり無効化できればいいはず。
なのでfirewalldを無効化すれば問題ないはず。

```terminal
$ systemctl stop firewalld
$ systemctl disable firewalld
# rootのパスワードは通常vagrant
```

そしてmain.ymlの[disable iptables]をコメントアウトしておく。

```terminal
$ vi main.yml
# #でコメントアウト　tasks以下のdisable iptables
```

##Vagrantコマンドメモ

```terminal
# 今あるBoxの一覧を表示する
$ vagrant box list

# ローカルにBoxをインストールする
$ vagrant add [box-name] [box-url]

# 定義ファイルの作成
$ vagrant init [box-name] [box-url]

```

##centos6の中身
```run.sh
test -z $(which ansible-playbook) && sudo yum install -y epel-release && sudo yum install -y ansible
sudo yum update -y ansible
ansible-playbook main.yml --connection=local
```

```main.yml
---
- hosts: localhost
  become: yes
  vars:
    - ruby_version: 2.3.1
    - python_version: 3.5.2
  tasks:
#いらない
#    - name: disable iptables
#      service: name=iptables state=stopped enabled=no
    - name: install libselinux-python
      yum: name=libselinux-python state=latest
    - name: Disabled SELinux
      selinux:
        state: disabled
    - name: remove localtime
      file: path=/etc/localtime state=absent
    - name: change timezone
      file: src=/usr/share/zoneinfo/Asia/Tokyo dest=/etc/localtime state=link force=yes mode=0644
# dest=/etc/sysconfig/i18nの部分はエラーになる。
# centos7では /etc/locale.confなので書き換え
    - name: change locale
      lineinfile: >-
        dest=/etc/locale.conf
        state=present
        regexp=^LANG=
        line='LANG="ja_JP.UTF-8"'
# remiのversionは7に書き換え
#    - name: install remi repository
#      command: rpm -Uvh --force http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    - name: install remi repository
      command: rpm -Uvh --force http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    - name: install man
      yum: name=man state=latest
    - name: install apache
      yum: name=httpd state=latest
    - name: start apache and enabled
      service: name=httpd state=started enabled=yes
    - name: change owner
      file: dest=/var/www/html owner=vagrant recurse=yes
    - name: copy httpd.conf
      copy: src=httpd.conf.custom dest=/etc/httpd/conf/httpd.conf backup=yes
      notify:
        - restart apache
    - name: install gd-last
      yum: name=gd-last enablerepo=remi state=latest
    - name: install php
      yum: name={{item}} enablerepo=remi-php56 state=present
      with_items:
        - php
        - php-common
        - php-pdo
        - php-cli
        - php-devel
        - php-mysqlnd
        - php-mbstring
        - php-gd
        - php-intl
        - php-xml
      notify:
        - restart apache
    - name: copy php.ini.custom
      copy: src=php.ini.custom dest=/etc/php.ini backup=yes
      notify:
        - restart apache

    - name: install mysql repository
      command: rpm -Uvh --force http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
    - name: install mysql
      yum: name={{item}} state=present
      with_items:
        - mysql
        - mysql-devel
        - mysql-server
        - mysql-utilities
    - name: copy my.cnf.custom
      copy: src=my.cnf.custom dest=/etc/my.cnf backup=yes
    - name: start mysql and enabled
      service: name=mysqld state=started enabled=yes
    - name: install ruby dependencies
      yum: name={{item}} enablerepo=remi,epel state=present
      with_items:
        - gcc
        - openssl
        - openssl-devel
        - rpm-build
        - gcc-c++
        - bzip2
        - bzip2-devel
        - libtool
        - zlib
        - zlib-devel
        - httpd-devel
        - openssl-devel
        - curl-devel
        - ncurses-devel
        - gdbm-devel
        - readline
        - readline-devel
        - sqlite
        - sqlite-devel
        - libyaml-devel
        - libffi-devel
        - bison

    - name: check rbenv installed
      command: test -x /home/vagrant/.rbenv
      register: rbenv_present
      become: no
      failed_when: rbenv_present.rc not in [0, 1]
    - name: git clone rbenv
      git: repo=https://github.com/sstephenson/rbenv.git dest=/home/vagrant/.rbenv
      when: rbenv_present.rc == 1
      become: no
    - name: update bash_profile
      copy: src=bash_profile.custom dest=/home/vagrant/.bash_profile backup=yes
      become: no

    - name: check ruby-build installed
      command: test -x /home/vagrant/.rbenv/plugins/ruby-build
      register: rbuild_present
      become: no
      failed_when: rbuild_present.rc not in [0, 1]
    - name: git clone ruby-build
      git: repo=https://github.com/sstephenson/ruby-build.git dest=/home/vagrant/.rbenv/plugins/ruby-build
      when: rbuild_present.rc == 1
      become: no

    - name: update rbenv
      command: git pull --rebase chdir=/home/vagrant/.rbenv
      become: no
    - name: update ruby-build
      command: git pull --rebase chdir=/home/vagrant/.rbenv/plugins/ruby-build
      become: no

    - name: check ruby installed
      shell: /bin/bash -lc "rbenv versions | grep {{ruby_version}}"
      register: ruby_installed
      become: no
      failed_when: ruby_installed.rc not in [0, 1]
    - name: install ruby
      shell: /bin/bash -lc "rbenv install {{ruby_version}} && rbenv rehash && rbenv global {{ruby_version}}"
      when: ruby_installed.rc == 1
      become: no

    - name: check pyenv installed
      command: test -x /home/vagrant/.pyenv
      register: pyenv_present
      become: no
      failed_when: pyenv_present.rc not in [0, 1]
    - name: git clone pyenv
      git: repo=https://github.com/yyuu/pyenv.git dest=/home/vagrant/.pyenv
      when: pyenv_present.rc == 1
      become: no

    - name: check pyvirtual installed
      command: test -x /home/vagrant/.pyenv/plugins/pyenv-virtualenv
      register: pyvirtual_present
      become: no
      failed_when: pyvirtual_present.rc not in [0, 1]
    - name: git clone pyenv-virtual
      git: repo=https://github.com/yyuu/pyenv-virtualenv.git dest=/home/vagrant/.pyenv/plugins/pyenv-virtualenv
      when: pyvirtual_present.rc == 1
      become: no

    - name: update pyenv
      command: git pull --rebase chdir=/home/vagrant/.pyenv
      become: no
    - name: update pyenv-virtualenv
      command: git pull --rebase chdir=/home/vagrant/.pyenv/plugins/pyenv-virtualenv
      become: no

    - name: check python installed
      shell: /bin/bash -lc "pyenv versions | grep {{python_version}}"
      register: python_installed
      become: no
      failed_when: python_installed.rc not in [0, 1]
    - name: install python
      shell: /bin/bash -lc "pyenv install {{python_version}} && pyenv rehash && pyenv global {{python_version}}"
      when: python_installed.rc == 1
      become: no

    - name: check node js installed
      shell: /bin/bash -lc "node -v"
      register: node_installed
      become: no
      failed_when: node_installed.rc not in [0, 1, 127]
    - name: install node script
      shell: /bin/bash -lc "curl -sL https://rpm.nodesource.com/setup | bash -"
      when: node_installed.rc == 127
    - name: install nodejs
      yum: name=nodejs state=latest
      when: node_installed.rc == 127
    - name: install npm
      yum: name=npm state=latest
      when: node_installed.rc == 127

  handlers:
    - name: restart apache
      service: name=httpd state=restarted
```