麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)

麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)

适用环境:麒麟 Linux aarch64,达梦(DM)数据库,.NET 6。

部署目录约定:

  • .NET 运行时:/home/hmf/dotnet

  • 应用本体:/home/hmf

一、安装.NET6运行环境

wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh

chmod +x dotnet-install.sh

不加 --runtime 参数 = 装完整 SDK(含编译工具链 + 对应运行时)

./dotnet-install.sh --channel 6.0 --install-dir /home/hmf/dotnet

配置环境变量(安装在用户目录下,写入 ~/.bashrc 即可,不需要 root)echo 'export DOTNET_ROOT=/home/hmf/dotnet' >> ~/.bashrc

echo 'export PATH=$PATH:/home/hmf/dotnet' >> ~/.bashrc

source ~/.bashrc

#验证版本

dotnet --info

dotnet --list-sdks # 应该能看到 6.0.x

dotnet --list-runtimes # 应该能看到 Microsoft.AspNetCore.App 6.0.x 和 Microsoft.NETCore.App 6.0.x

离线环境(连不了外网):改成下载 dotnet-sdk-6.0.x-linux-arm64.tar.gzdotnet.microsoft.com),传到 tidb 后解压到 /home/hmf/dotnet,其余步骤一样。

#检查版本Version: 6.0.36

二、适配应用

2.1、准备达梦驱动

达梦官网(<www.dameng.com>)下载中心,用达梦通行证账号登录后下载 .NET 驱动包(文件名类似 dotNet-<日期>.zip),解压后会看到几个文件夹,比如:

dmDriver/

DmProvider/ <- 这个就是我们要用的

DM.DmProvider.8.3.1.51364.nupkg <- 真正的 NuGet 包文件

net40/ net45/ net5.0/ net6.0/ ... <- 包展开后按目标框架分的 lib 目录,不用管

EFCore.Dm6.0/ <- Entity Framework Core 驱动,本项目用不到,不用管

DmProvider 这个文件夹整个传到目标机,比如放在 /home/hmf/dmDriver/DmProvider

注册为本地 NuGet 源

dotnet nuget add source /home/hmf/dmDriver/DmProvider --name dm-local

如果提示 dm-local 这个名字已经存在(比如之前加过、指向了别的路径),改用:

dotnet nuget update source dm-local --source /home/hmf/dmDriver/DmProvider

确认一下:

dotnet nuget list source

dm-local 那一行应该显示 /home/hmf/dmDriver/DmProvider

2.2、加到项目里

cd /home/hmf/TestApp

dotnet add package DM.DmProvider --version 8.3.1.51364 -s /home/hmf/dmDriver/DmProvider

会自动把 <PackageReference Include="DM.DmProvider" Version="8.3.1.51364" /> 写进 TestApp.csproj,不用手动改文件。

换了机器部署时,这一步(下载驱动 + 注册本地源 + add package)都要重新做一遍,因为 dotnet nuget add source 是注册在当前机器的全局 NuGet 配置里的,不会跟着项目代码一起传过去。

2.3、还原依赖并编译

cd /home/hmf/TestApp

dotnet build -c Release

2.4、 修改数据库连接配置

编辑 /home/hmf/TestApp/appsettings.json

{

"ConnectionStrings": {

"DmConn": "Server=<达梦库地址>;Port=<端口,默认5236>;User Id=<用户名>;PWD=<密码>;"

},

"Kestrel": {

"Endpoints": {

"Http": {

"Url": "http://0.0.0.0:8089"

}

}

}

}

监听地址建议用 0.0.0.0(监听所有网卡)而不是写死具体 IP,机器换 IP 或有多网卡时更省心。

2.5、 运行前先验证数据库网络连通性

telnet <达梦库地址> 5236

nc -zv <达梦库地址> 5236

disql 等达梦客户端工具的话,也可以直接拿账号密码连一下确认,OK 之后再启动本应用,避免网络问题和应用层报错混在一起排查。

2.7、发布并直接运行验证

cd /home/hmf/TestApp

dotnet publish -c Release -o /home/hmf/TestApp/out

cd /home/hmf/TestApp/out

dotnet TestDmPlugin.dll

看到类似输出说明启动成功:

Now listening on: http://0.0.0.0:8089

Application started. Press Ctrl+C to shut down.

浏览器访问 http://10.1.1.229:8089/,应看到 select/other 两个 SQL 输入框的界面,测试 SQL 确认能正常连上达梦库并返回结果。

Ctrl+C 停止后,继续第 8 步配置为系统服务长期运行。

查看日志

页面每次点击 execSelect / execOther 执行 SQL,都会记录一条日志(请求的 SQL、成功返回行数/影响行数、或失败时的异常堆栈),写入运行目录下的 logs 文件夹,按天滚动:

/home/hmf/TestApp/out/logs/app-20260720.log

  • 日志目录可通过 appsettings.json 里的 Logging:LogDirectory 配置,默认值 logs(相对可执行文件所在目录),也可以填绝对路径。

  • 前台运行(第7步)和 systemd 服务(第8步)用的是同一份代码,都会写这个日志文件,跟终端输出/journalctl 是两份独立的记录,互不影响。

  • 排查问题时优先看这个文件,比 journalctl 更完整(包含每次 SQL 请求明细)。

tail -f /home/hmf/TestApp/out/logs/app-$(date +%Y%m%d).log

三、配置systemd服务和开放端口

3.1、置systemd服务

创建 /etc/systemd/system/testapp.service

Unit

Description=TestApp DM Plugin Test

After=network.target

Service

WorkingDirectory=/home/hmf/TestApp/out

ExecStart=/home/hmf/dotnet/dotnet /home/hmf/TestApp/out/TestDmPlugin.dll

Restart=always

RestartSec=5

KillSignal=SIGINT

SyslogIdentifier=testapp

User=hmf

Environment=ASPNETCORE_ENVIRONMENT=Production

Install

WantedBy=multi-user.target

启用并启动:

systemctl daemon-reload

systemctl enable testapp

systemctl start testapp

systemctl status testapp

查看日志:

journalctl -u testapp -f

除了 journald,应用自身还会把日志写入文件(详见下方「日志文件」一节),路径固定在 /home/hmf/TestApp/out/logs/,不受 systemd/前台运行方式影响,且不会随终端关闭或服务重启丢失。

后续改了代码,重新发布只需要:

cd /home/hmf/TestApp

dotnet publish -c Release -o /home/hmf/TestApp/out

systemctl restart testapp

3.2、开放防火墙端口

firewalld

firewall-cmd --permanent --add-port=8089/tcp

firewall-cmd --reload

或 iptables

iptables -I INPUT -p tcp --dport 8089 -j ACCEPT

四、常见问题

现象 可能原因 处理
dotnet build/dotnet add package 报找不到 SDK 只装了 Runtime,没装 SDK 回到第 1 步,用不带 --runtime 的命令装完整 SDK
dotnet add package DM.DmProviderNU1101/找不到包 本地 NuGet 源没注册对,或路径指错了 dotnet nuget list source 确认 dm-local 指向的路径就是 DmProvider 那个文件夹(里面直接能看到 .nupkg 文件的那一层)
编译报 warning MSB3245: Could not locate the assembly "DmProvider" csproj 里残留旧的 <Reference HintPath=...> 写法 打开 TestApp.csproj,删掉 <Reference Include="DmProvider"> 那一整段,只留 <PackageReference Include="DM.DmProvider" ...>
连接达梦库报错/超时 连接串错误、网络不通、达梦库未开放对应端口 先做第 6 步的网络连通性验证;检查 appsettings.json 连接串
页面打不开 端口未监听/防火墙未放行/进程未启动 ss -lntp | grep 8089 确认监听;检查 systemctl status testapp 和防火墙规则
中文乱码 精简版系统缺少区域/编码支持 确认系统已装 localezh_CN.UTF-8
权限不足无法监听端口 非 root 用户尝试监听 1024 以下端口 用 1024 以上端口(已经是 8089,没问题),或给可执行文件加 setcap 'cap_net_bind_service=+ep'

五、其他:达梦驱动下载

达梦官方下载平台(离线内网用,下载完整 ARM 驱动包)

主下载页(官方入口)

https://eco.dameng.com/download/

两种下载方式获取.NET 驱动

  1. 下载 DM8 ARM64 开发版安装包(推荐)

    • CPU 平台:鲲鹏 920(aarch64/ARM 通用)
    • 系统:银河麒麟 / 统信 UOS
    • 下载后解压 / 安装,路径:dmdbms/drivers/dotNet/
    • 内含 Dameng.Data.Provider.8.x.x.nupkg 离线安装包

2、页面底部【工具与驱动】单独下载.NET 驱动 下滑页面找到「.NET 开发包」,直接下载对应 DM8 版本驱动压缩包。本次我下载的是这个。下载的文件包为:dotNet-20260710.zip

相关推荐
fen_fen9 小时前
Filebeat 采集 应用日志部署 & Kibana 查询操作文档
linux·运维·服务器
苏宸啊9 小时前
linux线程池
linux
草莓熊Lotso9 小时前
【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”
服务器·数据库·python·langchain·pip
取谖慕12.9 小时前
Prometheus+Alertmanager+node_exporter+grafana高可用
linux·运维·grafana·prometheus
小此方9 小时前
Re:Linux系统篇(四十五)信号篇·三:一文讲透 Linux 信号保存机制:block,pending,handler三张表到底在做什么
linux·运维·服务器
2301_7779983418 小时前
Linux信号机制
linux
一叶龙洲20 小时前
win11与Ubuntu之间同步配置、插件
linux·运维·ubuntu
CHANG_THE_WORLD21 小时前
12.总结:深入理解 Linux I/O 多路复用:select、poll、epoll 全解析
linux·运维·服务器