1. 概要

「システム開発・デプロイ環境の構築」の重要性について、以下の2つ挙げることができます。

  • 開発エンジニアは、開発環境を構築する手間が省き、メンテナンスを容易にする
    Dockerイメージの中に既に開発に必要なものは入っているので、開発エンジニアが自ら開発環境を構築する必要はない。

  • 開発環境と本番環境で全く同じ構成を実現したい。
    開発環境で動作したコンテナをそのまま本番環境で動作させるので、開発環境と本番環境で動作するものは寸分違わず同じものとなる。

1-1. WSLとは

Linux 用 Windows サブシステムを使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンド ライン ツール、ユーティリティ、アプリケーションを含む GNU/Linux 環境を変更せずそのまま Windows 上で直接実行できます。

1-2. WSL2とは

WSL 2 は、Linux 用 Windows サブシステムが Windows 上で ELF64 Linux バイナリを実行できるようにする、Linux 用 Windows サブシステム アーキテクチャの新しいバージョンです。 その主な目標は、ファイル システムのパフォーマンスを向上させること と、システム コールの完全な互換性 を追加することです。

1-3. WSL2の機能

  • OS ファイル システム間でのパフォーマンス Linux ファイル システムのルート: \wsl$\Ubuntu-18.04\home<user name>\Project Windows ファイル システムのルート: C:\Users<user name>\Project

  • Windows からの Linux ネットワーク アプリへのアクセス (localhost) Linux ディストリビューションでネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) を構築する場合、(通常の場合と同様に) localhost を使用して (Microsoft Edge または Chrome インターネット ブラウザーなどの) Windows アプリからアクセスすることができます。

  • Linux ディストリビューションが動作する仮想マシンの IP アドレスを確認するには、次の手順に従います。
    ・WSL ディストリビューション (つまり、Ubuntu) から、次のコマンドを実行します: ip addr
    ・eth0 インターフェイスの inet 値の下で目的のアドレスを見つけてコピーします。
    ・grep ツールがインストールされている場合は、次のコマンドを使用して出力をフィルター処理することにより、これをより簡単に見つけることができます: ip addr | grep eth0
    ・この IP アドレスを使用して Linux サーバーに接続します。

Linux からの Windows ネットワーク アプリへのアクセス (ホスト IP) Linux ディストリビューション (つまり、Ubuntu) から Windows 上で実行されているネットワーク アプリ (たとえば、Node.js または SQL Server で実行されるアプリ) にアクセスする場合は、ホスト マシンの IP アドレスを使用する必要があります。

  • Linux ディストリビューションから次のコマンドを実行して、ホスト マシンの IP アドレスを取得します: cat /etc/resolv.conf
  • 次の語句の後に IP アドレスをコピーします: nameserver。
  • コピーした IP アドレスを使用して、Windows サーバーに接続します。

2. WSLのインストールとUbuntuの基本設定

(参考URL:https://docs.microsoft.com/ja-jp/windows/wsl/install-win10 )

2-1. WSL 2 の実行に関する要件を確認する

Windows ロゴ キー + R キー を押して> winverを入力して確認します。

  • Windows10 Pro
  • x64ベースプロセッサ(AMD社提唱の64ビットCPU規格に準拠したCPU)
  • x86は32ビット、x64は64ビットのことです。
  • Windows10:バージョン2004, OSビルド19041

2-2.「Ubuntu20.04LTS」をインストール

https://aka.ms/wslstore ⇒「WSL」で検索

  • Username:xxxxx、Password:xxxxxx を設定

  • Ubuntuのインストール直後のrootのpassword設定:

    $sudo passwd root ⇒ root:xxxxxxx
    

  • ※Ubuntuの削除(アンインストール)する場合は、 Windows10の[設定]画面の一覧から[アプリ]-Ubuntuをアンインストールします。

2-3. WSL-Ubuntuの保管場所を移動する

  • WSL 2 を別のドライブに安全に移動する

  • Windows ターミナルをインストールします。

  • Ubuntuの内容確認

    $ cat /etc/lsb-release
    
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=20.04
    DISTRIB_CODENAME=focal
    DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
    
  1. 管理者アクセス権をパワーシェル持つコマンドラインPowerShell またはコマンド プロンプトを開きます。
    PS C:\Users\RYZEN> wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-20.04    Stopped         2
    
  2. Linuxが実行されている場合は、特定の WSL ディストリビューションを停止する必要があります。
    PS C:\Users\RYZEN> wsl --shutdown
    
  3. 別のフォルダにエクスポートします。(ここでは、Ubuntu-exとしてUbuntuをエクスポート.tar E:wsl2に)
  • E:\exportフォルダーを事前に作成します。
    PS C:\Users\RYZEN> wsl --export Ubuntu-20.04 "E:\export\ubuntu-20.04-ex.tar"
    
  1. 以前の WSL インストールの登録を解除します。
    PS C:\Users\RYZEN> wsl --unregister Ubuntu-20.04
    
  2. 新しいフォルダを作成し、WSL インストールをそのフォルダにインポートします。
  • E:\wsl2フォルダーを事前に作成します。
    PS C:\Users\RYZEN> New-Item -Path "E:\wsl2" -ItemType Directory
    
        ディレクトリ: E:\
    
    Mode                 LastWriteTime         Length Name
    d-----        2021/12/15     15:19                wsl2
    
  1. インポート完了後の確認
    PS C:\Users\RYZEN> wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-20.04    Stopped         2
    
  2. WSL ディストリビューションの 1 つを(デフォルト)としてマークします。
  • 今回は、1つですので不要
    PS C:\Users\RYZEN> wsl -s Ubuntu-20.04
    
  1. デフォルトのユーザーをrootからxxxxのユーザー名に変更します。
  • root権限で/etc/wsl.confを作成し、以下の内容を記述します。
  • /etc/wsl.conf ファイルは、なければ作ります。(普通はないです)
  • metadata オプションをつけると、Windows側のファイル・フォルダに、WSL側用のパーミッション情報を追加できるようになります。Windows側のパーミッション情報と WSL側のパーミッション情報は別々に設定することができますが、同じ項目に異なるパーミッションを設定した場合、Windows側の設定が優先されます。
  • umask=22 により、Windows側のファイル・フォルダのパーミッションから、グループとその他ユーザーに対する書き込み権限を外します。
  • マウントオプションを指定しているため、これを反映するためには、WSL を再起動する必要があります。
    xxxx@RYZEN-PC:~$ sudo vi /etc/wsl.conf
    [sudo] password for xxxxx:
    
    /# /etc/wsl.confの内容
    [automount]
    enable = true
    root = /mnt/
    options = "metadata,uid=1000,gid=1000,umask=22"
    
    [user]
    default = "xxxxx"
    
  1. 最後に実行して確認します。
    PS C:\Users\RYZEN> wsl
    root@RYZEN-PC:/mnt/c/Users/RYZEN# cd
    root@RYZEN-PC:~# su xxxx
    xxxxx@RYZEN-PC:/root$ cd
    xxx@RYZEN-PC:~$ echo $USERNAME
    

2-5. WSL 2 仮想ハード ディスクのサイズを拡大する

  • 最大 VHD サイズを 256 GB を超えて拡張するには、次の手順を実行します。
  1. 次のコマンドを使用して、すべての WSL インスタンスを終了します。wsl --shutdown
  2. 配布インストール パッケージ名を見つけるには (‘パッケージファミリ名’)。
    • PowerShell を使用して (‘distro’ はディストリビューション名) コマンドを入力します。
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
    • 例えば:Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName
    PS C:\Users\RYZEN> wsl --shutdown
    PS C:\Users\RYZEN> Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName
    
    PackageFamilyName
    -----------------
    CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc
    
  3. 結果を使用して、WSL 2 のインストールで使用される VHD ファイルを見つけます。
  • Eドライブに移動しています。E:\wsl2\ext4.vhdxとなります。
  1. 次のコマンドを実行して、WSL 2 VHD のサイズを変更します。
  • 管理者特権で Windows コマンド プロンプトを開き、次のように入力します。
    diskpart //別ウインドウが開きます。
    
    DISKPART> diskpart
    
    DISKPART> Select vdisk file="E:\wsl2\ext4.vhdx"
    DiskPart により、仮想ディスク ファイルが選択されました。
    
    DISKPART> detail vdisk
    デバイスの種類 ID: 3 (不明)
    ベンダー ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
    状態: アタッチされたディスクは開いていません
    仮想サイズ:  256 GB
    物理サイズ: 1839 MB
    ファイル名: E:\wsl2\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 3
    
  • 詳細コマンドの出力を確認します。出力には、仮想サイズの値が含まれます。これは現在の最大値です。この値をメガバイトに変換します。たとえば、詳細出力に[仮想サイズ: 256 GB]と表示されている場合は、これを256000に変換します。
    DISKPART> expand vdisk maximum=1024000
    
      100% 完了しました
    
    DiskPart により、仮想ディスク ファイルは正常に拡張されました。
    
    DISKPART> detail vdisk
    
    デバイスの種類 ID: 0 (不明)
    ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
    状態: 追加済み
    仮想サイズ: 1000 GB
    物理サイズ: 1847 MB
    ファイル名: E:\wsl2\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 見つかりません。
    
    DISKPART> exit
    

2-6. Windows Terminalのインストール

2-7. Ubuntuの日本語化等の設定

  • パッケージ情報の更新
    sudo apt update && sudo apt upgrade
    
  • 日本語言語パックのインストール
    sudo apt -y install language-pack-ja
    
  • ロケールを日本語に設定
    sudo update-locale LANG=ja_JP.UTF8
    
  • ここでいったん終了してから、Ubuntuを再起動
    WindowsTwerminalから
    PS C:\Users\hp> wsl --shutdown
    
  • タイムゾーンをJSTに設定
    sudo dpkg-reconfigure tzdata
    
  • 日本語マニュアルのインストール
    sudo apt -y install manpages-ja manpages-ja-dev
    
以上