.NET 应用打包Debian包
代码发布(编译为自包含的可执行文件,ARM64)
项目文件是 myproject.FaceCollect.csproj,发布后生成的可执行文件名称为 facecollect。在项目根目录执行:
1 | dotnet publish myproject.FaceCollect.csproj \ |
- -c Release 指定发布模式为 Release。
- -r linux-arm64 指定目标运行环境为 Linux ARM64。
- -p:PublishSingleFile=true 表示发布为单文件可执行程序。
- -p:PublishTrimmed=false 是否裁剪程序集可根据实际需求选择(如果使用了动态反射较多,建议先关闭裁剪)。
- -p:AssemblyName=facecollect 让生成的可执行文件名为 facecollect。
- -o publish 指定输出目录。
发布成功后,publish
目录下会生成一个可执行文件 facecollect
以及一些运行所需文件(如果不是单文件,还有其他依赖文件)。
准备打包目录结构
创建一个临时打包工作目录(这里示例版本设为 1.0.0,可根据实际情况修改):
1 | mkdir facecollect_1.0.0_arm64 |
在该目录下按照 Debian 打包规范创建必要的目录结构:
1 | cd facecollect_1.0.0_arm64 |
拷贝发布产物到对应目录
将上一步生成的 publish 文件夹内容拷贝到 usr/local/facecollect
目录下:
1 | cp -r publish/* facecollect_1.0.0_arm64/usr/local/facecollect |
如果你已经把主可执行文件命名为 facecollect
,可以给它加执行权限(有时编译生成默认已有执行权限):
1 | chmod +x facecollect_1.0.0_arm64/usr/local/facecollect/facecollect |
编写 systemd 服务文件
在 facecollect_1.0.0_arm64/etc/systemd/system/
下创建服务文件 facecollect.service,内容如下:
1 | bashCopy codecat << EOF > facecollect_1.0.0_arm64/etc/systemd/system/facecollect.service |
- ExecStart 指向可执行文件的绝对路径。
- WorkingDirectory 指定工作目录(可根据需要调整)。
- User=root / Group=root 指定以 root 身份运行(如需以其他用户运行可自行修改)。
- Restart=always 确保服务异常退出时自动重启。
- WantedBy=multi-user.target 配合
systemctl enable
实现开机自启动。
编写 DEBIAN 控制文件
创建控制文件 control(示例):
1 | bashCopy codecat << EOF > facecollect_1.0.0_arm64/DEBIAN/control |
- Package 包名称。
- Version 包版本。
- Architecture 架构为
arm64
。- Maintainer 维护者信息,随意填写或按需填写。
- Description 包描述。
编写安装后脚本(postinst)
在安装完成后自动执行一些操作,比如 systemctl daemon-reload
、systemctl enable
和 systemctl start
。
在 DEBIAN
目录下创建 postinst:
1 | cat << 'EOF' > facecollect_1.0.0_arm64/DEBIAN/postinst |
给脚本加执行权限:
1 | chmod +x facecollect_1.0.0_arm64/DEBIAN/postinst |
也可以根据需要添加
preinst
、prerm
、postrm
等脚本进行安装前/卸载前/卸载后等自定义操作。
生成 DEB 包
在 facecollect_1.0.0_arm64
同级目录下执行:
1 | dpkg-deb --build facecollect_1.0.0_arm64 |
成功后,会在当前目录下生成一个名为 facecollect_1.0.0_arm64.deb 的安装包。
安装并验证服务
将 facecollect_1.0.0_arm64.deb 拷贝到目标机器(ARM64 Linux)上,然后执行:
1 | sudo dpkg -i facecollect_1.0.0_arm64.deb |
如果安装过程无异常,会自动执行以下操作:
- 安装程序到
/usr/local/facecollect
- 安装服务文件到
/etc/systemd/system/facecollect.service
- 执行 postinst 脚本,启用并启动服务
安装完成后,可以用以下命令验证服务状态:
1 | systemctl status facecollect |
如果状态显示为 **active (running)**,则表示已经成功运行。
其他操作
启动服务
1
systemctl start facecollect
停止服务
1
systemctl stop facecollect
查看日志
1
journalctl -u facecollect -f
卸载
1
sudo dpkg -r facecollect
若还要清理所有配置文件,可用
dpkg -P facecollect