いわさです。
先日、AWS Cloud9 を使って、.NET 8 の開発を行いたいシーンがありました。
今なら Amazon Linux 2023 だろう、ということで次の構成で環境を作成しました。
しかし、コンソールにアクセスして .NET バージョンを確認してみるとインストールされていませんでした。
$ dotnet --version
bash: dotnet: command not found
Microsoft 公式ドキュメントを参考に直接 .NET SDK をダウンロードしてインストールすることが出来はするのですが、ちょっと事情があって今回はパッケージマネージャー経由でのインストールを行う必要がありました。
そこで、手動で Cloud9 環境に .NET 8 最新版(執筆時点は 8.0.3)をセットアップしてみることにしました。
いくつかの公式ドキュメントを読み替えたり試行錯誤しながらセットアップが出来ましたので手順をまとめておきます。
先に手順
この記事ではエラーメッセージやキーワードでたどり着く方もいるかもしれないので試行錯誤の様子も掲載します。
ただ、それだとセットアップ手順だけ後から知りたい時に自分でもノイズになりそうなので、先にセットアップに必要なコマンドだけまとめておきましょう。
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ curl -sSL -O https://packages.microsoft.com/config/fedora/39/packages-microsoft-prod.rpm
$ sudo rpm -i packages-microsoft-prod.rpm
$ sudo dnf update
$ sudo dnf install dotnet-sdk-8.0
ヨシ!
試行錯誤の様子
さて、ここからは試行錯誤の様子を記録しておきます。
まず、本日時点のイメージだと .NET SDK 8 をバージョン指定でインストールは出来ず、また .NET 6 がインストールされる状態となっています。
$ sudo dnf install dotnet-sdk-8.0
Last metadata expiration check: 7:48:49 ago on Sun Mar 31 21:17:18 2024.
No match for argument: dotnet-sdk-8.0
Error: Unable to find a match: dotnet-sdk-8.0
$ sudo dnf install dotnet
Last metadata expiration check: 7:49:12 ago on Sun Mar 31 21:17:18 2024.
Dependencies resolved.
================================================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================================================
Installing:
dotnet x86_64 6.0.127-1.amzn2023.0.1 amazonlinux 12 k
Installing dependencies:
aspnetcore-runtime-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 6.9 M
aspnetcore-targeting-pack-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 1.4 M
dotnet-apphost-pack-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 3.9 M
dotnet-host x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 164 k
dotnet-hostfxr-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 166 k
dotnet-runtime-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 23 M
dotnet-sdk-6.0 x86_64 6.0.127-1.amzn2023.0.1 amazonlinux 76 M
dotnet-targeting-pack-6.0 x86_64 6.0.27-1.amzn2023.0.1 amazonlinux 2.1 M
dotnet-templates-6.0 x86_64 6.0.127-1.amzn2023.0.1 amazonlinux 2.5 M
libunwind x86_64 1.4.0-5.amzn2023.0.2 amazonlinux 66 k
lttng-ust x86_64 2.13.1-2.amzn2023.0.1 amazonlinux 330 k
netstandard-targeting-pack-2.1 x86_64 6.0.127-1.amzn2023.0.1 amazonlinux 1.3 M
Transaction Summary
================================================================================================================================================================================================
Install 13 Packages
Total download size: 118 M
Installed size: 432 M
Is this ok [y/N]:
リポジトリコンフィグを追加する
次に Microsoft 製品のソフトウェアリポジトリコンフィグが公開されているのでそちらを利用してみることにしました。
Amazon Linux 2023 向けには提供されていない
上記に Amazon Linux 2023 用のものも提供されているので、これだ!と最初思ったんですが、中身を見てみるとどうやら以下のみが提供されているようです。
- mdatp
- mde-netfilter
- virtualclient
なので`https://packages.microsoft.com/config/amazonlinux/2023/packages-microsoft-prod.rpm`を追加しても .NET SDK をパッケージマネージャー経由でインストールすることが出来ませんでした。
Fedora 37 以降のものを使う
Amazon Linux 2023 は Fedora ベースなので、いくつかのドキュメントで Fedora 向けの手順が使われているものがあります。上記の Fedora 37 以降であれば .NET 8 が提供されはじめているようなので使ってみることにしました。
$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.4.20240319"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/amazon-linux-2023/"
DOCUMENTATION_URL="https://docs.aws.amazon.com/linux/"
SUPPORT_URL="https://aws.amazon.com/premiumsupport/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
VENDOR_NAME="AWS"
VENDOR_URL="https://aws.amazon.com/"
SUPPORT_END="2028-03-15"
パッケージをインストールします。
$ curl -sSL -O https://packages.microsoft.com/config/fedora/39/packages-microsoft-prod.rpm
$ sudo rpm -i packages-microsoft-prod.rpm
$ sudo dnf update
Microsoft Production 812 B/s | 481 B 00:00
Microsoft Production 11 kB/s | 983 B 00:00
Importing GPG key 0xBE1229CF:
Userid : "Microsoft (Release signing) <gpgsecurity@microsoft.com>"
Fingerprint: BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF
From : https://packages.microsoft.com/keys/microsoft.asc
Is this ok [y/N]: y
Microsoft Production 2.7 MB/s | 1.1 MB 00:00
Dependencies resolved.
Nothing to do.
Complete!
$ sudo dnf install dotnet-sdk-8.0
Last metadata expiration check: 0:00:05 ago on Mon Apr 1 06:21:17 2024.
Dependencies resolved.
==============================================================================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================================================================
Installing:
dotnet-sdk-8.0 x86_64 8.0.203-1 packages-microsoft-com-prod 158 M
Installing dependencies:
aspnetcore-runtime-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 10 M
aspnetcore-targeting-pack-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 3.1 M
dotnet-apphost-pack-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 4.7 M
dotnet-host x86_64 8.0.3-1 packages-microsoft-com-prod 50 k
dotnet-hostfxr-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 134 k
dotnet-runtime-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 29 M
dotnet-runtime-deps-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 8.5 k
dotnet-targeting-pack-8.0 x86_64 8.0.3-1 packages-microsoft-com-prod 4.6 M
netstandard-targeting-pack-2.1 x86_64 6.0.127-1.amzn2023.0.1 amazonlinux 1.3 M
Transaction Summary
==============================================================================================================================================================================
Install 10 Packages
Total download size: 212 M
Installed size: 579 M
Is this ok [y/N]: y
Downloading Packages:
(1/10): netstandard-targeting-pack-2.1-6.0.127-1.amzn2023.0.1.x86_64.rpm 7.3 MB/s | 1.3 MB 00:00
(2/10): aspnetcore-runtime-8.0-8.0.3-1.x86_64.rpm 13 MB/s | 10 MB 00:00
(3/10): dotnet-host-8.0.3-1.x86_64.rpm 793 kB/s | 50 kB 00:00
(4/10): aspnetcore-targeting-pack-8.0-8.0.3-1.x86_64.rpm 2.0 MB/s | 3.1 MB 00:01
(5/10): dotnet-apphost-pack-8.0-8.0.3-1.x86_64.rpm 3.0 MB/s | 4.7 MB 00:01
(6/10): dotnet-runtime-deps-8.0-8.0.3-1.x86_64.rpm 169 kB/s | 8.5 kB 00:00
(7/10): dotnet-hostfxr-8.0-8.0.3-1.x86_64.rpm 134 kB/s | 134 kB 00:01
(8/10): dotnet-runtime-8.0-8.0.3-1.x86_64.rpm 4.8 MB/s | 29 MB 00:06
(9/10): dotnet-targeting-pack-8.0-8.0.3-1.x86_64.rpm 687 kB/s | 4.6 MB 00:06
(10/10): dotnet-sdk-8.0-8.0.203-1.x86_64.rpm 12 MB/s | 158 MB 00:13
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 14 MB/s | 212 MB 00:15
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : dotnet-targeting-pack-8.0-8.0.3-1.x86_64 1/10
Installing : dotnet-host-8.0.3-1.x86_64 2/10
Installing : netstandard-targeting-pack-2.1-6.0.127-1.amzn2023.0.1.x86_64 3/10
Installing : dotnet-hostfxr-8.0-8.0.3-1.x86_64 4/10
Installing : aspnetcore-targeting-pack-8.0-8.0.3-1.x86_64 5/10
Installing : dotnet-runtime-deps-8.0-8.0.3-1.x86_64 6/10
Installing : dotnet-runtime-8.0-8.0.3-1.x86_64 7/10
Installing : aspnetcore-runtime-8.0-8.0.3-1.x86_64 8/10
Installing : dotnet-apphost-pack-8.0-8.0.3-1.x86_64 9/10
Installing : dotnet-sdk-8.0-8.0.203-1.x86_64 10/10
Running scriptlet: dotnet-sdk-8.0-8.0.203-1.x86_64 10/10
Verifying : netstandard-targeting-pack-2.1-6.0.127-1.amzn2023.0.1.x86_64 1/10
Verifying : aspnetcore-runtime-8.0-8.0.3-1.x86_64 2/10
Verifying : aspnetcore-targeting-pack-8.0-8.0.3-1.x86_64 3/10
Verifying : dotnet-apphost-pack-8.0-8.0.3-1.x86_64 4/10
Verifying : dotnet-host-8.0.3-1.x86_64 5/10
Verifying : dotnet-hostfxr-8.0-8.0.3-1.x86_64 6/10
Verifying : dotnet-runtime-8.0-8.0.3-1.x86_64 7/10
Verifying : dotnet-runtime-deps-8.0-8.0.3-1.x86_64 8/10
Verifying : dotnet-sdk-8.0-8.0.203-1.x86_64 9/10
Verifying : dotnet-targeting-pack-8.0-8.0.3-1.x86_64 10/10
Installed:
aspnetcore-runtime-8.0-8.0.3-1.x86_64 aspnetcore-targeting-pack-8.0-8.0.3-1.x86_64 dotnet-apphost-pack-8.0-8.0.3-1.x86_64
dotnet-host-8.0.3-1.x86_64 dotnet-hostfxr-8.0-8.0.3-1.x86_64 dotnet-runtime-8.0-8.0.3-1.x86_64
dotnet-runtime-deps-8.0-8.0.3-1.x86_64 dotnet-sdk-8.0-8.0.203-1.x86_64 dotnet-targeting-pack-8.0-8.0.3-1.x86_64
netstandard-targeting-pack-2.1-6.0.127-1.amzn2023.0.1.x86_64
Complete!
最初 37 で試したのですが、8.0.100
、8.0.101
だったので、最新の 40 で試してみたところ ASP.NET などの関連モジュールが足りないと言われました。
確かにパッケージリストを覗いてみると全然少ないのですよね。
間をとって 39 を試したところ依存モジュールも含めて本日時点の最新版が一式インストールされました。
$ dotnet --version
8.0.203
2024 年 3 月 12 日 リリースの最新バージョンを入手出来ました。
さいごに
本日は AWS Cloud9 の Amazon Linux 2023 で .NET 8 の開発環境を dnf でインストールしてみました。
まぁ Amazon Linux 2023 で .NET 8 を動かす機会あまりないですよね。
私自身も Amzon Linux 2023 上で .NET 8 を使う機会はまだ多くないのですが、AWS 上で実行しつつ最新の .NET 8 ライブラリや機能を使いたい時に Cloud9 でサッと環境を用意出来ると便利な時がありますので今回整理した手順はおそらく今後何度か使いそうです。