CentOS StreamをWSL 2で動かしてみる

2020年12月22日CentOS,Linux,WSL

こんにちは。プラットフォーム技術部の佐藤です。

2020年12月8日、CentOSからCentOS Project shifts focus to CentOS Stream – Blog.CentOS.orgとの発表がありました。CentOS 8.3といったRed Hat Enterprise Linuxの再構築版ではなく、Red Hat Enterprise Linuxの開発版であるCentOS Streamに注力するということになります。

CentOS Streamは特定のマイナーバージョンを持たないローリング・リリースのようなものですので、今後CentOSを使ったシステム構築に波紋を投げかけそうです。

CentOS Stream—which will provide a “rolling preview” of future Red Hat Enterprise Linux kernels and features.

Changes to CentOS: What CentOS Stream means for developers – Red Hat Developer

とは言いましてもCentOS自体の利用は続くと思われますので、今回はWindows 10のWSL 2でCentOS Streamを動かす方法をご紹介したいと思います。

CentOS 8もCentOS Streamも公式なWSL配布物は提供されていません。有志が作成して配布しているものもありますが、今回は公式リポジトリにコミットされているCentOS 8のDockerアーカイブファイルからベースのWSL環境を作成後、Streamに切り替える手順で構築していきます。

前半のWSL環境作成はメーリングリストに投稿された以下の手順を参考にしています。
[CentOS] how to run CentOS 8.2 under new WSL2?

WSL 2環境の準備

今回の手順ではWSL 2を使用します。Windows 10にWSL 2実行環境は導入済みであることを前提とします。

WSLのデフォルトバージョンを2に変更します。

PS C:\Users\ksato> wsl.exe --set-default-version 2

CentOS 8WSL環境作成

CentOS 8のDockerアーカイブファイルを以下からダウンロードします。
https://github.com/CentOS/sig-cloud-instance-images/blob/CentOS-8-x86_64/docker/centos-8-x86_64.tar.xz

ダウンロードしたファイルはxz圧縮されていますので7-zip等で解凍してください。

配置先のディレクトリを作成し(今回はC:\distros)、先ほどのアーカイブをインポートします。

PS C:\Users\ksato> mkdir C:\distros
PS C:\Users\ksato> wsl.exe --import CentOS c:\distros\CentOS .\centos-8-x86_64.tar
PS C:\Users\ksato> wsl.exe -l -v
NAME     STATE   VERSION
  CentOS Stopped 2
PS C:\Users\ksato>

CentOS Streamへの切り替え

CentOS WSLを起動して追加パッケージでsudoをインストールします。

その後CentOS Streamに切り替えます。手順は公式ページに記載されています。

PS C:\Users\ksato> wsl.exe -d CentOS
[root@WIN10 ksato]# dnf install sudo
[root@WIN10 ksato]# dnf install centos-release-stream
[root@WIN10 ksato]# dnf swap centos-{linux,stream}-repos
[root@WIN10 ksato]# dnf distro-sync
[root@WIN10 ksato]# cat /etc/centos-release
CentOS Stream release 8
[root@WIN10 ksato]#

デフォルトユーザーを一般ユーザーに変更

一般ユーザーを登録しパスワードを変更します。以下の例では一般ユーザー名をksatoとしています。 wheelグループに含めているのはsudoを許可するためです。

[root@WIN10 ksato]# user=ksato
[root@WIN10 ksato]# useradd -G wheel -u 1000 $user
[root@WIN10 ksato]# passwd $user

CentOS WSLのデフォルトユーザーを登録した一般ユーザーに変更します。

PS C:\Users\ksato> Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq CentOS | Set-ItemProperty -Name DefaultUid -Value 1000

CentOS WSLを起動すると登録した一般ユーザーで開始されるようになります。

PS C:\Users\ksato> wsl.exe -d CentOS
[ksato@WIN10 ksato]$ sudo cat /etc/shadow

なお、WSLのデフォルトユーザーを変更するPowerShellコマンドはFedoraの記事を参考にしています。Fedoraも公式のWSLは提供されていませんが、同様の方法でWSL環境を構築できますので参考にしてください。
Using Fedora 33 with Microsoft’s WSL2 – Fedora Magazine

最後に

WSL 2になってよかったと思うところはWindowsのファイルシステム上ではなく仮想ディスクのext4ファイルシステム上にファイルシステムが構築されるようになったことです。先ほどインポートしたC:\distros\CentOS以下を確認すると仮想ディスクのイメージが配置されているのがわかります。速度が向上しWindowsの制約からも解放されました。

今まではLinuxカーネルのソースコードをWindowsファイルシステム上にチェックアウトするとaux.hなど一部のファイルが作成できませんでした。WSL 1もWindowsファイルシステム上にrootfsが配置されるので同様です。

こちらの「Naming Files, Paths, and Namespaces – Win32 apps | Microsoft Docs」にも記載されている予約名に抵触するためですが、仮想ディスクのext4上に構築されることで、こちらの呪縛からも逃れることができるようになります。

まぁWindows上でLinuxカーネルのソースコードを眺めようなどという方は少ないかと思いますが。

  • 株式会社アークシステムの来訪管理・会議室予約システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix