鸿蒙开发环境Unix调试失败?90%卡在这3个隐蔽配置
|
告警响的那一刻,我正把泡面叉子插进酱包里,没撕开——就听见钉钉连环炸,三台机器的devicelog全红了。开发老张直接冲到机房门口喊“调试断连了”,我抬头看他头发翘着,手里捏着半截华为平板,屏幕还亮着DevEco Studio的报错弹窗,上面飘着一行英文:“No debuggable device found via hdc”。我原以为又是证书链断了,结果扯着线缆绕了一圈,连hdc list -t都回空。窗外天快亮了,机房顶灯嗡嗡响,冷得我手指发僵,搓了两下才去摸键盘。 其实不是设备没连上。是连上了,但Unix侧根本不认它当“debug target”。鸿蒙这玩意儿在Linux上跑调试,不走adb那套路子,走的是hdc(HarmonyOS Device Connector)+ sshd-over-usb的双通道鬼打墙逻辑。我们去年十二月份那会儿,全组压根没碰过这个——以为和安卓一样plug and play,结果它偷偷在后台要求三个配置项必须严格对齐:一个是/usr/bin/hdc的uid必须为0且setuid位必须置位(不是suid bit,是cap_sys_admin capability!),第二个是ssh服务的Match User nobody段里硬编码绑死了AllowTcpForwarding yes;第三个最坑:/etc/udev/rules.d/99-harmonyos.rules里那行SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666", GROUP="plugdev"——GROUP不能是wheel,不能是users,非得是plugdev,而且你系统里要是没这个组……它连udev规则都不加载,log里静默消失。
文章配图,仅供参考 我查了两天,中间还重启过三次sshd,顺手给同事小王的笔记本重装了OpenSSL——他那台跑CI的CentOS7突然验签失败,我以为是连锁反应。结果他摆摆手说“早修好了,是Jenkins那边漏推了cert bundle”,我这才反应过来自己根本没查hdc的cap权限。那天下午我就su进去看ls -l /usr/bin/hdc,发现权限是-rwxr-xr-x 1 root root,心头一凉——果然没setuid。补上chmod u+s之后,它还是不认,我又翻了十来分钟,才想起得用setcap 'cap_sys_admin+ep' /usr/bin/hdc。命令敲完回车,秒通。老张当时就蹲在我工位旁看终端输出,突然拍大腿:“哎哟,这玩意儿连个warning都不给?” 可它真不给。你运行hdc start-server,log里全是INFO;你hdc shell ls /data,它报“permission denied”但不告诉你缺capability;你改完udev规则,重启udevd——没用,还得拔插USB三次才能触发reload。这不是bug,是设计哲学:宁可让九成开发者卡死,也不降低“生产环境安全性”的门限。优胜劣汰?真就是字面意思——活下来的都是敢手动chown plugdev、敢给hdc加cap、敢在/etc/ssh/sshd_config里硬写Match User nobody的人。我们组仨人试了一晚上,两人放弃改回Windows WSL2,只剩我撑着改完了,最后发现连VS Code的HarmonyOS插件都依赖这个nobody用户能做端口转发……呵,它连IDE都没提醒你配啥。 其实前天又出了个岔子:值班表排错了,小李本该接我的班,但他妈住院,我多盯了六小时。凌晨三点半我靠在椅子上刷手机,看到朋友圈有人晒“鸿蒙Next Beta1开发板开箱”,底下全是“丝滑”“一键部署”。我截图发到运维群里,底下跟了一句:“丝滑的前提是你的Linux发行版出厂就装好了libusb-1.0.24+,否则连hid设备枚举都崩。”没人回。我也没再说话。后来泡面凉透了,酱包凝成褐色油块,我拿纸巾擦掉键盘缝里的辣油渍,顺便删掉了刚写一半的GitLab CI脚本注释——“# 此处应校验hdc cap,但暂略”。 对了,机房的人老赵今天换新风扇,噪音比以前大,但温度没降下来。他一边拧螺丝一边说:“现在搞开发环境的,比当年调Oracle RAC还玄学。”我点头,没接话。反正现在我也懒得记那些路径了,hdc的cap权限得加在哪、sshd的Match段怎么嵌套、udev组名拼错一个字母就全废……这些事儿写进Ansible playbook怕是三天就得改一次。不如等哪天它出个hdc doctor命令——虽然我知道肯定不会出。华为文档里写的都是“请确保您的系统满足如下条件”,不写“不满足时会怎样”,就像没写“若未执行该步骤,您将失去所有调试能力并误以为是网络问题”。 我本来想补个shell脚本自动检查这三个点,昨晚写了半页,停在“检测plugdev组是否存在”那一行。后面那句groupmems -g plugdev -l || echo "组不存在"……我删了。太假了。真出了问题,谁会等着脚本告诉你“组不存在”?早就在钉钉里吼“谁能连上真机”了。这事本来能避免——如果当初搭环境时,有人肯花十五分钟读完hdc源码里那段main函数的权限校验逻辑,而不是急着跑hello world。但我没读,老张没读,小王忙着修他的Jenkins cert,谁都没读。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Unix调试总卡壳?5个隐性陷阱90%后端开发者都踩过
