【补档】树莓派折腾记录
2021 年初的时候入手了树莓派 4b,然后暑假的时候好好折腾了一下,留下了一些零散的记录,在这里整理起来,之后哪天重建的时候还能来参考一下。
由于距离记录已经有一段时间了,可能有些内容会有偏差。
初步尝试
参考:http://blog.dngz.net/RaspberryPiKodbox.htm
系统安装
尝试装了适配树莓派的 Ubuntu,后来还是为了更好的硬件兼容性换成官方系统了。
当时本着尝鲜的想法,选择了仍在 beta 测试中的官方 64-bit 系统 2021-05-07-raspios-buster-arm64-lite,由于计划作为服务器运行,不需要图形桌面,所以就选择了 lite。
注:现在官方 64-bit 系统已经正式发布了(https://www.raspberrypi.com/news/raspberry-pi-os-64-bit/)。
官网也给出了烧写 SD 卡的工具 Raspberry Pi Imager,GUI 好看,烧录系统非常方便。
初始配置
系统烧录完成后会有一个 boot
分区,做一些初始化的配置再进行第一次开机。
开启 ssh 服务
在 boot
分区下新建一个空文件,名为 ssh
。
开机自动连接 WIFI
在 boot
分区下新建 wpa_supplicant.conf
文件,内容如下:
1 | country=CN |
初次启动
插电开机~
ssh 可以连接,初始用户名 pi
,密码 raspberry
。
记得修改密码。
解锁root
sudo passwd root
修改 root
密码。
sudo passwd --unlock root
解锁 root
用户。
由于安全原因,默认情况下 root
是不能用 ssh 登录的,如果一定需要的话,编辑 /etc/ssh/sshd_config
,将配置项 #PermitRootLogin prohibit-password
修改为 PermitRootLogin yes
,然后 sudo systemctl restart sshd
重启 ssh 服务即可。
校正时区
sudo dpkg-reconfigure tzdata
选择 Asia/Shanghai
即可。
树莓派配置工具 raspi-config
sudo raspi-config
换源
参考:https://blog.csdn.net/baidu_26678247/article/details/108930421
如果遇到 The repository 'http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian buster InRelease' is not signed
错误,可以按如下操作添加公钥(参见:https://www.jianshu.com/p/c64deffb1308)
1 | gpg --keyserver keyserver.ubuntu.com --recv-keys 9165938D90FDDD2E |
一些杂项
GPIO
使用 raspi-config
打开 GPIO
sudo apt-get install wiringpi
按照 http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/ 更新 wiringpi 版本
gpio readall
即可查看 GPIO 概况
进一步配置 WIFI
参考:https://www.cnblogs.com/zhangyuejia/p/8945354.html
然后 sudo ifconfig wlan0 down
关闭 wifi,sudo ifconfig wlan0 up
启动 wifi。
超频
参考:https://cyfeng.science/2020/06/26/Unboxing-Raspberry-Pi-4B-8GB-and-Overclocking/
注意默认情况下 over_voltage
最大为 6
查看CPU频率:sudo watch -n 1 cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
查看CPU温度:sudo watch -n 1 cat /sys/class/thermal/thermal_zone0/temp
CPU 电源计划
echo "powersave" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
可以将CPU设为省电模式,固定600MHz
echo "ondemand" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
设置回默认模式
风扇控制
风扇一直开着噪声大,也影响风扇寿命,设置一下温控。
为了美观,网购了一个插在 GPIO 座上的风扇插座,勉强塞进了外壳。
使用 raspi-config
自带的风扇控制需要注意,若使用 i2c 端口作为控制口,需要将 i2c 关闭。
使用 sudo -E rpi-eeprom-config --edit
设置 WAKE_ON_GPIO=0
和 POWER_OFF_ON_HALT=1
可以在 shutdown 之后使风扇也关闭(否则关机后风扇会开始一直转)。
通过蓝牙 ssh 连接
即通过蓝牙连接创建局域网。
参考:
- http://www.leux.cn/doc/Raspberry%E9%80%9A%E8%BF%87%E8%93%9D%E7%89%99SSH.html
- https://blog.csdn.net/Powerful_Green/article/details/88604205
连接操作:更改适配器选项 -> 蓝牙网络连接 -> 查看蓝牙网络设备 -> 选中,连接时使用 -> 接入点
后来不知道装了啥蓝牙连不上了,排查之后发现似乎是 /usr/bin/bt-agent -c NoInputNoOutput
失效了,并不会自动配对,需要手动配对。(仍未解决,但也不怎么用蓝牙连接了)
OLED 显示屏
低价搞到一个小的 OLED 显示屏,装上。
由于风扇座占掉了 i2c1,只能通过奇技淫巧使用 i2c0 ,参考 https://blog.csdn.net/weixin_46145842/article/details/106128144 设置
驱动和使用参考:https://shumeipai.nxez.com/2019/04/29/use-the-ssd1306-oled-display-on-the-raspberry-pi.html
持续连接校园网
在 Github 上找了各种连校园网的轮子,试到最后只有这个能够稳定使用:
使用 https://github.com/z4yx/GoAuthing 对应程序和 service。
无线 AP 与路由
使用 RaspAP 创建无线 AP(已弃用)
手动安装教程:https://docs.raspap.com/manual/
开启 802.11ac
参考 https://docs.raspap.com/faq/#80211ac
信道选择 36
,实测 48
无法开启,40
速率较慢。
流量监控问题
参考 https://github.com/RaspAP/raspap-webgui/issues/689 末尾。
sudo apt-get purge vnstat
卸载原来的 vnstat。
curl -O https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/pool/universe/v/vnstat/vnstat_1.18-1_arm64.deb
下载旧版 vnstat。
sudo dpkg -i vnstat_1.18-1_arm64.deb
安装。
echo "vnstat hold" | sudo dpkg --set-selections
禁用更新。
使用 OpenWrt-Docker(也已弃用)
安装 docker
:参考 https://openwrt.club/93.html
增加用户权限:https://www.cnblogs.com/codeaaa/p/9041533.html
hostapd
+ dnsmasq
+ OpenWrt-Docker
:https://zhuanlan.zhihu.com/p/163827788
使用的 OpenWrt-Docker。
注意: 设置 dnsmasq
配置文件的时候一定要反注释掉 bind-interfaces
,不然会出现地址占用错误。
Openwrt 配合 AdGurad Home 屏蔽广告和 ShadownSocksR Plus 用于翻墙,参考:https://blog.zfdang.com/2020/07/adguard-home-work-with-ssr-plus-in-openwrt/
板载 WLAN 优化
sudo iw wlan0 set power_save off
关闭节能可以提高速度与稳定性。
使用 USB 网卡
板载网卡性能和稳定性还是不足的,于是入手了一个 USB 无线网卡。
由于预算有限,又想要 867Mbps 的 5G 频段支持,于是入手的网卡是 RTL8812BU 芯片,在驱动方面问题多多,悲。
驱动安装
支持 RaspberryOS(64bit) 的驱动地址:https://github.com/morrownr/88x2bu
关于 iw phy
输出参数的具体说明:https://c4pr1c3.github.io/cuc-mis/chap0x02/rt3572l_explained.html
优化WiFi睡眠:https://github.com/fastoe/RTL8812BU_for_Raspbian
关于 /etc/modprobe.d/88x2bu.conf
的一点额外说明:
1 | There's four parms listed in the document you cite. |
最终配置文件为:
1 | options 88x2bu rtw_drv_log_level=2 rtw_led_ctrl=1 rtw_vht_enable=2 rtw_power_mgnt=0 rtw_switch_usb_mode=1 rtw_ips_mode=1 rtw_enusbss=0 rtw_beamform_cap=11 |
由于购买的网卡为 USB2.0 接口,不支持 USB3.0,需要 rtw_switch_usb_mode=0/2
才能正常使用。
一些关于 RTL8812BU 驱动 / hostapd 的问题
hostapd 完整配置文件注释:https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
配置文件中最好去除注释,可能会有奇怪的问题
这张网卡无法在初始启动时应用 ht_capab=[HT40-][HT40+][SHORT-GI-40][DSSS_CCK-40]
设置 40/80MHz
带宽,似乎是网卡直接 UNINITIALIZED->HT_SCAN
有问题,会进行 neighbor scanning
,然后出现 hostapd[10529]: Failed to request a scan of neighboring BSSes ret=-16 (Device or resource busy)
错误。必须先以普通 20MHz
模式启动,然后转为(restart) 40/80MHz
。
启动时配置文件:
1 | interface=wlx1cbfce82adb3 |
修改为如下配置后 restart :
1 | interface=wlx1cbfce82adb3 |
Updated 似乎是因为放在5G路由器旁边的原因…
一些没什么效果的尝试
> 换驱动
https://github.com/cilynx/rtl88x2bu,在 arm64 系统上编译所需的额外操作:https://github.com/PieGuy314/RTL88x2BU-RPi4-arm64-Driver-Patch
> 修改 hostapd 源码重新编译
hostapd
编译方式:https://leux.cn/doc/hostapd.html
在源码中找到 neighboring BSSes
的对应部分,修改返回值。
1 | install -D hostapd /usr/local/bin//hostapd |
2.9 版本似乎有点问题,目前在用 2.8 版本。
新网卡
原来的网卡是 USB2.0 的网卡,退货换了一个 3.0 的。
然而最终发现,新的网卡在运行在使用 rtw_switch_usb_mode=1
运行在 USB3.0
模式时会发生各种错误,且不稳定;而使用 rtw_switch_usb_mode=1
运行在 USB2.0
模式(插在哪个物理口都行)时会保持稳定。
Update 2022.02.15:相关问题也已经在驱动存储库的说明中提及了,见 88x2bu-20210702。
只能跑在 2.0 模式了,速度大概在 200Mbps 左右。
最终配置文件:
1 | options 88x2bu rtw_drv_log_level=3 rtw_led_ctrl=1 rtw_vht_enable=2 rtw_power_mgnt=1 rtw_switch_usb_mode=0 rtw_ips_mode=1 rtw_enusbss=0 rtw_beamform_cap=11 |
1 | interface=wlx1cbfceb110dc |
使用的 hostapd
版本: hostapd v2.8
。
Clash 代理 + AdGuardHome 广告屏蔽
配置 Clash
Clash 部署:https://cherysunzhang.com/2020/05/deploy-clash-as-transparent-proxy-on-raspberry-pi/
关于代理与 DNS 解析的原理说明:https://blog.skk.moe/post/what-happend-to-dns-in-proxy/
DNS 配置可参考:http://blog.joylau.cn/2020/05/01/Clash-Config/
Clash 可以配置 proxy-providers
订阅代理,使用 https://github.com/Loyalsoldier/clash-rules 配置 rules
可以使用 subconverter
筛选处理订阅节点:https://www.10101.io/2020/02/12/use-clash-proxy-provider-with-subconverter
subconverter
中文文档:https://github.com/tindy2013/subconverter/blob/master/README-cn.md
后续:发现机场提供了 subconverter
,不需要本地部署啦~
开启终端代理
方法一
设置 clash 配置文件 mixed-port: 7890
,在终端中运行(或添加到 ~/.bashrc
):
1 | export http_proxy=http://127.0.0.1:7890 |
方法二
使用 Proxychains
安装后设置配置文件 /etc/proxychains.conf
,在最后一行设置本地代理服务器和端口 http 127.0.0.1 7890
,在 /usr/lib/proxychains3/proxyresolv
中将原有的 DNS 4.2.2.2 改为本机的 DNS 服务器
然后使用 proxychains + 指令
进行代理,或者直接 proxychains bash
开启全代理的终端
使用 sudo 时会报错:ERROR: ld.so: object 'libproxychains.so.3' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
解决方法:使用 find /usr/ -name libproxychains.so.3 -print
找到库的位置,然后参考:https://parrotsec-cn.org/t/proxychains/3012 修改文件
配置 AdGuardHome
最终决定将 Clash 作为 AdGuardHome 的上游服务器
在 /etc/dnsmasq.conf
中设置 port=0
关闭 dnsmasq
的 DNS 服务
安装 AdGuardHome
:https://github.com/AdguardTeam/AdGuardHome#installation
配置 AdGuardHome
DNS 服务端口为 53,上游 DNS 服务器为 Clash 的 DNS 服务(Clash 需开启 DNS 服务)
透明代理:假设 Clash 的 redir-port
为 7891
,iptable
进行以下设置:
Update 2022.04.23: 由于校园网分配的是公网IP,所以需要设置防火墙,限制 Clash 服务只能被内网访问,防止端口被扫到被攻击(会导致大量连接和高 CPU 占用)。iptables 也做了更新,增加了简单的防护。
1 | # 防止外网使用内网 IP 欺骗 |
在 /etc/dnsmasq.conf
中将默认网关和默认 DNS 服务器设为本机,例如:
1 | interface=wlx1cbfceb110dc |
如上,连入树莓派网络即可走代理访问。
回环问题
Clash 做透明代理时访问对应端口会产生回环,有时候这个问题会莫名其妙地出现。
解决尝试一
解决方案:https://github.com/Dreamacro/clash/issues/425#issuecomment-566982655
1 | iptables -A INPUT -p tcp -m tcp --dport 7891 -m connmark ! --mark 500 -j REJECT |
解决尝试二
似乎去除 udp 相关 iptables 可以解决,已将上面的配置文件更新,有待观察。UPD:未解决
解决尝试三
似乎改端口可能解决,有待观察。
Update 2022.02.15:暂时还没有遇到问题。
文件存储服务器
USB 移动硬盘
硬盘处理:使用 DiskGenius 软件将硬盘分区为 ext4。
插入硬盘,sudo fdisk -l
查看硬盘设备号,如 /dev/sda1
。
sudo mount /dev/sda1 /data
进行挂载,挂载完后可通过 df -hT
查看空间使用情况。
永久挂载:在 /etc/fstab
中加入:
1 | /dev/sda1 /data ext4 defaults 0 0 |
sudo mount -a
检查是否有问题。
重要:为了防止关机时直接对硬盘断电损伤硬盘,参考如下设置(似乎只对 shutdown
后手动重启有用,reboot
没用):https://iovxw.net/p/park-external-hdd/。
SMB 服务器
(已弃用)使用 Openwrt
的 SMB 服务,在 网络存储->网络共享
里设置共享目录,在 网络存储->挂载 SMB 网络共享
里开启 SMB 服务。
直接在树莓派原系统内开设 Samba 服务器:https://zhuanlan.zhihu.com/p/266495858。
testparm –v
检查 smb.conf
配置是否正确。
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
的解决方法:https://ixnfo.com/en/samba-warning-solution-rlimit_max-increasing-rlimit_max-1024-to-minimum-windows-limit-16384.html
Aria2 下载机
新建用户:sudo adduser aria2
并进行相关用户组设定。
https://li-aaron.github.io/2019/01/aira2-on-raspberry/ ,将命令和配置文件中的 ~
都换为绝对路径。
Update 2021.09.27:现在使用的是 Aria2 Pro。
MC 服务器配置
MC1.16 及以前 && Ubuntu
依照 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu-ports/ 换源,sudo apt update
(或sudo apt-get full-upgrade
)进行更新。
sudo apt install openjdk-8-jre-headless
安装 java8
。
于是直接按照正常 Ubuntu
情况配置 MC 服务器即可。
MC1.17 && Raspberry OS 64it
截至 2021.08.06
,openjdk-16
在 debian
下只有 unstable(sid)
版,所以需要一些额外的配置来安装。
参考:https://packages.debian.org/sid/arm64/openjdk-16-jdk/download
向 /etc/apt/sources.list
中添加 deb http://ftp.de.debian.org/debian sid main
(用完后记得注释掉)。
执行 sudo apt install openjdk-16-jre-headless
安装 java16
。
MC服务器的剩余步骤照常,可参考:https://blog.csdn.net/qq_36290650/article/details/106978441。
同步照片
Lomorage (已弃用)
使用 Lomorage,使用 apt 安装。
文档:https://docs.lomorage.com/zh/docs/Installation/lomorage-service/installation-raspbian/
apt 安装后来出现了一些依赖问题,且 APP 实在有些丑,于是弃用。
Syncthing
安卓客户端:https://github.com/syncthing/syncthing-android
安卓客户端增强版:https://github.com/catfriend1/syncthing-android
sudo apt install syncthing
安装,sudo systemctl enable [email protected]
启动服务。
apt 安装的版本过于老旧,需要从 github 上下载最新版本,扔到 /usr/bin/
里替换掉。
可以在云服务器上搭建发现服务器和中继服务器。
功能杂项
同步百度云
使用 bypy
给装在树莓派上的 TF 卡续命
参考:https://raspberrypi.stackexchange.com/questions/169/how-can-i-extend-the-life-of-my-sd-card
省电
USB供电控制
USB 硬盘使用 udisksctl 安全移除,USB 端口使用 uhubctl 断电。
udisksctl: sudo apt install udisks2
uhubctl: https://github.com/mvp/uhubctl
1 |
|
1 |
|
其它
https://www.raspberrypi.org/forums/viewtopic.php?t=257144
https://learn.pi-supply.com/make/how-to-save-power-on-your-raspberry-pi/
可以参考上面关闭 HDMI,LED 等。
相机
参考:https://www.raspberrypi.org/forums/viewtopic.php?t=285868
vcgencmd get_camera
检查相机是否开启。
sudo modprobe bcm2835-v4l2
vcgencmd
参考:
DDNS
使用 Cloudflare
的 DNS 托管。
参考:https://blog.wardchan.com/posts/use-ddclient-to-automatically-update-cloudflare-dns-record.html
备份
额外购置了一张与原来同款的 32G TF 卡,本来打算升级/重装系统和网卡驱动,但是驱动上遇到了稳定性问题,就懒得重装系统了,于是当作备份卡吧。
创建镜像备份法
使用 win32diskimager,把 TF 卡插到电脑上,可以生成整个卡的镜像文件。
接着使用 PiShrink 裁剪镜像。需要使用 Linux, WSL 实测没问题。
在线拷卡备份法
使用 rpi-clone,可以进行增量备份,适合使用另一张卡定期备份。
1 | git clone https://github.com/billw2/rpi-clone.git |
安装完成后,sudo fdisk -l
找到 USB 口上的备份卡,如 /dev/sdc
然后 sudo rpi-clone /dev/sdc
即可进行增量备份。
UART 与蓝牙
树莓派与 UPS 间的通讯使用 UART 串口通信。
参考:https://zhuanlan.zhihu.com/p/106904186
本文介绍在Raspberry Pi 3、3+,4和Raspberry Pi Zero W上配置串行端口。
上述的几种树莓派包含两个可用于串行通信的UART控制器,也就是常说的串口:mini UART和PL011 UART。默认情况下,mini UART映射到40引脚GPIO连接器的TXD(GPIO 14)和RXD(GPIO 15)上,PL011 UART用于蓝牙模块,但是任何一个模块都可以映射到GPIO端口。
额外参考:
- https://forums.raspberrypi.com/viewtopic.php?t=309763
- https://forums.raspberrypi.com/viewtopic.php?t=261753
问题杂项
systemctl status 不显示内存占用
https://dmesg.app/systemd-accounting.html (似乎还是不行)
VsCode 远程连接
出现 command: '_workbench.downloadResource' failed
错误。
解决方法:本地的梯子(远程端不需要梯子)开成全局代理。
在使用充电宝/UPS单独供电时,通过AP满负荷读写移动硬盘可能导致USB接口掉电
换用电源供电暂未发现问题。
Update 2021.09.11: 换用电源供电也会出现问题,于是加了一个带独立供电的 USB 拓展坞,由于手头只有一个 USB2.0 的拓展坞,所以只将无线网卡接到拓展坞上,实测减轻了约 0.3A 的树莓派 USB 负载,是否可以有效防止掉盘还待检验。
硬盘维护
fsck -f /dev/sda1
检查文件系统。
fsck -c /dev/sda1
扫描。
sudo smartctl -a /dev/sda
查看 S.M.A.R.T. 信息。
使用 smartctl
进行硬盘测试。