Arch Linux에서 .NET Core 앱을 배포하는 방법
makepkg
와 self-contained
.NET 앱 간의 상호 작용에 대해 알아봅니다. PKGBUILD
파일에서 시작하여 이 self-contained
앱에서 수행하는 작업을 조사합니다.독립형 앱이란 무엇입니까?
.NET 세계에서 이는 앱의 게시된 아티팩트가 사용자 시스템에 .NET을 설치하지 않고도 실행할 수 있는 모든 것을 포함한다는 것을 의미합니다.
앱 빌드
이것은 publish command을 사용하여 Arch Linux에서 taskcore 앱을 빌드하기 위한
PKGBUILD
입니다.pkgname=taskcore
pkgver=1.0.0beta3
_pkgver=1.0.0-beta.3
pkgrel=1
arch=('x86_64')
url='https://github.com/tarikguney/taskcore'
license=("APACHE")
depends=("icu")
makedepends=("dotnet-sdk")
options=("staticlibs")
source=("$url/archive/v$_pkgver.tar.gz")
sha256sums=('8472c31bb7cff8b6f543a46288753747d9c47fee8f32b3e198f8da5bcea3fca6')
build() {
cd "$pkgname-$_pkgver/TaskCore.App"
MSBUILDDISABLENODEREUSE=1 dotnet publish \
--configuration Release \
--self-contained true \
--runtime linux-x64 \
-p:PublishTrimmed=true \
--output ../$pkgname \
./TaskCore.App.csproj
}
package() {
cd "$pkgname-$_pkgver"
install -d $pkgdir/usr/{bin,lib}
cp -r $pkgname "$pkgdir/usr/lib/"
ln -s "/usr/lib/$pkgname/$pkgname" "$pkgdir/usr/bin/$pkgname"
}
종속성
Arch Linux에 .NET Core를 설치하는 것은 매우 쉽습니다.
depends=("icu")
makedepends=("dotnet-sdk")
이 앱을 실행하려면 icu 패키지(유니코드 라이브러리용 국제 구성요소)가 필요합니다. 그렇지 않으면 다음 오류가 발생합니다.
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.
makepkg 옵션
staticlibs
의 PKGBUILD
옵션을 사용하여 Arch에 패키지에 정적 라이브러리 파일을 남겨두도록 지시해야 합니다. 그렇지 않으면 makepkg
는 라이브러리가 OS에서 중복된 파일을 피하기 위해 종속성 패키지로 설치된다고 가정합니다.게시 인수
-p:PublishTrimmed=true
는 실행 파일에 정적으로 연결되어 있지 않은 경우 빌드 출력에서 사용하지 않는 라이브러리를 제거합니다.--self-contained true
는 플랫폼별 실행 파일을 생성하므로 대상 플랫폼을 --runtime linux-x64
, 다른 옵션은 linux-arm64
또는 linux-musl-x64
Alpine Linux와 같은 musl을 사용하는 경량 배포판에 포함해야 합니다.-p:PublishSingleFile=true
를 사용하여 실행 파일 내부에 라이브러리를 게시할 수 있지만 makepkg
실행 파일에서 모든 라이브러리를 제거합니다. 이 최적화는 기호(디버그에 일반적으로 사용됨)를 제거하고 더 가벼운 패키지를 얻는 데 유용하지만 .NET의 경우 다음을 사용해야 합니다.options=("!strip")
MSBUILDDISABLENODEREUSE=1
는 어떻습니까? 빌드를 여러 번 실행할 때 이 오류를 발견했습니다.MSBUILD : error MSB4166: Child node "2" exited prematurely. Shutting down...
실패한 빌드는 MSBuild 프로세스를 방치하는 것 같습니다.
앱을 패키징하는 방법
모든 빌드 출력을
/usr/lib/taskcore
로 이동해야 합니다.cp -r $pkgname "$pkgdir/usr/lib/"
그런 다음 심볼릭 링크를 사용하여 로컬로 로그인한 사용자가
taskcore
명령에 액세스할 수 있도록 해야 합니다.ln -s "/usr/lib/$pkgname/$pkgname" "$pkgdir/usr/bin/$pkgname"
# /usr/bin/taskcore -> /usr/lib/taskcore/taskcore
그리고 완료되었습니다! 우리는 Linux용 .NET 독립형 앱을 처음으로 만들었습니다. 그냥 빌드:
makepkg -s
.NET에 대한 추가 정보
.NET으로 시작하고 싶다면 Scott Hanselman의 멋진 비디오를 볼 수 있습니다.
Reference
이 문제에 관하여(Arch Linux에서 .NET Core 앱을 배포하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cloudx/how-to-distribute-a-net-core-app-in-arch-linux-13nj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)