OpenSTF 是一套通过浏览器远程调试和管理手机、手表等智能设备的 Web 应用。对于想在 CentOS 7 上搭建一套可用群控环境的人来说,真正的难点不在于执行 npm install,而在于前置依赖多、版本要求严格,尤其是 Node.js 需要控制在 8.x。下面按“先装基础组件,再装 STF,最后验证设备接入”的顺序整理,方便你判断每一步是否已经满足运行条件。
先确认 STF 运行所需依赖
OpenSTF 不是一个只靠 Node.js 就能跑起来的项目,它依赖多项系统组件协同工作。原始要求包括:
Node.js 8.x,而且是 required,因为部分依赖不支持更高版本- 正确配置好的
ADB RethinkDB >= 2.2GraphicsMagick,用于截图缩放ZeroMQ库Protocol Buffers库yasm,用于编译内嵌的libjpeg-turbopkg-config,供 Node.js 查找系统库
编译型依赖较多,先把常用编译工具装上:
yum install gcc gcc-c++ libtool -y
如果你的机器此前很少编译第三方组件,这一步通常不能省。
ADB 与 RethinkDB:先把设备通信和数据库打通
安装 ADB
ADB 是 Android 的命令行调试工具,STF 接管设备时会直接用到它。文中的做法是下载 Google 平台工具包,再把 adb 链接到系统命令路径。

wget https://dl.google.com/android/repository/platform-tools_r29.0.5-linux.zip
unzip platform-tools_r29.0.5-linux.zip
mv ./platform-tools /usr/local/
ln -s /usr/local/platform-tools/adb /usr/bin/adb
安装后先验证版本,确保命令可以直接调用:
adb version
Android Debug Bridge version 1.0.41
Version 29.0.5-5949299
Installed as /usr/local/platform-tools/adb
只要能得到类似输出,说明 ADB 已经可用。
安装 RethinkDB
STF 运行时需要数据库支撑,原文使用的是 RethinkDB。CentOS 7 上可以直接通过官方仓库文件接入后使用 yum 安装:
wget https://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo
yum install -y rethinkdb
安装完成后查看版本:
rethinkdb -v
rethinkdb 2.4.0 (GCC 4.8.5)
这里的版本输出也能顺带确认程序是否已正确写入系统环境。
图像处理、通信与编译依赖怎么装
这一部分是整个环境里最容易漏项的地方。STF 本身是 Node.js 应用,但很多能力来自底层库,所以这些组件最好按顺序完成。
GraphicsMagick
GraphicsMagick 用于截图相关处理。文中的安装方式为源码编译:
wget https://jaist.dl.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.34/GraphicsMagick-1.3.34.tar.gz
tar -zxvf GraphicsMagick-1.3.34.tar.gz
cd GraphicsMagick-1.3.34
./configure --prefix=/usr/local/GraphicsMagick
make && make install
protobuf
ProtoBuf 也就是 Google Protocol Buffer,负责结构化数据交换。相比 XML 和 JSON,它更适合对体积和效率有要求的场景。
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.2/protobuf-cpp-3.11.2.tar.gz
tar -zxvf protobuf-cpp-3.11.2.tar.gz
cd protobuf-3.11.2/
./configure --prefix=/usr/local/protobuf
make
make install
pkgconfig
pkg-config 负责帮助 Node.js 在编译依赖时找到系统库信息,缺了它,后续安装 STF 时很容易报找不到库的错误。
yum install -y pkgconfig
安装后还需要补上环境变量:
vim /etc/profile.d/pkgconfig.sh
写入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
然后让配置立即生效:
source /etc/profile
ZeroMQ 与 libsodium
ZeroMQ 是开源消息队列库,而它又依赖 libsodium,所以需要先装前者的基础库,再装 ZeroMQ 本体。
先安装 libsodium:
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
tar -zxvf libsodium-1.0.18.tar.gz
cd libsodium-1.0.18/
./configure
make && make check
make install
ldconfig
再安装 ZeroMQ:
wget https://archive.org/download/zeromq_4.1.4/zeromq-4.1.4.tar.gz
tar -zxvf zeromq-4.1.4.tar.gz
cd zeromq-4.1.4
./autogen.sh
./configure --prefix=/usr/local/zeromq
make -j 4 && make install
ln -s /usr/local/zeromq/lib/libzmq.* /usr/local/lib/
ln -s /usr/local/zeromq/include/zmq* /usr/local/include/
这里额外创建软链接,是为了让系统和后续编译过程更容易找到库文件与头文件。
yasm
yasm 也是 STF 编译链里的必备项之一,原文同样使用源码安装:
wget https://github.com/yasm/yasm/releases/download/v1.3.0/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure --prefix=/usr/local/yasm
make && make install
安装完成后追加环境变量:
vim /etc/profile.d/yasm.sh
写入:
export PATH=$PATH:/usr/local/yasm/bin/
让配置立即生效:
source /etc/profile
最后把本地库目录加入动态链接配置:
echo "/usr/local/lib">>/etc/ld.so.conf
ldconfig
这一步是为了减少系统在运行或编译时找不到共享库的问题。
Node.js 版本要求与 STF 安装
这一段最关键的信息只有一句:Node.js 建议安装 8.x,高版本可能不兼容。原文给出的示例版本是:
# node -v
v8.17.0
如果你的环境已经装了更高版本 Node.js,最好先确认是否需要单独切换到 8.x,否则后面即便依赖齐全,stf 也可能在安装阶段报错。
确认 Node.js 版本无误后,直接全局安装 STF:
npm install -g stf --unsafe-perm
原文中的判断标准比较直接:如果没有报错,就可以视为安装成功。
启动 STF 并验证手机是否接入成功
安装结束后,还需要完成两步验证:一是 STF 服务能否正常启动,二是 Android 设备能否被 ADB 和 Web 界面同时识别。

先启动 rethinkdb
第一步先启动数据库,而且这个终端不要关闭:
rethinkdb
再启动 STF
新开一个终端,执行:
stf local --public-ip 192.168.226.11
其中 192.168.226.11 是本机 IP。启动后,可以在浏览器访问 http://192.168.226.11:7100/,看到 STF 的管理界面。
连接手机并检查设备识别
把手机通过 USB 连接到电脑,并在手机上打开调试模式。随后在电脑端执行:
# adb devices
List of devices attached
HMMBFQWW99999999 device
如果能看到设备序列号和 device 状态,说明 ADB 侧已经识别成功。此时刷新 STF 后台页面,设备通常就会出现在管理界面中,之后即可进入远程控制和群控管理流程。
从整个过程看,CentOS 7 部署 STF 的核心不是命令本身多复杂,而是要把版本和依赖关系对齐,尤其是 Node.js 8.x、ADB、RethinkDB 以及 ZeroMQ 相关库。如果你按上面的顺序逐项验证,遇到问题时也更容易定位是在数据库、编译链,还是设备连接这一层出了偏差。














