😭

Ubuntu のバージョンを 24 から 25 にあげたら dotnet コマンドがエラーを起こすようになった

に公開

事の始まり

先日、開発環境の Ubuntu 24.04 LTS を、リリースされたばかりの Ubuntu 25.04 にインプレースアップグレードしました。アップグレード自体は特に問題なく完了したのですが、後日、普段通り .NET のプロジェクトで作業しようと dotnet コマンドを実行したところ、見慣れないエラーメッセージとともに起動しなくなってしまいました。

dotnet コマンドがエラーで起動しない

具体的には、ターミナルで dotnet --info のような簡単なコマンドを実行しようとすると、以下のようなエラーメッセージが表示されてコマンドが異常終了してしまいました。

Process terminated. Couldn't find a valid ICU package installed on the
system. Please install libicu (or icu-libs) using your package manager
and try again. Alternatively you can set the configuration flag
System.Globalization.Invariant to true if you want to run with no
globalization support. Please see https://aka.ms/dotnet-missing-libicu
for more information.
   at System.Environment.FailFast(System.Runtime.CompilerServices.StackCrawlMarkHandle,
System.String, System.Runtime.CompilerServices.ObjectHandleOnStack,
System.String)
   at System.Environment.FailFast(System.Threading.StackCrawlMark
ByRef, System.String, System.Exception, System.String)
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode+Settings..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.TextInfo..cctor()
   at System.String.ToLowerInvariant()
   at System.Text.EncodingHelper.GetEncodingFromCharset()
   at System.ConsolePal.GetConsoleEncoding()
   at System.Console.get_OutputEncoding()
   at Microsoft.DotNet.Cli.AutomaticEncodingRestorer..ctor()
   at Microsoft.DotNet.Cli.Program.Main(System.String[])
Aborted

メッセージを読むと、「Couldn't find a valid ICU package installed on the system.」とあり、「Please install libicu (or icu-libs) using your package manager」と指示されています。ICU (International Components for Unicode) が見つからない、ということのようです。

試行錯誤

1. libicu のインストールを試みる

エラーメッセージの指示通り、まずは libicu をインストールしてみます。

sudo apt install libicu

しかし、結果は...

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libicu

「Unable to locate package libicu」と、パッケージが見つからないようです。

2. icu-libs のインストールを試みる

エラーメッセージには「(or icu-libs)」とも書かれていました。ならば、ということでこちらも試します。

sudo apt install icu-libs

しかし、こちらも残念ながら...

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package icu-libs

同じくパッケージが見つかりません。うーむ。

3. .NET SDK の依存関係を確認する

こうなると、具体的なパッケージ名が違うのかもしれません。
以前、Ubuntu に .NET SDK をインストールした際の手順を思い出し、Microsoft の公式ドキュメント (下記リンク先) を確認してみることにしました。

https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu-decision#dependencies

ドキュメントの「Dependencies」セクションを見てみると、Ubuntu のバージョンごとに必要なライブラリがリストアップされています。
私の環境は Ubuntu 24.04 からアップグレードしたので、その周辺を見ると...

- libicu74 (for 24.04 or later)

「libicu74 (for 24.04 or later)」とあります。これか!と思い、早速インストールを試みます。

sudo apt install libicu74

ですが、これも...

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libicu74

ダメでした。Ubuntu 25.04 になったことで、libicu のバージョンも変わってしまったのでしょうか。

4. apt search で libicu を探してみる

ここまで来ると、現在の Ubuntu 25.04 のリポジトリに存在する libicu 関連のパッケージ名が何なのか、直接調べるしかありません。
apt search コマンドで探してみます。

sudo apt search libicu

すると、以下のような結果が得られました。

Sorting... Done
Full Text Search... Done
icu-devtools/plucky 76.1-1ubuntu2 amd64
  Development utilities for International Components for Unicode

libicu-dev/plucky 76.1-1ubuntu2 amd64
  Development files for International Components for Unicode

libicu4j-4.4-java/plucky 4.4.2.2-4 all
  Library for Unicode support and internationalization

libicu4j-java/plucky 73.2-1 all
  Library for Unicode support and internationalization

libicu76/plucky,now 76.1-1ubuntu2 amd64
  International Components for Unicode

いくつかヒットしましたが、それらしいものとして libicu76 というパッケージが見つかりました。
どうやら Ubuntu 25.04 では libicu74 ではなく libicu76 が提供されているようです。なるほど、バージョンが上がっていたのですね。

解決

原因と思われるパッケージが見つかったので、早速インストールします。

sudo apt install libicu76

今度は無事にインストールが完了しました!🎉

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libicu76
The following NEW packages will be installed:
  libicu76
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 11.6 MB of archives.
After this operation, 46.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 [http://jp.archive.ubuntu.com/ubuntu](http://jp.archive.ubuntu.com/ubuntu) plucky/main amd64 libicu76 amd64 76.1-1ubuntu2 [11.6 MB]
Fetched 11.6 MB in 1s (10.6 MB/s)
Selecting previously unselected package libicu76.
(Reading database ... 234567 files and directories currently installed.)
Preparing to unpack .../libicu76_76.1-1ubuntu2_amd64.deb ...
Unpacking libicu76 (76.1-1ubuntu2) ...
Setting up libicu76 (76.1-1ubuntu2) ...
Processing triggers for libc-bin (2.39-0ubuntu10) ...

インストール後、改めて dotnet --info を実行してみると...

$ dotnet --info
.NET SDK:
 Version:           9.0.203
 Commit:            dc7acfa194
 Workload version:  9.0.200-manifests.9df47798
 MSBuild version:   17.13.20+a4ef1e90f

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  25.04
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /home/jsakamoto/.dotnet/sdk/9.0.203/

.NET workloads installed:
There are no installed workloads to display.
Configured to use loose manifests when installing new manifests.

Host:
  Version:      9.0.4
  Architecture: x64
  Commit:       f57e6dc747

.NET SDKs installed:
  8.0.405 [/home/jsakamoto/.dotnet/sdk]
  9.0.102 [/home/jsakamoto/.dotnet/sdk]
  9.0.203 [/home/jsakamoto/.dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.12 [/home/jsakamoto/.dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.1 [/home/jsakamoto/.dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.4 [/home/jsakamoto/.dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.12 [/home/jsakamoto/.dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.1 [/home/jsakamoto/.dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.4 [/home/jsakamoto/.dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  DOTNET_ROOT       [/home/jsakamoto/.dotnet]

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

無事、dotnet コマンドが正常に動作するようになりました!

まとめ

Ubuntu のディストリビューションをアップグレードした際には、.NET のような外部でインストールしたランタイムやSDKが依存しているシステムライブラリのバージョンも変更されることがある、という典型的な例でした。
エラーメッセージに libicu とあっても、ディストリビューションのバージョンによって具体的なパッケージ名(バージョン番号)が異なるため、apt search などで確認するのが確実そうです。

同じような問題に遭遇した方の参考になれば幸いです。
というわけで、一件落着。

Discussion