关于OpenWrt下运行.Net需要上Mono这回事

 


 

这几天淘到了一台T640 Plus ,买了一个 I350 AM3 祖国版 和 i210 移除掉自带的 Mini-Pcie 网卡 搭建家庭主路由来着、毕竟T640 支持 AES 指令集 性能强大 拓展完善

原本设想是EXSi 开直通安装 Koolshare  的 LEDE ,结果硬件关系自带的网卡无法直通,CPU 网卡 太烧性能属实浪费,结果发现OpenWrt 可以用 KVM 了

这样正好直接用LEDE 安装 KVM 无损消耗,到时候开个虚拟机用来做挂机宝,结果LEDE 的版本更新慢,KVM 装不上。没办法只能自己编译一个 OpenWrt 出来发光和热了,然后想自己做一个管理中心管理我的KVM 

本来想着 .Net 6 预览版都出来了 ,我自己编译一个 .Net 5 到OP上面去 这样就能干活了 ,然后发现 .Net Core 没有编译文档,发现 Mono 提供了 非常完整的文档 包括如何裁剪

于是我就自己跑去编译一个Mono 然后跑我的 OP 上面了,结果发现是真的能折腾,经过和 群友 请教的 两三天 终于在 OP 上面 成功运行了我的 Mono

展示截图 : 

 

 


 

关于划水被群主说这回事

(划水被说)

 

正事


编译环境: podman  Ubuntu:laster

构建版本: OpenWrt :snapshots

默认大家都会自己编译OpenWrt的SDK 如果不会请参考 其他人的教程

安装好构建SDK需要的依赖

克隆 OpenWrt 最新的代码

make menuconfig 进入选项中 开启 需要的拓展 zlib 、 libatomic

如果缺少zlib 会报出 -lz

如果缺少libatomic 会报出 少了 atomic_ops.h 头文件 这里基本都是自行推断即可少啥补啥

如果全部正常则理论可以正常编译

Make 构造出来 SDK 、将SDK 解压出来

然后就可以克隆 Mono 仓库了,我使用的是Mono 2021-02

准备构造工具 Path

export PATH=$PATH: .../sdk/openwrt-sdk-x86-64_gcc-8.4.0_musl.Linux-x86_64/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/bin

export STAGING_DIR= .../openwrt-sdk-x86-64_gcc-8.4.0_musl.Linux-x86_64/staging_dir/toolchain-x86_64_gcc-8.4.0_musl

export STAGING_DIR
export PATH
环境变量

测试:

确保环境配置正确(务必) 

echo $PATH

使用git 克隆 Mono 仓库是使用 ./autogen

如果是使用的 Mono 发布的版本 则是使用 configure 

这里使用的是克隆的Mono 2021-02

./autogen.sh --prefix=/ --host=x86_64-openwrt-linux-musl  --enable-minimal=profiler,debug,logging --enable-small-config=yes --disable-mcs-build --without-mcs-docs --with-moonlight=no --disable-boehm

这里我们需要关闭 boehm gc,我们用不了

使用  --host 指定 运行环境

使用  --enable-minimal 指定需要裁剪的内容

这里只是示范裁剪,具体裁剪内容要根据使用环境去调整

如果一切顺利在输出中会有一句

  • checking whether we are cross compiling… yes

表示当前是交叉编译了,可以直接 Make

安装Mono到指定的目录方便提取文件

make install DESTDIR=/Build

复制 /Build 到 测试机 就可以直接测试了 

 

以下是 大佬教的裁剪方法

首先我们编译出来的Mono里面会有一堆的东西 大部分是不需要的比如 

share  、includ 文件夹直接删掉

然后我们进入bin 文件夹 除了 mono 和 mono-sgen 其他的都删掉

mono这里是一个软连接 连接到 mono-sgen

strip 是SDK中的一个工具

使用 strip 工具对 mono-sgen 进一步裁剪

使用 strip 工具对 lib 中的 so库 进一步裁剪

最终大小只会不到20m

丢到 OpenWrt 上面去就可以正常运行那么就是编译成功

编译起来难度不大,跟着官方文档走就可以了,只是一些细小的问题如果没有相关经验的确很难办成

一开始少了 zlib 我还自己使用 Make CFLAGS="-I" 添加头文件,结果后来发现是SDK的问题

既然Mono 可以正常运行了,那么下一个软件中心还远吗?

posted @ 2021-03-05 16:42  みく  阅读(989)  评论(0)    收藏  举报