물에 빠져 죽고 있어요. 제때에 구명 조끼를 줄 수 있는 사람이 있나요? :)
Linux에 .NET Core Worker Service 애플리케이션을 배포하려고 합니다. 이에 대한 패키지를 만들려고 합니다.
이 기사내가 달성하고 싶은 것을 정확하게 해결하는 것 같습니다. 따라했지만 dpkg-buildpackage -b --no-sign
아래 설치 문에서 알 수 있는 한 실패했습니다. ( 설치 문은 install -D -m 755 bin/Debug/netcoreapp3.1/linux-x64/publish/* /opt/myApp
이 기사의 지침을 rules
실행한 후 만든 파일의 일부 입니다.)dh_make
내 rules
파일:
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#export DH_VERBOSE = 1
# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
# package maintainers to append LDFLAGS
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
%:
dh $@ --with=systemd
override_dh_auto_build:
dotnet publish -r linux-x64 --self-contained true -p:PublishTrimmed=true
override_dh_auto_install:
# install application
mkdir -p /home/myUserName/myApp
echo 'Log Message 1'
install -D -m 755 bin/Debug/netcoreapp3.1/linux-x64/publish/* /home/myUserName/myApp
echo 'Log Message 2'
rm /home/myUserName/myApp/*.pdb #delete pdb
# install debug symbols
mkdir -p /home/myUserName/debug/myApp
install -D -m 644 bin/Debug/netcoreapp3.1/linux-x64/publish/*.pdb /home/myUserName/debug/myApp
dotnet-symbol --symbols bin/Debug/netcoreapp3.1/linux-x64/publish/ -o /home/myUserName/debug/myApp
# auto-install disabled
override_dh_shlibdeps:
# shilbdeps disabled
override_dh_strip:
# strip disabled
# dh_make generated override targets
# This is example for Cmake (See https://bugs.debian.org/641051 )
#override_dh_auto_configure:
# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
단독으로 실행하고 자세한 플래그(-v)를 추가하면 오류 메시지가 표시되지 않습니다(시도했지만 | grep -i error
아무 것도 표시되지 않음). 저는 Linux를 처음 접했고 echo가 마지막 명령문 종료 코드를 제공한다는 것을 알게 되었습니다 $?
(이 문제에 대해 ls를 실행하고 $?를 에코하면 0을 반환하고, 위의 install 문을 실행하고 $?를 에코하면 1을 반환합니다).
달리는errno 1
EPERM 1 Operation not permitted
문제는 /opt에 쓰는 것일 수도 있다고 생각합니다. 대상 폴더를 /home의 폴더로 변경해도 여전히 동일한 결과가 나타납니다.
어떻게 진행하나요? 이 설치 명령문의 문제점을 어떻게 알 수 있습니까? 이 패키지를 설치해야 한다는 내용을 어디선가 읽었습니다. 실행했지만 패키지가 아직 설치되지 않았음을 나타내는 dpkg-deb -I myApp
반환이 발생했습니다 .error: failed to read archive 'myApp': No such file or directory
친절하게 대하고 생명을 구해주세요!
답변1
패키지를 빌드할 때 파일을 최종 위치에 설치하는 대신 "마샬링" 영역에 설치해야 합니다. 데비안 패키지에서는 바이너리 패키지와 이름이 같은 디렉터리에 있습니다 debian
.
install -D -m 755 bin/Debug/netcoreapp3.1/linux-x64/publish/* debian/netcoreapp/opt/myApp
(패키지가 이라고 가정 netcoreapp
) 그러나 이는 현재 발생한 문제를 설명하지 않으며 install
문제를 해결하지 못할 수도 있습니다.
이 문제를 수동으로 해결하는 대신당신은 사용해야합니다dh_install
바꾸다 install
:
dh_install bin/Debug/netcoreapp3.1/linux-x64/publish/* opt/myApp
답변2
패키지가 myApp이라고 가정하고 다음을 시도해 보세요.
override_dh_auto_install:
# install application
mkdir -p debian/myApp/opt/myApp
install -D -m 755 bin/Debug/netcoreapp3.1/linux-x64/publish/* debian/myApp/opt/myApp/myApp
rm debian/myApp/opt/myApp/*.pdb #delete pdb
# install debug symbols
mkdir -p debian/myApp-dbg/opt/myApp
install -D -m 644 bin/Debug/netcoreapp3.1/linux-x64/publish/*.pdb debian/myApp-dbg/opt/myApp
dotnet-symbol --symbols bin/Debug/netcoreapp3.1/linux-x64/publish/ -o debian/myApp-dbg/opt/myApp
# auto-install disabled
이 dpkg-buildpackage -b --no-sign
명령은 아무것도 설치하지 않습니다. 단지 deb 패키지를 생성합니다. 그 후에는 를 사용하여 설치할 수 있습니다 dpkg -i yourpackagename.deb
.