mac安裝並運行stf

首先說下 nvm和npm的關係

nvm:nodejs 版本管理工具。
也就是說:一個 nvm 可以管理很多 node 版本和 npm 版本。

npm:nodejs 包管理工具。
在安裝的 nodejs 的時候,npm 也會跟着一起安裝,它是包管理工具。
npm 管理 nodejs 中的第三方插件

環境搭建

安裝stf的過程一步步來,很容易出錯。node版本建議使用v8.14.0. 這是stf的創始人推薦的。

  1. 安裝nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

log

damondeMacBook-Pro:~ damon$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12819  100 12819    0     0  39810      0 --:--:-- --:--:-- --:--:-- 39934
=> Downloading nvm from git to '/Users/damon/.nvm'
=> Cloning into '/Users/damon/.nvm'...
remote: Enumerating objects: 267, done.
remote: Counting objects: 100% (267/267), done.
remote: Compressing objects: 100% (239/239), done.
remote: Total 267 (delta 31), reused 85 (delta 18), pack-reused 0
Receiving objects: 100% (267/267), 119.47 KiB | 1.81 MiB/s, done.
Resolving deltas: 100% (31/31), done.
=> Compressing and cleaning up git repository

=> Appending nvm source string to /Users/damon/.bashrc
=> Appending bash_completion source string to /Users/damon/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

顯示nvm版本號

 nvm --version

通過以下命令來列出遠程服務器上所有的可用版本:

nvm ls-remote
  1. 這裏我們使用node 8.14.0, 先下載8.14.0版本
nvm install 8.14.0

log

damondeMacBook-Pro:~ damon$ nvm install 8.14.0
Downloading and installing node v8.14.0...
Downloading http://nodejs.org/dist/v8.14.0/node-v8.14.0-darwin-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v8.14.0 (npm v6.4.1)
Creating default alias: default -> 8.14.0 (-> v8.14.0)

可以看到node安裝時,對應的npm也被安裝。nodejs和npm的版本對應關係 v8.14.0 : v6.4.1

  1. 切換到8.14.0版本
nvm use 8.14.0

列出已安裝的node版本

nvm ls
  1. 使用homebrew安裝stf的依賴
brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config

使用brew list可以查看使用homebrew安裝的軟件列表
可以使用brew list+軟件名 確定安裝位置。比如brew list zeromq

  1. 安裝bower
npm install bower -g
  1. 安裝stf
npm install -g stf
  1. 檢查stf環境
stf doctor

注意以上操作順序,否則很容易出錯。stf doctor出錯,不好調。

正常log

damondeMacBook-Pro:~ damon$ stf doctor
2020-07-05T06:33:38.986Z INF/cli:doctor 9086 [*] OS Arch: x64
2020-07-05T06:33:38.989Z INF/cli:doctor 9086 [*] OS Platform: darwin
2020-07-05T06:33:38.990Z INF/cli:doctor 9086 [*] OS Platform: 18.7.0
2020-07-05T06:33:38.990Z INF/cli:doctor 9086 [*] Using Node 8.14.0
2020-07-05T06:33:39.015Z INF/cli:doctor 9086 [*] Using ZeroMQ 4.3.2
2020-07-05T06:33:39.034Z INF/cli:doctor 9086 [*] Using GraphicsMagick 1.3.35
2020-07-05T06:33:39.036Z INF/cli:doctor 9086 [*] Using ADB 1.0.41
2020-07-05T06:33:39.048Z INF/cli:doctor 9086 [*] Using ProtoBuf 3.12.3
2020-07-05T06:33:39.108Z INF/cli:doctor 9086 [*] Using RethinkDB 2.4.0

運行需兩步

  1. 啓動rethinkdb
damondeMacBook-Pro:~ damon$ rethinkdb
Recursively removing directory /Users/damon/rethinkdb_data/tmp
Initializing directory /Users/damon/rethinkdb_data
Running rethinkdb 2.4.0 (CLANG 11.0.0 (clang-1100.0.33.17))...
Running on Darwin 18.7.0 x86_64
Loading data from directory /Users/damon/rethinkdb_data
warn: Cache size is very low and may impact performance.
Listening for intracluster connections on port 29015
Listening for client driver connections on port 28015
Listening for administrative HTTP connections on port 8080
Listening on cluster addresses: 127.0.0.1, ::1
Listening on driver addresses: 127.0.0.1, ::1
Listening on http addresses: 127.0.0.1, ::1
To fully expose RethinkDB on the network, bind to all addresses by running rethinkdb with the `--bind all` command line option.
Server ready, "damondeMacBook_Pro_local_jt8" e1244f7e-1e92-431d-bc02-5bcda1912741
  1. 啓動stf
damondeMacBook-Pro:~ damon$ stf local
2020-07-05T06:34:52.063Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli migrate"
2020-07-05T06:34:52.291Z INF/db 9558 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:34:52.309Z INF/db:setup 9558 [*] Database "stf" created
2020-07-05T06:34:55.144Z INF/db:setup 9558 [*] Table "accessTokens" created
2020-07-05T06:34:55.167Z INF/db:setup 9558 [*] Table "users" created
2020-07-05T06:34:55.187Z INF/db:setup 9558 [*] Table "vncauth" created
2020-07-05T06:34:55.211Z INF/db:setup 9558 [*] Table "devices" created
2020-07-05T06:34:55.337Z INF/db:setup 9558 [*] Index "accessTokens"."email" created
2020-07-05T06:34:55.337Z INF/db:setup 9558 [*] Waiting for index "accessTokens"."email"
2020-07-05T06:34:55.359Z INF/db:setup 9558 [*] Index "users"."adbKeys" created
2020-07-05T06:34:55.359Z INF/db:setup 9558 [*] Waiting for index "users"."adbKeys"
2020-07-05T06:34:55.381Z INF/db:setup 9558 [*] Index "vncauth"."response" created
2020-07-05T06:34:55.381Z INF/db:setup 9558 [*] Waiting for index "vncauth"."response"
2020-07-05T06:34:55.440Z INF/db:setup 9558 [*] Index "devices"."owner" created
2020-07-05T06:34:55.440Z INF/db:setup 9558 [*] Waiting for index "devices"."owner"
2020-07-05T06:34:55.567Z INF/db:setup 9558 [*] Index "vncauth"."responsePerDevice" created
2020-07-05T06:34:55.568Z INF/db:setup 9558 [*] Waiting for index "vncauth"."responsePerDevice"
2020-07-05T06:34:55.601Z INF/db:setup 9558 [*] Index "devices"."present" created
2020-07-05T06:34:55.601Z INF/db:setup 9558 [*] Waiting for index "devices"."present"
2020-07-05T06:34:55.689Z INF/db:setup 9558 [*] Index "devices"."providerChannel" created
2020-07-05T06:34:55.689Z INF/db:setup 9558 [*] Waiting for index "devices"."providerChannel"
2020-07-05T06:34:55.731Z INF/db:setup 9558 [*] Index "accessTokens"."email" is ready
2020-07-05T06:34:55.736Z INF/db:setup 9558 [*] Index "users"."adbKeys" is ready
2020-07-05T06:34:56.146Z INF/db:setup 9558 [*] Index "vncauth"."response" is ready
2020-07-05T06:34:56.215Z INF/db:setup 9558 [*] Index "devices"."owner" is ready
2020-07-05T06:34:56.217Z INF/db:setup 9558 [*] Table "logs" created
2020-07-05T06:34:56.337Z INF/db:setup 9558 [*] Index "vncauth"."responsePerDevice" is ready
2020-07-05T06:34:57.170Z INF/db:setup 9558 [*] Index "devices"."present" is ready
2020-07-05T06:34:57.256Z INF/db:setup 9558 [*] Index "devices"."providerChannel" is ready
2020-07-05T06:34:57.270Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli triproxy app001 --bind-pub tcp://127.0.0.1:7111 --bind-dealer tcp://127.0.0.1:7112 --bind-pull tcp://127.0.0.1:7113"
2020-07-05T06:34:57.272Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli triproxy dev001 --bind-pub tcp://127.0.0.1:7114 --bind-dealer tcp://127.0.0.1:7115 --bind-pull tcp://127.0.0.1:7116"
2020-07-05T06:34:57.275Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli processor proc001 --connect-app-dealer tcp://127.0.0.1:7112 --connect-dev-dealer tcp://127.0.0.1:7115"
2020-07-05T06:34:57.277Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli processor proc002 --connect-app-dealer tcp://127.0.0.1:7112 --connect-dev-dealer tcp://127.0.0.1:7115"
2020-07-05T06:34:57.279Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli reaper reaper001 --connect-push tcp://127.0.0.1:7116 --connect-sub tcp://127.0.0.1:7111"
2020-07-05T06:34:57.287Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli provider --name damondeMacBook-Pro.local --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 900 --public-ip localhost --storage-url http://localhost:7100/ --adb-host 127.0.0.1 --adb-port 5037 --vnc-initial-size 600x800 --mute-master never"
2020-07-05T06:34:57.315Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli auth-mock --port 7120 --secret kute kittykat --app-url http://localhost:7100/"
2020-07-05T06:34:57.362Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli app --port 7105 --secret kute kittykat --auth-url http://localhost:7100/auth/mock/ --websocket-url http://localhost:7110/"
2020-07-05T06:34:57.383Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli api --port 7106 --secret kute kittykat --connect-push tcp://127.0.0.1:7113 --connect-sub tcp://127.0.0.1:7111"
2020-07-05T06:34:57.387Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli websocket --port 7110 --secret kute kittykat --storage-url http://localhost:7100/ --connect-sub tcp://127.0.0.1:7111 --connect-push tcp://127.0.0.1:7113"
2020-07-05T06:34:57.393Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli storage-temp --port 7102"
2020-07-05T06:34:57.400Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli storage-plugin-image --port 7103 --storage-url http://localhost:7100/"
2020-07-05T06:34:57.408Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli storage-plugin-apk --port 7104 --storage-url http://localhost:7100/"
2020-07-05T06:34:57.415Z INF/util:procutil 9557 [*] Forking "/Users/damon/.nvm/versions/node/v8.14.0/lib/node_modules/stf/lib/cli poorxy --port 7100 --app-url http://localhost:7105/ --auth-url http://localhost:7120/ --api-url http://localhost:7106/ --websocket-url http://localhost:7110/ --storage-url http://localhost:7102/ --storage-plugin-image-url http://localhost:7103/ --storage-plugin-apk-url http://localhost:7104/"
2020-07-05T06:34:58.133Z INF/triproxy 9561 [app001] PUB socket bound on tcp://127.0.0.1:7111
2020-07-05T06:34:58.135Z INF/triproxy 9561 [app001] DEALER socket bound on tcp://127.0.0.1:7112
2020-07-05T06:34:58.136Z INF/triproxy 9561 [app001] PULL socket bound on tcp://127.0.0.1:7113
2020-07-05T06:34:58.247Z INF/triproxy 9562 [dev001] PUB socket bound on tcp://127.0.0.1:7114
2020-07-05T06:34:58.251Z INF/triproxy 9562 [dev001] DEALER socket bound on tcp://127.0.0.1:7115
2020-07-05T06:34:58.251Z INF/triproxy 9562 [dev001] PULL socket bound on tcp://127.0.0.1:7116
2020-07-05T06:34:58.661Z INF/db 9563 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:34:58.749Z INF/processor 9563 [proc001] App dealer connected to "tcp://127.0.0.1:7112"
2020-07-05T06:34:58.760Z INF/processor 9563 [proc001] Device dealer connected to "tcp://127.0.0.1:7115"
2020-07-05T06:34:58.833Z INF/reaper 9565 [reaper001] Subscribing to permanent channel "*ALL"
2020-07-05T06:34:58.836Z INF/reaper 9565 [reaper001] Reaping devices with no heartbeat
2020-07-05T06:34:58.842Z INF/poorxy 9574 [*] Listening on port 7100
2020-07-05T06:34:58.852Z INF/db 9564 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:34:58.868Z INF/processor 9564 [proc002] App dealer connected to "tcp://127.0.0.1:7112"
2020-07-05T06:34:58.869Z INF/processor 9564 [proc002] Device dealer connected to "tcp://127.0.0.1:7115"
2020-07-05T06:34:58.885Z INF/db 9565 [reaper001] Connecting to 127.0.0.1:28015
2020-07-05T06:34:58.891Z INF/reaper 9565 [reaper001] Receiving input from "tcp://127.0.0.1:7111"
2020-07-05T06:34:58.891Z INF/reaper 9565 [reaper001] Sending output to "tcp://127.0.0.1:7116"
2020-07-05T06:34:59.099Z INF/storage:plugins:image 9572 [*] Listening on port 7103
2020-07-05T06:34:59.146Z INF/provider 9566 [*] Subscribing to permanent channel "+GbdtbxfT5SLPOPS6pAVzw=="
2020-07-05T06:34:59.216Z INF/storage:plugins:apk 9573 [*] Listening on port 7104
2020-07-05T06:34:59.233Z INF/auth-mock 9567 [*] Listening on port 7120
2020-07-05T06:34:59.237Z INF/provider 9566 [*] Sending output to "tcp://127.0.0.1:7116"
2020-07-05T06:34:59.240Z INF/provider 9566 [*] Receiving input from "tcp://127.0.0.1:7114"
2020-07-05T06:34:59.250Z INF/provider 9566 [*] Tracking devices
2020-07-05T06:34:59.373Z INF/storage:temp 9571 [*] Listening on port 7102
2020-07-05T06:34:59.586Z INF/app 9568 [*] Using pre-built resources
2020-07-05T06:34:59.600Z INF/app 9568 [*] Listening on port 7105
2020-07-05T06:34:59.603Z INF/db 9568 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:34:59.654Z INF/websocket 9570 [*] Subscribing to permanent channel "*ALL"
2020-07-05T06:34:59.661Z INF/websocket 9570 [*] Listening on port 7110
2020-07-05T06:34:59.663Z INF/db 9570 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:34:59.669Z INF/websocket 9570 [*] Sending output to "tcp://127.0.0.1:7113"
2020-07-05T06:34:59.670Z INF/websocket 9570 [*] Receiving input from "tcp://127.0.0.1:7111"
2020-07-05T06:35:00.237Z INF/api 9569 [*] Subscribing to permanent channel "*ALL"
2020-07-05T06:35:00.285Z INF/api 9569 [*] Listening on port 7106
2020-07-05T06:35:00.314Z INF/api 9569 [*] Sending output to "tcp://127.0.0.1:7113"
2020-07-05T06:35:00.316Z INF/api 9569 [*] Receiving input from "tcp://127.0.0.1:7111"
2020-07-05T06:35:00.454Z INF/db 9569 [*] Connecting to 127.0.0.1:28015
2020-07-05T06:37:10.789Z INF/auth-mock 9567 [::ffff:127.0.0.1] Authenticated "[email protected]"


  1. 瀏覽器輸入 localhost:7100 訪問

第一次訪問,stf會自動重定向到http://localhost:7100/auth/mock/
按要求,第一行輸入名字,第二行輸入郵箱,隨便輸
在這裏插入圖片描述
點擊 Log In,進入到主頁 http://localhost:7100/#!/devices

在這裏插入圖片描述

其他

比如搞錯,重頭安裝。卸載node,npm之類

sudo rm /usr/local/bin/npm
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /opt/local/bin/node
sudo rm /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules
sudo npm uninstall npm -g
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*
sudo rm -rf /usr/local/include/node /Users/$USER/.npm
sudo rm /usr/local/bin/node
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d

驗證是否卸載成功

node -v
npm -v

常見問題

  1. 無法識別android-29 設備
FTL/device 19129 [JTK5T19917028084] Setup had an error Error: At least one of these paths should exist: /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/arm64-v8a/lib/android-29/minicap.so, /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/arm64-v8a/lib/android-29/minicap.so, /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/armeabi-v7a/lib/android-29/minicap.so, /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/armeabi-v7a/lib/android-29/minicap.so, /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/armeabi/lib/android-29/minicap.so, /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/armeabi/lib/android-29/minicap.so
    at Object.module.exports.requiredMatch (/Users/damon/Documents/mirage-qrscan_dev/lib/util/pathutil.js:33:9)
    at /Users/damon/Documents/mirage-qrscan_dev/lib/units/device/resources/minicap.js:41:23
    at SerialSyrup.ParallelSyrup.invoke (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/lib/parallel.js:54:24)
    at /Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/lib/serial.js:43:33
    at tryCatch1 (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/util.js:63:19)
    at Promise$_callHandler [as _callHandler] (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/promise.js:708:13)
    at Promise$_settlePromiseFromHandler [as _settlePromiseFromHandler] (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/promise.js:724:18)
    at Promise$_settlePromiseAt [as _settlePromiseAt] (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/promise.js:896:14)
    at Promise$_fulfillPromises [as _fulfillPromises] (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/promise.js:1041:14)
    at Async$_consumeFunctionBuffer [as _consumeFunctionBuffer] (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/async.js:74:12)
    at Async$consumeFunctionBuffer (/Users/damon/Documents/mirage-qrscan_dev/node_modules/stf-syrup/node_modules/bluebird/js/main/async.js:37:14)
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)

log裏關鍵的信息 /Users/damon/Documents/mirage-qrscan_dev/node_modules/minicap-prebuilt/prebuilt/arm64-v8a/lib/

進入這個目錄,發現只有android-21 android-23 android-25 android-27
android-22 android-24 android-26 android-28,沒有android-29
所以,解決辦法是

cp -r android-28 android-29

拷貝一份,就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章