最近买了个树莓派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的项目了

输入

./项目名

在树莓派上成功运行了我所创建的项目,同样的数据库增删改减,所使用的的时间几乎只要原先的的一半所有,可以说相当满意了。

树莓派3B+上运行.Net Core项目的更多相关文章

  1. 2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐

    原文:2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐 image Raspberry Pi** 是一款基于 ARM 的单板计算机,默认运行一款称为 Raspbian ...

  2. [翻译]第三天- 在 Mac 上运行 .NET Core 应用程序

    原文: http://michaelcrump.net/part3-aspnetcore/ *** 简介 该系列文章的完整列表如下: 第一天 - 在 Windows 下安装和运行 .NET Core ...

  3. 在树莓派3B上安装node.js

    本文主讲如何在树莓派3B上安装node.js 环境描述1. 树莓派安装了`2016-11-25-raspbian-jessie-lite`(PS:在此版本的镜像中,默认禁用了ssh,在烧录好镜像之后, ...

  4. 树莓派3B上部署运行.net core 2程序

    针对Linxu arm处理器如何部署.net core 2的资料很少,网上找到几篇但都写得不够详细,按照他们教程来撞墙了,折磨了几天终于部署成功了,先上一张运行成功的图 1.windows系统中,在项 ...

  5. 在树莓派上运行 .net core 2.1 程序 并实现开机启动

    本篇文章完整的说明如和在树莓派上运行 .net core2.1程序,当然也参考了其他的博客,此处结合我自己的经验,再写一篇完整的博客,方便大家,还有我自己进行查阅. https://blog.csdn ...

  6. linux环境上运行.net core 初探

    1.安装 .net core 环境 rpm --import https://packages.microsoft.com/keys/microsoft.ascsh -c 'echo -e " ...

  7. 树莓派上运行.net core 2.0程序

    记录中 参考: https://www.cnblogs.com/songxingzhu/p/7399991.html https://www.cnblogs.com/goodfulcom/p/7624 ...

  8. Docker上运行dotnet core

    下载microsoft/dotnet镜像 运行命令: docker pull microsoft/dotnet 如果没有使用阿里镜像加速的,参照这篇先配置好再跑上面命令: http://www.cnb ...

  9. 在docker上运行.net core程序

    一.安装docker及镜像 1.在centos上安装docker,命令如下: # yum install docker 2.让docker随机启动: # service docker start# c ...

随机推荐

  1. CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基

    https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...

  2. java8---lambda表达式

    语法糖 lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块).Lambda表 ...

  3. MUI上传图片之选择相册和相机上传

    1.因为项目中有三处地方需要上传,所以html中存在三处地方.身份证正反面为上传一张,发票限制上传9张. <div class="action1"> <!--展示 ...

  4. 无向图 解决Unity地图上固定网络上,标记走固定步数能到达的位置

    首先需要了解无向图的定义 参考:https://www.cnblogs.com/wxgblogs/p/5572391.html 我们选择链表的方式进行操作. int StartPositon; int ...

  5. Django之Orm的各种操作

    1.一般操作 ***必知必会13条*** <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 models.Cu ...

  6. eclipse下properties文件中文乱码的解决方案

    今天在工程下编辑.properties文件时输入了中文然后就保存出错,弄了好久才搞定!大家瞄瞄 在中文操作系统下,Eclipse中的Java类型文件的编码的默认设置是GBK,但是对Properties ...

  7. Bootstrap-datepicker3官方文档中文翻译---Options/选项(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)

    Options/选项 带“Date”的所有选项都可以处理 Date 对象; 字符串格式化根据 给定的 format 而定; 相对于今天的时间变量, 如 “-1d”, “+6m +1y”等等, 其中有效 ...

  8. nginx代理 (带着请求头)

    当你获得云服务器之后, 你有这样一个需求:当你要访问一个url的时候,这个URL只能在人家的云服务器上访问(比如百度),所以你要买百度的BCC,你可能在想在BCC起服务,那样有点麻烦,直接使用ngin ...

  9. PHP金钱数字转金钱大写

    /* * 数字金额转换成中文大写金额的函数 * String Int $num 要转换的小写数字或小写字符串 * return 大写数字 */ function num_to_rmb($num){ $ ...

  10. 从Jensen不等式到Minkowski不等式

    整理即证 参考资料: [1].琴生不等式及其加权形式的证明.Balbooa.https://blog.csdn.net/balbooa/article/details/79357839.2018.2 ...