概述
618 買了幾個(gè)便宜的?Purple PI OH 開(kāi)發(fā)板[1]?(500 塊多一點(diǎn)買了 3 個(gè)), 這個(gè)開(kāi)發(fā)板類似樹莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片。如下:
Purple PI OH
買來(lái)是用作家庭服務(wù)器或家庭實(shí)驗(yàn)室的。主要考慮就是:
1.便宜2.可玩性高3.功耗低4.散熱小,運(yùn)行安靜5.Arm64 現(xiàn)在生態(tài)還湊活
其配置如下(選擇部分說(shuō)明):
?SOC: RockChip RK3566
?CPU: 四核 64 位 Cortex-A55 處理器,主頻最高 1.8GHz
?最高支持 8GB 高速 LPDDR4,速率高達(dá) 1066Mbps (我買的是 2G 版本的)
?存儲(chǔ):eMMC 默認(rèn) 8GB(可選 16GB/32GB/64GB)(我買的是 16G 版本的)
?1 路 HDMI2.0 支持 4K@60Hz 或 1080P@120Hz
?1 路自適應(yīng)千兆以太網(wǎng)口
?WIFI 藍(lán)牙無(wú)線通信?板載 1 路 USB3.0,3 路 USB2.0
?極小型 PCBA 尺寸,85mm*56mm
系統(tǒng)支持:
?Android 11
?Debian 10
?Buildroot + QT
?鴻蒙 OpenHarmony3.2
?Ubuntu
?麒麟 OS
刷入官方提供的 Debian 10 后,發(fā)現(xiàn)無(wú)法安裝 Docker/Tailscale/K3s/Cilium 等,這是為什么?
原因解析
很多開(kāi)發(fā)板的操作系統(tǒng),都是沒(méi)有 UEFI 的,也不能直接使用 Debian Linux 官網(wǎng)提供的 iso 等安裝介質(zhì)直接進(jìn)行安裝的。而是自編譯的 Debian Linux.
編譯后的 Debian 里,會(huì)帶有 uboot 作為啟動(dòng)引導(dǎo)的工具,同時(shí)將開(kāi)發(fā)板對(duì)應(yīng)的芯片/接口驅(qū)動(dòng)集成進(jìn)去。
官方提供的自編譯 Debian Linux 里,只開(kāi)啟了一小部分的 Kernel 內(nèi)核參數(shù)。而 Docker/Tailscale/K3s/Cilium 等,是需要直接用到 Kernel 緊密相關(guān)的功能,但是這些功能在官方提供的 Debian Linux 中又沒(méi)有,就需要我們按照官方提供的《Linux SDK 編譯手冊(cè)》自行編譯。
需要哪些內(nèi)核配置
Docker 需要哪些內(nèi)核配置
Docker 需要的內(nèi)核配置,可以通過(guò) https://github.com/opencontainers/runc/blob/main/script/check-config.sh 這個(gè)檢查腳本進(jìn)行檢驗(yàn)的。運(yùn)行示例如下:
?
# ./check_config.sh info: 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 Necessary CONFIG_NAMESPACES=y CONFIG_NET_NS=y CONFIG_PID_NS=y CONFIG_IPC_NS=y CONFIG_UTS_NS=y CONFIG_CGROUPS=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_SCHED=y CONFIG_CPUSETS=y CONFIG_MEMCG=y CONFIG_KEYS=y CONFIG_VETH=y CONFIG_BRIDGE=y CONFIG_BRIDGE_NETFILTER=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y CONFIG_NETFILTER_XT_MATCH_IPVS=y CONFIG_IP_NF_NAT=y CONFIG_NF_NAT=y CONFIG_POSIX_MQUEUE=y # Optional Features:=y CONFIG_USER_NS=y CONFIG_SECCOMP=y CONFIG_SECCOMP_FILTER=y CONFIG_CGROUP_PIDS=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y CONFIG_BLK_CGROUP=y CONFIG_BLK_DEV_THROTTLING=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_HUGETLB=y CONFIG_NET_CLS_CGROUP=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CFS_BANDWIDTH=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_RT_GROUP_SCHED=y CONFIG_IP_NF_TARGET_REDIRECT=y CONFIG_IP_VS=y CONFIG_IP_VS_NFCT=y CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_RR=y CONFIG_SECURITY_SELINUX=y CONFIG_SECURITY_APPARMOR=y
?
Tailscale 需要哪些內(nèi)核配置
Tailscale 出于廣泛適用性的考慮,主要都是基于用戶空間的實(shí)現(xiàn),不加任何內(nèi)核配置也可以基于 sock5 代理的方式運(yùn)行。如果要正常狀態(tài)運(yùn)行,其只依賴于一個(gè)內(nèi)核配置:
?
# Tailscale CONFIG_TUN=y
?
如果是 Wireguard 或其他對(duì)內(nèi)核依賴較多的相關(guān)軟件,請(qǐng)自行查找相關(guān)內(nèi)核配置需求。
K3s 需要哪些內(nèi)核配置
K3s 的 Cli 做的很完善,直接可以檢查內(nèi)核配置需求,在我編譯好的 Debian 10 上運(yùn)行具體如下:
?
$ 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.232 info: 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
?
根據(jù)上面輸出,得出 K3s 需要的內(nèi)核配置有:
?
# K3s Generally Necessary: CONFIG_NAMESPACES=y CONFIG_NET_NS=y CONFIG_PID_NS=y CONFIG_IPC_NS=y CONFIG_UTS_NS=y CONFIG_CGROUPS=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_SCHED=y CONFIG_CPUSETS=y CONFIG_MEMCG=y CONFIG_KEYS=y CONFIG_VETH=y CONFIG_BRIDGE=y CONFIG_BRIDGE_NETFILTER=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y CONFIG_NETFILTER_XT_MATCH_IPVS=y CONFIG_NETFILTER_XT_MATCH_COMMENT=y CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y CONFIG_IP_NF_NAT=y CONFIG_NF_NAT=y CONFIG_POSIX_MQUEUE=y # Optional Features: CONFIG_USER_NS=y CONFIG_SECCOMP=y CONFIG_BLK_CGROUP=y CONFIG_BLK_DEV_THROTTLING=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_HUGETLB=y CONFIG_NET_CLS_CGROUP=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CFS_BANDWIDTH=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_RT_GROUP_SCHED=y CONFIG_IP_NF_TARGET_REDIRECT=y CONFIG_IP_SET=y CONFIG_IP_VS=y CONFIG_IP_VS_NFCT=y CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_RR=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # Network Drivers CONFIG_VXLAN=y # Optional (for encrypted networks): CONFIG_CRYPTO=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_SEQIV=y CONFIG_CRYPTO_GHASH=y CONFIG_XFRM=y CONFIG_XFRM_USER=y CONFIG_XFRM_ALGO=y CONFIG_INET_ESP=y CONFIG_INET_XFRM_MODE_TRANSPORT=y # Storage Drivers CONFIG_OVERLAY_FS=y
?
相比 Docker, 主要多了以下內(nèi)核需求:
?Overlay 網(wǎng)絡(luò)?Overlay 存儲(chǔ)
Cilium 需要哪些內(nèi)核配置
Cilium 需要的內(nèi)核配置,可以在這里查看:System Requirements — Cilium 1.13.4 documentation[2]
?
# Cilium Base Requirements CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_NET_CLS_BPF=y CONFIG_BPF_JIT=y CONFIG_NET_CLS_ACT=y CONFIG_NET_SCH_INGRESS=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CGROUPS=y CONFIG_CGROUP_BPF=y CONFIG_PERF_EVENTS=y # Optional: Iptables-based Masquerading CONFIG_NETFILTER_XT_SET=m CONFIG_IP_SET=m CONFIG_IP_SET_HASH_IP=m # Optional: L7 and FQDN Policies CONFIG_NETFILTER_XT_TARGET_TPROXY=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_SOCKET=m # Optional: IPSec CONFIG_XFRM=y CONFIG_XFRM_OFFLOAD=y CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_ALGO=m CONFIG_XFRM_USER=m CONFIG_INET{,6}_ESP=m CONFIG_INET{,6}_IPCOMP=m CONFIG_INET{,6}_XFRM_TUNNEL=m CONFIG_INET{,6}_TUNNEL=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_CRYPTO_AEAD=m CONFIG_CRYPTO_AEAD2=m CONFIG_CRYPTO_GCM=m CONFIG_CRYPTO_SEQIV=m CONFIG_CRYPTO_CBC=m CONFIG_CRYPTO_HMAC=m CONFIG_CRYPTO_SHA256=m CONFIG_CRYPTO_AES=m # Optional: Bandwidth Manager CONFIG_NET_SCH_FQ=m
?
另外 Cilium 對(duì)于 Kernel 版本也有嚴(yán)格要求,Cilium 的部分功能依賴于高版本的 Kernel. 請(qǐng)自行查閱。
修改內(nèi)核配置并編譯
Linux SDK 官方一般都會(huì)提供,基于 Rockchip 芯片系列的 Linux SDK 文件目錄結(jié)構(gòu)大差不差。我這里以 Purple Pi OH 為例,相信如果您也正好有相關(guān)需求,且是 Rockchip 的其他開(kāi)發(fā)板,也能很快找到對(duì)應(yīng)目錄。
一般內(nèi)核配置的目錄為:xxxxxxxkernelarcharm64configsxxxxx_linux_defconfig
將上方提供的 Kernel 配置添加到該文件末尾(注意去重)并保存。
然后直接編譯即可:
?
./build.sh kernel
?
編譯后在./rockdev目錄生成boot.img鏡像。
然后利用 Rockchip 提供的燒錄工具:RKDevTool.exe, 單獨(dú)將?boot.img?燒錄即可。
編譯是真的耗資源啊,耗時(shí)間,耗 CPU, 耗磁盤
可能出現(xiàn)的異常情況
分區(qū)超出
我在編譯過(guò)程中碰到 recovery 分區(qū)超過(guò)的報(bào)錯(cuò),報(bào)錯(cuò)如下:
?
rk356x_linux_sdk/buildroot/output/rockchip_rk356x_recovery/images/recovery.img's size exceed parameter.txt's limit! ERROR: Running build_firmware failed!
?
解決辦法是要修改分區(qū)大小,具體就是修改對(duì)應(yīng)的 parameter.txt 文件。修改后再重新完整編譯:
?
./build.sh
?
并重新燒錄整個(gè)固件。
Docker 安裝后啟動(dòng)失敗
根據(jù)官方文檔:Install Docker Engine on Debian | Docker Documentation[3], Docker 安裝后啟動(dòng)失敗。
官方明確提到目前最新版本需要的 Debian 版本為:
Debian Bookworm 12 (stable) Debian Bullseye 11 (oldstable)
可能是 Deibian 10 兼容性有問(wèn)題導(dǎo)致的。但是有 workaround.
具體的報(bào)錯(cuò)為 nftables 相關(guān)的報(bào)錯(cuò)。
解決方案為:
?
update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy update-alternatives --set arptables /usr/sbin/arptables-legacy update-alternatives --set ebtables /usr/sbin/ebtables-legacy
?
重啟后 Docker 可以正常運(yùn)行。
總結(jié)
玩了一周末的 Rockchip arm64 開(kāi)發(fā)板,現(xiàn)在 2G 內(nèi)存的板子上終于可以跑 docker,k3s,tailscale,cilium 了。
Arm 開(kāi)發(fā)板如我之前所說(shuō),有這些優(yōu)勢(shì):
1.便宜2.可玩性高3.功耗低4.散熱小,運(yùn)行安靜5.Arm64 現(xiàn)在生態(tài)還湊活
但是相比 x86, 這類 arm 開(kāi)發(fā)板生態(tài)還是太差了,沒(méi)有 bios/uefi,裝前面幾個(gè)軟件都要調(diào) kernel 參數(shù)然后編譯,刷機(jī)燒錄。玩起來(lái)太累了。..
x86 也有這些優(yōu)勢(shì):
1.便宜2.可玩性高
但是 x86 的生態(tài)太好了,玩起來(lái)省心多了。
Arm 與 x86 相比,其實(shí)也就強(qiáng)在 功耗低,散熱小。但是現(xiàn)在 Intel 的一些芯片,如 n100 等,TDP 為 6W 也是非常低了,通過(guò)被動(dòng)散熱也能壓住也就靜音。Arm 的優(yōu)勢(shì)所剩無(wú)幾了。..
所以我的建議,想省心/靜音/功率低,首推 x86 迷你主機(jī);想折騰/靜音/功率低,首推各類 arm pi 開(kāi)發(fā)板或盒子;不在乎功耗/不在乎聲音/高配,可以玩玩二手 x86 服務(wù)器。
以上。
評(píng)論
查看更多