びぃえるくぅと。

ガラケーは打楽器。

Ubuntu の代わりに RHEL8 を WSL2 で使う

昨日以下のような記事を書いたのですが、その清書に加えて自分が行ったセットアップなどの詳細を追記したものになります。

yadex205.hatenablog.jp

背景

宗教上の理由で Debian 系が使えないので、なんとかして RHEL8 を WSL2 で使いたいと思い立ったのがきっかけです。

CentOS じゃなくって RHEL8 なのは、自分がたまたま Red Hat Enterprise Linux Workstation, Self-supportサブスクリプションを持ってるからですが、 最近だと条件によっては無償で利用できる(※1)ので、是非興味があれば試してみてください。

動作確認環境

事前準備

WSL2 の有効化と Ubuntu のインストール

RHEL8 の Docker イメージである redhat/ubi8 を操作するために、一時的に Ubuntu が必要となります。

# Powershell

# WSL2 を有効化し、Ubuntu をインストールします。
#(Windows 10 Version 2004 以降でこの方法が使えるそうです。※2)
wsl --install -d Ubuntu

Docker Desktop のインストールと設定の確認

Docker Desktop のインストールが完了した後、一度再起動することをおすすめします。

その後、下記の設定がなされていることを確認してください。

  • Settings > General > "Use the WSL 2 based engine" にチェックが入っている
  • Settings > Resources > WSL Integration > "Ubuntu" が有効化されている

RHEL8 を WSL2 に導入する

まず、WSL2 の Ubuntu 環境に入ります。

# Powershell

wsl -d Ubuntu

続いて、Docker を操作し RHEL8 コンテナのファイルシステムを TAR ファイルにまとめます。

# Ubuntu

# docker コマンドが使えることを確認します。
# もしエラーとなった場合は Docker Desktop を再起動することで治る可能性があります。
docker

# RHEL8 のコンテナを作成します。
docker run -t redhat/ubi8 bash ls /

# 作成されたコンテナのIDを取得し、変数 $dockerContainerID に代入します。
dockerContainerID=$(docker container ls -a | grep -i redhat/ubi8 | awk '{print $1}')

# TAR ファイルの置き場所を用意します。
mkdir /mnt/c/wslrhel8

# TAR ファイルを生成します。
docker export $dockerContainerID > /mnt/c/wslrhel8/rhel8_base.tar

ここで Ubuntu 環境を抜け、WindowsCUI 環境に戻り、RHEL8 を WSL2 で使えるようにします。

# Powershell

# ファイルシステムの置き場所を用意します。
mkdir C:\wslrhel8\filesystem

# 先ほど生成した RHEL8 ファイルシステムの TAR ファイルをインポートします。
wsl --import RHEL8 C:\wslrhel8\filesystem C:\wslrhel8\rhel8_base.tar

# RHEL8 環境に入れることを確認します。
wsl -d RHEL8

# (任意)wsl で `-d RHEL8` オプションをつけずに RHEL8 環境に入れるように、
# デフォルトのディストリビューションを設定します。
wsl -s RHEL8

これで WSL2 で RHEL8 を使うこと自体はできるようになりました。

導入した RHEL8(というか redhat/ubi8)を通常使用に耐えうるようセットアップする

redhat/ubi8 というイメージは(おそらく想定される使用目的からして)sudo すら含まれていません。

ですので、参考文献に記載されていたものに加え、個人的に最低限必要と思われた下記のセットアップを実施しています。

# RHEL8

# この時点で root でログインした状態になっています。

# まず `sudo` をインストールします。
dnf install -y sudo

# 次に、普段使いのユーザーを作成します。ここでは例として `bob` とします。
adduser -G wheel bob

# 追加したユーザー `bob` のパスワードを設定します。
passwd bob

# 次に `wsl` コマンドで RHEL8 環境に入った際に `bob` としてログインするよう、
# `/etc/wsl.conf` ファイルを編集します。
echo -e "[user]\ndefault=bob" >> /etc/wsl.conf

ここで RHEL8 環境を抜け、RHEL8 を再起動したあと再び環境に入ります。

# Powershell

# RHEL8 環境をいったん落とします。
wsl --terminate RHEL8

# もう一度 RHEL8 環境に入りなおします。
wsl -d RHEL8

ここで RHEL8 環境に入った際に bash のプロンプトが [bob@******] のようになっていれば成功です。 念のため、併せて sudo できることも確認してください。

次に、subscription-manager を使い、今動かしている RHEL8 環境と RedHat アカウントを紐づけます。 この時点で何らかのサブスクリプションを購入しているか、無償利用のための下準備を完了している必要があります。

# RHEL8

sudo subscription-manager register --auto-attach

最後に、ロケール関連の設定を行います(これをしないと tmux とかで日本語表示できなかった)。

# RHEL8

# 今回は `en_US.UTF-8` と `ja_JP.UTF-8` が使える状態にします。
sudo dnf install -y glibc-locale-source glibc-langpack-en glibc-langpack-ja
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

# あとは適宜 `.bash_profile` などで `LANG` 環境変数を設定してあげてください。

これでようやく(個人的には)通常利用できる状態になりました。

RHEL8 環境のスナップショットを撮る

このまま使い続けてもよいのですが、設定を間違えたなどで環境を一度再構築したくなった時に、上記の手順をもう一度やるのは手間です。

なので今回のような初期セットアップ直後や、節目節目でスナップショットを撮っておくことをおすすめします。

# Powershell

wsl --terminate RHEL8

wsl --export RHEL8 C:\wslrhel8\rhel8_initial_setup.tar

なおスナップショットから環境を復元する場合は下記の手順で可能です。

# Powershell

wsl --unregister RHEL8

wsl --import RHEL8 C:\wslrhel8\filesystem C:\wslrhel8\rhel8_initial_setup.tar

# (任意)RHEL8 をデフォルトのディストリビューションに再設定します。
wsl -s RHEL8

最後に

普通に CentOS のイメージを使うと楽だと思います。

注記

※1 https://www.publickey1.jp/blog/21/red_hat_enterprise_linux16okred_hat.html
※2 https://forest.watch.impress.co.jp/docs/news/1342078.html

参考文献

docs.microsoft.com

developers.redhat.com

Copyright © 2015 Yadex205