Bash on Ubuntu on WindowsをAnsibleでプロビジョニング(Creators Update版)

Windows10に加わったBash on Ubuntu on Windowsですが、本格的に使うなら構成をスクリプト化して管理したくなるものです。またスクリプト化しておけば不幸にして構成をぶっ壊した時にlxrun /uninstall /full して構成をクリアした上で、再構築になった時も復旧が楽です。

というわけで、Bash on Ubuntu on Windows*1をAnsibleでプロビジョニングした時の作業メモです。大まかな流れとしてはAnsibleをSSHを使用せずに直接ホスト上で実行するのと同様になります。

したごしらえ

AnsbleのインストールとAnsibleのPlaybookの取得は予め行うことになります。

sudo apt install ansible
git clone https://github.com/azusa/development-template.git

この記事を書いた時だと Gitの脆弱性 ( CVE-2017-1000117 ) — | サイオスOSS | サイオステクノロジー の問題がありますが、それが心配な場合は予めGitは更新をかけておいてください。apt-cache policy gitで出てくるGitのバージョンが1:2.7.4-0ubuntu1.2だったら対策済みです。

[]:$ apt-cache policy git                                                                                           [~]
git:
  インストールされているバージョン: 1:2.7.4-0ubuntu1.2
  候補:               1:2.7.4-0ubuntu1.2
  バージョンテーブル:
 *** 1:2.7.4-0ubuntu1.2 500
        500 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        100 /var/lib/dpkg/status
     1:2.7.4-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages

people.canonical.com

Inventory ファイルの記述

PlaybookにInventoryファイルとしてlocalhostを作成し、

ubuntu ansible_connection=local

と記述します。

Playbook

Ubuntuに対してPlaybookを記述する場合と大差はありません。

自分が作成したPlaybookの中では、zshvimに関するdotfileの設定、nodebrewおよびrbenvのインストール及び初期設定を行っています。

注意点としては、Bash on Ubuntu on WindowsのベースとなるUbuntu 16.04 LTSではaptitudeなどAnsibleを動かす上で必須のパッケージがインストールされていないため、Playbookの記述の先頭でパッケージのインストールを行う必要があることです。

github.com

project-flora.net

実行

ansible-playbook --limit="ubuntu" --inventory-file=localhost -v provision/ubuntu.yml --ask-sudo-pass

--ask-sudo-passオプションを付与していることにより、Ubuntuに作成しているユーザーのパスワードの入力を求められるので、入力してください。

ホストOSなりVMなりの上で直接実行している時に比べて時間がかかりますが、気長に待ってください。

まとめ

Windows10のAnniversary Updateの頃はベースとなるUbuntuのバージョンが古かったため、その上でのアプリケーションの動作に色々支障があったのですが、Creators Updateとなりベースとなるバージョンや、実装の完成度も上がってきたため、Windows環境で手軽にUn*Xコマンドを試す環境としてはBash on Ubuntu on Windowsも候補に挙がってくるのでは考えています。皆様のご参考になれば幸いです。

*1:長い