开篇明义,要在 Mac 上 直接用 Docker 安装 stf 是无法以有线的方式连接手机的,各位施主苦海无边回头是岸。(这里只是说 直接 在 Mac 里用 Docker 安装 stf 无法使用, 并不是完全无法用 Docker 安装,只不过方法很蛋疼 )
公司有台 iMac 暂时闲着,准备装个 stf 来把分散的安卓机器统一管理起来,经历过 node 和 npm 循环依赖无法升级的我看到如下那么多安装依赖时就浑身舒爽 ~~
本着能躺绝不坐着的偷懒精神,想用 Docker 来解决,以为几句docker pull
和 docker run
就能搞定,而且 Docker sandbox 的特性还能不污染主机。没想到 too young, too simple , sometimes 非常 naive 啊。
Docker pull 和 run 的过程不表,参考 STF 开发环境搭建与制作 docker 镜像过程 , 期间各种踩坑、改命令改参数、端口映射。好不容易打开 stf 的管理页面,满怀期望把手机插上后,发现无法找到设备。。。
问题并不在于 openstf/stf ,而是出在它的依赖 sorccu/adb 这个 Docker 版 adb 身上。
Mac 里的 Docker 其实是依附于 xhyve ,也就是一个 hypervisor VM 。xhyve 非常小巧,但是有个问题, 无法把 Mac 的 USB 映射到 Docker 里,所以 Docker adb 是无法透过 xhyve 访问到 Mac 的 USB 设备。 这也就导致千辛万苦折腾半天之后插上手机发现没有设备的惨剧 。
adbd 作者原话 No /dev/bus/usb virtualization on Mac OS Sierra
Unfortunately Docker on Mac does not support USB, since the underlying xhyve doesn't support it. The old boot2docker may have worked by tweaking VM settings.
I think the easiest (perhaps only?) way to get it to work would be to use a Linux VM and run docker there instead.
为这个标题进来的同学们看到这就可以出门左转 npm install
起来了。
不过如果因为各种原因无法直接安装 stf 或者跟我一样年假一天闲着也是闲着的,可以继续往下进入 Mac -> Ubuntu -> Docker -> stf 的蛋碎之旅
Mac 安装 virtualbox ,继而安装 Ubuntu
Ubuntu 安装 Docker 并设置 repository 镜像源
sudo usermod -a -G docker $USER
随后 log out 或重启docker pull
的速度十分感人,所以设置镜像必不可少。但是网上的镜像设置都是去各种云网站,其实有 Docker 中国官方镜像加速, 速度非常快,Ubuntu Docker 把下面的命令加入 /etc/docker/daemon.json (如果没有该文件就 sudo vi
一个),然后重启 deamon 和 docker, Mac Docker 点击鲸鱼-> daemon -> Advanced 黏贴 -> Apply & Restart 即可
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
按照 STF 开发环境搭建与制作 docker 镜像过程 开心的玩耍
关闭 VM ,因为要改 VM 配置
保存,再启动 VM, 然后 docker run rethinkdb
等等启动 stf 服务, 这里要注意,如果用 docker-compose
来启动服务的话,rethinkdb 的启动要放在最先且留一点时间,否则因为 VM 资源少很可能 rethinkdb 还没有起来 stf 就来连接数据库导致报错了
Mac 浏览器打开 localhost:7100 ,连上手机, 等待 stf 安装, 然后就可以玩耍啦
遗留问题
docker run stf
的时候没有配置好还是因为 VM 的网络应该设置成桥接模式,感谢参加本次 ‘闲的蛋碎之旅’,本人初入 stf 门,文章可能有很多不完善之处,还请海涵并指教