需求概述

近期回国,要在国内呆一段时间。在国内期间虽然有一个常驻地,但一方面很多计算和网络设备在行李里,一方面也会在不同的地区到处跑跑,还有刚回国期间的超长隔离,需要搭建一个homelab环境来满足移动时最简单的网络需求和一些软件需求。

网络需求包括:

  1. 能够在有有线网络的情况下提供无线网络接入,或者在没有网络接入的情况下,使用4G modern提供无线网络接入。
  2. 使用一些特定的邮件和搜索服务:虽然各家的app越来越封闭,但是搜索引擎还是获取信息特别是外文信息最重要的渠道。
  3. 连接学校的VPN网络获取文献:这个比较诡异,直联VPN可以建立连接,但是实际上因为速度太慢,处于不可用的状态。因此,需要在上级设备中进行网络加速。
  4. 提供基本的去广告和防火墙服务。
  5. 能够提供基本的冗余和稳定性,也能够提供给家人使用。

在软件上的需求如下:

  1. 需要一个python环境,可以跑一些简单的自建服务。
  2. 需要提供一个R环境,可以跑一些简单的定时代码。
  3. 以上的两个环境最好都能够有一个web editor, 这样可以通过ipad进行编辑,也可以在笔记本在做其他工作的时候进行一些简单的任务。
  4. 能够支持docker,快速搭建所需要的服务。

解决方案

All-in-one (放弃)

可能最为方便的解决方案是一个all-in-one的小主机。如果采纳这个方案,则首要使用ESXi搭建多台linux虚拟机,在其中布置多个服务。预计需要虚拟2-4台机器:一台openwrt。一台linux作为Rstudio server,一台linux作为code-server和python环境,一台Linux跑其他docker环境。Rstudio和code server也可以考虑以docker容器的方式运行。现在比较合适的机器是使用N6005处理器的PN41或者NUC11ATKPE。

这个选择的优势在于:

  1. 性能同其他的方案比起来有相对的优势。
  2. 一体化程度非常高,插上电源线即可马上使用。
  3. 我手上有剩余的16gb笔记本内存和一个128gb的ssd硬盘,可以利用。

但是也有不少劣势:

  1. 价格很贵,至少需要1000+RMB购买机器,还需要购买无线网卡。
  2. 虽然性能好,但是N6005是11代处理器。在12代处理器已经发布的时候,并且小核有着非常大的提升,这并不是一个特别好的选择。
  3. 比较折腾,特别是ESXi可能对特定硬件需要寻找并安装订制驱动。
  4. 这套系统家属也需要使用,冗余不够(属于伪需求啦)。

利用手头设备的分离式方案 (现在的方案)

最后选择了利用手头的设备做了一个分离式的方案,这个方案硬件上由以下部分组成:

  • GL-MT1300(既有)
  • Raspberry Pi 4B (4gb版本,既有)
  • 华为4G modern(电信版本,既有)
  • R4S套装(4gb版本,新购入)

其中有三件是既有设备,R4S则是新购入的。

GL-MT1300是原厂定制化openwrt,没有安装任何插件,仅仅作为主网关和AP,提供给所有设备使用。Raspberry Pi 4B使用了新的Raspberry Pi OS (64-bit) lite,主要负责跑docker容器。R4S则安装了openwrt,并安装了诸多插件,作为旁路网关使用,供有需要的设备使用。华为的4G modern则在有需要的时候作为网卡接入GL-MT1300。Raspberry Pi和R4S用一个双头24w的USB电源供电,而GL-MT1300使用了自己的电源。

在整个这套解决方案有些脱裤子放屁的感觉,特别是在网络需求方面。GL-MT1300本身可以通过修改插件的方式的安装需要的配件。Raspberry Pi 4B也可以以docker容器的方式来运行一个openwrt实例。但是最后还是选择了三个分开的方案,除了爱折腾外,原因有三:

  1. 因为GL-MT1300性能太差,在安装插件后遇到了很多的问题,网络不稳定。
  2. Raspberry Pi 4B的docker容器运行openwrt,没有openwrt原生运行稳定和延迟小。
  3. Raspberry Pi用docker容器的方式运行openwrt经常出现CPU占用达到50%以上的情况,基本无法顺利地运行负荷较重的其他docker应用。

相较之下,R4S在原生运行openwrt,在相似的网络负载的情况下,CPU尽管性能弱于Raspberry Pi 4B,占用只有5%左右。从这个意义上来说,完全可以用更便宜的R2S来代替,体积还会更小一些。

这套系统组装之后,肯定没有all-in-one的解决方案优雅,但有以下优势/胜在折腾:

  1. 能够很快分离,给不同的情景使用。比如Raspberry Pi可以通过usb-c有线连接iPad;R4S可以单独拆出接入家庭网络作为旁路网关使用。
  2. 虽然旁路网关会降低速度,当主要的网络更为稳定。
  3. 在应急情况下所有设备都可以通过USB移动电源供电。

另外,买了一个20元左右的软质包,可以将所有的线材和设备进行收纳,方便移动。

其他

Raspberry Pi 4B上没有选择自己编译R和Rstudio server,而是拉取了一个以Jetson Nano中的R开发为基础,移植到Raspberry Pi的镜像。地址在:https://github.com/pinei/edgyR-pi

这个环境下的R的版本在4.0.2,使用https://mac.r-project.org/benchmarks/ 的代码进行benchmark,单核性能同14年前的酷睿处理器接近。所以跑一些简单的代码可以,就不用想着来做主要的R instance了。