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
Inventory ファイルの記述
PlaybookにInventoryファイルとしてlocalhost
を作成し、
ubuntu ansible_connection=local
と記述します。
Playbook
Ubuntuに対してPlaybookを記述する場合と大差はありません。
自分が作成したPlaybookの中では、zshやvimに関するdotfileの設定、nodebrewおよびrbenvのインストール及び初期設定を行っています。
注意点としては、Bash on Ubuntu on WindowsのベースとなるUbuntu 16.04 LTSではaptitudeなどAnsibleを動かす上で必須のパッケージがインストールされていないため、Playbookの記述の先頭でパッケージのインストールを行う必要があることです。
実行
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:長い