[Vol.2]BoWにAnsibleをインストールする

# Ansible on Bash on Ubuntu on Windows

前回の記事では、Bash on Ubuntu on Windowsが起動できるところまですすみました。

[[Vol.１]BoWにAnsibleをインストールする](http://qiita.com/ringo0321/items/85f408d8fb26ca8e870d)

今回はこの環境にAnsibleをインストールしていきます。ただし、色んな物が足りないので、以下の手順で進めます。なお、Ansibleもapt-getでインストールするのではなく、git cloneで取得したものが実行できるようにします。

* 必要なシステム・パッケージのインストール
* pipのインストール
* 必要なPythonパッケージのインストール
* gitのインストール
* Ansible開発版の取得
* Ansible開発版の環境構築

トライ＆エラーでなんとか導き出した手順です。同じ状況だったら、たぶんうまくいくとおもいますが、うまくいかなかったらごめんなさい。

# 必要なシステム・パッケージのインストール

以降の手順に必要となる、各種パッケージをインストールしておきます。インストールするのは以下のパッケージです。

* build-essential
* libssl-dev
* libffi-dev
* python-dev

インストールします。

```bash
user@PC:~$ sudo apt-get install build-essential libssl-dev libffi-dev python-dev
```

# pipのインストール

次にpipのインストール。これはAnsible開発版の環境構築の際に、Pythonのパッケージが必要となり、そのパッケージ管理のための導入となります。

## get-pip.pyのダウンロード

pipをインストールするためにはget-pip.pyとやらを介して入れるそうです。よくわかってませんが、そうらしいです。

なにわともあれダウンロードする。

```bash
user@PC:~$ wget https://bootstrap.pypa.io/get-pip.py
:
user@PC:~$ ls
get-pip.py
```

## get-pip.pyのインストール

ダウンロードしたらインストールする。当然です。

```bash
user@PC:~$ sudo -H python get-pip.py
```

# 必要なPythonパッケージのインストール

では、Pythonのパッケージをpipを使ってインストールします。必要なパッケージは以下のようです。

* paramiko
* jinja2
* PyYAML
* setuptools

インストールです。

```bash
user@PC:~$ sudo -H pip install paramiko jinja2 PyYAML setuptools pycrypto
```

# gitのインストール

ようやくAnsibleのインストールの作業に入ります。AnsibleにはUbuntuのパッケージもちゃんと用意されているので、apt-getでもインストールは可能です。しかし、開発版をgitで入手し、それを実行可能なように構築することにします。さしたる理由はありません。はい。

まずはgitのインストールです。

```bash
user@PC:~$ sudo apt-get install git
```

# Ansible開発版の取得

githubからAnsibleをcloneしてきます。

```bash
user@PC:~$ git clone https://github.com/ansible/ansible.git
```

これでカレントディレクトリにAnsibleのファイル一式を取得しました。

# Ansible開発版の環境構築

さて、パッケージではないので、これでインストール完了＆実行可能ということにはなりません。以下のコマンドを実行し、取得したAnsible開発版の環境内のAnsibleを実行可能にします。

```bash
user@PC:~$ cd ansible
user@PC:~/ansible$ source hacking/env-setup
running egg_info
creating lib/ansible.egg-info
writing requirements to lib/ansible.egg-info/requires.txt
writing lib/ansible.egg-info/PKG-INFO
writing top-level names to lib/ansible.egg-info/top_level.txt
writing dependency_links to lib/ansible.egg-info/dependency_links.txt
writing manifest file 'lib/ansible.egg-info/SOURCES.txt'
reading manifest file 'lib/ansible.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'v2'
no previously-included directories found matching 'docsite'
no previously-included directories found matching 'ticket_stubs'
no previously-included directories found matching 'packaging'
no previously-included directories found matching 'test'
no previously-included directories found matching 'hacking'
warning: no previously-included files found matching 'lib/ansible/modules/core/.git*'
warning: no previously-included files found matching 'lib/ansible/modules/extras/.git*'
no previously-included directories found matching 'lib/ansible/modules/core/.git'
no previously-included directories found matching 'lib/ansible/modules/extras/.git'
writing manifest file 'lib/ansible.egg-info/SOURCES.txt'

Setting up Ansible to run out of checkout...

PATH=/home/user/ansible/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PYTHONPATH=/home/user/ansible/lib:
MANPATH=/home/user/ansible/docs/man:

Remember, you may wish to specify your host file with -i

Done!

user@PC:~/ansible$
```

`ansible/env-setup`というのがその名の通り環境設定用スクリプトのようです。実行時メッセージ内末尾にいろいろとパスの設定をしてくれているのが見て取れます。

では、ansibleを実行してみます。

```bash
user@PC:~/ansible$ cd ..
user@PC:~$ ansible --version
ansible 2.2.0 (devel acd69bcc77) last updated 2016/08/31 23:35:14 (GMT +900)
  lib/ansible/modules/core:  not found - use git submodule update --init lib/ansible/modules/core
  lib/ansible/modules/extras:  not found - use git submodule update --init lib/ansible/modules/extras
  config file =
  configured module search path = Default w/o overrides
user@PC:~$
```

ん？なんか"not found"と言われてます。そして"use git submodule update..."とか言ってくれてます。

どうやらサブモジュールをアップデートしたほうが良いみたいです。表示されたメッセージに従います。

```bash
user@PC:~$ cd ansible
user@PC:~/ansible$ git submodule update --init lib/ansible/modules/core
Submodule 'lib/ansible/modules/core' (https://github.com/ansible/ansible-modules-core) registered for path 'lib/ansible/modules/core'
Cloning into 'lib/ansible/modules/core'...
remote: Counting objects: 38439, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 38439 (delta 7), reused 0 (delta 0), pack-reused 38421
Receiving objects: 100% (38439/38439), 9.19 MiB | 103.00 KiB/s, done.
Resolving deltas: 100% (25442/25442), done.
Checking connectivity... done.
Submodule path 'lib/ansible/modules/core': checked out '5310bab12f6013195ac0e770472d593552271b11'
masayuki@MASAYUKI-PC:~/ansible$
```

もういっちょ。

```bash
user@PC:~/ansible$ git submodule update --init lib/ansible/modules/
extras
Submodule 'lib/ansible/modules/extras' (https://github.com/ansible/ansible-modules-extras) registered for path 'lib/ansible/modules/extras'
Cloning into 'lib/ansible/modules/extras'...
remote: Counting objects: 35772, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 35772 (delta 27), reused 0 (delta 0), pack-reused 35719
Receiving objects: 100% (35772/35772), 8.06 MiB | 258.00 KiB/s, done.
Resolving deltas: 100% (23825/23825), done.
Checking connectivity... done.
Submodule path 'lib/ansible/modules/extras': checked out '2ef4a34eee091449d2a22312e3e15171f8c6d54c'
```

では、改めましてAnsibleを実行してみます。

```bash
user@PC:~$ ansible --version
ansible 2.2.0 (devel acd69bcc77) last updated 2016/08/31 23:35:14 (GMT +900)
  lib/ansible/modules/core: (detached HEAD 5310bab12f) last updated 2016/08/31 23:41:21 (GMT +900)
  lib/ansible/modules/extras: (detached HEAD 2ef4a34eee) last updated 2016/08/31 23:43:41 (GMT +900)
  config file =
  configured module search path = Default w/o overrides
masayuki@MASAYUKI-PC:~$
```

どうやら問題なく動作するようです。

# おわりに

2回に渡りBash on Ubuntu on Windows(BoW / UoWとかの記述もみかけたなぁ）にAnsibleを入れる手順について紹介させていただきました。Windows上でbashが動作するということが、今後のソフトウェア開発にどれほどのインパクトを与えるのか、全く想像もつきません。現在Macが開発者の間で人気である理由の一つに、LinuxベースのOSでターミナルがあるから、という点があるそうですが、「そんなのWindowsでもできるしぃ」とか言って再びWindowsを開発マシンとする方も増えるのかもしれません。

まだまだ、不具合も潜在しているらしいのですが、Ansible/Vagrantなどのツールを中心に、いじくり回して行きたいと思います。