Ubuntuをアップグレードしたら.NET開発環境が動作しなくなった

目次

Ubuntuを 20.04.3 から 22.04.5 にアップグレードしたら.NETのコマンドが動作しなくなりました。
.NET 6.0を使用していたのですがサポートも2024年11月12日で終了したようですし新しいバージョンをインストールすることにしました。

環境は Ubuntu 22.04.5 LTS です。

.NETのファイルが見つからない

dotnetコマンドを実行するとファイルが見つからないというエラーメッセージが表示されました。

$ dotnet --info
Error: [/usr/share/dotnet/host/fxr] does not exist

どうやら2つのLinuxパッケージリポジトリで.NETパッケージが提供されている場合に発生するようです。

Linuxでファイルが見つからないと言われる.NETエラーのトラブルシューティング

上記のページを参考に.NET環境を再インストールします。

Linuxディストリビューションに用意されている.NETパッケージを使用します

既存の.NETパッケージをディストリビューションから削除します。

$ sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'

ディストリビューションからMicrosoftリポジトリフィードを削除します。

$ sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
$ sudo apt update

.NET 9 SDKのインストール

最新の.NET 9.0をインストールすることにしました。 Microsoft公式のページにしたがって操作します。

Ubuntuに.NET SDKをインストールする

Ubuntu .NETバックポートパッケージリポジトリを使用します。 次のコマンドでリポジトリを追加します。

$ sudo add-apt-repository ppa:dotnet/backports

コマンド実行で表示されるメッセージによるとUbuntu 22.04 LTSでは.NET 9.0パッケージが提供されています。

PPA publishes dbgsym, you may need to include 'main/debug' component
リポジトリ: 'deb https://ppa.launchpadcontent.net/dotnet/backports/ubuntu/ jammy main'
概要:
The backports archive provides source-built .NET packages in cases where a version of .NET is not available in the archive for an Ubuntu release.

Currently available Ubuntu releases and .NET backports:

Ubuntu 24.04 LTS (Noble Numbat)
├── .NET 6.0 (End of Life on November 12th, 2024) [amd64 arm64]
├── .NET 7.0 (End of Life on May 14th, 2024)      [amd64 arm64]
└── .NET 9.0 (End of Life on May 11th, 2026)      [amd64 arm64 s390x ppc64el]

Ubuntu 22.04 LTS (Jammy Jellyfish)
└── .NET 9.0 (End of Life on May 11th, 2026)      [amd64 arm64 s390x ppc64el]

Canonical provides best-effort support for packages contained in this archive, which is limited to the upstream lifespan or the support period of the particular Ubuntu version. See the upstream support policy [1] for more information about the upstream support lifespan of .NET releases or the Ubuntu Releases Wiki entry [2] for more information about the support period of any Ubuntu version.

Any build enters ppa:dotnet/backports-proposed [3] first and migrates to this archive if no regressions are reported within a week.

[1] https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
[2] https://wiki.ubuntu.com/Releases
[3] https://launchpad.net/~dotnet/+archive/ubuntu/backports-proposed
より詳しい情報: https://launchpad.net/~dotnet/+archive/ubuntu/backports
リポジトリを追加しています。
・・・中略・・・
パッケージリストを読み込んでいます... 完了

次のコマンドでSDKをインスールします。

$ sudo apt-get update && sudo apt-get install -y dotnet-sdk-9.0

実行したらエラーになってしまいました。

E: https://ppa.launchpadcontent.net/dotnet/backports/ubuntu/pool/main/d/dotnet9/dotnet-sdk-9.0_9.0.101-0ubuntu1%7e22.04.1%7eppa1_amd64.deb の取得に失敗しました  接続タイムアウト [IP: 2620:2d:4000:1::81 443]
E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

試しにdotnetコマンドを実行して見ますがインストールに失敗していて見つからないと言われてしまいます。

$ dotnet --version
コマンド 'dotnet' が見つかりません。次の方法でインストールできます:
sudo snap install dotnet-sdk       # version 8.0.404, or
sudo apt  install dotnet-host      # version 6.0.135-0ubuntu1~22.04.1
sudo apt  install dotnet-host-8.0  # version 8.0.10-0ubuntu1~22.04.1
sudo apt  install dotnet-host-7.0  # version 7.0.119-0ubuntu1~22.04.1
他のバージョンについては 'snap info dotnet-sdk' を確認してください。

メッセージにしたがって作業してみます。
apt-get updateはローカルのパッケージリストを更新します。
apt-get --fix-missingはローカルのパッケージリストが不完全でも最善を尽くして処理を実行するようです。
まずは無難にapt-get updateしてみます。

$ apt-get update
取得:
・・・中略・・・
パッケージリストを読み込んでいます... 完了

正常に更新できたようなのでもう一度.NET9.0 SDKのインストールコマンドを実行します。

$ sudo apt-get install -y dotnet-sdk-9.0

今度はエラーメッセージが表示されることもなく終了しました。dotnetコマンドを実行してみます。

$ dotnet --info
.NET SDK:
 Version:           9.0.101
 Commit:            f303476b53
 Workload version:  9.0.100-manifests.6bf02610
 MSBuild version:   17.12.12+f303476b5

ランタイム環境:
 OS Name:     ubuntu
 OS Version:  22.04
 OS Platform: Linux
 RID:         ubuntu.22.04-x64
 Base Path:   /usr/lib/dotnet/sdk/9.0.101/

インストール済みの .NET ワークロード:
表示するインストール済みワークロードはありません。
新しいマニフェストをインストールするときに loose manifests を使用するように構成されています。

Host:
  Version:      9.0.0
  Architecture: x64
  Commit:       f303476b53

.NET SDKs installed:
  9.0.101 [/usr/lib/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 9.0.0 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 9.0.0 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

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

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

今度はインストールに成功しました。