IBM TeamSD 对齐,15 章,内容基于实际代码状态。
| 属性 | 值 |
|---|---|
| 文档 ID | SDD-MRRC-MODERN-2026-001 |
| 版本 | V3.03 |
| 基线日期 | 2026-10-09 |
| 后端运行时 | Python 3.12+, FastAPI, Uvicorn, PyAudio, NumPy |
| 前端技术 | HTML5, CSS3, 原生 JavaScript, Web Audio API |
| 核心接口 | 4+1 路 WebSocket(可选 ATR1000)+ 串口 CAT / CI-V + FT4222 SPI / CI-V 0x27 + USB 音频 |
logs/server-stdout.log 是 systemd 的
StandardOutput=append: 目标,而 systemd 与服务端都不轮转
append: 目标——它因此是整个镜像里唯一没有上限的文件。实测:一个每
20 ms 写一条警告的缺陷,在 6.5 GB 的根分区上五小时写了
17 MB。服务层现在安装 /etc/logrotate.d/mrrc(5 MB
触发、留三代、压缩,copytruncate——systemd
持有文件描述符),并自带 mrrc-logrotate.timer:不押注 cron
或发行版的 timer 在跑;journald 上限 128 MB(默认是文件系统的
10%)。
录音拿到的是保留策略里不破坏的那一半:剩余空间低于
MRRC_RECORDINGS_MIN_FREE_MB(200 MB,按默认码率约七小时)
时,新录音会被拒绝并给出两个数字,绝不会先开始。
操作员录下的东西,产品不会为了腾地方删掉。
一个有界的文件 · 一个有界的 journal · 只拒绝,不删除
sign_for()
现在一个名字只签一次:同名且证书可用(CN/SAN 匹配、距到期 30
天以上、
私钥与证书配对、文件可解析)就复用,而且不重写文件——于是「签了但登记没成功」不会再让
hub 钉住一把、实例服务另一把(现场入口整夜
502 就是这个形态)。轮换成了显式动作(删证书
文件),已经坏掉的实例点一次「连接」即自愈。
FT8 深路径此前每个时隙都杀掉服务器的 DSP
worker:原生解码器里的 Fortran
stop 会终止它的宿主进程,而 launcher 的启动 tee
在服务器答 HTTP 之后就不再写盘——于是死因一个字都没进日志,
只剩一句 worker_exit。现在 worker 自己的
stdout/stderr 落到
logs/ft8-worker.log(诊断包收集),FFTW
线程初始化改为返回状态码而不再 abort,
worker_exit 还会写明第几代、重启过几次。
AD-021 · 登记幂等 · worker 的死因现在可见
「刷好就发」的镜像(build-image.sh --preflash,默认关)把三条口令、
Asia/Shanghai 与
zh_CN.UTF-8 烤进去,于是一台盒子从插电到浏览器里登录
中间不需要任何步骤。Wi-Fi 面板多了一个可手输的 SSID
框(点扫描结果只是把它带入)与
显示/隐藏密码的按钮——隐藏网络和「扫描返回空表」以前都是死路;新增的「公网入口」面板收一个呼号、
向门户提出申请、并回报入口地址。同一批还修掉一处真缺口:首启探测在此前所有镜像上从未运行过
(包装器带着
MRRC_PRESEED=1
调它,而那个键第一行就返回了),于是「电台比盒子晚插上」
永远不会被发现;现在探测真的会跑,而且每次开机重探到配置定型为止。
AD-027 · NFR-069 · 首启探测这才真的会跑