Intro

There's a lot of hype around the new version of Covenant 3.0 so I figured I'd share my installation experience with the world (I need content...shhhhh...lol). My boy Wraith said it was pretty legit so I had a quick look-see before hoping into bed. It def looks like a solid and modern framework that ups that ante for other C2 frameworks (you'll never steal my heart from Koadic!❤).

Installation Steps I took… -TLDRs Start Here ⤵

To start off I cloned the repository recursively as instructed in the repo’s wiki:

clutchisback1@Deadpool /e/github  $ git clone --recurse-submodules https://github.com/cobbr/Covenant
Cloning into 'Covenant'...
remote: Enumerating objects: 1133, done.
remote: Counting objects: 100% (1133/1133), done.
remote: Compressing objects: 100% (548/548), done.
remote: Total 1545 (delta 639), reused 996 (delta 560), pack-reused 412
Receiving objects: 100% (1545/1545), 22.18 MiB | 3.35 MiB/s, done.Resolving deltas: 100% (820/820), done.

After cloning the repo you have to make sure you have the dotnet core pre-reqs before you can build the tool. Microsoft had the following commands on their instructions for Linux Installation which allows you to install their x64 bit binaries:

wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Apt has a dotnet framework as well and in the process of trying to install this I installed that too. (This may or may not need to be done)

clutchisback1@Deadpool /e/g/Covenant  $ sudo snap install dotnet-sdk --classic         2 changed files  master
dotnet-sdk 2.2.401 from Microsoft .NET Core (dotnetcore✓) installed

Once this was done I was ready to build and run the application:

clutchisback1@Deadpool /e/g/Covenant  $ dotnet-sdk.dotnet build                        2 changed files  master

Welcome to .NET Core!
---------------------
Learn more about .NET Core: https://aka.ms/dotnet-docs
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs

Telemetry
---------
The .NET Core tools collect usage data in order to help us improve your experience. The data is anonymous and doesnt include command-line arguments. The data is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.

Read more about .NET Core CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only). For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
Microsoft (R) Build Engine version 16.2.32702+c4012a063 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.


 Failed to download package 'Microsoft.CodeAnalysis.Razor.2.2.0' from 'https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.razor/2.2.0/microsoft.codeanalysis.razor.2.2.0.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.razor/2.2.0/microsoft.codeanalysis.razor.2.2.0.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Failed to download package 'Microsoft.Extensions.Caching.SqlServer.2.2.0' from 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.sqlserver/2.2.0/microsoft.extensions.caching.sqlserver.2.2.0.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.sqlserver/2.2.0/microsoft.extensions.caching.sqlserver.2.2.0.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Failed to download package 'Microsoft.Extensions.Caching.Memory.2.2.0' from 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.memory/2.2.0/microsoft.extensions.caching.memory.2.2.0.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.caching.memory/2.2.0/microsoft.extensions.caching.memory.2.2.0.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Failed to download package 'System.Xml.XmlDocument.4.3.0' from 'https://api.nuget.org/v3-flatcontainer/system.xml.xmldocument/4.3.0/system.xml.xmldocument.4.3.0.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/system.xml.xmldocument/4.3.0/system.xml.xmldocument.4.3.0.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Failed to download package 'Microsoft.Extensions.WebEncoders.2.2.0' from 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.webencoders/2.2.0/microsoft.extensions.webencoders.2.2.0.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.webencoders/2.2.0/microsoft.extensions.webencoders.2.2.0.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Restore completed in 1.45 min for /etc/github/Covenant/Covenant/Covenant.csproj.
 Failed to download package 'NETStandard.Library.2.0.3' from 'https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.3/netstandard.library.2.0.3.nupkg'.
 The download of 'https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.3/netstandard.library.2.0.3.nupkg' timed out because no data was received for 60000ms.
 Exception of type 'System.TimeoutException' was thrown.
 Retrying 'FindPackagesByIdAsync' for source 'https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.dataannotations/index.json'.
 The HTTP request to 'GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.dataannotations/index.json' has timed out after 100000ms.
 Retrying 'FindPackagesByIdAsync' for source 'https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.razor.runtime/index.json'.
 The HTTP request to 'GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.razor.runtime/index.json' has timed out after 100000ms.
 Retrying 'FindPackagesByIdAsync' for source 'https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.razor.design/index.json'.
 The HTTP request to 'GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.razor.design/index.json' has timed out after 100000ms.
 Restore completed in 1.75 min for /etc/github/Covenant/Covenant/Covenant.csproj.
 Covenant -> /etc/github/Covenant/Covenant/bin/Debug/netcoreapp2.2/Covenant.dll
 Covenant -> /etc/github/Covenant/Covenant/bin/Debug/netcoreapp2.2/Covenant.Views.dll

Build succeeded.
   0 Warning(s)
   0 Error(s)

Time Elapsed 00:02:00.61

Running it 🏃

After that big glob of "gobbly guk" I was able to launch the application by running run. As you can see I used the apt command 'dotnet-sdk.dotnet' that I had installed earlier to launch the run command specifying the apps folder with the '--project' flag. Apparently my project ended up being in a folder called Covenant which was also inside another folder called Covenant. I feel like there's a Linux law against embedding folders with the same name somewhere but 'whatevs':

clutchisback1@Deadpool /e/g/Covenant  $ dotnet-sdk.dotnet run --project Covenant       2 changed files  master
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.Options], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_T].GetValue(0) asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_T].GetValue(0) asc, EF.Property(?[g.ReferenceSourceLibrary]?, "Id") asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Distinct()' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Distinct()' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _g.ReferenceSourceLibrary in {from GruntTaskReferenceSourceLibrary T.GruntTaskReferenceSourceLibraries in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTaskReferenceSourceLibrary]) join ReferenceSourceLibrary g.ReferenceSourceLibrary in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.ReferenceSourceLibrary]) on Property([T.GruntTaskReferenceSourceLibraries], "ReferenceSourceLibraryId") equals Property([g.ReferenceSourceLibrary], "Id") join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1) select new AnonymousObject(new [] {Convert(EF.Property(?[g.ReferenceSourceLibrary]?, "Id"), Object), [_T].GetValue(0)}) => Distinct()} on Property([g.ReferenceSourceLibrary.ReferenceSourceLibraryReferenceAssemblies], "ReferenceSourceLibraryId") equals Convert([_g.ReferenceSourceLibrary].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_g.ReferenceSourceLibrary].GetValue(1) asc, [_g.ReferenceSourceLibrary].GetValue(0) asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Distinct()' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Distinct()' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _g.ReferenceSourceLibrary in {from GruntTaskReferenceSourceLibrary T.GruntTaskReferenceSourceLibraries in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTaskReferenceSourceLibrary]) join ReferenceSourceLibrary g.ReferenceSourceLibrary in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.ReferenceSourceLibrary]) on Property([T.GruntTaskReferenceSourceLibraries], "ReferenceSourceLibraryId") equals Property([g.ReferenceSourceLibrary], "Id") join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceSourceLibraries], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1) select new AnonymousObject(new [] {Convert(EF.Property(?[g.ReferenceSourceLibrary]?, "Id"), Object), [_T].GetValue(0)}) => Distinct()} on Property([g.ReferenceSourceLibrary.ReferenceSourceLibraryEmbeddedResources], "ReferenceSourceLibraryId") equals Convert([_g.ReferenceSourceLibrary].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_g.ReferenceSourceLibrary].GetValue(1) asc, [_g.ReferenceSourceLibrary].GetValue(0) asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskReferenceAssemblies], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_T].GetValue(0) asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1))' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Take(1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'join AnonymousObject _T in {from GruntTask T in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Covenant.Models.Grunts.GruntTask]) where ([T].Name.Equals(__name_0, OrdinalIgnoreCase) OrElse [T].AlternateNames.Contains(__name_0, __OrdinalIgnoreCase_1)) orderby EF.Property(?[T]?, "Id") asc select new AnonymousObject(new [] {Convert(EF.Property(?[T]?, "Id"), Object)}) => Take(1)} on Property([T.GruntTaskEmbeddedResources], "GruntTaskId") equals Convert([_T].GetValue(0), Nullable`1)' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'orderby [_T].GetValue(0) asc' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'FirstOrDefault()' could not be translated and will be evaluated locally.
Creating cert...
Using Covenant certificate with hash: 7F7E063A40H1956058C81CB4AB73DE4BB0458984
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {52l98bjb-8e7c-43d4-b0a8-1cde58f78352} may be persisted to storage in unencrypted form.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Overriding address(es) 'https://localhost:7443, http://localhost:7442'. Binding to endpoints defined in UseKestrel() instead.
Hosting environment: Development
Content root path: /etc/github/Covenant/Covenant
Now listening on: https://0.0.0.0:7443
Application started. Press Ctrl+C to shut down.

And viola! At the end of that….output….you can see the service is now running on port 7443.

Covenant Login Screen
Covenant's Login Screen

Hope that helps you guys get things up and running!

_____________________
< C0v3n4nt Is T00 0p! >
---------------------
                      \                    ^    /^
                       \                  / \  // \
                        \   |\___/|      /   \//  .\
                         \  /O  O  \__  /    //  | \ \           *----*
                           /     /  \/_/    //   |  \  \          \   |
                           @___@`    \/_   //    |   \   \         \/\ \
                          0/0/|       \/_ //     |    \    \         \  \
                      0/0/0/0/|        \///      |     \     \       |  |
                   0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
                0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
                            ,-}        _      *-.|.-~-.           .~    ~
           \     \__/        `/\      /                 ~-. _ .-~      /
            \____(oo)           *.   }            {                   /
            (    (--)          .----~-.\        \-`                 .~
            //__\\  \__ Ack!   ///.----..<        \             _ -~
           //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~