Bash on Ubuntu on Windows
去る2016年8月2日(日本時間で3日)にMicrosoftがリリースしたWindows 10向けのUpdateである「Windows 10 Anniversary Update」に注目の機能があった。Bash on Ubuntu on Windowsだ。
- Windows:MicrosoftのOS
- Ubuntu:Linuxディストリビューションの一種
- Bash:Linuxのシェル
簡単に言えば「Windows上でUbuntuのBashが動きますよ」ということ。
Windows上でBashといえばCygwinやMinGW上で動かすのが通例だった。これらはWindows上でLinuxのツールが動いている風にしているのであり、Linuxのバイナリが動いているわけではない。しかし、BoWに関する解説記事を読むと、BoWではどうやら通常のUbuntu上で動くバイナリがそのまま動くらしい。ほんまかしら。よくわからん。
とにかく、Windows上にわざわざCygwinやMinGWを入れることなく、また、VirtualBoxやVMWareなどの仮想環境を構築してその上の仮想マシンにLinuxを入れることなく、ほぼデフォルトでWindowsのコマンドプロンプトからBashが起動できるとのこと。
じゃあ、そこへAnsibl入れてみたらどうかしら?ということでやってみた。今回の記事はVol.1として、BoWの有効化からBashの機能確認までの手順を紹介する。
BoWを有効にする
まずはWindows 10上でBashが動くように、つまりBowを有効にしなければならない。が、Windows Insider Previewに参加した都合上、Anniversary Updateを導入する前になんやかんやごちゃごちゃして有効化していた。
なので、正式な手順ではないかもしれないが、それっぽい手順を示す。
Window Subsystem for Linux(Beta)の有効化
Bash on Ubuntu on Windowsじゃねーのかよ、という細かな点はさておき、Windows Subsystem for LinuxというものがWindowsの機能として提供されており、これを有効化する。
Win+SのショートカットキーによりCortanaを起動し、テキストボックスに「con」と入力して出てくる検索結果から「コントロール パネル」を選択する。
ほぼはじめてCortanaをつかったのだが、これは便利だ。わざわざメニューから探して開いて、また、探して開いてを繰り返さなくても主要な機能は検索から一発でたどり着ける。ただし、検索のテキストボックスには日本語が入らない。。。でもさほど支障はないんだなぁ。
開いたコントロールパネルから「プログラムと機能」を開く。
「あ、Cortanaから”Program"を検索したら一発じゃねーか」と思ったが、Insider Preview版の影響か設定のウィンドウが一瞬開いてすぐ閉じてしまう。不具合としても報告されているらしいので、回避策として上記手順となっている。手元のマシンでCortanaからいけるようであればそのほうが楽ちんだろう。
「Windowsの機能」のウィンドウから「Windows Subsystem for Linux(Beta)」を探し、行頭のチェックボックスをオンにし、[OK]ボタンをクリックする。機能の有効化の処理が行われ、システムの再起動を促されるので、素直に再起動を行う。
システムが再起動したら、またもやWin+SでCortanaを起動し、テキストボックスに「cmd」を入力する。検索結果の「コマンド プロンプト」上で右クリックして表示されるメニューから「管理者として実行」をクリックする。
起動したコマンドプロンプト上で以下を実行する
C:\WINDOWS\system32>bash
実行後、以下のように表示されるので、適時「y」を入力してすすめる。
C:\WINDOWS\system32>bash
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布さ
れる製品であり、次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms
続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Would you like to set the Ubuntu locale to match the Windows locale (ja-JP)?
続行するには、"y" を入力してください: y
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と
一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: user
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました
C:\WINDOWS\system32>
これでインストールが完了した。再び「bash」と入力する。
C:\WINDOWS\system32>bash
user@PC:/mnt/c/Windows/System32$
さらに「cd」でホームディレクトリに移動してみる。
user@PC:/mnt/c/Windows/System32$ cd
user@PC:~$
うむ。Bashっぽい動きをしている。何が入ったか「uname」で確認してみよう。
user@PC:~$ uname --a
Linux PC 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
masayuki@MASAYUKI-PC:~$
きちんと「Linux」を主張しています。
Vol.2につづく
今回インストールを行ったBash上にAnsibleを入れていく。ここまででは、BoWも初期状態であるので、Ansibleを入れるにもそう単純にはいかなかった。。。
次回は、この初期の状態からAnsibleが動くまでの手順について示す。
おまけ
いろいろと試行錯誤の中でこのBashをインストール/アンインストールする際に必要な情報を整理しておきます。
インストール
インストールは以下の段階が必要と思われます。ただし、正式なAnniversary Updateを普通に入れた場合、このいずれかの段階の状態かよくわかりません。お許し下さい。
- Windwosの機能として「Window Subsystem for Linux(Beta)」を有効にする
- コマンドプロンプトで
bash
コマンドを実行しBashをインストールする - またはコマンドプロンプトで
lxrun /install
を実行しBashをインストールする
3つ目のlxrun
のコマンドは、Bashをインストールするために設けられたコマンドのようです。ちなみにヘルプは以下のように表示されます。
C:\WINDOWS\system32>lxrun /?
Performs administrative operations on the LX subsystem
Usage:
/install - Installs the subsystem
Optional arguments:
/y - Do not prompt user to accept or create a subsystem user
/uninstall - Uninstalls the subsystem
Optional arguments:
/full - Perform a full uninstall
/y - Do not prompt user to confirm
/setdefaultuser - Configures the subsystem user that bash will be launched as. If th
e user does not exist it will be created.
Optional arguments:
username - Supply the username
/y - If username is supplied, do not prompt to create a password
/update - Updates the subsystem's package index
C:\WINDOWS\system32>
このコマンドで、インストール/アンインストール/デフォルトユーザの設定/システムのアップデートができるようです。
アンインストール
アンインストールには以下の段階が必要かと思われます。
- コマンドプロンプトで
lxrun /uninstall /full
を実行し、Bashをアンインストールする - Windwosの機能として「Window Subsystem for Linux(Beta)」を無効にする
- BoWのインストールディレクトリを削除する
3つ目のインストールディレクトリだが、Windwosのデフォルトの設定ではみることができない。エクスプローラの「表示-オプション」で表示される「フォルダー オプション」内の「表示-詳細設定」の項目内から以下の設定を無効(表示する)にしておく。
- ファイルおよびフォルダー - 保護されたオペレーティング システム ファイルを表示しない(推奨)
上記設定の上で、以下のパスを確認すると「lxss」のフォルダが%LocalAppData%\LxSS
に表示される。このフォルダはWindowsの機能上でBoWを無効化した状態であれば削除することができる。