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に合わせて選択する |
次に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と同じだ。
そしてインストールを行う「install.py」を実行する。こちらはターボールを展開して現在のrootfs(BUW)を新たなLinuxディストリビューションに置き換えるスクリプトだ。ターボールの指定も可能で、Linuxディストリビューションによっては圧縮済み読み取り専用ファイルシステムであるSquashFSを用いる場合がある。ターボールの拡張子が「.sfs」「.squashfs」などの場合は引数で明示するとよい。通常であれば下図のとおり、「install.py [タグ]」だけで実行できる。
後はこれまでと同じ方法で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」となる。
だが、このままではいくつかの問題がある。sudoがインストールされていないため、管理者権限を必要な操作が行えないからだ。そのためシステムのアップグレードや欠けている重要パッケージのインストールを行うシェルスクリプト「hook_postinstall_all.sample.sh」が用意されている。ファイル名からも分かるように環境に応じて編集が求められるが、今回は不足パッケージのインストールのみ行うため、そのまま実行した。なお、Bash上で管理者権限を実行するため、WSLの既定ユーザーを一時的にrootに変更している。
本来であれば指定したユーザーをsudoグループに追加されるはずだが、筆者が試した限りでは上手く行かなかった。そのため、既存ユーザーの設定を変更する「usermod」コマンドを使用している。Debian GNU/Linuxの場合はsudoグループだが、CentOSはwheelグループとなるため、異なるLinuxディストリビューションの場合は事前に確認してほしい。
これでWSLのLinuxディストリビューションが切り替わった。なお、「switch.py」を使えばインストール済みLinuxディストリビューションの切り替えも可能だという。元のUbuntuに戻す場合は「lxrun /uninstall」を実行して、UbuntuのイメージをWindowsストアからダウンロードする操作を行えばよい。
阿久津良和(Cactus)