昨晩のBuild 2019にてWindows Subsystem for Linux(以下、WSL)2が発表されリリースが待ち遠しいですが、今回は自分が普段行っているWSLの初期設定について書こうかと思っています。
WSLを使う意義
WSLを使う意義というのはエミュレーションしているだけの環境とはいえ、ネイティブなUnixコマンドやOSSなソフトが使用できるところが一番大きいと、個人的には考えています。
名前にSubsystemと付いているだけあって、メインの開発環境はWindowsだけど、動かすシステムはLinuxとかみたいなパターンで簡単な動作検証を行う場合や、ちょっとしたLinuxのコマンドやOSSソフトを実行したいとき便利です。
本来であれば、仮想マシンなりDockerなりの環境を用意するのが順当ではありますが、開発にVSCodeをメインに使っていたりするので、開発初期段階なんかの細々とファイルの修正が入ったりするときに、その度にデプロイし直すのは面倒なので。
前提
初期設定の手順について書くにあたって、以下の環境を前提に書いています。
- 端末に既にWSLがインストール済み
- 利用するディストリビューションはUbuntu (18.04)
設定手順
- sshのインストール
初期ではsshがインストールされていないので、sshをインストールします。
インストール後、sshd_configの設定を変更しsshを起動します。
既定のコンソールだと操作感がやや微妙ですが、これでターミナルソフトから「127.0.0.1」でSSH接続が行えるようになります。$ sudo apt update $ sudo apt install ssh $ sudo vi /etc/ssh/sshd_config PasswordAuthentication no ⇓ PasswordAuthentication yes $ sudo service ssh start
- 作業フォルダへのリンク
Cドライブ直下にworkディレクトリを作って、シンボリックリンクを張ります。
WSL経由で使用したいファイルなんかを格納したり、開発を行うのに使ったりしています。$ mkdir /mnt/c/work $ ln -s /mnt/c/work work
- pipインストール
pipを使ってインストールをする場面は多いので、インストールします。
$ sudo apt install python-pip $ sudo pip install -U pip
- WSL起動スクリプトの作成
残念ながらWSLは自動起動設定は設定を行っても動かないため、何らかの方法を使って起動してやる必要があります。
また、WSLはウィンドウを閉じてしまうと起動しいたサービスが閉じてしまうため、注意が必要です。というわけで、WSLを起動する&SSHデーモンを起動するPowerShellスクリプトを作成作成します。
以下の内容を「WSLstart.ps1」等の名前で保存します。# WSLを起動 powershell.exe Start-Process wsl.exe # SSHデーモンを起動 powershell.exe Start-Process wsl.exe -ArgumentList 'echo "<sudo password>" | sudo -S /etc/init.d/ssh start'
あと、ExecutionPolicyが「Restricted」の場合は、設定を変更します。
管理者でPowerShelを起動し、以下のコマンドで設定を変更します。# 設定を確認 > Get-ExecutionPolicy # 設定を変更 > Set-ExecutionPolicy -ExecutionPolicy ExecutionPolicy
WSLの起動
WSLを起動する際は、「WSLstart.ps1」を[ 右クリック > PowerShel で実行 ]で起動します。
黒いウィンドウが表示されたら起動していて、ウィンドウを閉じるとWSLが終了します。
起動に際して1点注意あって、スタートメニュー等のアイコンからWSLを起動している場合は、「WSLstart.ps1」を実行してもSSHデーモンは起動しないはずです。
というのも、アイコンからWSLを起動した際は管理者として実行した状態となっていて、「WSLstart.ps1」から起動した際は一般ユーザーとして起動するようなので、権限が低いので蹴られます。
以上でWSLの初期設定は完了です。
あとは適宜必要なソフトを入れる感じになります。
私はAnsibleを入れて、修正、実行、修正、実行みたいなことをやったりしています。