最近买了个树莓派3B+,准备把自己写的一个.Net Core爬虫挂在上面跑
买之前没有想到树莓派因为是今年新出的,导致驱动以及系统啥的都不是很完善,导致走了很多弯路,早知道买树莓派3就不用那么多折腾了
首先买来之后安装了树莓派的官方系统,跑了下数据库emmm
左边是树莓派上进行的数据库增删改减的计时,单位是毫秒,右边是台式机上面跑的速度,可以说性能还是相当不满意的(其中相当大的消耗是在创建数据库上)
然后我当然不能忍,于是就准备换一个我熟悉的Ubuntu系统试试会不会是系统原因造成的这种情况
换成Ubuntu后,由于是树莓派3B+,没有找到对应的基于Arm32架构编译的,只找到某个大神基于Arm64编译的,所以碰到了不少的问题。
以下是正文
首先从https://github.com/chainsx/ubuntu64-rpi下载并部署基于Linux-arm64(aarch64)的Ubuntu 18.04系统
然后将tf卡插入树莓派后启动,这里有点需要注意,这个系统在树莓派3B+上面,插入网线是不工作的,所以你还是需要用HDMI线和键盘来操作以及显示
登录root后输入
sudo chainsx-tools
进入该系统的编译作者做的一个配置工具,在这里你可以选择连接并自动配置wifi(不知道为啥,在我这没法连接到5G的wifi,可能还是驱动的问题)
连接上Wifi后,就可以拔掉HDMI和键盘,直接使用台式机远程SSH连接过去操作了,而且每次开机时自动连接的,这点挺好
好了,接下来配置 .Net Core环境
由于在arm架构上面,好像是没有.Net Core的SDK的吧,不过,好在Runtime还是可以安装的
不过,我并不清楚Runtime是不是必须的,装着吧,反正没啥损失
wget https://dotnetcli.blob.core.windows.net/dotnet/Runtime/master/dotnet-runtime-latest-linux-arm64.tar.gz
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet-runtime-latest-linux-arm64.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
然后我们安装必要的依赖项目
输入以下命令
sudo apt update && sudo apt upgrade
sudo apt-get install curl libunwind8 gettext apt-transport-https
sudo dpkg --add-architecture armhf
sudo apt-get update
sudo apt-get install libc6:armhf libunwind8:armhf gettext:armhf liblttng-ust0:armhf libcurl3:armhf libssl1.0.0:armhf libkrb5-:armhf zlib1g:armhf libicu60:armhf
讲一下上面这些都干了啥吧
首先,安装必要的依赖库,这些在https://github.com/dotnet/core/blob/master/samples/RaspberryPiInstructions.md可以看到
不知道出于什么原因,目前发布版的.Net Core 只能编译成arm32(armhf)而不是arm64(aarch64),而我所使用的的树莓派3B+只能安装arm64架构的Ubuntu系统(树莓派3有arm32架构的ubuntu可以安装,所以使用树莓派3反而能轻松不少)、
所以第一步需要先开启32位支持
然后还需要安装能用于32位的二进制依赖库才能正常运行
好,姑且系统层面已经部署完毕了,下面是项目层面的事情
首先
运行CMD然后CD到项目目录
然后输入命令
dotnet publish -r linux-arm
说明:-r表示运行平台,可以是win-arm、linux-arm、linux-arm64、win-x86、win-x64等等,具体取决于你安装的.Net Core SDK支持什么
你们可能会问,干嘛不直接发布成linux-arm64的,其实我也想这样做,而且确实可以安装预览版的SDK(https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.1.0-preview2-download.md)
不过不知道出于什么原因,我还是无法在树莓派的Ubuntu上面正常运行,有空再试试,目前还是不了了之
然后,我们接下去吧
在项目的目录中会生成bin\Debug\netcoreapp2.0\linux-arm 文件,把linux-arm文件夹下的publish文件夹的内容全部复制到树莓派上
用FTP发过去就行
然后SSH到树莓派,CD到对刚才复制的项目目录授权755或777
chmod ./项目名
经过以上这么折腾以后,我们终于可以运行.Net Core的项目了
输入
./项目名
后
在树莓派上成功运行了我所创建的项目,同样的数据库增删改减,所使用的的时间几乎只要原先的的一半所有,可以说相当满意了。