Skip to main content

8G版树莓派配置笔记

· 9 min read

因为某不可抗力我摸不到自己的树莓派3B了,于是趁年中大促购买了一套树莓派4B,到手之后断断续续折腾了很长时间才比较满意。

硬件

本体

套装清单

  • 树莓派 4B(8G RAM)
  • UPS-18650
  • 18650锂电池*2
  • 铝合金外壳+双风扇
  • microSD

UPS通过顶针连接树莓派的电源针脚,UPS向上的螺丝正好能拧到上壳里,所以最后组装好之后还是挺好看的

证件照

配件

虽然有 UPS 了,但是 18650 标称 500 次循环充电,UPS-18650 没有提供自动断电功能,所以只能用来防止突发断电造成的文件损坏,所以充电头+1 另一个就是为了防止丢数据从笔记本上拆下来的希捷 7mm 叠瓦机械硬盘,装进硬盘盒里插到树莓派上扩充存储空间

?> 还有一个不得不提的悲惨经历就是网络,最开始因为懒所以树莓派通过 wifi 连接路由器,但是在增加机械硬盘的时候遇到了很大的问题:只要插上硬盘,树莓派就会从局域网上消失。我最初判断可能是供电不足,但检查一番之后发现在插硬盘开机时UPS仍处于充电状态,所以不会是供电问题。于是我花了一天debug,直到晚上在网络的一个角落里看到了 2.4Ghz 和 USB3.0 这两个词之后哭了。之后我出门买了条网线

软件

系统

没什么意义的平台选择

Windows Arm 是不可能的,Android 是没必要的,除了 Linux 还能选谁呢

发行版选择

对树莓派友好的发行版是官方的 raspbian 和另外几个 debian 系发行版,还有万金油 arch linux 和 gentoo 可选,还有一个扭曲的 openfans debian,其他几个系的发行版都没有接触过所以不考虑。 另外考虑到这个树莓派是8G内存的排除所有 Aarch32 的系统,为了防止安装时间过久排除 gentoo 系,筛选后剩下的就是

  1. arm64内核+armhf工具链的 raspbian 作为官方系统兼容性最好,但是它现在的混合状态给人一种完全不想用的感觉所以我仅仅安装一次之后就抹掉了。
  2. README 吹上天的 openfans debian 乍一看很强,细看有虚假宣传的意味,试用下来还是有很多问题,作者主打功能是桌面环境和虚拟化,完全自编译的制作方法也值得一提,对系统做了一些修改但很多都仅限于内核参数,repo 随缘更新文档混乱,和我用于服务机的需求差别也比较大,所以最后还是没有选择。
  3. Ubuntu Server for arm 系统本身没什么问题,但是如果能装 Debian 为什么还要装 Ubuntu Server 呢,抱着这个想法我把这个列为了最后的备选方案。
  4. Arch Linux for arm 最大的问题就是太麻烦了,本身 x86 平台的 Arch Linux 安装配置流程就比较长,在没有自带显示器的树莓派上安装就更加麻烦了。

对这些发行版都体验一番之后我感觉没有一个是完全满足我的需要的,于是我开始思考为什么 raspbian 没有完全 Arm64 的版本,也尝试了根据网上的资料自己编译一个这样的 raspbian。最终还是找到了更好的办法:在树莓派官方下载站里面可以找到一个2020年5月27日上传的 arm64 raspbian。它是存在的,但是没有列在 raspbian 的下载页面里,可能是官方还在测试稳定性也可能是别的原因,我在后续的使用中没有遇到任何问题。

UPS驱动

根据UPS-18650的文档,系统中需要修改的有两项,一个是配置硬件RTC,一个是配置外部电源检测和电量监测。
树莓派没有板载时钟芯片,所以系统默认使用的是软件时钟,UPS-18650提供了一个时钟芯片。修改 raspbian 的配置文件使能 i2c 接口并添加一行dtoverlay=i2c-rtc,ds1307,重启后卸载fake-hwclock软件包并正确配置hwclock就可以让树莓派用上UPS的时钟芯片了。
文档上还给出了有关电量计芯片的详细文档,但是把 i2c 数据接入管理系统还是有些困难,目前还没有完成。

管理

openfans debian 启发了我,即使清楚命令行管理,有一个 webui 还是会方便很多,openfans 在镜像中内置了魔改版 cockpit 和 potainer,而 openmediavault 不仅提供了这两个工具还提供了一整套系统管理方案,所以我决定在树莓派上安装 openmediavault。
按照官方建议,我烧录好 raspbian 之后仅仅修改了软件源更新系统,然后通过 https://github.com/OpenMediaVault-Plugin-Developers/installScript 提供的安装脚本安装 OMV,整个安装过程耗时比较长,但是我除了下载安装脚本的时候用了一下 proxy 之外没有遇到网络问题。
OMV 绑架了大量的配置文件,只有通过 OMV 的 webui 或 cli 修改配置才能正常生效,直接修改配置文件会在 OMV 更新配置时覆盖回原来的样子;安装脚本同时还安装了 OMV-extra,通过 extra 的菜单可以安装 cockpit 和 potainer

存储管理

在 Linux 上长期挂载 USB 存储设备很难保持优美,OMV 的存储管理可以勉强让硬盘管理优美一点,OMV 可以在硬盘上新建存储池并分配给内置的服务,但默认没有提供给外部服务使用的方式。我看到根目录有一个空的名为 sharedfolders 的文件夹,于是到官方论坛搜索,找到了这篇帖子,根据帖子内的说法官方出于稳定性原因默认关闭了存储池映射,可以通过修改配置文件开启

#Add the following to /etc/default/openmediavault

OMV_SHAREDFOLDERS_DIR_ENABLED="YES"

#Then run these commands in a root shell:

omv-salt stage run prepare
omv-salt deploy run systemd

reboot

重启之后就可以在 sharedfolders 里看到 OMV 已分配的存储池。至此,外部 USB 存储设备就变成了一个优美的固定路径。 因为 OMV 内部没有将存储池分配给 docker 的功能,所以我通过这个映射路径的方式把 docker 的存储位置改到了硬盘上,但这个操作如同官方所说有一个很大的问题:OMV 更新配置文件时会重新映射所有存储池,但 docker 启用时会占用文件夹导致 OMV 无法删除原有映射,而如果 docker 容器比较多,重启 docker 会造成很多问题,所以 OMV 就无法自由地更新配置文件了。