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バックポートパッケージリポジトリを使用します。 次のコマンドでリポジトリを追加します。
$ 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
今度はインストールに成功しました。