WSL2 + CentOS Stream 9 で快適なローカルLinux環境を作る - systemd 対応版
はじめに
この記事は WSL2 環境に CentOS Stream 9 を導入した投稿 の更新である。WSL2が2022年11月にsystemdに対応したため、その他前回の状況からの変更手順を見直している。
構築目標
- 軽量でさっと立ち上がる Windows 11 PC 内での CentOS Stream 9 Linux 環境
- 快適なターミナル環境
前提
- Windows 11 (Version 22H2) にアップグレード済みのPC (Home Edition でも可)
- BIOS で CPU 仮想マシン支援機能 (Intel VT / AMD-V) を有効化
- Windows Terminal 環境
- Windows Terminal には 白源 (HackGen) ( ダウンロード ) フォントがおすすめ。美しい等幅フォントは心の平安をもたらす。
- zip, gzip を解凍できるツール
- 7-Zip ZS がコマンド1つで unzip や gunzip に対応しているのでおすすめ
- (推奨) Visual Studio Code WSL関連のあらゆるファイル編集に
- 多少の不具合でも折れない心と解決への努力
導入手順
WSL2 の有効化
PowerShell 5 (管理者) から以下を実行する。PowerShell 7 では失敗するので OS 標準の PowerShell 5 で実行すること。
Hyper-V パッケージの導入準備 (Windows 11 Home Edition のみ)
Windows 11 Home では Hyper-V 関連のパッケージが隠されているため、これを可視化する。
PowerShell 5 (管理者) から以下を実行。
Get-ChildItem $Env:SystemRoot\servicing\Packages\*Hyper-V*.mum |
Foreach-Object {
dism.exe /online /norestart /add-package:"$($_.VersionInfo.FileName)"
}
WSL 用の機能をインストールする
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Windows 再起動
WSL2 カーネルの更新
WSL2 Linux カーネル更新プログラム からダウンロードしてインストール
wsl_update_x64.msi
2023/01/29 にダウンロードしたところ、ファイルのプロパティによると、現在の最新版は 2021/4/14 らしい。
WSL用 CentOS Stream 9 パッケージをダウンロード
GitHub mishamosher/CentOS-WSL レポジトリ から CentOS9-stream.zip ファイルをダウンロードする。
2023/01/29の時点で “CentOS 9-stream-20220718” バージョン。あくまで有志の作成なので、理解した上で導入すること。
ファイルの展開
CentOS9-stream.zip をダウンロードしたフォルダ内で中身を展開する。
7za x CentOS9-stream.zip rootfs.tar.gz
7za x rootfs.tar.gz # -> rootfs.tar ができる
del rootfs.tar.gz # 展開前のファイルは削除
CentOS Stream 9 を WSL2 ディストリビューションに登録
個人ユーザーのフォルダにインストールするには、下記を PowerShell から実行。
#配置先フォルダ作成
mkdir ${env:LOCALAPPDATA}\Packages\centstr9
#WSL2にインポート
wsl --import "CentOSStream9" ${env:LOCALAPPDATA}\Packages\centstr9 rootfs.tar --version 2
WSL2 としてディストリビューションに登録されているか確認
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream9 Stopped 2
起動
登録したディストリビューションを起動する
wsl -d CentOSStream9
数秒後に bash プロンプトが出る
PS C:\> wsl -d CentOSStream9
[root@WindowsPCName c]#
Ctrl-D で bash プロンプトを抜けて wsl のステータスを見ると、ディストリビューションプロセスは生きたまま。
[root@WindowsPCName c]# logout
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream9 Running 2
WSLプロセスをすべて停止するには:
wsl --shutdown
確認してみる。
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream9 Stopped 2
WSL 自体の更新
wsl --update
WSLバージョンの確認 (2023-01-29 時点)
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
MSRDC バージョン: 1.2.3575
Direct3D バージョン: 1.606.4
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windowsバージョン: 10.0.22621.1105
WSL のメモリ使用制限
WSLはデフォルトでPC本体の最大メモリの半分までを割り当ててしまう。32GB搭載マシンなら16GBをWSLに割り当てる。
これを制限するには下記の設定を Windows PowerShell 側で行っておく。WSLを再起動後に有効になる。
@'
[wsl2]
memory=4GB
swap=0
'@ > ${Env:USERPROFILE}/.wslconfig
systemd の有効化
systemd を有効化するため、WSL CentOSを起動し、bash プロンプトで下記を貼り付ける。
cat <<'__EOT__' > /etc/wsl.conf
[boot]
systemd=true
__EOT__
Ctrl-D で bash プロンプトを抜けて WSL を一旦停止する。
wsl --shutdown
Windows Terminal からの利用
Windows Terminal は WSL にネイティブ対応しているので、上記のディストリビューション登録後、Windows Terminal 再起動後には CentOSStream9 というメニューが自動的に現れる。Windows Terminal の設定ファイルにも自動的に追加されているのがわかる。
Windows Terminal のメニューから起動してみると、数秒後に bash プロンプトが現れる。
[root@WindowsPCName c]#
以前の記事では bash が初期化スクリプトを読んでくれないという問題があったため特殊設定を行う必要があったが、systemd を有効にすることでこの問題は解消した。
CentOS Stream 9 の追加設定
上記の手順ではミニマムの環境しか入っていないため、必要なパッケージを追加する。
#アップデート
dnf update -y
#不足パッケージを導入
dnf install -y bash-completion net-tools zip unzip openssh-clients telnet perl
#エディタはお好みで
dnf install -y vim-enhanced
#EPEL レポジトリの追加
dnf config-manager --set-enabled crb
dnf install -y \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm
#もろもろツール
dnf install -y htop whois bind-utils wireshark-cli tcpdump traceroute nc dhcping fping
WSL / CentOS Stream 9 での注意点まとめ
- who / w コマンドでユーザが誰もログインしていないように見える。
- シャットダウンという概念がない(?) ため、完全に終了するには wsl –shutdown 等のコマンドが必要。
- Windows フォルダは /mnt/c 等にマウントされている。