AWS Cloud9 の Amazon Linux 2023 で .NET 8 の開発環境を dnf でインストールしてみた

2024.04.01

いわさです。

先日、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.1008.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 でサッと環境を用意出来ると便利な時がありますので今回整理した手順はおそらく今後何度か使いそうです。