概述
618 買了幾個便宜的Purple PI OH 開發板[1](500 塊多一點買了 3 個), 這個開發板類似樹莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片。如下:
Purple PI OH
買來是用作家庭服務器或家庭實驗室的。主要考慮就是:
1.便宜2.可玩性高3.功耗低4.散熱小,運行安靜5.Arm64 現在生態還湊活
其配置如下(選擇部分說明):
?SOC: RockChip RK3566?CPU: 四核 64 位 Cortex-A55 處理器,主頻最高 1.8GHz?最高支持 8GB 高速 LPDDR4,速率高達 1066Mbps (我買的是 2G 版本的)?存儲:eMMC 默認 8GB(可選 16GB/32GB/64GB)(我買的是 16G 版本的)?1 路 HDMI2.0 支持 4K@60Hz 或 1080P@120Hz?1 路自適應千兆以太網口?WIFI 藍牙無線通信?板載 1 路 USB3.0,3 路 USB2.0?極小型 PCBA 尺寸,85mm*56mm
系統支持:
?Android 11?Debian 10?Buildroot + QT?鴻蒙 OpenHarmony3.2?Ubuntu?麒麟 OS
刷入官方提供的 Debian 10 后,發現無法安裝 Docker/Tailscale/K3s/Cilium 等,這是為什么?
原因解析
很多開發板的操作系統,都是沒有 UEFI 的,也不能直接使用 Debian Linux 官網提供的 iso 等安裝介質直接進行安裝的。而是自編譯的 Debian Linux.
編譯后的 Debian 里,會帶有 uboot 作為啟動引導的工具,同時將開發板對應的芯片/接口驅動集成進去。
官方提供的自編譯 Debian Linux 里,只開啟了一小部分的 Kernel 內核參數。而 Docker/Tailscale/K3s/Cilium 等,是需要直接用到 Kernel 緊密相關的功能,但是這些功能在官方提供的 Debian Linux 中又沒有,就需要我們按照官方提供的《Linux SDK 編譯手冊》自行編譯。
需要哪些內核配置
Docker 需要哪些內核配置
Docker 需要的內核配置,可以通過檢查腳本進行檢驗的。運行示例如下:
# ./check_config.shinfo: reading kernel config from ./kernel/.config ...
Generally Necessary:- cgroup hierarchy: properly mounted [/sys/fs/cgroup]- apparmor: enabled and tools installed- CONFIG_NAMESPACES: enabled- CONFIG_NET_NS: enabled- CONFIG_PID_NS: enabled- CONFIG_IPC_NS: enabled- CONFIG_UTS_NS: enabled- CONFIG_CGROUPS: enabled- CONFIG_CGROUP_CPUACCT: enabled- CONFIG_CGROUP_DEVICE: enabled- CONFIG_CGROUP_FREEZER: enabled- CONFIG_CGROUP_SCHED: enabled- CONFIG_CPUSETS: enabled- CONFIG_MEMCG: missing- CONFIG_KEYS: enabled- CONFIG_VETH: missing- CONFIG_BRIDGE: missing- CONFIG_BRIDGE_NETFILTER: missing- CONFIG_IP_NF_FILTER: missing- CONFIG_IP_NF_TARGET_MASQUERADE: missing- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: missing- CONFIG_NETFILTER_XT_MATCH_IPVS: missing- CONFIG_IP_NF_NAT: missing- CONFIG_NF_NAT: missing- CONFIG_POSIX_MQUEUE: missing
Optional Features:- CONFIG_USER_NS: enabled- CONFIG_SECCOMP: enabled- CONFIG_SECCOMP_FILTER: enabled- CONFIG_CGROUP_PIDS: missing- CONFIG_MEMCG_SWAP: missing- CONFIG_MEMCG_SWAP_ENABLED: missing- CONFIG_BLK_CGROUP: missing- CONFIG_BLK_DEV_THROTTLING: missing- CONFIG_CGROUP_PERF: missing- CONFIG_CGROUP_HUGETLB: missing- CONFIG_NET_CLS_CGROUP: missing- CONFIG_CGROUP_NET_PRIO: missing- CONFIG_CFS_BANDWIDTH: enabled- CONFIG_FAIR_GROUP_SCHED: enabled- CONFIG_RT_GROUP_SCHED: missing- CONFIG_IP_NF_TARGET_REDIRECT: missing- CONFIG_IP_VS: missing- CONFIG_IP_VS_NFCT: missing- CONFIG_IP_VS_PROTO_TCP: missing- CONFIG_IP_VS_PROTO_UDP: missing- CONFIG_IP_VS_RR: missing- CONFIG_SECURITY_SELINUX: missing- CONFIG_SECURITY_APPARMOR: missing
所以其需要的 Kernel config 為:
# Docker Generally NecessaryCONFIG_NAMESPACES=yCONFIG_NET_NS=yCONFIG_PID_NS=yCONFIG_IPC_NS=yCONFIG_UTS_NS=yCONFIG_CGROUPS=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_SCHED=yCONFIG_CPUSETS=yCONFIG_MEMCG=yCONFIG_KEYS=yCONFIG_VETH=yCONFIG_BRIDGE=yCONFIG_BRIDGE_NETFILTER=yCONFIG_IP_NF_FILTER=yCONFIG_IP_NF_TARGET_MASQUERADE=yCONFIG_NETFILTER_XT_MATCH_ADDRTYPE=yCONFIG_NETFILTER_XT_MATCH_CONNTRACK=yCONFIG_NETFILTER_XT_MATCH_IPVS=yCONFIG_IP_NF_NAT=yCONFIG_NF_NAT=yCONFIG_POSIX_MQUEUE=y
# Optional Features:=yCONFIG_USER_NS=yCONFIG_SECCOMP=yCONFIG_SECCOMP_FILTER=yCONFIG_CGROUP_PIDS=yCONFIG_MEMCG_SWAP=yCONFIG_MEMCG_SWAP_ENABLED=yCONFIG_BLK_CGROUP=yCONFIG_BLK_DEV_THROTTLING=yCONFIG_CGROUP_PERF=yCONFIG_CGROUP_HUGETLB=yCONFIG_NET_CLS_CGROUP=yCONFIG_CGROUP_NET_PRIO=yCONFIG_CFS_BANDWIDTH=yCONFIG_FAIR_GROUP_SCHED=yCONFIG_RT_GROUP_SCHED=yCONFIG_IP_NF_TARGET_REDIRECT=yCONFIG_IP_VS=yCONFIG_IP_VS_NFCT=yCONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_RR=yCONFIG_SECURITY_SELINUX=yCONFIG_SECURITY_APPARMOR=y
Tailscale 需要哪些內核配置
Tailscale 出于廣泛適用性的考慮,主要都是基于用戶空間的實現,不加任何內核配置也可以基于 sock5 代理的方式運行。如果要正常狀態運行,其只依賴于一個內核配置:
# TailscaleCONFIG_TUN=y
如果是 Wireguard 或其他對內核依賴較多的相關軟件,請自行查找相關內核配置需求。
K3s 需要哪些內核配置
K3s 的 Cli 做的很完善,直接可以檢查內核配置需求,在我編譯好的 Debian 10 上運行具體如下:
$ k3s check-config
Verifying binaries in /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin:- sha256sum: good- aux/ip6tables: symlink to xtables-legacy-multi- aux/ip6tables-restore: symlink to xtables-legacy-multi- aux/ip6tables-save: symlink to xtables-legacy-multi- aux/iptables: symlink to xtables-legacy-multi- aux/iptables-restore: symlink to xtables-legacy-multi- aux/iptables-save: symlink to xtables-legacy-multi- links: good
System:- /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin/aux iptables v1.8.8 (legacy): ok- swap: disabled- routes: ok
Limits:- /proc/sys/kernel/keys/root_maxkeys: 1000000
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.232/modules.dep.bin'modprobe: FATAL: Module configs not found in directory /lib/modules/4.19.232info: reading kernel config from /proc/config.gz ...
Generally Necessary:- cgroup hierarchy: cgroups Hybrid mounted, cpuset|memory controllers status: good- CONFIG_NAMESPACES: enabled- CONFIG_NET_NS: enabled- CONFIG_PID_NS: enabled- CONFIG_IPC_NS: enabled- CONFIG_UTS_NS: enabled- CONFIG_CGROUPS: enabled- CONFIG_CGROUP_PIDS: enabled- CONFIG_CGROUP_CPUACCT: enabled- CONFIG_CGROUP_DEVICE: enabled- CONFIG_CGROUP_FREEZER: enabled- CONFIG_CGROUP_SCHED: enabled- CONFIG_CPUSETS: enabled- CONFIG_MEMCG: enabled- CONFIG_KEYS: enabled- CONFIG_VETH: enabled- CONFIG_BRIDGE: enabled- CONFIG_BRIDGE_NETFILTER: enabled- CONFIG_IP_NF_FILTER: enabled- CONFIG_IP_NF_TARGET_MASQUERADE: enabled- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled- CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled- CONFIG_NETFILTER_XT_MATCH_MULTIPORT: enabled- CONFIG_IP_NF_NAT: enabled- CONFIG_NF_NAT: enabled- CONFIG_POSIX_MQUEUE: enabled
Optional Features:- CONFIG_USER_NS: enabled- CONFIG_SECCOMP: enabled- CONFIG_BLK_CGROUP: enabled- CONFIG_BLK_DEV_THROTTLING: enabled- CONFIG_CGROUP_PERF: enabled- CONFIG_CGROUP_HUGETLB: enabled- CONFIG_NET_CLS_CGROUP: enabled- CONFIG_CGROUP_NET_PRIO: enabled- CONFIG_CFS_BANDWIDTH: enabled- CONFIG_FAIR_GROUP_SCHED: enabled- CONFIG_RT_GROUP_SCHED: enabled- CONFIG_IP_NF_TARGET_REDIRECT: enabled- CONFIG_IP_SET: enabled- CONFIG_IP_VS: enabled- CONFIG_IP_VS_NFCT: enabled- CONFIG_IP_VS_PROTO_TCP: enabled- CONFIG_IP_VS_PROTO_UDP: enabled- CONFIG_IP_VS_RR: enabled- CONFIG_EXT4_FS: enabled- CONFIG_EXT4_FS_POSIX_ACL: enabled- CONFIG_EXT4_FS_SECURITY: enabled- Network Drivers: - "overlay": - CONFIG_VXLAN: enabled Optional (for encrypted networks): - CONFIG_CRYPTO: enabled - CONFIG_CRYPTO_AEAD: enabled - CONFIG_CRYPTO_GCM: enabled - CONFIG_CRYPTO_SEQIV: enabled - CONFIG_CRYPTO_GHASH: enabled - CONFIG_XFRM: enabled - CONFIG_XFRM_USER: enabled - CONFIG_XFRM_ALGO: enabled - CONFIG_INET_ESP: enabled - CONFIG_INET_XFRM_MODE_TRANSPORT: enabled- Storage Drivers: - "overlay": - CONFIG_OVERLAY_FS: enabled
STATUS: pass
根據上面輸出,得出 K3s 需要的內核配置有:
# K3s Generally Necessary:CONFIG_NAMESPACES=yCONFIG_NET_NS=yCONFIG_PID_NS=yCONFIG_IPC_NS=yCONFIG_UTS_NS=yCONFIG_CGROUPS=yCONFIG_CGROUP_PIDS=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_FREEZER=yCONFIG_CGROUP_SCHED=yCONFIG_CPUSETS=yCONFIG_MEMCG=yCONFIG_KEYS=yCONFIG_VETH=yCONFIG_BRIDGE=yCONFIG_BRIDGE_NETFILTER=yCONFIG_IP_NF_FILTER=yCONFIG_IP_NF_TARGET_MASQUERADE=yCONFIG_NETFILTER_XT_MATCH_ADDRTYPE=yCONFIG_NETFILTER_XT_MATCH_CONNTRACK=yCONFIG_NETFILTER_XT_MATCH_IPVS=yCONFIG_NETFILTER_XT_MATCH_COMMENT=yCONFIG_NETFILTER_XT_MATCH_MULTIPORT=yCONFIG_IP_NF_NAT=yCONFIG_NF_NAT=yCONFIG_POSIX_MQUEUE=y
# Optional Features:CONFIG_USER_NS=yCONFIG_SECCOMP=yCONFIG_BLK_CGROUP=yCONFIG_BLK_DEV_THROTTLING=yCONFIG_CGROUP_PERF=yCONFIG_CGROUP_HUGETLB=yCONFIG_NET_CLS_CGROUP=yCONFIG_CGROUP_NET_PRIO=yCONFIG_CFS_BANDWIDTH=yCONFIG_FAIR_GROUP_SCHED=yCONFIG_RT_GROUP_SCHED=yCONFIG_IP_NF_TARGET_REDIRECT=yCONFIG_IP_SET=yCONFIG_IP_VS=yCONFIG_IP_VS_NFCT=yCONFIG_IP_VS_PROTO_TCP=yCONFIG_IP_VS_PROTO_UDP=yCONFIG_IP_VS_RR=yCONFIG_EXT4_FS=yCONFIG_EXT4_FS_POSIX_ACL=yCONFIG_EXT4_FS_SECURITY=y# Network DriversCONFIG_VXLAN=y# Optional (for encrypted networks):CONFIG_CRYPTO=yCONFIG_CRYPTO_AEAD=yCONFIG_CRYPTO_GCM=yCONFIG_CRYPTO_SEQIV=yCONFIG_CRYPTO_GHASH=yCONFIG_XFRM=yCONFIG_XFRM_USER=yCONFIG_XFRM_ALGO=yCONFIG_INET_ESP=yCONFIG_INET_XFRM_MODE_TRANSPORT=y# Storage DriversCONFIG_OVERLAY_FS=y
相比 Docker, 主要多了以下內核需求:
?Overlay 網絡?Overlay 存儲
Cilium 需要哪些內核配置
Cilium 需要的內核配置,可以在這里查看:System Requirements — Cilium 1.13.4 documentation[2]
# Cilium Base RequirementsCONFIG_BPF=yCONFIG_BPF_SYSCALL=yCONFIG_NET_CLS_BPF=yCONFIG_BPF_JIT=yCONFIG_NET_CLS_ACT=yCONFIG_NET_SCH_INGRESS=yCONFIG_CRYPTO_SHA1=yCONFIG_CRYPTO_USER_API_HASH=yCONFIG_CGROUPS=yCONFIG_CGROUP_BPF=yCONFIG_PERF_EVENTS=y# Optional: Iptables-based MasqueradingCONFIG_NETFILTER_XT_SET=mCONFIG_IP_SET=mCONFIG_IP_SET_HASH_IP=m# Optional: L7 and FQDN PoliciesCONFIG_NETFILTER_XT_TARGET_TPROXY=mCONFIG_NETFILTER_XT_TARGET_CT=mCONFIG_NETFILTER_XT_MATCH_MARK=mCONFIG_NETFILTER_XT_MATCH_SOCKET=m# Optional: IPSecCONFIG_XFRM=yCONFIG_XFRM_OFFLOAD=yCONFIG_XFRM_STATISTICS=yCONFIG_XFRM_ALGO=mCONFIG_XFRM_USER=mCONFIG_INET{,6}_ESP=mCONFIG_INET{,6}_IPCOMP=mCONFIG_INET{,6}_XFRM_TUNNEL=mCONFIG_INET{,6}_TUNNEL=mCONFIG_INET_XFRM_MODE_TUNNEL=mCONFIG_CRYPTO_AEAD=mCONFIG_CRYPTO_AEAD2=mCONFIG_CRYPTO_GCM=mCONFIG_CRYPTO_SEQIV=mCONFIG_CRYPTO_CBC=mCONFIG_CRYPTO_HMAC=mCONFIG_CRYPTO_SHA256=mCONFIG_CRYPTO_AES=m# Optional: Bandwidth ManagerCONFIG_NET_SCH_FQ=m
另外 Cilium 對于 Kernel 版本也有嚴格要求,Cilium 的部分功能依賴于高版本的 Kernel. 請自行查閱。
修改內核配置并編譯
Linux SDK 官方一般都會提供,基于 Rockchip 芯片系列的 Linux SDK 文件目錄結構大差不差。我這里以 Purple Pi OH 為例,相信如果您也正好有相關需求,且是 Rockchip 的其他開發板,也能很快找到對應目錄。
一般內核配置的目錄為:xxxxxxx\kernel\arch\arm64\configs\xxxxx_linux_defconfig
將上方提供的 Kernel 配置添加到該文件末尾(注意去重)并保存。
然后直接編譯即可:
./build.sh kernel
編譯后在./rockdev目錄生成boot.img鏡像。
然后利用 Rockchip 提供的燒錄工具:RKDevTool.exe, 單獨將boot.img燒錄即可。
編譯是真的耗資源啊,耗時間,耗 CPU, 耗磁盤
可能出現的異常情況
分區超出
我在編譯過程中碰到 recovery 分區超過的報錯,報錯如下:
rk356x_linux_sdk/buildroot/output/rockchip_rk356x_recovery/images/recovery.img's size exceed parameter.txt's limit!ERROR: Running build_firmware failed!
解決辦法是要修改分區大小,具體就是修改對應的 parameter.txt 文件。修改后再重新完整編譯:
./build.sh
并重新燒錄整個固件。
Docker 安裝后啟動失敗
根據官方文檔:Install Docker Engine on Debian | Docker Documentation[3], Docker 安裝后啟動失敗。
官方明確提到目前最新版本需要的 Debian 版本為:
Debian Bookworm 12 (stable) Debian Bullseye 11 (oldstable)
可能是 Deibian 10 兼容性有問題導致的。但是有 workaround.
具體的報錯為 nftables 相關的報錯。
解決方案為:
update-alternatives --set iptables /usr/sbin/iptables-legacyupdate-alternatives --set ip6tables /usr/sbin/ip6tables-legacyupdate-alternatives --set arptables /usr/sbin/arptables-legacyupdate-alternatives --set ebtables /usr/sbin/ebtables-legacy
重啟后 Docker 可以正常運行。
總結
玩了一周末的 Rockchip arm64 開發板,現在 2G 內存的板子上終于可以跑 docker,k3s,tailscale,cilium 了。
Arm 開發板如我之前所說,有這些優勢:
1.便宜2.可玩性高3.功耗低4.散熱小,運行安靜5.Arm64 現在生態還湊活
但是相比 x86, 這類 arm 開發板生態還是太差了,沒有 bios/uefi,裝前面幾個軟件都要調 kernel 參數然后編譯,刷機燒錄。玩起來太累了。..
x86 也有這些優勢:
1.便宜2.可玩性高
但是 x86 的生態太好了,玩起來省心多了。
Arm 與 x86 相比,其實也就強在 功耗低,散熱小。但是現在 Intel 的一些芯片,如 n100 等,TDP 為 6W 也是非常低了,通過被動散熱也能壓住也就靜音。Arm 的優勢所剩無幾了。..
所以我的建議,想省心/靜音/功率低,首推 x86 迷你主機;想折騰/靜音/功率低,首推各類 arm pi 開發板或盒子;不在乎功耗/不在乎聲音/高配,可以玩玩二手 x86 服務器。
以上。
-
芯片
+關注
關注
454文章
50422瀏覽量
421856 -
ARM
+關注
關注
134文章
9054瀏覽量
366827 -
開發板
+關注
關注
25文章
4946瀏覽量
97201 -
樹莓派
+關注
關注
116文章
1699瀏覽量
105527
發布評論請先 登錄
相關推薦
評論