🤔

ArchWSL(WSL1)での「FATAL: Kernel too old」の原因と対応策

2021/03/17に公開

つまりどういうこと

  • 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アップデート以前に行うものであり、アップデートしてしまった場合の手段は記していない。多分かなり面倒くさい。

1. pacman--ignoreオプションを使ってアップデートを回避する。

多分コマンド例は以下のようになる。
yay等のラッパーを使用している場合は適宜読み替え。

$ pacman -Syu --ignore glibc

また、pacman.confに以下を追記する方法もある。

IgnorePkg=glibc

2.glibc-linux4パッケージを使用する。

AURにあるglibc-linux4を使用する。
Arch Linux Chinese Community Repositoryにビルド済みのパッケージもある。
導入方法は以下のリンクに従う。
https://github.com/archlinuxcn/repo

参考リンク等

Discussion