⚙️

Rocky LinuxをWSL2で動かしてみる

2021/06/30に公開

Rocky Linux は、 Red Hat Enterprise Linux (RHEL)と互換性を持つLinuxディストリビューションです。21年6月21日にバージョン8.4が一般向けにリリースされました。
WSL2はWindowsでLinuxを動作させるための仕組みです。

本稿では、すでにWindows PC上でWSL2が動作し、Ubuntuがインストールされている環境があることを前提とします。WSL2が使えるようにする手順については、以下のリンクをご参照ください。

LinuxとWindowsの欲張りな環境を手にする

本稿では、WSL2のUbuntuを使ってRocky Linuxのファイルシステムを構成します。そのファイルシステムをWindows側に渡して、新たなWSLとしてインポートすることによって、Rocky Linuxを動作させる方法を試してみます。

注意事項

ここで紹介する構築方法特有の不具合と思われる現象が発生する可能性があります。
確実にRocky Linuxを動作させたいのであれば、ISOファイルをダウンロードして通常の手順でインストールすることをお勧めします。

参考URL

Rocky Linuxの公式ページが非常に参考になりました。
https://docs.rockylinux.org/jp/1._Guides/rocky_to_wsl_howto/

自身のブログから転載しました。
Rocky LinuxをWSL2で動かしてみる

WSL2のUbuntuでRocky Linuxイメージを作成する

本稿では、すでにWSL2が構成されていてUbuntuにログインできる準備が整っていることが前提です。
Ubuntuを起動してログインします。

「rinse」のインストールと設定

rinseとは、RPM系のディストリビューションを作成するためのperlで作成されたツールです。
rinseをインストールします。

sudo apt-get update
sudo apt-get install rinse -y

rinseをインストールすることにより、/etc/rinse/ に各種ディストリビューションのパッケージファイルが作成されます。
ただし、Rocky Linuxのものはありません。そこで、CentOSのファイルを流用して作成してしまいます。

sudo cp -p /etc/rinse/centos-8.packages /etc/rinse/rocky-8.packages

/etc/rinse/rocky-8.packages をエディタで開きます。ファイルの中身はパッケージが一覧になったテキストファイルです。
まず、文字列 “centos” をすべて “rocky” に変更します。下記は変更後のイメージです。変更対象は3行でした。

# list of packages in official docker container
rocky-release  ← 変更
rocky-gpg-keys  ← 変更
rocky-repos   ← 変更
tzdata

次に、ファイルの最後に以下の行を追加します。

glibc-langpack-en
glibc-langpack-ja
libmodulemd
libzstd
passwd
sudo
cracklib-dicts
openssh-clients
python3-dbus

追加したらエディタをセーブして終了します。

なお、上記リストについては、Rocky Linux公式ページ(参考URL)に記載があったリストに対してさらにパッケージを追加しています。追加したものは「python3-dbus」と「glibc-langpack-ja」です。理由は、私の環境ではdnfコマンドを使用したときにエラーが表示されたためです。左記のパッケージを追加することによってエラーは抑止できましたが、この追加が最適解かどうかまでは未検証です。

Rocky Linuxのミラーサイトを記述しよう

次は /etc/rinse/rinse.conf を修正します。
以下のミラーサイトのエントリを追加します。

# Rocky Linux 8
[rocky-8]
mirror.amd64 = http://dl.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/Packages/

シェルスクリプトを書き換えよう

今度はCentOS用のシェルスクリプトをコピーして、Rocky Linux用に書き換えます。

sudo cp -pR /usr/lib/rinse/centos-8 /usr/lib/rinse/rocky-8

/usr/lib/rinse/rocky-8/post-install.sh の14行目に以下の行を挿入します。

echo "  Extracting CA certs..."
$CH /usr/bin/update-ca-trust

rinse スクリプトを変更しよう

/usr/sbin/rinse を編集します。
エディタで文字列 “–extract-over-symlinks” をサーチすると、おそらく1248行目に見つかります。この部分を削除します。
さらに次の行(1249行目)の文字列 “centos” を “rocky” に置換します。

        "rpm2cpio $file | (cd $CONFIG{'directory'} ; cpio --extract --make-directories --no-absolute-filenames --preserve-modification-time) 2>/dev/null >/dev/null";
      if ( $file =~ /(fedora|rocky|redhat|mandriva)-release-/ ) {

rinse を実行しよう

これから作成する、Rocky Linuxのファイルシステムを格納するディレクトリを作成します。名称は任意です。わたしは rocky8_4 としました。

mkdir rocky8_4

ようやくここで rinse コマンドを実行します。
ここで、–directory オプションでRocky Linuxのファイルシステムを格納するディレクトリ名を指定します。

sudo rinse --arch amd64 --directory ./rocky8_4 --distribution rocky-8

Rocky Linuxのイメージファイルを作成しよう

rinse の実行が完了すると、rocky8_4 ディレクトリにRocky Linuxのファイルシステムが作成されています。このシステムイメージを tar コマンドでアーカイブにし、tar ファイルをWindows側に送り出します。
そしてWindows側で上記 tar ファイルから新しいWSLにインポートするという手順を踏みます。

まず、WindowsのCドライブ直下に rocky というフォルダを作成しておきます。

mkdir /mnt/c/rocky

次に、Rocky Linux のイメージを tar で固めます。
私はtarファイルの名称をrocky8_4.tarとしました。

sudo tar --numeric-owner -c -C ./rocky8_4 . -f /mnt/c/rocky/rocky8_4.tar

tar の実行が完了したら、Ubuntuセッションを終了します。

exit

WindowsからWSL2にインポートしよう

ここまで来たらあと少しです。
WindowsからPowerShellを起動します。
続いて、Rocky Linux のWSLイメージを格納するフォルダを作成します。

mkdir C:\rocky\rocky8.4

そして tar ファイルからWSLへのインポートを開始します。

wsl --import rocky8.4 c:\rocky\rocky8.4 c:\rocky\rocky8_4.tar

これでRocky LinuxがWSL2で起動できるようになりました。
ディストリビューションの一覧で、バージョンやステータスを確認します。

PS C:\Users\ms> wsl -l -v
  NAME            STATE           VERSION
* Fedora-34       Stopped         2
  rocky8.4        Stopped         2
  Ubuntu-20.04    Stopped         2

それではRocky Linuxを立ち上げてみましょう。

wsl -d rocky8.4

スーパーユーザのプロンプト “#” が表示されたでしょうか。

最終的なアップデートを行おう

以降でRocky Linuxでの最終的な設定を施します。

dnf update

少し特殊な構築方法を行っているので、passwdコマンドなどで不具合が生じるようです。それを回避するために一部の再インストールを行います。

dnf reinstall passwd sudo cracklib-dicts -y

ユーザを作成しよう

スーパーユーザ(root)以外の、普段使いのユーザが必要です。
新たにユーザアカウントを作成します。sudo が使える特権を有したユーザとします。
ユーザ名を、ここでは linux としました。他のユーザ名に変更するには置き替えをお願いします。

adduser -G wheel linux
echo -e "[user]\ndefault=linux" >> /etc/wsl.conf
passwd linux

Rocky Linuxをログアウトします。

exit

WindowsのPowerShellに戻るので、WSLをいったんシャットダウンして、再度Rocky Linuxを立ち上げます。

wsl --shutdown
wsl -d rocky8.4

さいごに

いち早くRocky LinuxをWSLで活用できることによって、皆様のお役に立てればと思います。

Discussion