【问题标题】:Install dotnet core on ec2 linux AMI 2 (c6g)在 ec2 linux AMI 2 (c6g) 上安装 dotnet core
【发布时间】:2020-07-16 20:23:18
【问题描述】:

我正在尝试在 linux AMI 2 ec2 实例 (c6g) 上安装 dotnet-sdk-3.0。我是 linux 新手,所以尝试了几个命令,但似乎没有什么对我有用。我在下面试过了。

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm


sudo yum install dotnet-sdk-3.1
sudo yum install dotnet-sdk-3.0

当我在上面尝试时,我遇到了错误。

[ec2-user@ip-0-0-0-0 console]$ sudo yum install dotnet-sdk-3.0
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 3.7 kB     00:00
amzn2extra-docker                                        | 3.0 kB     00:00
amzn2extra-nginx1.12                                     | 1.3 kB     00:00
packages-microsoft-com-prod                              | 3.0 kB     00:00
packages-microsoft-com-prod/primary_db                     | 288 kB   00:00
No package dotnet-sdk-3.0 available.
Error: Nothing to do

然后我尝试了

mkdir -p "$HOME/dotnet" && tar zxf dotnet-sdk-3.0.100-linux-x64.tar.gz -C                                                                              "$HOME/dotnet"
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

在此之后尝试了 dotnet 命令但得到了错误。 dotnet:找不到命令

终于在下面尝试了:

mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.1.302-linux-arm64.tar.gz -C                                                                                         $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
dotnet
dotnet --list-sdk

当我运行它时,我得到了以下错误

[ec2-user@ip-0-0-0-0 home]$ dotnet --list-sdk
Process terminated. Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode()
   at System.Globalization.GlobalizationMode..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.CultureInfo..cctor()
   at System.String.ToLowerInvariant()
   at Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.GetArch()
   at Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment..cctor()
   at Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.GetRuntimeIdentifier()
   at Microsoft.DotNet.Cli.MulticoreJitProfilePathCalculator.CalculateProfileRootPath()
   at Microsoft.DotNet.Cli.MulticoreJitActivator.StartCliProfileOptimization()
   at Microsoft.DotNet.Cli.MulticoreJitActivator.TryActivateMulticoreJit()
   at Microsoft.DotNet.Cli.Program.Main(System.String[])
Aborted

还尝试运行 dotnet 并收到此错误。

Failed to load ▒r▒), error: /home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0/libhostpolicy.so: cannot open shared object file: No such file or directory
An error occurred while loading required library libhostpolicy.so from [/home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0]
[ec2-user@ip-0-0-0-0 console]$

我也关注了微软的文档。 https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos

似乎没有什么对我有用。有人可以在这里帮助我吗,我从过去 2 天开始就卡住了。

提前致谢。

PS:我是 linux 的新手。

【问题讨论】:

    标签: linux amazon-ec2 .net-core


    【解决方案1】:

    我能够通过以下步骤使其在 Amazon Linux 2 ARM64 上运行:

    1. 下载并构建最新版本的 Unicode 国际组件。 Amazon Linux 2 在包管理器中提供了版本 50,但 dotnet 会查找版本 55 或更高版本。当 Amazon Linux 对此进行更新时,此步骤将不再需要,可以替换为 sudo yum install icu。 安装 gcc 和 python3,因为构建 libicu 需要它们。构建库需要几分钟时间。 Amazon Linux 2 最近将 libicu60 添加到包管理器中,因此您可以简单地使用 yum 安装它:
    sudo yum -y install libicu60
    
    1. 按照 Microsoft 的说明安装 dotnet sdk。从 Microsoft 网站下载 dotnet sdk。您可能需要从 this link 下载以获取最新版本,但下面的链接对我有用。
    cd ~
    wget https://download.visualstudio.microsoft.com/download/pr/5ee48114-19bf-4a28-89b6-37cab15ec3f2/f5d1f54ca93ceb8be7d8e37029c8e0f2/dotnet-sdk-3.1.302-linux-arm64.tar.gz
    mkdir -p $HOME/dotnet && tar zxf ~/dotnet-sdk-3.1.302-linux-arm64.tar.gz -C $HOME/dotnet
    export DOTNET_ROOT=$HOME/dotnet
    export PATH=$PATH:$HOME/dotnet
    
    1. 测试它是否正常工作
    [ec2-user@ip-172-31-69-243 ~]$ dotnet --list-sdks
    3.1.302 [/home/ec2-user/dotnet/sdk]
    

    【讨论】:

      【解决方案2】:

      您正在 arm64/aarch64 上运行它。这是一个相对较新的架构。它也与 Intel 64 位架构(x86_64x64)不兼容。所以你需要注意这一点。

      通过 RPM 安装

      编辑:所以,如果您想使用 RPM 包,这将不起作用。

      引用https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos:

      包管理器安装仅在 x64 架构上受支持。其他架构(例如 ARM)必须手动安装 .NET Core SDK 或 .NET Core Runtime。有关详细信息,请参阅下面的手动安装部分。

      您正在使用aarch64/arm64。你没有使用x64,所以这是行不通的。

      需要使用tarball安装方式。

      过时的建议:

      我正在尝试在 linux AMI 2 ec2 实例 (c6g) 上安装 dotnet-sdk-3.0。

      sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
      

      您正在运行 Amazon Linux 2,对吧?正如这里的 URL 所说,这是针对 CentOS 7 的。它可能(也可能不会)在您的 Linux 发行版上工作。不管怎样,试试看吧。

      $ sudo yum install dotnet-sdk-3.0
      No package dotnet-sdk-3.0 available.
      Error: Nothing to do
      

      错误说它找不到这个包。也许不存在具有此名称的包?也许您使用了错误的名称?尝试使用yum list 找到正确的名称:

      sudo yum list 'dotnet-sdk*'
      

      它应该显示一个包列表,包括像dotnet-sdk-3.0.103 这样的名称。您可以按名称安装该软件包,然后:

      sudo yum install dotnet-sdk-3.0.103
      

      如果这不起作用,请尝试使用 yum list 中的另一个包名称并尝试安装它。

      手动安装

      然后我尝试了

      mkdir -p "$HOME/dotnet" && tar zxf dotnet-sdk-3.0.100-linux-x64.tar.gz -C "$HOME/dotnet"
      export DOTNET_ROOT=$HOME/dotnet
      export PATH=$PATH:$HOME/dotnet
      

      在此之后尝试了dotnet 命令但得到了错误。 dotnet:找不到命令

      您正在运行aarch64 机器。您需要使用 arm64 压缩包,而不是 x64 压缩包。 x64 压缩包适用于英特尔处理器。它不适用于 ARM 处理器。

      这太令人惊讶了。让我分解一下这组步骤的作用:

      1. mkdir -p "$HOME/dotnet" 在您的主目录中创建一个名为 dotnet 的目录
      2. tar xf ... 提取您在步骤 1 中创建的 dotnet 目录中的 dotnet SDK tarball
      3. export DOTNET_ROOT=$HOME/dotnet 定义了一个环境变量 DOTNET_ROOT。 .NET 运行时需要它;我自己对为什么有点模糊
      4. export PATH=$PATH:$HOME/dotnet 将您安装 .NET SDK 的目录添加到环境变量 PATHPATH 是操作系统用来搜索您输入的命令的位置列表。例如,当您在命令行中键入 dotnet 时,它会在此目录列表中搜索 dotnet 可执行文件(想想 Windows 上的 dotnet.exe)。

      那么我们来一一调试吧:

      • 目录dotnet 是否存在于您的主主目录​​(又名$HOME)中?你能cd ~/dotnet吗?这行得通吗?
      • 解压压缩包后,您是否在$HOMEdotnet 目录中看到一个名为dotnet 的文件? ls $HOME/dotnet/dotnet 有效吗?它向您展示了什么?
      • echo $PATH 向您展示了什么?它是否在值中包含该 dotnet 目录?
      • 如果您运行which dotnet,它会在您的主$HOME 目录中找到dotnet 可执行文件吗?

      运行 SDK

      当我运行它时,我得到了以下错误

      [ec2-user@ip-0-0-0-0 home]$ dotnet --list-sdk
      Process terminated. Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support
      

      错误包括以下短语:找不到系统上安装的有效 ICU 软件包。

      确实是这个意思。您需要为您的 Linux 发行版安装 ICU 软件包:

      sudo yum install libicu
      

      然后尝试再次运行dotnet --list-sdk

      错误运行dll

      Failed to load ▒r▒), error: /home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0/libhostpolicy.so: cannot open shared object file: No such file or directory
      An error occurred while loading required library libhostpolicy.so from [/home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0]
      

      这很奇怪。它说它找不到应该是 .NET Core 安装一部分的文件。

      • dotnet --list-runtimes 说什么?它是否显示安装的 3.0.0 运行时?如果没有,那意味着你的安装搞砸了。您可能应该再次安装 .NET Core 3.0。 (或者更好的是,安装 3.1,因为 3.0 已经报废)。

      • 文件/home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0/libhostpolicy.so 是否存在?如果不是,那就是和上面一样的问题:你的安装搞砸了。

      • file /home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0/libhostpolicy.so 说什么?是ELF 64-bit LSB shared object吗?

        • 输出为:ELF 64-bit LSB shared object, x86-64

        • 这是一个x86-64 文件!换句话说,您已经(不知何故)安装了linux-x64(英特尔 64 位架构)运行时。毫不奇怪,它不适用于 ARM 64 位架构。您需要删除它并重新安装 SDK。我建议您删除当前的安装 (rm -rf $HOME/dotnet) 并重新安装 linux-arm64 SDK。

      【讨论】:

      • sudo yum list 'dotnet-sdk*' 这给了我[ec2-user@ip-0-0-0-0 ~]$ sudo yum list 'dotnet-sdk*' Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Error: No matching Packages to list
      • Does the directory dotnet exist in your main home directory (aka $HOME)? Can you cd ~/dotnet? Does that work?After you extract the tarball, do you see a file named dotnet in the dotnet directory in your $HOME? Does ls $HOME/dotnet/dotnet work? What does it show you?[ec2-user@ip-0-0-0-0 ~]$ ls $HOME/dotnet/dotnet /home/ec2-user/dotnet/dotnet $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/home/ec2-user/dotnet:/home/ec2-user/dotnet $ which dotnet ~/dotnet/dotnet
      • 当我运行命令sudo yum install libicu时,我收到了一条消息Package libicu-50.2-4.amzn2.aarch64 already installed and latest version Nothing to do
      • 哦,这是aarch64 机器吗?我错过了问题中的arm64。现在一切都变得更有意义了。将再次编辑我的答案。
      • What does file /home/ec2-user/dotnet/shared/Microsoft.NETCore.App/3.0.0/libhostpolicy.so say? Is it an ELF 64-bit LSB shared object? - 它说 _ ELF 64 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接,BuildID[sha1]=36c3a75b75401675fa55296e845b5330e9041b05,剥离_
      猜你喜欢
      • 2022-05-25
      • 2020-10-26
      • 1970-01-01
      • 2019-03-15
      • 2018-09-09
      • 2018-05-06
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多