本稿では、Rocky LinuxをWindows10のWSL2で動作させる試みを紹介します。
Rocky Linux は、 Red Hat Enterprise Linux (RHEL)と互換性を持つLinuxディストリビューションです。21年6月21日にバージョン8.4が一般向けにリリースされました。
一方、WSL2はWindowsでLinuxを動作させるための仕組みです。
本稿では、すでにWindows PC上でWSL2が動作し、Ubuntuがインストールされている環境があることを前提に説明します。WSL2でUbuntuが使えるようにする手順については、以下のリンクをご参照ください。
本稿では、WSL2のUbuntuを使ってRocky Linuxのファイルシステムを構成します。そのファイルシステムをWindows側に渡して、新たなWSLとしてインポートすることによって、Rocky Linuxを動作させます。
注意事項
ここで紹介する方法では、その構築方法特有の不具合が発生する可能性があります。
確実にRocky Linuxを動作させたいのであれば、ISOファイルをダウンロードして通常の手順でインストールすることをお勧めします。
参考URL
Import Rocky Linux to WSL with WSL and rinse
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/ に各種ディストリビューションのパッケージファイルが作成されます。
$ ls /etc/rinse centos-4.packages fedora-21.packages opensuse-10.3.packages centos-5.packages fedora-22.packages opensuse-11.0.packages centos-6.packages fedora-25.packages opensuse-11.1.packages centos-7.packages fedora-26.packages opensuse-11.2.packages centos-8.packages fedora-27.packages opensuse-11.3.packages fedora-10.packages fedora-28.packages opensuse-12.1.packages fedora-12.packages fedora-7.packages opensuse-12.3.packages fedora-13.packages fedora-8.packages opensuse-13.1.packages fedora-14.packages fedora-9.packages opensuse-42.2.packages fedora-15.packages fedora-core-4.packages rhel-5.packages fedora-16.packages fedora-core-5.packages rinse.conf fedora-18.packages fedora-core-6.packages slc-5.packages fedora-19.packages opensuse-10.1.packages slc-6.packages fedora-20.packages opensuse-10.2.packages
ただし、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/
私は先頭にあるコメント行によるヘッダの次に行を挿入しました。
エディタをセーブして終了します。
# # /etc/rinse/rinse.conf # # Contains the list of servers to download our initial collection of # packages from. # # Steve # -- # Rocky Linux 8 [rocky-8] mirror.amd64 = http://dl.rockylinux.org/pub/rocky/8/BaseOS/x86_64/os/Packages/ # RedHat Enterprise Linux 5 (RHEL-5) [rhel-5] mirror = http://your.mirror.to.rhel5.repository.here/rhel/5/i386/Server/ mirror.amd64 = http://your.mirror.to.rhel5.repository.here/rhel/5/x86_64/Server/
シェルスクリプトを書き換えよう
今度は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
追加後のイメージです。
#!/bin/sh # # post-install.sh # CentOS 8 # (c) Thomas Lange 2020 prefix=$1 CH="chroot ${prefix}" if [ ! -d "${prefix}" ]; then echo "Serious error - the named directory doesn't exist." exit fi echo " Extracting CA certs..." ← 追加 $CH /usr/bin/update-ca-trust ← 追加 # rpm's can now be removed rm -f ${prefix}/*.rpm
rinse スクリプトを変更しよう
/usr/sbin/rinse を編集します。
エディタで文字列 “–extract-over-symlinks” をサーチすると、おそらく1248行目に見つかります。この部分を削除します。
さらに次の行(1249行目)の文字列 “centos” を “rocky” に置換します。
"rpm2cpio $file | (cd $CONFIG{'directory'} ; cpio --extract --extract-over-symlinks --make-directories --no-absolute-filenames --preserve-modification-time) 2>/dev/null >/dev/null"; if ( $file =~ /(fedora|centos|redhat|mandriva)-release-/ ) {
まとめると、上のイメージから下のイメージに変更されます。
"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はCentOSのに代わる本命となりえるのでしょうか?
おそらく、Storeアプリも近いうちにリリースされることでしょうが、いち早くWSLで活用でき、皆様のお役に立てればと思います。