🤔
ArchWSL(WSL1)での「FATAL: Kernel too old」の原因と対応策
つまりどういうこと
- ArchWSL(WSL1)にてglibcをアップデートすると、
FATAL: Kernel too old
の表示を吐く。 - コマンドを一切受け付けなくなり環境が使用不能になる。
- pacmanでのアップデート時に
--ignore
を使ってglibc
を外すか、glibc-linux4
に切り替える処置が必要。
原因
-
glibc 2.33-4
に入った以下の変更により、カーネルのバージョンが4.4
以上でないと使用不能になった。PKGBUILD@@ -51,6 +51,7 @@ build() { --enable-add-ons --enable-bind-now --enable-cet + --enable-kernel=4.4 --enable-lock-elision --enable-multi-arch --enable-stack-protector=strong
- WSL1で使用されている互換レイヤが持つバージョン情報は
4.4.0-19041-Microsoft
であり、これが条件と一致しないのでは(未検証)。 - インストールすること自体は可能なので、気が付かずアップデートしてしまうと終わり。
FATAL: Kernel too old
対応策
下記に記す対応策はglibc
アップデート以前に行うものであり、アップデートしてしまった場合の手段は記していない。多分かなり面倒くさい。
pacman
の--ignore
オプションを使ってアップデートを回避する。
1. 多分コマンド例は以下のようになる。
yay
等のラッパーを使用している場合は適宜読み替え。
$ pacman -Syu --ignore glibc
また、pacman.conf
に以下を追記する方法もある。
IgnorePkg=glibc
glibc-linux4
パッケージを使用する。
2.AURにあるglibc-linux4
を使用する。
Arch Linux Chinese Community Repositoryにビルド済みのパッケージもある。
導入方法は以下のリンクに従う。
参考リンク等
- ArchWSLリポジトリにあるIssue:
https://github.com/yuk7/ArchWSL/issues/190 -
--enable-kernel
オプションの詳細:
https://www.gnu.org/software/libc/manual/html_node/Configuring-and-compiling.html
Discussion