Armbian / 岸边
Armbian(中文名:岸边)系统是基于 Debian/Ubuntu 而构建的专门用于 ARM 芯片的轻量级 Linux 系统。Armbian 系统精益、干净,并且 100% 兼容并继承了 Debian/Ubuntu 系统的功能和丰富的软件生态,可以安全稳定地运行在 TF/SD/USB 及设备的 eMMC 里。这个项目保留了 Armbian 官方系统的完整性,并进一步拓展了在电视盒子等一些非官方支持设备上的使用,增加了一些便捷操作指令。现在你可以将电视盒子的安卓 TV 系统更换为 Armbian 系统,让他成为一台功能强大的服务器。
本项目依托众多的贡献者,为Amlogic,Rockchip和Allwinner盒子构建 Armbian 系统,支持写入 eMMC 中使用,支持更新内核等功能。最新的 Armbian 系统可以在 Releases 中下载。欢迎Fork并进行个性化定制。如果对你有用,可以点仓库右上角的Star表示支持。
Armbian 系统默认信息
| 系统名称 | 默认账号 | 默认密码 | SSH 端口 | IP 地址 |
|---|---|---|---|---|
| 🐧 Armbian.OS | root | 1234 | 22 | 从路由器获取 IP |
| 🐋 Armbian.Docker | root | 1234 | 22 | 静态 MacVLAN IP |
功能特性
- 广泛设备支持:为 Amlogic(如 S922X, A311D)、Rockchip(如 RK3588)和 Allwinner 等系列的大量电视盒子提供官方级的 Armbian 系统支持。
- 灵活安装:支持将系统写入 TF/SD/USB 设备运行,也支持一键安装至设备的 eMMC 存储中,释放全部性能。
- 内核可定制:提供便捷的内核编译和更新脚本,允许用户自定义内核版本、应用补丁或调整配置,打造个性化系统。
- 便捷软件管理:集成 Armbian 软件中心,提供 Docker、Portainer、Transmission、Jellyfin 等常用软件的一键安装、更新和卸载功能。
- 硬件适配增强:包含针对特定设备的实用脚本,例如 SATA 硬盘活动状态 LED 指示、CPU 风扇智能调速、LED 屏幕显示控制等。
- 多途径构建:支持通过 GitHub Actions 在线自动编译,也支持在 Ubuntu 或 Armbian 系统本地进行编译,方便开发者和高级用户。
- Docker 容器化:提供制作和运行 Armbian Docker 镜像的方法,便于在容器环境中部署和使用。
安装指南
系统要求
- 编译环境:Ubuntu 系统(如 24.04)或已安装的 Armbian 系统,需要安装必要的编译工具链和依赖包。
- 目标设备:列表中支持的 Amlogic、Rockchip 或 Allwinner 电视盒子。
- 存储设备:用于制作启动盘的 TF/SD 卡或 U 盘(建议 8GB 以上)。
安装步骤
获取系统镜像:
从项目的 Releases 页面下载对应你设备型号的 Armbian 系统镜像文件(.img.xz格式)。写入存储设备:
使用balenaEtcher、Rufus或dd命令将下载的镜像文件解压并写入到 TF/SD 卡或 U 盘中。启动设备:
- 将写入镜像的存储设备插入电视盒子。
- 对于 Amlogic 设备,通常需要使用牙签等工具按住设备上的复位键再上电,进入刷机模式。
- 设备将从存储卡启动,首次启动会进行系统初始化,根据提示设置 root 密码和新用户(可选)。
安装至 eMMC(可选但推荐):
系统启动并登录后,在终端中执行以下命令,即可将系统从外部存储设备安装到盒子的内部 eMMC 存储中,以获得更好的性能和稳定性。armbian-install根据脚本提示选择设备型号和安装选项。安装完成后,关机并拔掉外部启动盘,此后设备将从 eMMC 启动。
使用说明
基础操作
系统默认 SSH 开启,您可以通过ssh root@<设备IP>并使用默认密码1234登录进行管理。
更新内核
系统提供了便捷的内核更新命令armbian-update。你也可以使用armbian-kernel命令在本地编译自定义内核。
# 更新到指定版本内核armbian-update5.15.100安装软件
通过 Armbian 软件中心,可以轻松安装各类应用。例如安装 Docker 和 Portainer:
# 安装 Dockerarmbian-softwareinstall101# 安装 Portainer 容器管理界面armbian-softwareinstall102软件 ID 与对应关系可在armbian-software列表中查询。
编译自定义内核
如果你需要特定功能的内核,可以在 Armbian 系统内进行本地编译。
- 更新编译环境:
armbian-kernel -u - 编译指定版本内核(例如 5.15.100):
armbian-kernel -k5.15.100 - 编译完成的内核文件将保存在
/opt/kernel/compile-kernel/output目录中,可用于安装或分享。
核心代码
以下是项目中几个关键功能脚本的节选,展示了其实现思路:
1. SATA 硬盘活动 LED 监控脚本 (用于 WXY-OES 设备)
这个脚本监控 SATA 端口状态,并控制对应的 LED 灯来指示硬盘活动。
#!/bin/bash# 脚本用途: 监控 WXY-OES(A311d) 设备 SATA 端口的硬盘活动,并根据硬盘的存在与否控制对应的LED灯。# 通用版本: 可自动适应 Armbian 和 OpenWrt 系统# 定义3个SATA端口到LED设备文件的映射declare-APORT_LED_MAP=(["ata1"]="/sys/class/leds/green:disk/brightness"["ata2"]="/sys/class/leds/green:disk_1/brightness"["ata3"]="/sys/class/leds/green:disk_2/brightness")# 获取当前所有活动的SATA端口ID (例如 ata1, ata2, ata3)get_active_ata_ids(){find/sys/class/block/sd* -exec readlink -f{}+2>/dev/null|grep-o'ata[0-9]\+'|sort-u||true}# 初始化:获取启动时活动端口,并设置LED初始状态ACTIVE_PORTS_AT_BOOT=$(get_active_ata_ids)echo"开机时检测到的活动端口:${ACTIVE_PORTS_AT_BOOT}"forportin"${!PORT_LED_MAP[@]}";doinitial_state=0ifecho"${ACTIVE_PORTS_AT_BOOT}"|grep-q -x"${port}";theninitial_state=1echo" - 端口${port}检测到活动设备,将点亮LED。"elseecho" - 端口${port}未检测到活动设备,将熄灭LED。"filed_file="${PORT_LED_MAP[${port}]}"if[[-w"${led_file}"]];thenecho"${initial_state}">"${led_file}"fidone# 持续监听内核日志,动态响应SATA链接状态变化echo"持续监听SATA硬盘状态..."tail-F /var/log/kern.log2>/dev/null|whileread-r line;doport=""new_value=""# 使用正则匹配内核日志中的SATA状态事件if[["${line}"=~(ata[0-9]+):[[:space:]]SATA[[:space:]]link[[:space:]](up|down)]];thenport="${BASH_REMATCH[1]}"[["${BASH_REMATCH[2]}"=="up"]]&&new_value=1||new_value=0# ... 根据状态更新对应的LEDfidone2. 智能风扇调速脚本 (用于我家云等设备)
此脚本根据 CPU 温度和硬盘工作状态,智能调节风扇转速,平衡散热与噪音。
#!/usr/bin/perl# 根据F大脚本修改 by Ran# 脚本逻辑:根据CPU温度、硬盘待机状态,动态调整风扇转速。# 目标:低温停转保护风扇,中低速运行降低噪音,高温全速保障散热。# 获取所有硬盘设备名称,用于判断硬盘活动状态my@disks=bsd_glob("/dev/sd[a-z]");# @disks = ("/dev/sdb"); # 若已知内置硬盘设备名,可指定# @disks = ("0"); # 若无内置机械硬盘,使用此设置# 参数调整区my$speed_min=8;# 最小PWM占空比,避免风扇停转死区my$speed_max=99;# 最大PWM占空比useconstant temp_low_high=>50;# 硬盘待机时,CPU低于此温度风扇停转useconstant temp_low_low=>38;# 硬盘未待机时,CPU低于此温度风扇停转useconstant temp_fanOn_high=>65;# 硬盘待机时,CPU高于此温度风扇启动useconstant temp_fanOn_low=>55;# 硬盘未待机时,CPU高于此温度风扇启动# 核心控制逻辑:读取温度,判断硬盘状态,计算并设置风扇速度while(1){my$cpu_temp=`cat /sys/devices/virtual/thermal/thermal_zone0/temp`;$cpu_temp=int($cpu_temp/1000);# 转换为摄氏度my$hd_standby=1;# 默认假设硬盘待机foreachmy$disk(@disks){# 通过 smartctl 命令检查硬盘是否待机if(`smartctl -i -n standby $disk 2>/dev/null`=~/ACTIVE or IDLE/){$hd_standby=0;last;# 发现活动硬盘}}# 根据硬盘状态选择温度阈值my($temp_low,$temp_fanOn)=$hd_standby?(temp_low_high,temp_fanOn_high):(temp_low_low,temp_fanOn_low);my$speed=0;if($cpu_temp>=$temp_fanOn){# 温度高于启动阈值,开始调速$speed=int((($cpu_temp-$temp_fanOn)/(75-$temp_fanOn))*($speed_max-$speed_min)+$speed_min);$speed=$speed_maxif$speed>$speed_max;$speed=$speed_minif$speed<$speed_min;}elsif($cpu_temp<=$temp_low){$speed=0;# 温度低于停转阈值,关闭风扇}# 将计算出的速度值写入 PWM 控制文件`echo $speed > /sys/class/pwm/pwmchip0/pwm0/duty_cycle`if$speed>=0;sleep10;# 每10秒检测一次}3. Armbian Docker 容器启动脚本
此脚本用于初始化 Armbian Docker 容器内的服务,并以 SSH 守护进程作为前台主进程。
#!/bin/bash# Description: Custom startup script for Armbian Docker container.# 尝试启动 Nginx 服务(如果存在)start_nginx_service(){echo"[SETUP] Checking for and attempting to start Nginx service..."if!command-v nginx>/dev/null2>&1;thenecho"[INFO] Nginx not found, skipping."returnfi# 测试 Nginx 配置并尝试启动ifnginx -t;thenecho"[INFO] Nginx configuration test passed."nginx||echo"[WARNING] Failed to start Nginx daemon, but script will continue."elseecho"[ERROR] Nginx configuration test failed! Nginx will not be started."fi}# 其他初始化任务占位other_initialization(){echo"[SETUP] Performing other initialization tasks..."# 可以在此处添加其他必要的命令,例如复制网站代码# cp -rf /path/to/website_code /var/www/html/myblog}echo"Container Initialization Started..."start_nginx_service other_initialization# 启动主前台进程,保持容器运行echo"Initialization Complete. Starting Main Process..."ifcommand-v sshd>/dev/null2>&1;thenecho"[RUN] Starting SSHD as the main process..."mkdir-p /var/run/sshd# 使用 exec 替换当前脚本进程,使 sshd 成为 PID 1exec/usr/sbin/sshd -Delse# 备用方案:如果未安装 sshd,则保持容器存活用于调试echo"[RUN] FATAL: sshd command not found."echo"[RUN] Starting 'tail -f /dev/null' to keep the container alive for debugging."exectail-f /dev/nullfi这些代码片段体现了本项目在硬件适配、资源管理和容器化方面的核心工作,通过自动化脚本极大简化了电视盒子上运行完整 Linux 系统的复杂性。
159uF4GEN8bRmexJ0gu3k6mEuy98urpX+qaQMiXroOHDGGxFc42iQ8Dc8oLperAE
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)