WSL2の初歩メモ

# 概要

WSL2の設定からディストリビューションのインストールまでの初歩的な使い方をまとめたメモです。

**環境**

* Windows 10 Professional バージョン 20H2 (インサイダープログラム参加)

**参考**

* [Windows 10 用 Windows Subsystem for Linux のインストール ガイド] (https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)
* [Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能] (https://www.atmarkit.co.jp/ait/articles/1909/09/news020.html)
* [完全なLinuxがWindows 10上で稼働する？　「WSL 2」とは] (https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html)

# WSL2のインストール

WSL2のインストールは[Windows 10 用 Windows Subsystem for Linux のインストール ガイド] (https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)で詳しく説明されているので、このページを参考にインストールを行います。

## WSLを有効にする

WSLを有効にしていない場合は、管理者権限でPowerShellを起動し下記コマンドを実行してWSLを有効にします。
すでに有効になっている場合は不要なのでスキップします。

```powershell:PowerShell
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.329

イメージのバージョン: 10.0.19042.421

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
```

### WSLでインストールしたLinuxディストリビューションをアンインストールしたい場合

ディストリビューションによってはWSLからWSL2への更新に数分の時間がかかるようです。
今後使用しないディストリビューションがインストールされている場合は、事前にアンインストールしておくといいと思います。

```powershell:PowerShell
> wsl --unregister Ubuntu-18.04
登録を解除しています...
```

## 仮想マシンプラットフォームを有効にする

続けて下記コマンドを実行して仮想マシンプラットフォームを有効にします。

```powershell:PowerShell
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.329

イメージのバージョン: 10.0.19042.421

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
```

## PCの再起動

ここで一旦PCを再起動します。
PCが立ち上がったらコントロールパネルの`Windowsの機能の有効化または無効化`画面で

**Linux 用 Windows サブシステム**
![wsl22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/caa50350-bf13-5236-d311-2d0295cc9a9a.png)
**仮想マシン プラットフォーム**
![wsl23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/f5f05ced-bf38-207f-4592-57a1414eecad.png)
にチェックが付いていることを確認します。

ちなみに`Windowsの機能の有効化または無効化`画面に素早くアクセスするには、<kbd>Win</kbd>キーを押してスタートメニューを表示させ、その状態で "windows fea (tures)"とまで入力すると図のように表示されるので、そこに表示された`Windowsの機能の有効化または無効化`をクリックします。
![wsl24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/8f3d3b76-0fa1-f2c4-14fd-bfcd938cee03.png)


## WSL2をデフォルトに設定

この設定を行うとインストールするディストリビューションのデフォルトがWSL2になります。

```powershell:PowerShell
> wsl --set-default-version 2
```

このとき

* "WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel"  若しくは
* "WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください" 

というメッセージが表示された場合はカーネルの更新が必要です。[WSL 2 Linux カーネルの更新] (https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)を参考に更新してください。

私の環境ではこれらのメッセージは表示されず、"エラー: 0x1bc"と表示されました。この現象はすでに報告されており([Error 0x1bc when setting wsl default version] (https://github.com/microsoft/WSL/issues/5651))、そのままカーネルの更新を続けても良いようです。

```powershell:PowerShell
> wsl --set-default-version 2
エラー: 0x1bc
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
```

[WSL 2 Linux カーネルの更新] (https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel)を参考にカーネルを更新し、もう一度実行すると設定が完了します。

```powershell:PowerShell
> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
```

以上でWSL2のインストールは完了です。


# ディストリビューションのインストール

ディストリビューションはMicorosoft Storeから行います。

## Ubuntu 20.04 LTSをインストール

Microsoft Storeを起動し検索フィールドに"Ubuntu"と入力して検索し、図の"Ubuntu 20.04 LTS"をクリックします。
![wsl25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/70b6dfe8-b8c7-776f-9479-6952c92a1706.png)
「入手」というボタンをクリックします。
![wsl26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/a9e08e5f-915a-44e6-96cc-c5564677c462.png)
インストールが完了すると「起動」というボタンが表示されるのでクリックします。
![wsl27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/8b312131-bcb8-3f0b-b6e0-f59e0befe0c9.png)
新しいウィンドウが開くので、アカウント名とパスワードを入力してUbuntuの新しいアカウントを作成します。このアカウントはLinux管理者とみなされsudoコマンドが実行できます。
![wsl28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/b209cfa8-5aad-5558-9d86-75341be59989.png)
アカウントの作成が終わると図のようにメッセージが表示された後、プロンプトが表示されます。
![wsl29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/6d4e4349-1447-35ac-b48d-b798c3a5b9c6.png)

**バージョンの確認**

```bash:Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
```

**最新の状態に更新**

下記コマンドで最新の状態に更新します。

```bash:Ubuntu
> sudo apt update && sudo apt upgrade -y
[sudo] password for rubytomato:
```

### インストールしたディストリビューションの確認

PowerShellから`wsl`コマンドでインストールしたディストリビューションを確認します。
VERSIONが`2`と表示されている通り、インストールしたUbuntu 20.04 LTSはWSL2で実行されています。

```powershell:PowerShell
> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
```

### PowerShell(またはコマンドプロンプト)からUbuntuのシェルを起動

#### wslコマンドを使用する

PowerShell(またはコマンドプロンプト)からUbuntuのシェルを起動するには`wsl`コマンドを実行します。

```powershell:PowerShell
> wsl
```

オプションを指定せずに実行するとデフォルトのディストリビューションのシェルが起動しますが、複数のディストリビューションをインストールしていてデフォルト以外のディストリビューションのシェルを起動したい場合は`-d`オプションで、ディストリビューションを指定します。

```powershell:PowerShell
> wsl -d {ディストリビューション名}
```

#### ubuntu2004コマンドを使用する

`wsl`コマンドの他にディストリビューション名が付いた実行ファイルがあります。例えばUbuntu 20.04 LTSの場合`ubuntu2004.exe`という名前になります。

```powershell:PowerShell
> ubuntu2004
```

ちなみにDebianの場合は`debian.exe`でDebianのシェルを起動することができます。

```powershell:PowerShell
> debian
```

### ディストリビューションからPowerShellを起動

ディストリビューションのシェルからPowerShellやCMDを起動することもできます。
なお、Windows環境では実行ファイルの拡張子は省略できますが、ディストリビューションのシェルから実行する場合は拡張子を省略することができません。

たとえばPowerShellを起動するときは下記のように.exeまで入力する必要があります。

```bash:Ubuntu
$ powershell.exe
```

コマンドプロンプトを任意のディレクトリで起動したい場合は、下記のように`/k`オプションでcdコマンドを実行します。この例ではコマンドプロンプト起動後にカレントディレクトリをユーザーホームディレクトリに移動します。

```bash:Ubuntu
$ cmd.exe /k "cd %HOME%"
```

#### 留意点

PowerShellやCMD、エクスプローラーをディストリビューションのシェルから起動するには、Cドライブがマウントされている必要があります。
後述しますが、Windowsの固定ドライブをマウントするかどうかは設定することができますので、Cドライブマウントされていないとこれらのコマンドは使えないことになります。

また、デフォルトでWindows環境の環境変数PATHの内容は、ディストリビューションのシェルの環境変数PATHに引き継がれているため、powershell.exeやcmd.exeなども絶対パスを指定せずに実行できます。

```bash:Ubuntu
$ which cmd.exe
/mnt/c/Windows/system32/cmd.exe
```

Windowsの環境変数PATHをディストリビューションに引き継ぎたくない場合は、/etc/wsl.confで設定可能で、下記の`interop`セクションを追記します。

```config:wsl.config
[interop]
appendWindowsPath = false
```

### 新しいユーザーを登録する

```bash:Ubuntu
$ sudo adduser test_user
Adding user `test_user' ...
Adding new group `test_user' (1001) ...
Adding new user `test_user' (1001) with group `test_user' ...
Creating home directory `/home/test_user' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for test_user
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
```

**新しいユーザーでログインする**

デフォルトユーザーとは異なるユーザーでログインするには`-u`オプションでそのユーザーを指定します。

```powershell:PowerShell
> wsl -u test_user
```

### ログインするデフォルトユーザーを変更する

ログインするユーザーを指定しなかった場合、ディストリビューションのインストール時に作成したアカウントがデフォルトユーザーになります。

**デフォルトユーザーでログイン**

```powershell:PowerShell
> wsl
```

**デフォルトユーザーを変更する**

デフォルトユーザーの変更はubuntu2004コマンドで行います。

```powershell:PowerShell
> ubuntu2004 config --default-user test_user
```

これでユーザーを指定せずにtest_userでログインできます。

```powershell:PowerShell
> wsl
```

### rootユーザーでログイン

rootユーザーでログインしたい場合（たとえば、ディストリビューションインストール時に作成したLinux管理者ユーザーのパスワードを忘れた場合）、`wsl`コマンドからrootユーザーでログインできます。

```powershell:PowerShell
> wsl -u root
```


## Debianをインストール

ドキュメントに[例外的に WSL 2 ではなく WSL 1 を使用する場合] (https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions#exceptions-for-using-wsl-1-rather-than-wsl-2)という項目があるように、まだWSLを利用した方がよい場合があります。

この例ではインストールしたDebianをWSLで実行するようにしてみます。

Microsoft Storeを起動し検索フィールドに"debian"と入力して検索し、図の"Debian"をクリックします。
![wsl30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/a5e333ef-e600-8d89-7dad-1cbd67bbf0aa.png)
「入手」というボタンをクリックします。
![wsl31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/d1c46c8f-0a52-5c9e-891a-e59a878ded2b.png)
インストールが完了すると「起動」というボタンが表示されるのでクリックします。
![wsl32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/185826bc-de13-2ee9-02be-7b939d006caf.png)
新しいウィンドウが開くので、Debianの新しいアカウントを作成します。
図のようにアカウント名とパスワードを入力します。
![wsl33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/9e67b44b-5e7d-ae5a-0360-058c8d5b58be.png)

### インストールしたディストリビューションの確認

PowerShellから`wsl`コマンドでインストールしたディストリビューションを確認します。
VERSIONが`2`と表示されている通り、インストールしたDebianはWSL2で実行されています。

```powershell:PowerShell
> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
  Debian          Running         2
```

#### WSL2からWSLへ更新（ダウングレード）する

```powershell:PowerShell
> wsl --set-version Debian 1
変換中です。この処理には数分かかることがあります...
変換が完了しました。
```

WSLのバージョンが変わったことを確認します。

```powershell:PowerShell
> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
  Debian          Stopped         1
```

Debianのシェルを起動します。（この記事ではDebianはデフォルトのディストリビューションではないので`-d`オプションで明示します）

```powershell:PowerShell
> wsl -d debian
```

# Windowsとディストリビューションの連携

## ファイルシステム

### Windowsからディストリビューション

**エクスプローラーから**

エクスプローラーを開き、アドレスバーに`\\wsl$`と入力すると実行中のディストリビューションがフォルダとして表示されます。
![wsl34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/77feba57-a480-e6e6-8371-b05248d7a3a1.png)

もしくは、ディストリビューション内から下記のように`explorer.exe`を実行すると、そのディレクトリがエクスプローラーで開きます。

```bash:Ubuntu
$ explorer.exe .
```

**PowerShellから**

```powershell:PowerShell
> cd \\wsl$\ubuntu-20.04
```

なお、コマンドプロンプトからは移動できないようです。

```cmd:CMD
> cd \\wsl$\ubuntu-20.04
'\\wsl$\ubuntu-20.04'
CMD では UNC パスは現在のディレクトリとしてサポートされません。
```

### ディストリビューションからWindows

Windowsのファイルシステムは、デフォルトで自動的に`/mnt`下に固定ドライブーがマウントされています。（光学ドライブは自動でマウントされません）

```bash:Ubuntu
$ sudo mount | grep drvfs
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
D:\ on /mnt/d type 9p (rw,noatime,dirsync,aname=drvfs;path=D:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
```

#### マウントしたくない場合

固定ドライブを自動でマウントしたくない、もしくは手動でマウントしたい場合は、wsl.confというファイルで起動構成を設定します。

デフォルトでは作成されていないので、初回は作成する必要があります。

```bash:Ubuntu
$ sudo vi /etc/wsl.conf
```

下記のように`automount`セクションを追記します。

```text:/mnt/wsl.conf
[automount]
enabled = false
```

#### fstabでマウントしたい場合

上記の設定に加え、/etc/fstabに下記の行を追記し、ディストリビューションを再起動します。

```config:fstab
C: /mnt/c drvfs metadata,notime,gid=1000,uid=1000,defaults 0 0
```

再起動するには`-t`オプションでディストリビューションを一旦停止させ

```powershell
> wsl -t Ubuntu-20.04
```

もう一度wslコマンドでディストリビューションを開きます。

```powershell
> wsl
```

#### 手動でマウントしたい場合

**マウント**

```bash:Ubuntu
$ sudo mount -t drvfs -o noatime,uid=1000,gid=1000, C:\\ /mnt/c
```

**アンマウント**

```bash:Ubuntu
$ sudo umount /mnt/c
```

#### rfd,wfdの値が違う

自動でマウントした場合とfstabまたはmountコマンドでマウントした場合で、rfdとwfdの値が異なります。

**自動マウント**

自動では`rfd=8,wfd=8`

```
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
```

**手動マウント**

手動では`rfd=3,wfd=3`

```
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=3,wfd=3)
```

そもそもrfd、wfdが何を意味するのか分からないのですが、このようにmountコマンドの出力結果に違いが出ます。


## ネットワーク

### Windows(ホスト)側

wslでディストリビューションを開くと`vEthernet (WSL)`という仮想ネットワークアダプターが(無ければ)追加されます。
このとき設定されるIPv4は固定ではなく毎回異なります。

```cmd:CMD
> ipconfig

Windows IP 構成

// 省略

イーサネット アダプター vEthernet (WSL):

  接続固有の DNS サフィックス . . . . .:
  リンクローカル IPv6 アドレス. . . . .: fe80::915c:3fa3:8ed5:721a%29
  IPv4 アドレス . . . . . . . . . . . .: 172.25.128.1
  サブネット マスク . . . . . . . . . .: 255.255.240.0
  デフォルト ゲートウェイ . . . . . . .:
```

### WSL2(ゲスト)側

`eth0`はWSL2側の仮想イーサネットアダプターです。IPアドレスは固定ではありません。

```bash:Ubuntu
$ ip addr | grep eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.25.134.52/20 brd 172.25.143.255 scope global eth0
```


### Windowsからディストリビューション

#### HTTP-SERVER

ディストリビューション内に立ち上げたHTTPサーバーへWindowsのブラウザからアクセスしてみます。
ここではnpmの[http-server] (https://www.npmjs.com/package/http-server)を利用しました。

**http-serverのインストール**

```bash:Ubuntu
$ sudo npm install -g http-server
/usr/local/bin/http-server -> /usr/local/lib/node_modules/http-server/bin/http-server
/usr/local/bin/hs -> /usr/local/lib/node_modules/http-server/bin/http-server
+ http-server@0.12.3
added 23 packages from 35 contributors in 4.323s
```

**テスト用ファイルの作成**

```
$ mkdir public
$ vi ./public/index.html
```

```html:index.html
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>The HTML5 Herald</title>
  <meta name="description" content="The HTML5 Herald">
  <meta name="author" content="SitePoint">
</head>
<body>
  <div id="app">
    <h1>index from ubuntu on wsl2</h1>
  </div>
</body>
</html>
```

**起動**

```bash:Ubuntu
$ http-server
Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8080
  http://172.30.12.40:8080
Hit CTRL-C to stop the server
```

**アクセス**

この場合、Windows側のブラウザから`http://127.0.0.1:8080` または`http://172.30.12.40:8080`でアクセスできます。

#### MySQL

ディストリビューション内に立ち上げたMySQLサーバーへWindowsのMySQLクライアントからアクセスしてみます。

**MySQLクライアントのインストール**

Windows側なので割愛します。

**MySQLサーバーのインストール**

```bash:Ubuntu
$ sudo apt install -y mysql-server
```

**起動**

インストール直後は停止しているので

```bash:Ubuntu
$ sudo service mysql status
 * MySQL is stopped.
```

起動します。

```bash:Ubuntu
$ sudo service mysql start
 * Starting MySQL database server mysqld
su: 警告: ディレクトリを /nonexistent に変更できません: そのようなファイルやディレクトリはありません
                                                                                                [ OK ]
```

*警告の部分はのちほど対応します。

**インストール後のセットアップ**

```bash:Ubuntu
$ sudo mysql_secure_installation
```

**rootでログイン**

セットアップが終わったらrootユーザーでログインしてみます。`sudo`を付け忘れると正しいパスワードを入力してもログインできません。

```bash:Ubuntu
$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.21-0ubuntu0.20.04.4 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

**bind_addressの変更**

Windows側のMySQLクライアントからログインできるようにbind_addressを変更します。

```bash:Ubuntu
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
```

下記の行をコメントアウトします。

```
#bind-address           = 127.0.0.1
```

**警告の対応**

MySQLサーバー起動時に出力された警告に対応します。

```bash:Ubuntu
$ sudo usermod -d /var/lib/mysql mysql
```

ここで一旦再起動します。

```bash:Ubuntu
$ sudo service mysql restart
```

**データベースとユーザーの作成**

```sql
> CREATE DATABASE IF NOT EXISTS sample_db
  CHARACTER SET = utf8mb4
  COLLATE = utf8mb4_general_ci;
```

Windowsからログインできるユーザーを作成します。
WindowsのIPアドレスが変わってもいいようにホストをワイルドカードにしています。

```sql
> CREATE USER IF NOT EXISTS 'sample_user'@'%'
  IDENTIFIED BY 'sample_pass'
  PASSWORD EXPIRE NEVER;

> GRANT ALL ON sample_db.* TO 'sample_user'@'%';

> FLUSH PRIVILEGES;
```

**ログイン**

WinsowsのMySQLクライアントからディストリビューションのMySQLサーバーへログインします。
ホストにディストリビューションのeth0のIPアドレスを指定します。

```powershell:PowerShell
> mysql -h 172.30.12.40 -u sample_user -p
Enter password: ***********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.21-0ubuntu0.20.04.4 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

eth0のIPアドレスを調べる

```bash:Ubuntu
$ ip addr | grep eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.30.12.40/20 brd 172.30.15.255 scope global eth0
```

### ディストリビューションからWindows

#### HTTP-SERVER

Windowsで立ち上げたHTTPサーバーにディストリビューション内からアクセスしてみます。

**インストール**

割愛します。

**テスト用ファイルの作成**

```powershell:PowerShell
$ mkdir public
```

public内にindex.htmlファイルを作成

```html:index.html
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>The HTML5 Herald</title>
  <meta name="description" content="The HTML5 Herald">
  <meta name="author" content="SitePoint">
</head>
<body>
  <div id="app">
    <h1>index from windows</h1>
  </div>
</body>
</html>
```

**起動**

Windowsからは下記3つのアドレスへアクセスできますが、

```powershell:PowerShell
> http-server
Starting up http-server, serving ./public
Available on:
  http://192.168.1.20:8080
  http://127.0.0.1:8080
  http://172.30.0.1:8080
Hit CTRL-C to stop the server
```

**アクセス**

ディストリビューションからは`192.168.1.20:8080`へしかアクセスできません。

```bash:Ubuntu
$ curl -i http://192.168.1.20:8080
HTTP/1.1 200 OK
server: ecstatic-3.3.2
cache-control: max-age=3600
last-modified: Fri, 07 Aug 2020 13:25:36 GMT
etag: W/"844424930696936-300-2020-08-07T13:25:36.438Z"
content-length: 300
content-type: text/html; charset=UTF-8
Date: Fri, 07 Aug 2020 16:09:39 GMT
Connection: keep-alive

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>The HTML5 Herald</title>
  <meta name="description" content="The HTML5 Herald">
  <meta name="author" content="SitePoint">
</head>
<body>
  <div id="app">
    <h1>index from windows</h1>
  </div>
</body>
</html>
```

理由がよくわかりませんが`172.30.0.1:8080`へはアクセスできません。（MySQLの場合`172.30.0.1`でアクセスできる）

```bash:Ubuntu
$ curl -i http://172.30.0.1:8080
curl: (28) Failed to connect to 172.30.0.1 port 8080: 接続がタイムアウトしました
```

#### MySQL

Windowsで立ち上げたMySQLサーバーへディストリビューションのMySQLクライアントからアクセスしてみます。

**MySQLサーバーのインストール**

Windows側なので割愛します。

bind_addressの設定は以下の通りです。

```sql
mysql> show variables like '%bind%';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| bind_address        | *     |
| mysqlx_bind_address | *     |
+---------------------+-------+
2 rows in set, 1 warning (0.03 sec)
```

**データベースとユーザーの作成**

```sql
> CREATE DATABASE IF NOT EXISTS sample_db
  CHARACTER SET = utf8mb4
  COLLATE = utf8mb4_general_ci;
```

ディストリビューションからログインできるユーザーを作成します。
ディストリビューションのIPアドレスが固定ではないので、ホストをワイルドカードにしています。

```sql
> CREATE USER IF NOT EXISTS 'sample_user'@'%'
  IDENTIFIED BY 'sample_pass'
  PASSWORD EXPIRE NEVER;

> GRANT ALL ON sample_db.* TO 'sample_user'@'%';

> FLUSH PRIVILEGES;
```

**MySQLクライアントのインストール**

```bash:Ubuntu
$ sudo apt install -y mysql-client
```

**ログイン**

ディストリビューションのMySQLクライアントからWindowsのMySQLサーバーへログインします。
ホストに`172.30.0.1`または`192.168.20.1`を指定します。

```bash:Ubuntu
$ mysql -h 172.30.0.1 -u sample_user -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```


# etc

## 日本語化

[WSLのUbuntu環境を日本語化する] (https://www.atmarkit.co.jp/ait/articles/1806/28/news043.html)を参考に日本語化します。

**ロケールの設定**

使用可能なロケールを確認

```bash:Ubuntu
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
```

ランゲージパックをインストール

```bash:Ubuntu
$ sudo apt install -y language-pack-ja
```

インストール後の使用可能なロケールを確認

```bash:Ubuntu
$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
ja_JP.utf8
```

**ロケールをja_JP.UTF-8に設定**

```bash:Ubuntu
$ sudo update-locale LANG=ja_JP.UTF-8
```

ここで一旦exitして、再度ディストリビューションを開きます。

**タイムゾーンをJSTに設定**

```bash:Ubuntu
$ sudo dpkg-reconfigure tzdata
```

tzdataを設定するメニューが開きます。
![Screenshot_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/d4d57d48-3e31-30d6-9034-2bca06e18fc8.png)
![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/73bccda4-6fb5-9af0-d2f4-4be6c847df6c.png)

**日本語のmanページをインストール**

```bash:Ubuntu
$ sudo apt -y install manpages-ja manpages-ja-dev
```

## Node.jsのインストール

さきにcurlをインストールします。

```bash:Ubuntu
$ sudo apt install -y curl
```

Ubuntu 20.04 LTSにNode.jsをインストールする手順は[Ubuntuに最新のNode.jsを難なくインストールする] (https://qiita.com/seibe/items/36cef7df85fe2cefa3ea)を参考にさせて頂きました。

インストールしたバージョンは下記の通りです。

```bash:Ubuntu
$ node -v
v12.18.3
$ npm -v
6.14.6
```

## Vue.jsのインストール

```bash:Ubuntu
$ sudo npm install -g @vue/cli
```

```bash:Ubuntu
$ vue -V
@vue/cli 4.4.6
```

### プロジェクトを作成する

```bash:Ubuntu
$ vue create hello-world
```

```bash:Ubuntu
$ cd hello-world

$ npm run serve
 DONE  Compiled successfully in 3227ms                                                                                                                   
  App running at:
  - Local:   http://localhost:8080/
  - Network: http://172.30.11.30:8080/

  Note that the development build is not optimized.
  To create a production build, run npm run build.
```

Windows側のブラウザから`http://localhost:8080/`または`http://172.30.11.30:8080/`へアクセスしてみます。
![Screenshot_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22772/094ccd18-6053-e774-c152-d808240e8455.png)