Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2016/07/24 (Sun)

Vagrantで起動したCentOS6.8にPostgreSQL9.5をAnsibleでインストール

| Vagrantで起動したCentOS6.8にPostgreSQL9.5をAnsibleでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - Vagrantで起動したCentOS6.8にPostgreSQL9.5をAnsibleでインストール - ひとり開発日記。

MySQLインストール*1 を参考に、今度はPostgeSQLをAnsibleでインストールしてみました。

環境
[vagrant@localhost ~]$ ansible --version
ansible 2.1.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
Vagrantfile

Vagrantboxは no title を使用。

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

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define :postgres_db do |node|
    node.vm.box = "bmcgonigle/centos68"
    node.vm.box_version = "1.0.1"
    node.vm.network :private_network, ip:"192.168.33.15"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end
playbook.yml
- hosts: localhost
  remote_user: vagrant
  sudo: yes
  vars:
    dbuser: "dbuser"
    dbpass: "dbpassword1"
    dbname: "testdb"

  tasks:
    - name: yum update all
      yum: name=* state=latest

    - name: install PostgreSQL Yum Repository
      yum: name=http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm

    - name: install PostgreSQL Server
      yum: name={{ item }} state=latest
      with_items:
        - postgresql95-server
        - postgresql95-devel
        - postgresql95-contrib
        - libselinux-python
        - python-psycopg2

    - name: initdb
      shell: /sbin/service postgresql-9.5 initdb

    - name: start postgresql
      service: name=postgresql-9.5 state=started

    - name: change listen_addresses to '*'
      lineinfile: dest=/var/lib/pgsql/9.5/data/postgresql.conf
        regexp="^#listen_addresses"
        line="listen_addresses = '*'"
        state=present
        backup=yes

    - name: change pg_hba.conf
      lineinfile: dest=/var/lib/pgsql/9.5/data/pg_hba.conf
        regexp="host\s+all\s+all\s+127.0.0.1/32\s+ident"
        line="host all all 0.0.0.0/0 trust"
        insertbefore=BOF

    - name: allow port 5432
      shell: /sbin/iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

    - name: sysconfig iptables touch
      file: path=/etc/sysconfig/iptables state=touch owner=root group=root mode=0644

    - name: iptables restart
      service: name=iptables state=restarted

    - name: postgres user sudores
      lineinfile: 
        dest: /etc/sudoers.d/postgres 
        owner: root
        group: root
        mode: 0440
        line: "%vagrant ALL=(postgres) NOPASSWD: ALL"
        state: present
        create: yes
        validate: "visudo -cf %s"

    - name: add user
      user: name={{ dbuser }} password={{ dbpass }} group=postgres

    - name : create database
      postgresql_db: 
        name: "{{ dbname }}"
        encoding: "UTF-8"
        login_user: postgres
      sudo_user: postgres
      sudo: yes

    - name: create user
      postgresql_user: 
        db: "{{ dbname }}"
        name: "{{ dbuser }}"
        password: "{{ dbpass }}"
        priv: ALL
        state: present
        login_user: postgres
      sudo_user: postgres
      sudo: yes

    - name: postgresql restart
      service: name=postgresql-9.5 state=restarted enabled=yes
ハマりどころ
  1. ホストOS上のDBクライアントから、ゲストOS上のDBに接続設定で、あれこれ悩む
  2. iptables 再起動時、 "iptables: No config file."とメッセージがでて、ansibleが止まる
トラックバック - http://program.g.hatena.ne.jp/halflite/20160724

2015/10/14 (Wed)

Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール

| Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。

VirtualBoxCentOSインスタンスを作って、Vagrantで起動し、それにMySQLインストールして、ローカル試験環境として使ってるのですが、誤って vagrant destroy してしまうこともありますよね…?*1

折角の仮想環境なので、すぐに作ったり壊したり出来たほうがいいよなぁ、と言うことで、手順をここに書いておきます。

方針
  1. ホストOSWindows7、ゲストOSはCentOS6.7
  2. VagrantVirtualBox を起動
  3. 仮想環境にSSHログイン
  4. Ansibleをインストール
  5. Ansible Playbookをコピー
  6. hosts設定
  7. AnsibleでMySQLインストール

お仕事でMacじゃなくてWindowsマシンの人、多いでしょう? で、WindowsにAnsible入れるのってのも無謀な気がしましたし。 試験環境として、MySQLだけ動けば良いわけですので、ベストプラクティス*2は無視して、一枚ペラのPlaybookをローカル実行、と言う方針で。

環境
VagrantVirtualBox を起動
  • Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define :server_db do |node|
    node.vm.box = "box-cutter/centos67"
    node.vm.box_version = "2.0.5"
    node.vm.network :private_network, ip:"192.168.33.15"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end

Vagrantfileはこんな感じで。 boxは、Atlas上にあるミニマムCentOS環境 box-cutter/centos67 v2.0.5 を使い、固定IPは 192.168.33.15 で。

vagrant up

で起動します。

仮想環境にSSHログイン

仮想環境へSSHログインします*3 ユーザー:vagrant / パスワード:vagrantログインできます。

Ansibleをインストール
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum -y install ansible

ミニマム過ぎて、EPELリポジトリも入ってないので、まずEPELリポジトリインストール。 その後でAnsibleをインストールします

[vagrant@localhost ~]$ ansible --version
ansible 1.9.4
  configured module search path = None

この時点でのAnsibleのバージョンは 1.9.4

Ansible Playbookをコピー
  • playbook.yml
- hosts: all
  remote_user: vagrant
  sudo: yes

  tasks:
    - name: yum update all
      yum: name=* state=latest

    - name: install MySQL Yum Repository
      yum: name=https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm state=present

    - name: install MySQL/MySQL-python/libselinux-python
      yum: name={{ item.name }} enablerepo={{ item.repo }} state=present
      with_items:
        - { name: "mysql-community-libs-compat", repo: "mysql56-community" }
        - { name: "mysql-community-client", repo: "mysql56-community" }
        - { name: "mysql-community-server", repo: "mysql56-community" }
        - { name: "MySQL-python", repo: "epel" }
        - { name: "libselinux-python", repo: "epel" }

    - name: add my.cnf character-set-server
      replace: dest=/etc/my.cnf regexp="^\[mysqld\]$" replace="[mysqld]\ncharacter-set-server=utf8"

    - name: start MySQL service
      service: name=mysqld enabled=yes state=started

    - name: add MySQL work user
      mysql_user: name=dbuser password=dbpassword1 host={{ item }} priv=*.*:ALL,GRANT state=present
      with_items:
        - "localhost"
        - "%"

vi等でコピー。*4

hosts設定
echo "127.0.0.1" | sudo tee /etc/ansible/hosts > /dev/null

/etc/ansible/hostsにローカルIPだけ設定*5

AnsibleでMySQLインストール
sudo ansible-playbook playbook.yml -c local

playbookが反映され、MySQLが起動されている(はずです)

*1:本日のワタクシがそうでした…

*2:Best Practices — Ansible Documentation http://docs.ansible.com/ansible/playbooks_best_practices.html

*3クライアントTeraTerm 等で https://osdn.jp/projects/ttssh2/

*4:本当はGitHubとかにコミットしておいて、git cloneで持ってくるのが良いのかもですけど

*5sudoリダイレクトが Permission denied になる件 | CUBE SUGAR STORAGE http://bit.ly/1VSAkPS

トラックバック - http://program.g.hatena.ne.jp/halflite/20151014

2015/02/11 (Wed)

私の環境のVagrantfile

| 私の環境のVagrantfile - ひとり開発日記。 を含むブックマーク はてなブックマーク - 私の環境のVagrantfile - ひとり開発日記。

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

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "centos65-x86_64"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"

  config.vm.define :app_node do |node|
    node.vm.box = "centos65-x86_64"
    node.vm.network :private_network, ip:"192.168.33.11"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end

VirtualBox 4.3上に、CentOS 6.5 x86 64bit、IPアドレス192.168.33.11のインスタンスが立ち上がります。

参考
  1. Vagrant で仮想ウィンドウを GUI モードで起動する設定 | WEB ARCH LABO
  2. vagrantのネットワークについて - Qiita
トラックバック - http://program.g.hatena.ne.jp/halflite/20150211

2015/01/30 (Fri)

ansibleをインストール

| ansibleをインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - ansibleをインストール - ひとり開発日記。

今頃、virtualbox/vagrant/ansibleを色々いじってます。 簡単に環境を作ったり捨てたり出来るのがいいですねー。

今更感ありますが、自分用振り返りメモです。

vagrantで作ったvirtualboxへのSSH接続

ログインできる。 wheelグループにも最初から入っているので、sudoできる

とりあえずyum updateする
[vagrant@vagrant-centos65 ~]$ cat /etc/redhat-release
CentOS release 6.5 (Final)
[vagrant@vagrant-centos65 ~]$ arch
x86_64
[vagrant@vagrant-centos65 ~]$ sudo yum -y update
ansible/sshpassをインストール
[vagrant@vagrant-centos65 ~]$ sudo yum -y install ansible sshpass

[vagrant@vagrant-centos65 ~]$ ansible --version
ansible 1.8.4
  configured module search path = None
トラックバック - http://program.g.hatena.ne.jp/halflite/20150130