Ubuntu の代わりに RHEL8 を WSL2 で使う
昨日以下のような記事を書いたのですが、その清書に加えて自分が行ったセットアップなどの詳細を追記したものになります。
背景
宗教上の理由で Debian 系が使えないので、なんとかして RHEL8 を WSL2 で使いたいと思い立ったのがきっかけです。
CentOS じゃなくって RHEL8 なのは、自分がたまたま Red Hat Enterprise Linux Workstation, Self-support
のサブスクリプションを持ってるからですが、
最近だと条件によっては無償で利用できる(※1)ので、是非興味があれば試してみてください。
動作確認環境
- Windows 11 Pro (Build 22000, Version 21H2)
- Powershell 7.2.2
- AMD Ryzen 9 3900X
事前準備
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 環境を抜け、Windows の CUI 環境に戻り、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