WSLでCentOS/Fedoraを利用する
WSLでUbuntuやOpen SUSEなどのディストリビューションを追加するには、Microsoft Storeからインストールすることができますが、 CentOSは2019/12現在、Storeで公開されていません。 (2020/06/04 更新) 有志によって公開されていますが有償のようです。
しかし、WSLでは自身でディストリビューションを追加することができます。
イメージ入手
WSLへディストリビューションを追加するためには、rootfsのイメージが必要となります。
今回はDockerなどのコンテナ用に用意されているrootfsイメージをダウンロードして利用します。
Windows上のPowershellで作業していきます。
CentOSのダウンロードWebサイトでは、コンテナイメージのLayerの中身だけを取り出したファイルが公開されているので、そちらをrootfsとして利用します。
ダウンロード・解凍
# ダウンロード
> curl.exe -O https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar.xz
# 既存のディストロを利用してxzファイルを解凍(`wsl.exe -e`= デフォルトのディストロ内でコマンドを実行)
> wsl.exe -e unxz CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar.xz
> Get-ChildItem CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar
Directory: C:\Users\Roy
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2020/06/04 11:32 256276480 CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar
FedoraのダウンロードWebサイトでは、コンテナ環境へロードできるイメージファイルが公開されているので、そちらからrootfsとなるデータを取り出して利用します。
ダウンロード・解凍
# ダウンロード
> curl.exe -O https://nrt.edge.kernel.org/fedora-buffet/fedora/linux/releases/32/Container/x86_64/images/Fedora-Container-Base-32-1.6.x86_64.tar.xz
# layer.tarのパスを取得(`wsl.exe -e`= デフォルトのディストロ内でコマンドを実行)
> $layer=(wsl.exe -e tar xf ./Fedora-Container-Base-32-1.6.x86_64.tar.xz manifest.json -O | ConvertFrom-Json).Layers
# 既存のディストロを利用してtar.xzファイルの中からlayer.tarを解凍
> wsl.exe -e tar xf ./Fedora-Container-Base-32-1.6.x86_64.tar.xz $layer
> Get-ChildItem $layer
Directory: C:\Users\Roy\d2b89e44ce52ccef64b35efd58302988a82469bf6c5cfeb1d6b3c7e7e0af6e07
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2020/04/23 7:31 207544320 layer.tar
2020/06/04 更新前の記事 (rawファイルを利用する場合)
面倒なことはイヤという方に
こちらで公開されているツールを利用しましょう。
yuk7/CentWSL - GitHub
rootfsの作成
WSLへディストリビューションを追加するためには、rootfsのイメージが必要となります。
今回はクラウド用に用意されているrootfsイメージをダウンロードして流用します。
ここからは、WSL上のUbuntuで作業していきます。
rootfs作成
# ダウンロード・解凍
> curl -O https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1907.raw.tar.gz
> tar xf CentOS-7-x86_64-GenericCloud.raw.tar.gz
# 「losetup -l」で空きLoopデバイスを確認して、rawファイルを割当て
> losetup -l
> sudo losetup --partscan /dev/loop0 CentOS-7-x86_64-GenericCloud-1907.raw
# マウント
> mkdir rootfs
> sudo mount /dev/loop0p1 rootfs
# tarボールにrootfsをアーカイブ
> tar cf centos7_rootfs.tar -C rootfs/ .
# 後片付け
> sudo umount rootfs
> sudo losetup -d /dev/loop0
# 作成したrootfsのtarファイルをWindows側に移動
> mv centos7_rootfs.tar /mnt/c/Users/user/.
rootfsのインポート
作成したrootfsをWSLへインポートします。 これは、Windows上のPowershellで作業していきます。
rootfsのインポート
# インストール先フォルダの作成
> New-Item $env:LOCALAPPDATA\wsl\CentOS\8.1.1911 -ItemType Directory
# rootfsのインポート
> wsl.exe --import CentOS $env:LOCALAPPDATA\wsl\CentOS\8.1.1911 .\CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar
# 確認
> wsl.exe -d CentOS grep PRETTY_NAME /etc/os-release
PRETTY_NAME="CentOS Linux 8 (Core)"
rootfsのインポート
# インストール先フォルダの作成
> New-Item $env:LOCALAPPDATA\wsl\Fedora\32-1.6 -ItemType Directory
# rootfsのインポート
> wsl.exe --import Fedora $env:LOCALAPPDATA\wsl\Fedora\32-1.6 .\d2b89e44ce52ccef64b35efd58302988a82469bf6c5cfeb1d6b3c7e7e0af6e07\layer.tar
# 確認
> wsl.exe -d Fedora grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Fedora 32 (Container Image)"
CentOS/Fedoraにログイン
任意のフォルダもしくはデスクトップを右クリックし、「新規作成」→「ショートカット」を選択し、 CentOS/Fedoraへログインするためのショートカットを作成します。
項目の場所 | C:\Windows\System32\wsl.exe -d CentOS | C:\Windows\System32\wsl.exe -d Fedora |
ショートカットの名前 | CentOS 8.1 | Fedora 32 |
作成したショートカットから起動します。
ユーザの作成とsudoの有効化
初期状態ではrootユーザしかないため、作業用ユーザを作成してsudoが利用できるようにします。 ここでは、作成するユーザ名は「roy
」としています。
ユーザ作成とsudoの有効化
# group作成
> groupadd -g 1000 roy
# ユーザ作成
> useradd -g 1000 -u 1000 roy
# wheelグループにユーザを追加
> usermod -G wheel roy
# royユーザにパスワードを設定
> passwd roy
# royユーザに切り替え
> su - roy
# sudoが利用出来るか確認
> sudo yum update
wslで使用するデフォルトユーザの変更
現在の設定ではCentOSを起動した時にはrootユーザでログインされるようになっています。
これを変更するにはWindows上のレジストリか、各ディストロの /etc/wsl.conf
に設定することで変更できます。
ここでは、レジストリでの設定方法を紹介します。
- レジストリエディタを開き、
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
を開きます。 - その下にあるキー(フォルダ)の中から、
DistributionName
の値が「CentOS
」になっているものを探します。 - 同じキー(フォルダ)内にある
DefaultUid
の値を「0」から「1000(10進数)」に変更します。 - レジストリエディタを閉じます。
その後、先ほど作成したショートカットからCentOSを起動すると先ほど作成したユーザroy
でログインされていることが確認できます。
アイコンを変更したい
CentOS/FedoraのWebサイトからロゴイメージなどを入手して、ショートカットの「プロパティ」→「アイコンの変更」でダウンロードしたアイコンを割り当てるなどしてください。
インポートしたディストロを削除したい
ディストロを削除するには、WSLへの登録を解除した後に、インポートしたフォルダを削除します。
ディストリビューション削除
# wslから登録解除
> wsl.exe --unregister CentOS
> wsl.exe --unregister Fedora
# ファイルシステムが保存されているインポート先フォルダを削除
> Remove-Item -Recurse $env:LOCALAPPDATA\wsl\CentOS\8.1.1911\
> Remove-Item -Recurse $env:LOCALAPPDATA\wsl\Fedora\32-1.6\
# 手動でインポートしたディストロ全てを削除する場合
> Remove-Item -Recurse $env:LOCALAPPDATA\wsl\
2020/06/04 更新前の記事 (クラウド・コンテナ用イメージが公開されていない場合)
CentOS8を使いたい => yumコマンドでrootfsを作成
2019/12/08時点ではCentOS8のクラウド用イメージが公開されていないため、RPMパッケージから作成します。 CentOS7へログインし、CentOS8のrootfsを作成していきます。
rootfs作成
# CentOS8のリポジトリ設定ファイルを作成
> cat << _END_ > ./centos8.repo
[centos8-base]
name=CentOS-8-Base
baseurl=http://mirror.centos.org/centos/8/BaseOS/x86_64/os/
gpgcheck=0
_END_
# rootfsを作成
> mkdir rootfs
> sudo yum -y -c centos.repo --installroot=$PWD/rootfs \
--disablerepo="*" --enablerepo="centos8-base" groupinstall "Minimal Install"
# tarボールにrootfsをアーカイブ
> tar cf centos8_rootfs.tar -C rootfs/ .
# 作成したrootfsのtarファイルをWindows側に移動
> mv centos8_rootfs.tar /mnt/c/Users/user/.
以降は、CentOS7と同様にインポートするとCentOS8環境が利用できるようになります。