五、Linux部署说明
网关内运行的是Linux系统(本文涉及的是Ubuntu系统,下文中所说的也都是基于Ubuntu系统)。由于AMD64和ARM两种架构在部署的过程中差异较大,需要分开说明。
5.1 AMD64架构部署
.NET安装
在AMD64架构下,.NET的安装使用官方说明即可。
先运行:
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
再运行:
apt-get update apt-get install -y apt-transport-https apt-get update apt-get install -y aspnetcore-runtime-6.0
复制系统编译文件
可以使用WinSCP工具,把系统编译文件复制到网关中。我们这里复制到/root/DataAcquisition目录下。
cd ~ mkdir DataAcquisition
编译SerialPortStream
数据采集网关,使用串口通信是很普遍的需求。但是.NET原生代码里没有可在Linux系统上运行的串口通信库。我们这里使用SerialPortStream进行替换。因为Linux系统各异,需要把SerialPortStream的C语言写的源代码编译一次,生成几个so文件,才能被C#代码调用。
安装编译环境:
apt-get install -y git apt-get install -y build-essential apt-get install -y cmake
下载和编译:
cd ~ git clone https://github.com/jcurl/serialportstream.git cd serialportstream/dll/serialunix ./build.sh
最后,是复制生成的so文件到采集程序的根目录。
开机启动
对于一个网关程序来说,很重要的一点是开机启动。我们这里采用添加service,在service里调用sh脚本的方法。
编写如下所示的service文件:
[Unit] Description=Start Program After=syslog.target [Service] ExecStart=/root/DataAcquisition/start_program.sh [Install] WantedBy=multi-user.target
然后复制到/etc/systemd/system目录下。
我们还需要编写service里调用的start_program.sh文件。可以如下所示:
cd /root/DataAcquisition/MyProgram dotnet MyProgram.dll
代码很简单,就是用dotnet启动我们写的程序。
注意在复制完文件之后,修改文件的权限。
5.2 ARM架构部署
在ARM架构下部署,相对来说是复杂一些的,因为软件厂商支持更多的是AMD64架构的。
调整镜像源
对于一般的下载源,在ARM架构下的源一般是不一样的,看官方的说明。例如对于清华Ubuntu源,要使用最下面提示的ubuntu-ports镜像。
.NET安装
在ARM架构下,一般只能使用比较原始的方法去安装.NET。
1、下载.NET-Linux-Arm的安装包。
2、复制到网关的某个位置。
3、解压。
4、设置dotnet环境变量。
复制系统编译文件
这一步跟在AMD64架构下的方法是一样的。
编译SerialPortStream
SerialPortStream的官方编译方法并不支持ARM架构,需要使用以下方法:
1、安装编译环境:
apt-get install make apt-get install cmake apt-get install gcc apt-get install g++
2、复制源代码到网关中,进入serialunix目录。
3、执行以下代码:
cmake ./ make make install
这样就能生成三个so文件,把它们复制到使用串口的程序根目录。
开机启动
这一步跟在AMD64架构下的方法也是一致的。