CentOS
Vagrant
serverspec
Ansible
サーバー構築

【連載01】107.最小構成CentOS7からAnsible実行可能な操作用CentOS7を作成する(On Vagrant)

More than 3 years have passed since last update.

当記事はケーススタディの連載となっています。目次は【こちら】です。

最新のソースコードは【GitHub】で公開中です。

今回は赤く囲んだ部分のサーバ構成(manageterm)をVagrantで構築し、「manageterm」からAnsibleが実行可能なLinuxを構築するところまでを実装します。

必要に応じて過去の記事を参照ください。

サーバ構成



Vagrantコマンドで「basecent7」(ベースとなる最小構成CentOS7)からVagrantBoxファイルを作成する


Windows設定編(主にPowershell操作)


1.VagrantfileのDIRに移動

Vagrant実行のルートDIRに移動する。

cd D:\_BLOG\BG001\vagrant_box


2.VirtualBoxに作成したサーバをVagrantBoxファイルとして保存

作成した「basecent7」の仮想マシンイメージをVagrantBoxファイルにパッケージングする。

書式:


vagrant package --base \${VirtualBox仮想マシン名(Path)} --output ${boxファイル名(Path)}


例:

vagrant package --base basecent7 --output ../vagrant_boxfiles/basepackage.box

実行結果イメージ:

image


3.Vagrantにboxを追加する

上記2.で作成したboxファイル(パッケージングしたVirutalbox)をベースにVagrantBoxに「manageterm」(Ansible操作用端末)を作成する。

書式:


vagrant box add \${box内での名前} {$ベースとなる.boxファイル}


例:

vagrant box add manageterm ../vagrant_boxfiles/basepackage.box

実行結果イメージ:

image


4.boxファイルの登録を確認

boxの一覧を表示し、Vagrantに登録されたかを確認する。

書式:


vagrant box list


具体例:

vagrant box list

実行イメージ:

image


5.Vagrantfileの作成

Vagrant起動用のVagrantfileを作成する。

以下のコマンドで実行後カレントフォルダに「Vagrantfile」が作成される。

書式:


vagrant init \${box内での名前}


例:

vagrant init manageterm

実行イメージ:

image


6.Vagrantfileの修正

(GUIを見える設定/ホストOSと同一ネットワーク内への設定)

Vagrantを実行するとVirtualBoxが起動するが、デフォルトではプロセスのみ起動してGUIでの状態が見えない。

またネットワークもVirtualBoxとの通信がNATになり、ホストOS(この場合Windows8)からゲストOS(この場合manageterm)へのアクセスが出来ない。(ゲストからルーティングしてホスト経由でインターネットに出る事は可能。)

Vagrantfileを編集して以下を設定する。


  • 起動時にVirtualBoxを表示する


  • ホストOSとゲストOSを同一セグメントに配置し通信可能にする



vagrantfile

Vagrant.configure(2) do |config|

config.vm.box = "manageterm"
#ホスト名の設定
config.vm.hostname = "manageterm"
#ネットワークの設定(ホストとゲスト間のプライベートネットワーク(不要ならコメント)
config.vm.network "private_network", ip: '192.168.134.195'
#ネットワークの設定(ホストと同じセグメントのネットワークに入る設定)
config.vm.network "public_network", ip: '192.168.102.195'

config.vm.provider "virtualbox" do |vb|
#VirtualBoxが起動している時にGUIで表示する
vb.gui = true
#メモリを1Gに設定
vb.memory = "1024"
end
end



7.Vagrantを起動

書式:


vagrant up


例:

vagrant up

実行イメージ:

031.png

(注釈)

*1.初回のみ「manageterm」のVirtualBoxイメージを作成している。

*2.Vagrantfileのネットワーク設定部分

【#ネットワークの設定(ホストとゲスト間のプライベートネットワーク(不要ならコメント)】がadapter2として設定されている

【#ネットワークの設定(ホストと同じセグメントのネットワークに入る設定)】がadapter3として設定されている

*3.起動直後の為、通信が間に合っていないだけなので無視する。ネットワーク設定が間違っている場合はこのログが出続ける

(その場合ネットワーク設定に誤りがある)

*4.Vagrantfileファイルのネットワーク設定部分

#ホスト名の設定

Bringing machine 'default' up with 'virtualbox' provider…

==> default: Importing base box 'manageterm'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vagrant_box_default_1450866560619_16623
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
default: Adapter 3: bridged
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => D:/_BLOG/BG001/vagrant_box
PS D:\_BLOG\BG001\vagrant_box>

Vagrantfileにて「GUI=true」の設定をしている為、VirtualBoxの画面が表示される。

「GUI=false」(もしくは設定しない)の場合でも表示されないだけで、プロセスとしては起動している為、起動確認がとれる。邪魔になった場合はfalseに設定しても良い。

image

実際にVagrantを実行する、といってもVagrantは仮想ソフトウェアではないので、仮想化ソフトウェア(VirtualBox)を管理し起動するだけである。

今回は初回起動の為、


  • boxファイル(D:_BLOG\BG001\vagrant_boxfiles\basepackage.box)を元にVirtualBox用のイメージファイル(D:_BLOG\BG001\vb\配下)の新規作成


  • 作成したVirtualBoxの起動


を行ったが、2回目以降の起動時は、VirtualBox用のイメージ作成フェーズがない為、素早く起動する。

上記の通りVagrantは仮想マシンの管理ソフトウェアであり、仮想化自体は仮想化ソフトウェアにお任せという事がわかる。


Linux設定編(SSHにて)

ここではWindows設定編にてVagrantを使用して起動した「manageterm」をAnsibleが使用できるように設定する。

Ansibleは標準のYUMリポジトリには入っていない。

今回の「manageterm」にはVagrantが利用できるよう、既にEPELリポジトリ利用可能な設定のLinuxからスタートしているが、Vagrantを使わずにAnsibleを利用する場合は、再帰EPELリポジトリを導入すること。

※(必要であれば)epel-releaseをインストール

cd /tmp

wget http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum localinstall epel-release-7-5.noarch.rpm

Ansibleのインストール

AnsibleをEPELリポジトリよりインストールする。

書式:

yum -y install ansible

実行結果イメージ:

image

Running transaction

インストール中 : python-crypto-2.6.1-1.el7.centos.x86_64 1/17
インストール中 : sshpass-1.05-5.el7.x86_64 2/17
インストール中 : python-babel-0.9.6-8.el7.noarch 3/17
インストール中 : python-pyasn1-0.1.6-2.el7.noarch 4/17
インストール中 : python-keyczar-0.71c-2.el7.noarch 5/17
インストール中 : python-six-1.9.0-2.el7.noarch 6/17
インストール中 : python-ecdsa-0.11-3.el7.centos.noarch 7/17
インストール中 : python-paramiko-1.15.1-1.el7.noarch 8/17
インストール中 : python-backports-1.0-8.el7.x86_64 9/17
インストール中 : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch 10/17
インストール中 : python-setuptools-0.9.8-4.el7.noarch 11/17
インストール中 : python-httplib2-0.7.7-3.el7.noarch 12/17
インストール中 : python-markupsafe-0.11-10.el7.x86_64 13/17
インストール中 : python-jinja2-2.7.2-2.el7.noarch 14/17
インストール中 : libyaml-0.1.4-11.el7_0.x86_64 15/17
インストール中 : PyYAML-3.10-11.el7.x86_64 16/17
インストール中 : ansible-1.9.4-1.el7.noarch 17/17
検証中 : python-keyczar-0.71c-2.el7.noarch 1/17
検証中 : libyaml-0.1.4-11.el7_0.x86_64 2/17
検証中 : python-jinja2-2.7.2-2.el7.noarch 3/17
検証中 : python-setuptools-0.9.8-4.el7.noarch 4/17
検証中 : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch 5/17
検証中 : python-markupsafe-0.11-10.el7.x86_64 6/17
検証中 : python-httplib2-0.7.7-3.el7.noarch 7/17
検証中 : python-backports-1.0-8.el7.x86_64 8/17
検証中 : python-six-1.9.0-2.el7.noarch 9/17
検証中 : python-crypto-2.6.1-1.el7.centos.x86_64 10/17
検証中 : python-pyasn1-0.1.6-2.el7.noarch 11/17
検証中 : PyYAML-3.10-11.el7.x86_64 12/17
検証中 : ansible-1.9.4-1.el7.noarch 13/17
検証中 : python-babel-0.9.6-8.el7.noarch 14/17
検証中 : sshpass-1.05-5.el7.x86_64 15/17
検証中 : python-ecdsa-0.11-3.el7.centos.noarch 16/17
検証中 : python-paramiko-1.15.1-1.el7.noarch 17/17

インストール:
ansible.noarch 0:1.9.4-1.el7

依存性関連をインストールしました:
PyYAML.x86_64 0:3.10-11.el7 libyaml.x86_64 0:0.1.4-11.el7_0
python-babel.noarch 0:0.9.6-8.el7 python-backports.x86_64 0:1.0-8.el7
python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7 python-crypto.x86_64 0:2.6.1-1.el7.centos
python-ecdsa.noarch 0:0.11-3.el7.centos python-httplib2.noarch 0:0.7.7-3.el7
python-jinja2.noarch 0:2.7.2-2.el7 python-keyczar.noarch 0:0.71c-2.el7
python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:1.15.1-1.el7
python-pyasn1.noarch 0:0.1.6-2.el7 python-setuptools.noarch 0:0.9.8-4.el7
python-six.noarch 0:1.9.0-2.el7 sshpass.x86_64 0:1.05-5.el7

完了しました!

Ansibleは、「/etc/ansible/」配下の「ansible.cfg」、「hosts」で変更及び設定を行う。

image

[root@manageterm ~]# cd /etc/ansible/

[root@manageterm ansible]# ll
合計 16
-rw-r--r--. 1 root root 8625 10月 11 03:36 ansible.cfg
-rw-r--r--. 1 root root 965 10月 11 03:36 hosts
drwxr-xr-x. 2 root root 6 10月 11 03:36 roles

Ansibleを実際に動かす前に、Ansibleによって設定されるサーバ群をVagrantを使って先に作成していきます。

次回は「最小構成CentOS7からAnsibleに制御されるCentOS7を構築する(On Vagrant)」について。

連載の目次は【こちら】です。