Omair Majid

Omair Majid

Announcements, thoughts, code and fun

28 May 2020

.NET Core is now available in Fedora

One exciting feature in the recent release of Fedora 32 is the inclusion of .NET Core in the default repositories. This makes Fedora 32 the first community Linux distribution with .NET Core available out of the box!

In this post, lets take a quick look at using .NET Core on Fedora 32. We will cover installing .NET Core packages and building a container image. All using software only from Fedora!

.NET Core is being maintained by the Fedora DotNet SIG: https://fedoraproject.org/wiki/SIGs/DotNet

Installing .NET Core packages on Fedora 32

With Fedora 32, .NET Core 3.1 is included in the default repositories. In the future, additional versions will be added as they are released. And older versions will be removed as they go End-of-Life.

You can pick and choose which components of .NET Core (SDK, Runtime) you need and install just those. Installing a component will install all of its dependencies. For example, installing a .NET Core SDK will also install the corresponding .NET Core Runtime as well as any other additional SDK dependencies.

You can install a the .NET Core SDK by using dnf:

dnf install dotnet-sdk-3.1

If you are not interested in developing .NET Core applications, rather just running them, you can skip the SDK and only install the .NET Core Runtime. For example:

dnf install dotnet-runtime-3.1

You also can install the ASP.NET Core Runtime, which lets you run framework-dependent ASP.NET Core applications:

dnf install aspnetcore-runtime-3.1

Future versions of .NET Core packages should follow the same convention:

  • dotnet-sdk-X.Y
  • dotnet-runtime-X.Y
  • aspnetcore-runtime-X.Y

(Aside: Maybe the last one will change when ASP.NET Core is renamed to ASP.NET?)

Running .NET Core

Once you have installed .NET Core on Fedora 32, you can simply start using the dotnet command. To make sure .NET Core is installed, try:

dotnet --info

That should show more information about .NET Core, including the specific components that are installed:

.NET Core SDK (reflecting any global.json):
 Version:   3.1.103
 Commit:    6f74c4a1dd

Runtime Environment:
 OS Name:     fedora
 OS Version:  32
 OS Platform: Linux
 RID:         fedora.32-x64
 Base Path:   /usr/lib64/dotnet/sdk/3.1.103/

Host (useful for support):
  Version: 3.1.3
  Commit:  4a9f85e9f8

.NET Core SDKs installed:
  3.1.103 [/usr/lib64/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.3 [/usr/lib64/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.3 [/usr/lib64/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

We can now use .NET Core SDK to create, build, publish, and run a simple Hello World application:

$ mkdir HelloWorld
$ cd HelloWorld/
$ dotnet new console
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on /HelloWorld/HelloWorld.csproj...
  Restore completed in 51.55 ms for /HelloWorld/HelloWorld.csproj.

Restore succeeded.

$ dotnet publish --configuration Release --runtime fedora.32-x64 --self-contained false
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 64.74 ms for /HelloWorld/HelloWorld.csproj.
  HelloWorld -> /HelloWorld/bin/Release/netcoreapp3.1/fedora.32-x64/HelloWorld.dll
  HelloWorld -> /HelloWorld/bin/Release/netcoreapp3.1/fedora.32-x64/publish/

$ dotnet bin/Release/netcoreapp3.1/fedora.32-x64/publish/HelloWorld.dll
Hello World!

See the .NET Core documentation for more information, including references, samples, and tutorials.

If you run into any issues, please file bugs in the Fedora bugzilla against the dotnet3.1 package.

Using .NET Core in Fedora-based container images

You can use these container images to develop and deploy your .NET Core applications in containerized environments, such as OpenShift and Kubernetes.

Running .NET Core containers

You can use the Fedora-based containers in your container pipelines. You can use it for deployment to cloud environments.

As an example, let’s create, build, and run a Hello World-style application in a container. Create a Dockerfile that contains the following:

FROM fedora:32

RUN dnf install dotnet-sdk-3.1 -y && \
    dotnet --info && \
    dotnet new console -o HelloWorld && \
    cd HelloWorld && \
    dotnet publish --configuration Release

ENTRYPOINT dotnet HelloWorld/bin/Release/netcoreapp3.1/publish/HelloWorld.dll

You can build and run this using podman or docker commands:

$ podman build -t hello .
TEP 1: FROM fedora:32
STEP 2: RUN dnf install dotnet-sdk-3.1 -y &&     dotnet --info &&     dotnet new console -o HelloWorld &&     cd Hell$
World &&     dotnet publish --configuration Release
Fedora Modular 32 - x86_64                                                            338 kB/s | 4.9 MB     00:14
Fedora Modular 32 - x86_64 - Updates                                                  313 kB/s | 1.3 MB     00:04
Fedora Modular 32 - x86_64 - Test Updates                                             157 kB/s | 196 kB     00:01
Fedora 32 - x86_64 - Test Updates                                                     367 kB/s |  19 MB     00:53
Fedora 32 - x86_64 - Updates                                                          745 kB/s | 5.8 MB     00:07
...
...
...
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 14.63 ms for /HelloWorld/HelloWorld.csproj.
  HelloWorld -> /HelloWorld/bin/Release/netcoreapp3.1/HelloWorld.dll
  HelloWorld -> /HelloWorld/bin/Release/netcoreapp3.1/publish/
--> 9d475fd86ba
STEP 3: ENTRYPOINT dotnet HelloWorld/bin/Release/netcoreapp3.1/publish/HelloWorld.dll
STEP 4: COMMIT hello
--> ddafbd4fc68
ddafbd4fc68b0d81c17da7c2b3bcf49ef2a9605d1181fd41f4811d3ff0ac4ae7

$ podman run -it hello
Hello World!

Hello World, from the exciting land of containers!