Amazon Linux 2023 Dotnet Runtime Fatal Error : folder [/usr/lib64/dotnet/host/fxr] does not contain any version-numbered child folders

FGPRJS·2023년 5월 18일
post-thumbnail

문제 사항

Amazon Linux 2023에서 Dotnet runtime을 설치하는 이하의 과정을 수행한다.

  1. 이하 명령어로 패키지 추가하기
    (Amazon Linux 2023은 Rhel(Red Hat Enterprise Linux) 기반)
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
  1. 이하 명령어로 dotnetcore runtime 설치하기
sudo yum install aspnetcore-runtime-{version}
  1. 설치가 잘 되었는지 확인해보기
dotnet --list-runtimes
  1. 다음과 같은 오류가 발생함을 알 수 있다.

A fatal error occurred, the folder [/usr/lib64/dotnet/host/fxr] does not contain any version-numbered child folders

이전에는 발생하지 않는 오류였는데, 새로 환경을 구축할 때 발생하였다.


문제 원인(예상)

그나마 유사한 사례는 다음 링크. (완전히 동일한 사례는 아니다.)
여기서 제시하는 문제원인은 repo-conflict이라는 것이다.

이하는 현재 설치하려는 runtime과 관련된 Package의 목록의 일부이다.

amazonlinux의 Repo와 packages-migrosoft-com-prod의 repo-conflict가 아닌가? 예상된다.

문제 원인

이전에 정상 구동했던 환경에서의 폴더 구조는 다음과 같다.

  • (/usr/share/dotnet)

지금 구축된 환경에서의 동일한 폴더에서의 폴더 구조는 다음과 같다.

  • (usr/share/dotnet)
    -> dotnet파일이 사라져있다...

사라진 dotnet파일은 다른 곳에 있다.

  • (usr/lib64/dotnet)

readlink를 통하여 user bin dotnet이 무엇을 실행하나 보았더니 이 폴더의 dotnet파일을 사용한다.

readlink /user/bin/dotnet

여기 위에 있는 host안에는 fxr폴더가 있는데, 이 안이 비어있다.
정상적이라면, 버전이름이 있는 폴더가 있어야 한다.
저것이 없어서 이하 오류가 발생한다.

A fatal error occurred, the folder [/usr/lib64/dotnet/host/fxr] does not contain any version-numbered child folders

해결 방법

.NET Core가 구버전인경우, Amazon Linux 2023을 사용하지 않는다.
(6+ 일때 2023 사용 권장)
Amazon Linux 2는 구버전이라도 정상적으로 구동되므로, 이를 이용한다.

기타 시행착오

Repo 변경

혹시 의존성을 packages-microsoft-com-prod에서만 가져올 수 있는것이 아닐까? 하며

sudo yum --disablerepo=amazonlinux --skip-broken install aspnetcore-runtime-{version}

으로 amazonlinux repo를 disable해보았다.

Error:
Problem: conflicting requests

라는 오류와 함께 설치되지 않았다.

몇가지의 package가 microsoft repo에 없는 것으로 보인다.

rhel 7이 아니라 8로 해보기

RHEL7링크가 아니라 8링크로 해보았다.

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm

No match for argument: aspnetcore-runtime-{version}
Error: Unable to find a match: aspnetcore-runtime-{version}

해당 버전의 런타임을 찾지 못한다고 한다.

설치되는 repo의 이름 차이점은

packages-microsoft-prod-1.0-1.noarch (v8)

packages-microsoft-prod-1.0-1.el7.noarch (v7)

이다.

el7이 붙은 쪽이 더 최신이라고 한다.

경로 강제로 바꿔보기

파일 자체를 옮기기에는 환경적인 문제가 있을 수 있으므로,

  1. 비어있는 지금의 host폴더는 치우고
rm -r /usr/lib64/dotnet/host
  1. 원래 있어야 할 host, shared 폴더를 링크로 가져온다.
sudo ln -s /usr/share/dotnet/shared ./shared
sudo ln -s /usr/share/dotnet/host ./host
  1. 테스트가 올바로 된다.

하지만, 정상 구동은 되지 않는다.
위 방법 사용하지 말 것

profile
FGPRJS

0개의 댓글