labunix's blog

labunixのラボUnix

Windows11でwsl2(Ubuntu)を使ってみる

■Windows11でwsl2(Ubuntu)を使ってみる
 Home版が乗る程度のしょぼいスペックなので、HW情報は省略。

>systeminfo | find "Windows 11"
OS 名:                  Microsoft Windows 11 Home

■基本的なやり方は以下の通り

 https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands

■ターミナル(管理者)で作業する
 今回はデフォルトのUbuntu

>wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME               FRIENDLY NAME
Ubuntu             Ubuntu
Debian             Debian GNU/Linux
kali-linux         Kali Linux Rolling
SLES-12            SUSE Linux Enterprise Server v12
SLES-15            SUSE Linux Enterprise Server v15
Ubuntu-18.04       Ubuntu 18.04 LTS
Ubuntu-20.04       Ubuntu 20.04 LTS
Ubuntu-22.04       Ubuntu 22.04 LTS
OracleLinux_8_5    Oracle Linux 8.5
OracleLinux_7_9    Oracle Linux 7.9

>wsl --install

■インストールが完了したら、システムの再起動、アプリとして名前を選択して起動する。

>wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Running         2

■localeはUTF-8。

>wsl locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

■wslの出力結果はUTF-16のBOMなし、リトルエンディアン。
 UTF-8じゃないんだーというのは置いといて、オプションは「--help」で確認する。

 ※「chcp 850」でUTF-16LE用にして、結果をどうこうしようという使い方には向いていない。
  「Select-String」、「find/findstr」、「wsl grep」などいずれも。

>wsl --help > wsl_help.txt

■リモートの「ja_JP.UTF-8」なLinuxで見ると、

$ nkf -W16L -w80 wsl_help.txt | grep "\-\-version"
    --version、-v
            --version <Version>

■先頭に「fe ff」が無いのでBOMなし。
 「Copyright」の「Co」が見える。

$ dd if=wsl_help.txt bs=3 count=1 | hexdump -C
1+0 レコード入力
1+0 レコード出力
3 bytes copied, 5.3683e-05 s, 55.9 kB/s
00000000  43 00 6f                                          |C.o|
00000003

■ちなみにBOMをつけると先頭に「fe ff」がこう見える。
 「Copyright」の「Co」が見える。

$ nkf -W16L -w16lb wsl_help.txt | dd if=/dev/stdin bs=8 count=1 | hexdump -C
1+0 レコード入力
1+0 レコード出力
00000000  fe ff 00 43 00 00 00 6f                           |...C...o|
8 bytes copied, 0.000673017 s, 11.9 kB/s00000008


■WSL内のUbuntuを使うにはこうすればなんとかなる。
 UTF-16LEのBOMなしをSJISに変換して出力したものを「wsl grep」で処理する。
 「Select-String」「find」も一応これで使えるが、
 「findstr」だと化けるパターンがあったので、常に意図した結果が得られるかのテストが必要。

$ sudo apt-get install -y nkf

>wsl --help | wsl nkf -W16L -s | find "--version"
    --version、-v
            --version <Version>

■既定のWSL2。WSL1は使わない。

>wsl --status
既定のディストリビューション: Ubuntu
既定のバージョン: 2
WSL1 は、現在のマシン構成ではサポートされていません。
WSL1 を使用するには、"Linux 用 Windows サブシステム" オプション コンポーネントを有効にしてください。

■Ubuntuの日本語化

sudo apt-get update
sudo apt upgrade
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8

■wslからUbuntuを再起動

>wsl -t Ubuntu
この操作を正しく終了しました。

■再びアプリとしてのUbuntuを開く

$ locale
LANG=ja_JP.UTF8
LANGUAGE=
LC_CTYPE="ja_JP.UTF8"
LC_NUMERIC="ja_JP.UTF8"
LC_TIME="ja_JP.UTF8"
LC_COLLATE="ja_JP.UTF8"
LC_MONETARY="ja_JP.UTF8"
LC_MESSAGES="ja_JP.UTF8"
LC_PAPER="ja_JP.UTF8"
LC_NAME="ja_JP.UTF8"
LC_ADDRESS="ja_JP.UTF8"
LC_TELEPHONE="ja_JP.UTF8"
LC_MEASUREMENT="ja_JP.UTF8"
LC_IDENTIFICATION="ja_JP.UTF8"
LC_ALL=

$ sudo dpkg-reconfigure tzdata;sudo apt -y install manpages-ja manpages-ja-dev

$ date
2023129日 日曜日 23:41:15 JST

$ man ls | head -5
LS(1)                                              ユーザーコマンド                                             LS(1)

名前
       ls - ディレクトリの内容をリスト表示する



■ネットワーク
 Ubuntu内のサブネットは/20。
 Hyper-Vでも使われる仮想スイッチのWSL用。
 仮想ブリッジを使用して、仮想ブリッジ以下のDHCPで割り振られたIPアドレスが使用されている。
 基本的に外に出ていくためのものなので、サービス提供等は別に設定する必要がある。

$ ip a show dev eth0 | awk '/inet/&&!/inet6/'
    inet XXX.XXX.128.183/20 brd XXX.XXX.143.255 scope global eth0

$ ip route | awk '/via/'
default via XXX.XXX.128.1 dev eth0 proto kernel

>ipconfig /all
~省略~
イーサネット アダプター vEthernet (WSL):

   接続固有の DNS サフィックス . . . . .:
   説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter
   物理アドレス. . . . . . . . . . . . .: 00-15-XX-XX-XX-XX
   DHCP 有効 . . . . . . . . . . . . . .: いいえ
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::XXXX:XXXX:XXXX%33(優先)
   IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.128.1(優先)
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   デフォルト ゲートウェイ . . . . . . .:
   DHCPv6 IAID . . . . . . . . . . . . .: 55XXXXXX7
   DHCPv6 クライアント DUID. . . . . . .: 00-01-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX
   NetBIOS over TCP/IP . . . . . . . . .: 有効