WSLによる開発基本環境の構築
このページに関する目次
BIOSの設定変更
Windows11に必要な設定
- メモリをオーバークロックで動作させる設定を行う。
Over Clock Tunerを XMP にすると同時にメモリの動作クロック数を適切な値(ここでは2666MHz)に設定する。
- TPM を有効(PPT)にする。
これはWindows11をインストールするために必要な設定となる。
WSLに必要な設定
- WSLを動作させるには、Intel Virtualization Technology を「有効」にしておく必要がある。
WSLによるlinux(Ubuntu-22.04 LTS)のインストール
- 現在導入可能なディストリビューションを表示以下のコマンドを投入する
> wsl --list --online
- 現在導入可能なディストリビューションを導入以下のコマンドを投入する
> wsl --install Ubuntu-22.04
Ubuntuのターミナル画面が表示され、インストールが進行すると最後に規定ユーザーの username と password を求められる。ここで入力するユーザーがUbuntuを利用する上での基本アカウントとなる。
- 現在の導入環境を確認するコマンド以下のコマンドを投入する
> wsl -l -v
- WSL をシャットダウンする以下のコマンドを投入する
> wsl --shutdown
WSLの環境設定
環境設定用ファイルを修正する。修正した内容はWSLを再起動後に反映する。
$sudo vi /etc/wsl.conf
- 既定の操作ユーザーを設定する
[user] default=tts;
インストレーション時に選択したユーザーは自動的には設定されない。よってこれを設定しておかないと環境復元時に既定ユーザーがrootになってしまうため、この設定は必須である。 - WindowsとLinuxの相互運用性を設定するWindowsのコマンドはUbuntuサイドで敢えて使えないようにする。
[interop] enabled = false appendWindowsPath = false
以下のように cmd.exe を起動できなくなる
$ cmd.exe cmd.exe: コマンドが見つかりません
- ホスト名を変更する
[network] hostname=dev.ipadtaxi.jp generateResolvConf = false
generateResolvConf = false は WSLが起動する際に /etc/resolv.conf を自動書換するのを禁止するための設定である。そして /etc/resolv.conf にはホスト名解決のためのネームサーバーをgoogle DNS(8.8.8.8) に固定することにより名称解決に関する諸問題を回避している。複数の開発機を使用するために dev.ipadtaxi.jp 自体のIPアドレスはDNSではなく、開発機毎に hosts により管理することにした。hostsはWSL側とWin32側の双方に登録する必要がある(2023-08-11追記)[/etc/resolv.conf]
nameserver 8.8.8.8
- IPアドレスを調査する
eth0: に割り当てられているIPアドレスを調べる。$ ip a ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:bf:7a:de brd ff:ff:ff:ff:ff:ff inet 172.28.249.132/20 brd 172.28.255.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::215:5dff:febf:7ade/64 scope link valid_lft forever preferred_lft forever
以下に示す値が割り当てられているIPアドレスである。
inet 172.28.249.132/20 brd 172.28.255.255 scope global eth0 - IPアドレスを hosts に登録する
$ sudo vi /etc/hosts
[/etc/hosts]
172.28.249.132 dev.ipadtaxi.jp
- rootユーザーのパスワードを設定するWin32側からUbuntuを起動するとUbuntuのターミナル画面が表示される
引き続き、以下のコマンドを投入する$ sudo su - # passwd Enter new UNIX password: xxxxxxxx Retype new UNIX password: xxxxxxxx passwd: password updated successfully
これで su コマンドを使用可能となる - 日本語環境を設定する以下のコマンドを投入し、日付ロケールを「Asia/Tokyo」で設定する
$ sudo dpkg-reconfigure tzdata
引き続き以下のコマンドを投入する
$ sudo apt install locales $ sudo apt install language-pack-ja $ sudo update-locale LANG=ja_JP.UTF-8
- 最新版へのアップデートを実行する
以下のコマンドを投入する$ sudo apt update && sudo apt upgrade
ホストOS(Windows)の環境設定
wslconfigの変更
ユーザーディレクトリ上の設定ファイル .wslconfig を適宜変更することによりWSLの動作ポリシーの変更を行う。
これらの変更はWSLの再起動後に有効となる。
> notepad c:\users\[Windowsアカウント名]\.wsconfig
- localhostを有効にする
通常 localhost は自分自身を指す特殊なホスト名であるが、Win32からみてこれをWSL上の仮想サーバーに割当したい場合は以下のエントリを追加する必要がある。[wsl2] localhostForwarding = true
仮想ホストのIPアドレスを使うならばこの設定は不要(falseで良い)である。この設定を加えてもWin32側からはループバックアドレス 127.0.0.1 はWSL側ではなく、Win32側のリスナーを指す点に注意が必要となる。外部サービスからコールバックを受ける場合にホスト名にlocalhostを使おうとすると問題になることがありうるだろう。 - アイドリング対策を行う
既定ではWSL関係のターミナルを全て閉じてから約6秒(60,000ミリ秒)で自動的にWSLがシャットダウンされてしまう。これを1時間(3600秒)に拡張するには以下のエントリを追加する必要がある。[wsl2] vmIdleTimeout = 3600000
バックグラウンド処理されているサーバープロセス(例えばapacheやmysql)の起動を維持するためには最低限1つ以上のターミナルを起動しておく必要がある。これは最低1つ以上のWSLターミナルウィンドウが残されていれば(最小化されていても)良い。全てのターミナルウィンドウを閉じてしまうと、上記の秒数が経過した場合に自動的にシャットダウンされる点に注意する必要がある。
ホスト名の登録
WSL側のIPアドレスを hosts ファイルに登録する
> notepad c:\windows\system32\drivers\etc\hosts
[c:\windows\system32\drivers\etc\hosts]
172.28.249.132 dev.ipadtaxi.jp
シェルのチューニング
- lsコマンドで表示される日付表記を変更する~/.bashrc の該当行を修正
[~/.bashrc]alias ls='ls --color=auto --time-style="+%Y-%m-%d %H:%M"'
- (その他のチューニング事項があればここに追記します)
ファイルシステムへのアクセス
Win32からWSLを参照する場合
以下の書式でパスを記載することでアクセスできる
\\wsl.localhost\[ディストリビューション名]\
(実際にWSLのルートディレクトリを参照した例)
substコマンドを使って仮想ドライブとして割り当てすると使いやすくなる
> subst L: \\wsl.localhost\ubuntu-22.04\ > L: > cd /home/tts
net useコマンドでも同様の割り当てが可能
> net use M: \\wsl.localhost\ubuntu-22.04 > M: > cd /home/tts
SUBSTで割り当てた仮想ドライブは、Windowsをログオフまたは再起動すると、割り当てが解除される。また、NET USEで割り当てた仮想ドライブは、Windowsをログオフまたは再起動しても、割り当てが維持される。
WSLからWin32を参照する場合
以下の書式でパスを記載することでアクセスできる
/mnt/[ドライブレター]/
WSLからみたWin32のディスクは /etc/wsl.conf で登録された既定ログインユーザーの所有物として扱われる。また、ファイルのパーミッションは既定では全て777(rwxrwxrwx)になってしまう。
これらの問題を訂正するために /etc/wsl.conf に以下の設定を加え、WSLを再起動する。
Windowsファイルシステムをマウントする際のumaskを変更し、ユーザー/グループを www-data(33) に変更する例
[automount] enabled = true root = /mnt/ options = "uid=33,gid=33,metadata,umask=22,fmask=11" mountFsTab = true
(実際にWindows11のCドライブを参照した例)
導入済環境のバックアップとリストア
- 現在の導入環境をバックアップする現在の導入環境を U:\backup\ubuntu_22.04_20230726.tar にアーカイブする例
WSLをシャットダウンし、システムが稼働していないことを確認してから環境全体をアーカイブする> wsl --shutdown > wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 > wsl --export Ubuntu-22.04 U:\backup\ubuntu_22.04_20230726.tar
- アーカイブを使って導入環境をリストアする現在の導入環境を一旦削除し、アーカイブを使ってリストアする例
WSLをシャットダウンし、システムが稼働していないことを確認してから環境全体を消去したうえで既存のアーカイブを使って環境をリストアする> wsl --shutdown > wsl --unregister Ubuntu-22.04 > wsl --import Ubuntu-22.04 U:\wsl U:\backup\ubuntu_22.04_20230726.tar