AvastをインストールしているとWindows10にBashが導入できない
Windows 10でBashを導入しようとしたらセキュリティソフトAvastと競合したので解決策(?)を書いておきます.
WindowsでもBashが使いたい!
Windows10 Anniversary Updateでは,開発者向けにBashとUbuntu向けパッケージがWindowsで動くようなツール群が提供されました.早速導入しましょう.
導入手順
次の記事がキャプチャ付きで詳しく解説しているのでご参照ください.
Tech TIPS:Windows 10のLinux/Ubuntu互換環境でbashを使う - @IT
UbuntuがなぜWindowsで動く?
UbuntuがそのままVirtual Machine(VM)上で走っているのかな?と思いきや,Windows Subsystem for Linux という,Windowsのカーネル上で動くLinuxのシステムコールと互換性のあるレイヤが導入されていました.壮大過ぎる. これをつかって,LinuxのシステムコールをWindowsのシステムコールに変換する仕組みのようです.しかも,VMよりオーバヘッドが少ないらしい.
詳しくは以下の解説ビデオを御覧ください.
Bash on Ubuntu on Windows | MSDN
日本語だと,上のビデオの一部を使って解説している記事もありました.
ASCII.jp:Buildで発表された「Bash on Ubuntu on Windows」とは? (1/2)
GitHubのissueも大盛況です
Issues · Microsoft/BashOnWindows
問題:Bashのインストールが止まる
bashを起動するためコマンドプロンプトにbash
と打ち込むと,初回にubuntuのファイルシステムなどがWindowsのローカルフォルダに展開しようとする.その際にコマンドプロンプトには次のようなメッセージが表示される.
ファイルシステムを展開しています。この処理には数分かかります
しかし数分どころか10分待っても何も進みませんでした.
解決策:Avastをアンインストールする
結論から言うと,Bashを起動したいならAvastはアンインストールする必要がある(無効にするだけでは不十分).
Avastアンインストール後にコマンドプロンプトで以下のコマンドを叩けばOK.
lxrun /uninstall /full lxrun /install bash
Bash on Windowsのリポジトリにも同様のissueがたてられているので参照されたい.
Bash won't complete install properly · Issue #718 · Microsoft/BashOnWindows
何が起きているのか
Avastのフォーラムにも同様の問題が報告されている.
The whole unix subsystem is new in the windows world (last time we saw it was on NT4 with OS/2) we have to check what are the paths for packets from the new subsystem. Apparently they are different to the standard ones.
Avast firewall blocking Bash Ubuntu on Windows 10
今回,Windows Subsystem for Linuxというサブシステムが導入されたが,Avastがまだそれに対応していないのが原因らしい.サブシステムの通信はAvastにとっては異常なパケットなので止めているようです.セキュリティソフトとしては正しい動きだと思います.
コラム:Bashって何?
わからない単語をわからない単語で説明されると,ストレスが貯まります.いまから上の1行をざっくり解説します.
まずLinuxって何?
普通の人がよく聞くOSといえば,PCでWindowsかOS X,スマホでAndroidかiOSですが,実はこの世にはLinuxというOSも存在します.
詳しい話には立ち入りませんが(学びたい方はLinuxゲリラ戦記などを読んでください),プログラミングが関わる分野では世界的によくつかわれるOSなのです*1.無料で利用でき,ソースコードも公開されているOSなのでよく利用されます.そしてよく利用されるので,開発ツールやノウハウも溜まっています.
例えばこのブログははてなブログでホスティングされていますが,はてなブログはこのブログの文字や画像をあなたのブラウザに送って表示させるために,Linux(とその上で動くWebサーバのソフト)を使っているはずです.
シェルって何?
Linuxに人間が命令する際には,コマンドを打ちこみます.例えばecho 'hoge'
と打てば,「hogeと表示して!」と言われたことをこのコマンドで呼び出されるプログラムが解釈して,OSに画面に文字を表示させます.
上の手順のうち,人間が打ったコマンドを適切なプログラムに伝えるためのプログラムがシェルと呼ばれます.Bashはシェルの一種です.Windowsでいうとコマンドプロンプト(ソフトウェアを起動する際に突然,黒い窓が出てきた経験ありませんか?あれです)がLinuxでいうBashです.
*1:OS Statisticsによると2016年5月時点でシェアは5.6%.Macは10.2%,Win 10は22.6%