Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

WSL-Distribution-SwitcherでUbuntuをDebianへ

前回紹介した「WSL-Distribution-Switcher」は、WSL上でUbuntu以外のLinuxディストリビューションを利用可能にするツールだが、今回はこちらの利用手順を紹介する。なお、もう1度Ubuntuに戻す場合には、設定を含めBUWの削除からインストールが必要になるので、試す場合はそのつもりで行っていただきたい。

まず、WSL-Distribution-SwitcherはPython 3で書かれており、BashではなくWindows 10上で実行しなければならない。そのため、公式サイトからWindows版をインストールする。なお、Windows版Python 3は32ビット版及び64ビット版、さらにZIP形式で展開する「embeddable版」、Webインストーラーを用いる「web-based installer版」、通常のセットアップを行う「executable installer版」の3種類があるものの、これらは好みに応じて選ぶとよい。

Python公式サイトのダウンロードページ。お使いのWindows 10に合わせて選択する

インストール時は<Add Python 3.6 to PATH>にチェックを入れてパスを通しておくと使いやすくなる

次にWSL-Distribution-Switcherのリポジトリをこちらからダウンロードし、任意のフォルダーに展開する。続いて行うのはLinuxディストリビューションの入手だ。具体的には「get-source.py」を実行し、Docker HubのTar ball(ターボール)をダウンロードするのだが、ここからはコマンドプロンプト上で実行しなければならない。もっともBUWをお使いの読者諸氏であれば苦にならないだろう。

get-source.pyは引数でLinuxディストリビューションを選択し、コロン(:)を追加することでバージョンなどを指定する仕組みだ。例えばDebian GNU/Linuxは安定版やテスト版、不安定版に実験版と複数のリリースレベルを用意しているが、ここで実験版を指定する場合は「get-source.py debian:sid」と実行する。

これらのタグはDocker Hubが付けたものをそのまま利用できるので、GitHubのドキュメントページ]に用意されたリンクから確認すればよい。なお、タグを省略した場合はlatest(最新の安定版)が選択される。また今回はDebian GNU/Linuxで話を進めるが、CentOSなら「get-source.py centos」、openSUSEなら「get-source.py opensuse」に読み替えて実行してほしい。

コマンドプロンプトを起動し、WSL-Distribution-Switcherを展開したフォルダーに移動。今回はDebian GNU/Linuxをダウンロードするため、「get-source.py debian」を実行する

次に「get-prebuilt.py」を実行する。こちらのスクリプトはDocker HubからDockerイメージのレイヤーファイルをダウンロードするものだが、「docker pull」と同じと説明するとDocker利用者には分かりやすいだろう。使い方はget-source.pyと同じだ。

続いてDebian GNU/Linuxのレイヤーファイルをダウンロードするため、「get-prebuilt.py debian」を実行する

そしてインストールを行う「install.py」を実行する。こちらはターボールを展開して現在のrootfs(BUW)を新たなLinuxディストリビューションに置き換えるスクリプトだ。ターボールの指定も可能で、Linuxディストリビューションによっては圧縮済み読み取り専用ファイルシステムであるSquashFSを用いる場合がある。ターボールの拡張子が「.sfs」「.squashfs」などの場合は引数で明示するとよい。通常であれば下図のとおり、「install.py [タグ]」だけで実行できる。

Linuxディストリビューションをインストールするため、「install.py debian」を実行する

後はこれまでと同じ方法でWindows 10からbash.exeを起動するだけだ。「/etx/debian_version」や「/etc/issue」を確認すれば、LinuxディストリビューションがGNU Debian/Linuxに切り替わったことを確認できるだろう。BUWの場合、前者の内容は「stretch/sid」、後者の内容は「Ubuntu 16.04.2 LTS」となるものの、今回行った操作の場合、前者は「8.7」、後者は「Debian GNU/Linux 8」となる。

bash.exeを起動するとLinuxディストリビューションが切り替わったことを確認できる

だが、このままではいくつかの問題がある。sudoがインストールされていないため、管理者権限を必要な操作が行えないからだ。そのためシステムのアップグレードや欠けている重要パッケージのインストールを行うシェルスクリプト「hook_postinstall_all.sample.sh」が用意されている。ファイル名からも分かるように環境に応じて編集が求められるが、今回は不足パッケージのインストールのみ行うため、そのまま実行した。なお、Bash上で管理者権限を実行するため、WSLの既定ユーザーを一時的にrootに変更している。

コマンドプロンプト上で「lxrun /setdefaultuser root /y」を実行する

Bashを起動し、「hook_postinstall_all.sample.sh」を実行する

本来であれば指定したユーザーをsudoグループに追加されるはずだが、筆者が試した限りでは上手く行かなかった。そのため、既存ユーザーの設定を変更する「usermod」コマンドを使用している。Debian GNU/Linuxの場合はsudoグループだが、CentOSはwheelグループとなるため、異なるLinuxディストリビューションの場合は事前に確認してほしい。

続いて「usermod -G sudo {ユーザー名}」を実行する

これでWSLのLinuxディストリビューションが切り替わった。なお、「switch.py」を使えばインストール済みLinuxディストリビューションの切り替えも可能だという。元のUbuntuに戻す場合は「lxrun /uninstall」を実行して、UbuntuのイメージをWindowsストアからダウンロードする操作を行えばよい。

コマンドプロンプト上で「lxrun /setdefaultuser {ユーザー名}」を実行する

Bashを再起動すると、指定したユーザーでログインできる。また、sudoコマンドも利用可能になった

今度は「lsb_release」コマンドでLinuxディストリビューションの情報を表示させてみた

阿久津良和(Cactus)