我快要淹死了,我们中的任何一个人都可以及时给我一个救生圈吗?:)
我正在尝试在 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 的初学者,我了解到回显$?
给了我最后一个语句退出代码(就此而言,运行 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 软件包中,该目录位于与二进制软件包同名的目录中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
。