1/3
2/3
3/3
榨干性能!魔百和CM311-1a KVM Openwrt& Docker 青龙 宝塔面板
sfezen
编辑于 2022年09月27日 21:18
收录于文集
共2篇

声明:由于固件、软件、镜像等持续更新,本文仅代表当前所使用版本的流畅安装记录。行文略长,关键代码处会配以截图展示,请自行对比是否存在差异导致安装失败!如有疏忽之处,还请见谅!刷机有风险,请慎重选择,一切源于本文造成的后果自负,笔者概不负责! 前言:创维e900v22c、e900v22d、中兴B863AV3.2-M、魔百和CM311-1a、M411A、M411A、UNT403A、UNT413A等一众搭载晶晨S905L3A的电视盒子成为2022年度数码爱好者(la ji lao)们最关注的产品之一,纵使有百兆网口的缺点,Soc综合性能在N1之上,再加上50~80元的价格,这都不是事儿!笔者在3月的某一天逛小黄鱼上偶然看到有人在卖HomeAssistant的盒子,于是便看到了图中硕大的魔百和三个字,凭借养成的垃圾佬嗅觉,加之曾看过神雕(Teasiu) 大佬分享海思机顶盒的相关文章,所以对这个电视盒子饶有兴趣,后来经过多方对比外形+小黄鱼的AI推送算法,终于找到了它——魔百和CM311-1a YST YS(M),虽然笔者家中已有老母鸡、N1、H1、M1、R1、蜗牛星际、我家云、锐角云、随身Wi-Fi等一众“垃圾”,但面对当时50元不到的价格毅然剁手2台,这半年来经过各路大佬的开发调教,目前系统固件已日趋完善,本文以魔百和CM311-1a (CH) 2G RAM+8G ROM为例,探索该系列电视盒子更多整合方案,希望传递共享精神,也是对各位大佬智慧结晶的进一步传播。

特别鸣谢各路大佬(排名不分先后):

Flippy、Aidany、Ophub、Calmact、Pinker336、Xcray、一脸懵13、Whyour、Cyberbolt、SuLingGG

本文参考:

CM311-1a_YST代工_安卓9_S905L3A_没无线版Emotn UI桌面线刷固件包-智能电视、网络机顶盒 刷机 破解 root 评测-恩山无线论坛 (https://www.right.com.cn/forum/thread-8222132-1-1.html)

e900v22c教程汇总v1.0.2 (https://docs.qq.com/doc/DWFprWWxZa290VXNk)

在 KVM 虚拟机中安装使用 OpenWrt 的说明 (https://github.com/unifreq/openwrt_packit/blob/master/files/qemu-aarch64/qemu-aarch64-readme.md)

  • Part 1. 线刷Android TV版固件

此步骤非必须,但依然建议!刷Android的目的: 1. 盒子安卓系统可能存在分区大小不一致,有写EMMC后黑屏不启动的风险,故建议刷写该版本 2. 该固件已预装LibreELEC APP 可以直接通过遥控器切换到U盘中的系统,不需要再使用ADB工具进行切换

安装Amlogic USB Burning Tool v3.2软件→打开Aml_Burn_Tool软件→文件→导入烧录包→Amlogic USB Burning Tool自动重启变成2.1版本→勾选【擦除flash】和【擦除bootloader】→点击【开始】→盒子电源关闭→盒子接电源线→把USB线一端插上盒子→保持短接(用平口螺丝刀或镊子)→USB另一端插上电脑→通电开机(非必须,CH版通过USB线即可供电刷机)→盒子进度条在跑了(此时松开短接)→进度条跑完点击停止→移除USB线→盒子电源关闭→插入HDMI线→盒子电源打开→盒子启动Android电视系统,线刷完成!

短接点:4R32

图片来自刷机包中,侵删

线刷开始 

擦除flash、擦除bootloader 需要勾选!

线刷工具、固件下载:

Amlogic USB Burning Tool:https://github.com/ophub/kernel/releases/download/tools/amlogic_usb_burning_tool_v3.2.0_and_driver.tar.gz

CM311-1a_ss_new.img:https://www.aliyundrive.com/s/qrVaLvZ2Wci

注:阿里盘下载的EXE文件,运行后解压出img文件

  • Part 2. 制作Armbian启动U盘

O大Armbian镜像:ophub/amlogic-s9xxx-armbian: Armbian for Amlogic s9xxx tv box. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, etc. including install to EMMC and update related functions. (https://github.com/ophub/amlogic-s9xxx-armbian)

依据个人喜好选择:jammy(Ubuntu最新发行版代号)或bullseye(Debian最新发行版代号)

Armbian固件及工具下载:

Armbian_22.11.0_Aml_s905l3a_bullseye_5.15.62_server_2022.09.06.img.gz (https://github.com/ophub/amlogic-s9xxx-armbian/releases/download/Armbian_Aml_bullseye_09.06.0729/Armbian_22.11.0_Aml_s905l3a_bullseye_5.15.62_server_2022.09.06.img.gz)

Rufus 3.20 便携版 (https://github.com/pbatard/rufus/releases/download/v3.20/rufus-3.20p.exe)

下载并解压Armbian固件中的img文件,插入U盘(容量需>=4GB,会格式化U盘,请提前转移重要资料!笔者使用大妈近期比较热门的海康威视 星云R32 USB3.1 U盘 128GB 写入速度较快但未能启动,更换金士顿 USB3.0 32GB U盘后成功,如U盘不能启动建议更换闪迪等品牌U盘),在Rufus设备栏选择U盘,点击引导类型选择处的选择 选择解压后的Armbian镜像文件(Armbian_22.11.0_Aml_s905l3a_bullseye_5.15.62_server_2022.09.06.img)

海康威视 星云R32 USB3.1 U盘

金士顿 USB3.0 32GB U盘

  • Part 3. 安装Armbian到EMMC中

此时回到电视盒子,使用遥控器打开LibreELEC APP 点击确定

等待电视盒子红灯后将U盘插入到靠近网口的USB口,第一屏后出现花屏,然后出现Armbian启动字符

成功引导

在界面可见当前IP,通过Xshell、MobaXtrem、Putty、Finalshell、Windows Terminal等软件通过SSH协议登录 初始密码:1234

但是因为Network服务和NetworkManager服务同时启动导致设备获取两个IP,这里显示的IP不一定可以连接,所以我们还是在路由器中寻找这台设备的IP通过SSH登录,当然也链接键盘登录后(这里会要求更改初始密码)使用:ip a 命令查看IP

登陆后系统会强制更新密码,且规则为字母+符号或数字+符号,如果输入弱口令,会再次要求更新,所以这里我们设置一个合规的密码,稍后再使用passwd更新:)

第二步,选择Shell终端,这里根据个人喜好选择。

修改初始密码

ip a 命令查看IP

添加br0桥接并设置固定IP

代码块
JavaScript
自动换行
复制代码
nano /etc/network/interfaces.d/br0
复制成功

添加以下内容:

代码块
JavaScript
自动换行
复制代码
allow-hotplug eth0
iface eth0 inet manual
#以下MAC地址可根据自己机身背面情况进行更改
hwaddress ether 92:6D:0D:D2:C2:AA
pre-up ifconfig $IFACE up
pre-down ifconfig $IFACE down

# Bridge setup
auto br0
iface br0 inet static
bridge_ports eth0
bridge_stp off
bridge_waitport 0
bridge_fd 0
#此处设置电视盒子静态IP 比如:192.168.2.254
address 10.0.1.236
#此处设置广播地址,最后一位是255,比如192.168.2.255
broadcast 10.0.1.255
netmask 255.255.255.0
#以下两处均设置为主路由器IP地址,如192.168.2.1
gateway 10.0.1.1
dns-nameservers 10.0.1.1
复制成功

关闭并禁用NetworkManager服务(设备会重启)

代码块
JavaScript
自动换行
复制代码
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
init 6
复制成功

等待重启后再次通过SSH连接盒子后我们开始使用命令将系统写入EMMC

代码块
JavaScript
自动换行
复制代码
armbian-install
复制成功

输入305 选择:s905l3a  CM311-1a-YST

ext4、BtrFS各有优缺点,这里根据自己情况选择,这里笔者选择BtrFS,等待写入成功

此时您有两种选择:

1→关闭盒子电源,移除U盘,再接通电源

2→优雅的使用 poweroff关机再移除U盘 关开电源

可能产生的问题:盒子获取不到IP或等待时间很久,这里的解决办法是:检查network服务是否active,重新插拔网线。一般只要获取到IP后,重启关机问题不会再复现。

代码块
JavaScript
自动换行
复制代码
systemctl status networking.service
复制成功

另,这个U盘暂时请保留内容!下一次可以用来装HomeAssistant。

  • Part 4. 安装Docker及青龙、宝塔面板

在开始之前,为了更快的安装软件,我们先换源:

代码块
JavaScript
自动换行
复制代码
nano /etc/apt/sources.list
复制成功

Ctrl+K全部删除 复制清华源 鼠标中键(滚轮)粘帖

代码块
JavaScript
自动换行
复制代码
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
复制成功

Ctrl+X → y → 回车 保存

更新源并安装以下软件:

代码块
JavaScript
自动换行
复制代码
apt update && apt install -y apt-transport-https apparmor udisks2 gpiod lrzsz
复制成功

安装Docker(使用清华源):

代码块
JavaScript
自动换行
复制代码
mkdir -p /etc/apt/keyrings
复制成功

代码块
JavaScript
自动换行
复制代码
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
复制成功

代码块
JavaScript
自动换行
复制代码
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制成功

代码块
JavaScript
自动换行
复制代码
apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
复制成功

新建目录后安装青龙,青龙登录地址:盒子IP:5700 (注意英文冒号)

代码块
JavaScript
自动换行
复制代码
mkdir -p /data/docker && cd /data/docker
复制成功

代码块
JavaScript
自动换行
复制代码
docker run -dit \
-v $PWD/ql/config:/ql/config \
-v $PWD/ql/log:/ql/log \
-v $PWD/ql/db:/ql/db \
-v $PWD/ql/scripts:/ql/scripts \
-p 5700:5700 \
--name qinglong \
--hostname qinglong \
--restart always \
whyour/qinglong:latest
复制成功

继续安装宝塔面板:这里使用cyberbolt/baota,需要生成测试环境并复制文件后删除再生成正式环境,注意命令中的username 不能使用admin,否则会报错

代码块
JavaScript
自动换行
复制代码
docker run -itd --net=host \
--name baota-test cyberbolt/baota \
-port 8888 -username sfezen -password 987654321
复制成功

使用以下命令查看容器是否已启动,此处面板链接IP需更正为盒子IP,下同

代码块
JavaScript
自动换行
复制代码
docker logs baota-test
复制成功

新建宝塔映射目录

代码块
JavaScript
自动换行
复制代码
mkdir -p /data/docker/baota
复制成功

复制容器中www目录到/data/docker/baota中

代码块
JavaScript
自动换行
复制代码
docker cp baota-test:/www /data/docker/baota
复制成功

复制完成后停止并删除测试容器

代码块
JavaScript
自动换行
复制代码
docker stop baota-test && docker rm baota-test
复制成功

创建正式容器,此处port将成为宝塔面板登录端口,修改username、password建议改成强口令

代码块
JavaScript
自动换行
复制代码
docker run -itd -v /data/docker/baota/www:/www --net=host --restart=always \
--name baota cyberbolt/baota \
-port 9888 -username sfezen -password 987456321
复制成功

再次使用' docker logs 容器名 &#​39;查看容器是否已启动

代码块
JavaScript
自动换行
复制代码
docker logs baota
复制成功

通过盒子IP:端口登录宝塔面板,少年,快去建站吧!

现在已经安装好了青龙和宝塔,让我们来看看这个8GB的ROM还剩多少?

我的天呐!居然还有3.5G的空间,反正宝塔青龙又不是很耗费CPU,我们就匀出来1G+2G来给OpenWRT吧~说干就干!

  • Part 5. 安装KVM及OpenWRT

有朋友可能会问,这里为什么不通过Docker安装OpenWRT呢?KVM会不会损失性能?这里主要基于两个原因:1. Turbo ACC 网络加速 2. 在Docker中使用OpenWRT需打开特权模式(--privileged)影响宿主机稳定性 3. 性能损坏基本可以无视,这一点F大在《在 KVM 虚拟机中安装使用 OpenWrt 的说明》中已有说明,所以本着价值最大化原则,这里使用KVM进行

安装KVM及依赖

代码块
JavaScript
自动换行
复制代码
apt-get install -y gconf2 qemu-system-arm qemu-utils qemu-efi ipxe-qemu libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager seabios vgabios gir1.2-spiceclientgtk-3.0 xauth fonts-arphic-ukai
复制成功

与此同时,下载OpenWRT所需的镜像

openwrt_qemu-aarch64_R22.9.1_k5.15.62-flippy-76+o.qcow2 (https://github.com/ophub/amlogic-s9xxx-openwrt/releases/download/OpenWrt_aarch64_09.06.0716/openwrt_qemu-aarch64_R22.9.1_k5.15.62-flippy-76+o.qcow2)

将下载后的文件改名并上传至:/var/lib/libvirt/images/

代码块
JavaScript
自动换行
复制代码
cd /var/lib/libvirt/images/
rz
复制成功

rz 命令选择上传文件 openwrt_qemu-aarch64_R22.9.1_k5.15.62-flippy-76+o.qcow2 并改名

代码块
JavaScript
自动换行
复制代码
mv openwrt_qemu-aarch64_R22.9.1_k5.15.62-flippy-76+o.qcow2 openwrt.qcow2
复制成功

镜像默认占用16G,所以我们进行瘦身,减去13G以后,qcow最大占用3G

代码块
JavaScript
自动换行
复制代码
qemu-img resize --shrink openwrt.qcow2 -13G
复制成功

F大在文章中列举了使用X Server的一些客户端,这里为了更简便,我们使用MobaXtrem来进行演示

下载地址:MobaXterm (https://mobaxterm.mobatek.net/download-home-edition.html)

首先在MobaXtrem中使用SSH连接盒子

运行以下命令后会弹出创建虚拟机窗口

代码块
JavaScript
自动换行
复制代码
virt-manager
复制成功

选择新建虚拟机

选择导入已存在的镜像 → Forward

点击Browser后点选我们上传的OpenWRT镜像(qcow2) → Choose Volume

如果这是我们继续点击Forward就会出现如下错误,莫慌,这是因为我们没有选择操作系统类型

这里我们输入 debian 点选 debian 10(实在是因为没有OpenWRT可以选,那就选宿主机较接近的)

接下来分配内存和CPU核心,这里选默认的1G、双核,对于OpenWRT而言已经很阔绰了

重要到了最后一刻,我们现在更改为他本来应该叫的名字,这里强烈建议没有强迫症的同学命名全部使用小写字母,勾选Customize configuration before install,检查网卡名称是否是br0(Part 3. 中新建的网桥名)

这里我们勾选开机自动启动,点击底部的Apply,点击头部的Begin installation

此时,熟悉的窗口就会出现,他来了!他来了!

这时我们按下Enter键,进入OpenWRT Shell

如果宿主机未安装中文字体 这里会显示乱码 不过问题不大

代码块
JavaScript
自动换行
复制代码
nano /etc/config/network
复制成功

修改option ipaddr 中的地址为同主路由网段的其它未占用地址,如:192.168.2.254

添加网关、DNS、广播地址,根据自己网络情况更改:

代码块
JavaScript
自动换行
复制代码
option gateway '10.0.1.1'
option broadcast '10.0.1.255'
option dns '10.0.1.1'
复制成功

Ctrl+X → y → 回车保存

重启OpenWRT网络:

代码块
JavaScript
自动换行
复制代码
/etc/init.d/network restart
复制成功

现在可以使用浏览器访问你的OpenWRT啦!

初始密码:password

下一步我们换个源吧:使用SuLingGG大佬的openwrt.cc源

在系统 → 软件包 → 配置中 注释验证签名

代码块
JavaScript
自动换行
复制代码
#option check_signature
复制成功

点击提交!X1

注释旧源,更换新源

代码块
JavaScript
自动换行
复制代码
#src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/armvirt/64/packages
#src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/aarch64_cortex-a53/base
#src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.9/packages/aarch64_cortex-a53/luci
#src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/aarch64_cortex-a53/packages
#src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/aarch64_cortex-a53/routing
#src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/aarch64_cortex-a53/telephony

src/gz openwrt_core https://openwrt.cc/snapshots/targets/armvirt/64/packages
src/gz openwrt_base https://openwrt.cc/snapshots/packages/aarch64_cortex-a53/base
src/gz openwrt_luci https://openwrt.cc/snapshots/packages/aarch64_cortex-a53/luci
src/gz openwrt_packages https://openwrt.cc/snapshots/packages/aarch64_cortex-a53/packages
src/gz openwrt_routing https://openwrt.cc/snapshots/packages/aarch64_cortex-a53/routing
src/gz openwrt_telephony https://openwrt.cc/snapshots/packages/aarch64_cortex-a53/telephony
复制成功

点击提交!X2

保存后在KVM终端中使用命令更新

代码块
JavaScript
自动换行
复制代码
opkg update
复制成功

作为旁路由:

  1. 关闭DHCP,在 网络 接口 LAN 修改 勾选忽略该接口 物理设置中取消勾选桥接 保存并应用

  2. 在网络 防火墙 常规设置 转发 拒绝改为接受 保存并应用

  3. 在网络 Turbo ACC 网络加速设置 勾选 BBR 拥塞控制算法 保存并应用

结尾:至此,本篇也就进入尾声了,此时我们的8GB存储还有3.2GB的空间,这里需要留出空间给宝塔安装lnmp等,这个方案是否稳定,是否经得起长久的折腾,需要您和我一同来实践、去探索,也希望这篇文章能给您带来一点点启发,以上。