WSL2 + CentOS Stream 8 で快適なローカルLinux環境を作る
はじめに
2020/12/8 に、CentOS 8 は 2021年12月末でサポート終了、全面的に CentOS Stream に移行するという衝撃の発表 があった。経緯や状況は他の記事やblogにお任せして、自分の環境は CentOS Stream に切り替えることにした。
この blog は WSL2 環境に CentOS 8 を導入した投稿 の焼き直しである。前振りは省略して新規構築手順だけ記載する。
構築目標
- 軽量でさっと立ち上がる Windows 10 PC 内での CentOS Stream 8 Linux 環境
- 快適なターミナル環境
前提
- Windows 10 October 2020 Update (Version 20H2) にアップグレード済みのPC (Home Edition でも可)
- BIOS で CPU 仮想マシン支援機能 (Intel VT / AMD-V) を有効化
- Windows Terminal 1.4 正式版インストール済み
- Windows Terminal には 白源 (HackGen) フォントがおすすめ。美しい等幅フォントは心の平安をもたらす。
- zip, gzip を解凍できるツール
- 7-Zip ZS がコマンド1つで unzip や gunzip に対応しているのでおすすめ
- (推奨) Visual Studio Code WSL関連のあらゆるファイル編集に
- 多少の不具合でも折れない心と解決への努力
導入手順
WSL2 の有効化
PowerShell (管理者) から以下を実行する。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Windows 再起動で有効化される。
WSL2 カーネルの更新
WSL2 Linux カーネル更新プログラム をダウンロードしてインストール
wsl_update_x64.msi
※2020/12/28 にダウンロードしたところ、2020/6/24 のダウンロードとはサイズが異なっていた。MSI ファイルのプロパティによると、現在の最新版は 2020/8/14 バージョンらしい。
WSL用 CentOS Stream 8 パッケージをダウンロード
GitHub mishamosher/CentOS-WSL レポジトリ から CentOS8-stream.zip ファイルをダウンロードする。
本記事の時点で “CentOS 8-stream-20201019” バージョン。あくまで有志の作成なので、理解した上で導入すること。
※2020年6月の時点でお世話になったレポジトリ は既に Discontinued になっていた。
ファイルの展開
CentOS8-stream.zip をダウンロードしたフォルダ内で中身を展開する。
7za x CentOS8-stream.zip rootfs.tar.gz
7za x rootfs.tar.gz # -> rootfs.tar ができる
del rootfs.tar.gz # 展開前のファイルは削除
CentOS Stream 8 を WSL2 ディストリビューションに登録
個人ユーザーのフォルダにインストールするには、下記を PowerShell から実行。
#配置先フォルダ作成
mkdir ${env:LOCALAPPDATA}\Packages\CentOSStream8
#WSL2にインポート
wsl --import "CentOS Stream 8" ${env:LOCALAPPDATA}\Packages\CentOSStream8 rootfs.tar --version 2
WSL2 としてディストリビューションに登録されているか確認
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream8 Stopped 2
起動
登録したディストリビューションを起動する
wsl -d CentOSStream8
数秒後に bash プロンプトが出る
PS C:\> wsl -d CentOSStream8
[root@WindowsPCName c]#
Ctrl-D でプロンプトを抜けて wsl のステータスを見ると、ディストリビューションプロセスは生きたまま。
[root@WindowsPCName c]# logout
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream8 Running 2
プロセスを停止するには:
wsl -t CentOSStream8
確認してみる。
PS C:\> wsl -l -v
NAME STATE VERSION
* CentOSStream8 Stopped 2
Windows Terminal からの利用
Windows Terminal は WSL にネイティブ対応しているので、上記のディストリビューション登録後には CentOSStream8 というメニューが自動的に現れる。Windows Terminal の設定ファイルにも自動的に追加されているのがわかる。
WSL から起動した Linux プロセスは「ログインシェル」ではないため、.bashrc などの初期化ファイルを読んでくれないという問題がある。普通の CentOS では使用できるはずの ll (ls -l –color) 等の alias が未定義になってしまう。この問題は起動オプションに bash を指定すれば解決する。
Windows Terminal の「設定」で settings.json ファイルを開いて、CentOS8 の設定を修正する。
"profiles": {
"list": [
{
"guid": "XXXXXXXXXX", //元のファイルのまま
"hidden": false,
"name": "CentOS Stream 8",
// "source": "Windows.Terminal.Wsl",
"commandline": "wsl.exe -d CentOSStream8 bash -l", // bashを指定
"startingDirectory": "//wsl$/CentOSStream8/root" //起動フォルダ指定
},
]
}
Windows Terminal は PowerShell がデフォルトになっている。変更も可能だが、wt.exe の起動オプションで直接エントリを指定することができる。“CentOS Stream 8” という名前のショートカットを新規作成し、下記を指定すればよい。
wt.exe -p "CentOSStream8"
WSL2/CentOS8 の追加設定
上記の手順ではミニマムの環境しか入っていないため、必要なパッケージを追加する。
#先にmanを入れないとman pageが出ないことがある
dnf install -y man man-pages
#アップデート
dnf update -y
#不足パッケージを導入
dnf install -y bash-completion net-tools which zip unzip bzip2 openssh-clients telnet python3 perl coreutils-common
#man pages 追加インストールのため
dnf reinstall -y bash util-linux
#エディタはお好みで
dnf install -y vim-enhanced
#EPEL レポジトリの追加
dnf install -y epel-release
#もろもろツール
dnf install -y htop whois bind-utils wireshark-cli tcpdump traceroute nc dhcping httping fping
systemd 対応
WSL2 では原理的に systemd 対応不可のため、代替パッケージを入れる。
dnf install -y python2
ln -s /usr/bin/python2 /usr/bin/python
cd /tmp
curl -O https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py
mv /usr/bin/systemctl /usr/bin/systemctl.old
cp -a systemctl.py /usr/bin/systemctl
chmod +x /usr/bin/systemctl
自動起動はできないが、systemd 用の起動スクリプトにより手動でサービスを上げることはできるようになる。 例)nginx を起動
systemctl start nginx
WSL / CentOS Stream 8 での注意点まとめ
- who / w コマンドでユーザが誰もログインしていないように見える。
- シャットダウンという概念がない(?) ため、完全に終了するには wsl –shutdown 等のコマンドが必要。
- Windows フォルダは /mnt/c 等にマウントされている。
参考
- WSL2 と Windows Terminal (2019-06-26)
- wsl2上で無料でCentOS8を動かそう (2020-02-09)
- WSL2 入れてみた (2020-03-30)
Visual Studio Code から Remote-WSL 経由でアクセス - PowerShellとLinuxシェルをタブ切り替え可能になる「Windows Terminal」を試用する (2019-07-12)
- 「WSL 2」へのバージョンアップでLinux互換環境はどう変わるのか? (2019-06-28)
- 前バージョンから大幅に性能向上した新Linux環境「WSL 2」の実力を探る (2020-05-15)
- ついに完成「Windows Terminal」の機能と使い方まとめ (2020-05-28)
- Windows ターミナルとは (Microsoft) (2020-05-19)