これは 日本情報クリエイト Engineers Advent Calendar 2016 による9日目の記事になります。
#Bash on Ubuntu on Windowsとは
Windows 10 Anniversary Updateで追加された待望の機能ですね。
tail とか grepとか使い慣れたコマンドがVirtualBoxとか使わないで利用できるのが良いですね。
最近はDockerやVagrantが主流ですが、メモリ4Gの非力なWindows環境でちょっと開発するにはOS標準のLinux環境は最適な方法です(^^
#利用手順
まずは、http(nginx)サービスを使う前にwindowsの機能からインターネット インフォメーション サービスを無効します。
80/445ポートが使われているので起動できなくて悩んだ教訓から対応(^^;
skype等で80ポート使うようになっていればこちらも変更しておきます。
##機能のインストール
コントロールパネル→プログラム→Windowsの機能の有効化または無効化から「Windows Subsystem for Linux (Beta)」にチェックを入れる。
インストールがされるので再起動まで終わらせる。
##開発者モードへの変更
設定→更新とセキュリティ→開発者向け→「開発者ード」へ切り替え。
##bash設定
コマンドプロンプトで $ bash
コマンドを実行
設問に従って進みbashユーザの設定
bashユーザーはwindowsのユーザとは別にのユーザー名とパスワードを設定が必要です。
##初期環境設定
###ホスト名の明記
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
これが出来ていないと以降の作業が名前解決の関係上すごく時間かかる事になります(^^;
###リポジトリの変更(日本利用)
sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
###Ansibleインストール
今回はChefは現在soloからzeroの移行など情報が錯綜している事と、Ansibleの方が後発でエージェントレスなのでこちらを採用しました。
$ sudo apt-get install software-properties-common
//リポジトリ追加拡張 1回のみでOK
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install ansible
###playbookを作成
初回だけ作成し今後変更があればwindowsのファイルを編集することにします。
c:/temp/kokyaku-playbook.yml
vim,git,nginx,php,mysql,freetds等使用するものを予め設定しておきます。
###Ansible実行
上記のplaybookを適切に変更したら実行します。
$ sudo ansible-playbook /mnt/c/temp/kokyaku/playbook.yml
windowsと共有したファイルを扱う場合は必ず/mnt/c/を利用します。これでcドライブ直下のファイルが利用できます。
ちなみにBash on Ubuntu on Windowsで利用するファイルを直接windowsから編集すると高確率で環境破壊されるので絶対に行わないでください。とMS社から公式アナウンスされています。
https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/
#bashの再インストールが必要な場合
開発環境はすぐ汚れます。汚れたらさくっと消して作りなおす。Ansibleも入れるので安心して消せますね。
コマンドプロンプトで $ lxrun /uninstall /full
を入力して実行する。
完全に削除したいなら USERPROFILE\AppData\Local\lxss フォルダー以下をエクスプローラーなどから削除する。
lxrun /uninstall /full
したら、次からは lxrun /install
を実行する。
これで Bash の初回セットアップが実行されてクリーンな状態に戻ります。
#その他
ubuntuでmssqlがapt-getで入れられなかったのでコンパイルしてみました。
次回以降はwindowsのフォルダに退避したファイルをコピーして使うようにAnsibleのplaybookに記載しています。
$ sudo apt-get freetds-dev php5.6-dev
$ wget http://jp2.php.net/get/php-5.6.26.tar.gz/from/this/mirror
$ tar -xf mirror
$ cd php-5.6.26/ext/mssql
$ phpize
$ cp /usr/lib/x86_64-linux-gnu/libsybdb.* /usr/lib/
$ ./configure --with-mssql
$ sudo make
$ sudo make install
$ sudo vim /etc/php/5.6/fpm/conf.d/20-mssql.ini
次の行を追加 extension=mssql.so
$ sudo service php5.6-fpm restart
#今後に期待するところ
残念ながらターミナルが日本語文字化けがひどくて、SSHサービス使うしかないのでこの辺りは早急に改善してもらいたいですね。
あとVisual Studio Codeでターミナル利用はできるようですが、ついでにBash on Ubuntu on Windowsの内部ともっとシームレスに利用できてgitとかあちこちいかなくても利用できるようになるいいなーって期待しています。