2016年8月29日月曜日

Windows10でbash

新しくWindows PCを使い始めるとまずCygwinのインストール。
もう十数年続いている私の習慣です。
もともとWindows NTは米国政府調達条件を満たすために
POSIX互換だったと記憶しており、
UNIXサブシステムが追加インストールできた時期もあり、
私も使っていたことがありましたが、
他ではあまり使われなかったのか結局廃止の憂き目に。

そんなUNIXサブシステムがUbuntuサブシステムという形で
Windows10 RedStone1にて復活しました。
当然bashが使えるようになったのですから
今後はCygwinも必要ないかもしれません。
私に取ってAnniversary Updateの一番のトピックはこれでした。

ということで早速使ってみることに。
[設定]アプリケーションを起動し、
メニューを[更新とセキュリティ]-[開発者向け]とたどって
[開発者モード]を選択します。
[設定]アプリケーションのトップに戻って
メニューを[システム]-[アプリと機能]とたどり、
[プログラムと機能]から
[Windowsの機能の有効化または無効化]を開きます。
表示されるリスト内にある
[Windows Subsystem for Linux (Beta)]にチェックを入れれば完了、
と言いたいところですがそんな項目はない…
でも別のPCで試すとその項目はある。なんで?
それらには32ビット版と64ビット版という違いがあるのでした。
そして調べてみるとbashが使えるのは64ビット版だけらしいorz
そんなこと前もって大々的に言っておいてほしかったです。
私の手元にある6台のうち、
64ビット版を入れているのはMacBook ProとタブレットONDA V820wの2台だけ。
他の4台のうち1台はハードウェア的にもライセンス的にも、
再インストールさえすれば64ビット版が利用可能というところですが、
それでも使えるのは半分です。
まあ2038年問題を抱える32ビット版はいずれ廃止になるでしょうから、
この措置もやむを得ないことではあります。

気を取り直して64ビット版で作業を続けます。
前述のとおり[Windows Subsystem for Linux (Beta)]を有効にした後、
[スタート]メニューから
[windowsシステムツール]下の[コマンドプロンプト]を起動します。
そして開いたコンソールウィンドウで"bash"を実行すると、
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。
Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、”y”を入力してください:
と尋ねられます。”y”で先に進むと
Windosストアからのダウンロードが始まりますが、
これには結構な時間がかかります。
UNIX一般ユーザの作成とログインパスワードの設定も行います。
完了すると[スタート]メニューに
[Bash on Ubuntu on Windows]が追加され、
今後はここからbashを立ち上げることができます。
Ubuntuをインストールした後にやることと言えば、
スーパーユーザのパスワード設定です。
$ sudo su -
# passwd
で可能です。

さて、bash上で"uname -a"してみると、
Linux DESKTOP-4EJK7OH 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
と出力されます。カーネルバージョンは"3.4.0+"のようです。
ルートファイルシステムには/dev、/proc、/sysもちゃんとあって、
ネイティブLinuxとの互換性もある程度取れてそうです。
WindowsのCドライブは/mnt/cにマウントされており、
その中のファイル等の所有者/所有グループは
すべてroot/rootに設定されているようです。
当然ディレクトリの区切りには'/'が使われます。
残念ながらCドライブ以外のマウントのさせ方はわかりません。
なおこのルートファイルシステムはWindowsでは
"C:¥Users¥<ユーザ名>¥AppData¥Local¥lxss"ディレクトリにあり、
単一のディスクイメージになっているわけではなく、
"rootfs"ディレクトリ下に個別にファイルやディレクトリが
ばらばらとそのまま置かれています。
一般ユーザのホームディレクトリはルートファイルシステムとは別に、
"lxss"ディレクトリ下に"home/<ユーザ名>"として置かれています。
これらはエクスプローラーでは一見見えませんが、
保護されたオペレーティングシステムファイルを表示するようにしたり、
アドレスバーに直接タイプすることで見えるようになります。
もちろんこのあたりのUbuntu on Windows用実行ファイルを
エクスプローラーでダブルクリックしても実行されません。

それからUbuntu on Windows上で作業してみることに。
とりあえず、"tree"、"git"、"svn"、"gcc"コマンドが使えるように
# apt-get install tree
# apt-get install git
# apt-get install subversion
# apt-get install gcc
を実行したところ、各コマンドは普通に動作します。
試しにOpenSSLのシェアードオブジェクトを参照する
C言語で書いたプログラムをネイティブのUbuntu 14.04(x64)でビルドし、
バイナリファイルをUbuntu on Windowsに持ってきて実行すると、
きちんと動作します。
Ubuntuとのバイナリー互換があることが確かめられました。
一応"file"コマンドで確認すると、
"/bin"ディレクトリにあるようなコマンドは
/bin/**: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=****************************************, stripped
のように表示されます。
ネイティブUbuntuと同じです。
ちなみにWindowsの実行可能ファイル([メモ帳]など)では
********.exe: PE32+ executable (GUI) x86-64, for MS Windows
となります。

欠点ももちろんあります。
Cygwinではbash上でDOSのコマンドも実行可能ですし、
WindowsのGUIアプリケーションも実行可能です。
例えばbashで
$ notepad 1.txt
を実行すると、[メモ帳]のウィンドウが開いて
カレントディレクトリ上のテキストファイル"1.txt"が編集できます。
Ubuntu on Windowsではこれはできません。
CygwinはWindowsとの混合環境で、
Ubuntu on WindowsはWindowsとは分断されているということです。

あと[Tab]キーで補完するとき音が鳴ってうるさい…
これはタスクトレイの[スピーカー]アイコンのコンテキストメニューから
[音量ミキサーを開く]を選択して[音声ミキサー]ウィンドウを開いておき、
bash上で[Tab]キーを押して音を出すと、
[音声ミキサー]に[Console Window Host]項目が現れるので、
それのみをミュートすれば解決できます。

すったもんだありつつも体験できた[Bash on Ubuntu on Windows]。
日本語の表示時におかしなことになったりするのは
Beta版のご愛嬌としても、なかなかに使えそうな印象を受けました。
もうCygwinは必要ないかもしれませんね。

0 件のコメント:

コメントを投稿