部署STF

CentOS系統,

首先安裝python3.6

Step1.安裝相關依賴包。

在終端下輸入命令:sudoyum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

在終端下輸入命令:wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz

Step3.解壓安裝包。(1)新建文件夾名字爲python3,在終端下輸入命令:mkdir python3

(2)將下載好的安裝包解壓至python3文件夾。

在終端下輸入命令:tar -xf Python-3.6.5.tar.xz -C python3

Step4.編譯安裝。(1)進入 Python-3.6.5目錄,在終端中輸入命令:cd python3/Python-3.6.5

(2)配置安裝路徑,在終端中輸入命令:./configure --prefix=/home/python3

(3)安裝,在終端中輸入命令:make

之後,再輸入命令:make install

Step5.創建python3的軟鏈接。

(1)備份原文件爲python2,在終端中輸入命令:sudomv /usr/bin/python /usr/bin/python2

(2)創建軟鏈接,在終端中輸入命令:sudo ln -s /home/python3/bin/python3 /usr/bin/python

備份python2的pip爲pip2,輸入命令:sudo mv /usr/bin/pip /usr/bin/pip2

爲python3的pip創建軟鏈接,輸入命令:sudo ln -s /home/python3/bin/pip3 /usr/bin/pip

Step6.python3.6測試

在終端輸入命令:python

看到系統提示python3.6.5,證明此時我們已成功安裝。

值得注意:因爲在Centos中,yum源使用的是Python2.7,替換爲Python3以後,yum源無法正常工作。所以我們需要修改yum配置文件。

首先,更改文件權限,在終端輸入命令:sudo chmod 777 /usr/bin/yum

在終端輸入命令:vi /usr/bin/yum 將#!/usr/bin/python 改爲#!/usr/bin/python2.7

輸入:wq保存退出後,輸入命令:sudoyum search pip 用於測試yum是否正常工作。

以後在使用yum的時候報錯也需要把文件裏的python改成python2.7

解下來安裝airtest

pip install airtest==1.0.24

pip install pocoui==1.0.70

然後把adb添加到環境變量

修改/etc/profile文件使其永久性生效,並對所有系統用戶生效,在文件末尾加上如下兩行代碼
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
export PATH

執行 命令source /etc/profile命令

接下來安裝docker

# yum install -y yum-utils   device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y&&yum  -y install docker-ce-18.06.3.ce-3.el7&&systemctl start docker  &&systemctl status  docker

輸入docker version,看到客戶端和服務端的信息,則安裝成功。

docker安裝好以後再pull一下stf需要的幾個鏡像

sudo docker pull openstf/stf:latest # STF鏡像
sudo docker pull rethinkdb:latest # rethinkdb 鏡像
sudo docker pull openstf/ambassador:latest
sudo docker pull nginx # nginx 鏡像
然後加載容器

docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090
docker run -d --name stf --net host openstf/stf stf local --public-ip 127.0.0.1
值得注意的是此時這裏的ip地址是你的ipv4的地址,否則只可以本機訪問,

到此docker安裝完成、

但是在安裝時出現錯誤的情況:

docker啓動STF遇到的一些問題

當我們執行試圖啓動的時候,在docker中刪除原來的stf鏡像,重新運行(10.138.61.121 是宿主機IP,10.138.20.194是遠程的IP,5037 是宿主機暴露的adb端口),如果沒有刪除的話我們執行下面的命令

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 10.138.20.194 --adb-port 5037  --allow-remote
會遇到這個問題:

Error response from daemon: Conflict. The container name "/stf" is already in use by container "c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c". You have to remove (or rename) that container to be able to reuse that name.
其實這個問題就是在於你的之前運行的docker的容器還沒有退出,導致出現容器重名的情況,這時候我們需要刪除容器

docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c(鏡像ID)
這時候會出現另外一個問題:

Error response from daemon: You cannot remove a running container c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c. Stop the container before attempting removal or force remove
此時輸出錯誤是指你不能刪除一個正在運行的容器,必須先停止它,才能夠刪除。於是我們執行:docker stop

我們發現又出現了錯誤

"docker stop" requires at least 1 argument. See 'docker stop --help'. Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...] [flags] Stop one or more running containers [root@localhost ~]#  docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c Error response from daemon: You cannot remove a running container c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c. Stop the container before attempting removal or force remove

Docker本身提供了兩種終止容器運行的方式,即docker stop與docker kill。

先來說說docker stop吧,當我們用docker stop命令來停掉容器的時候,docker默認會允許容器中的應用程序有10秒的時間用以終止運行。所以我們查看docker stop命令幫助的時候,會有上圖的提示:

在docker stop命令執行的時候,會先向容器中PID爲1的進程發送系統信號SIGTERM,然後等待容器中的應用程序終止執行,如果等待時間達到設定的超時時間,或者默認的10秒,會繼續發送SIGKILL的系統信號強行kill掉進程。在容器中的應用程序,可以選擇忽略和不處理SIGTERM信號,不過一旦達到超時時間,程序就會被系統強行kill掉,因爲SIGKILL信號是直接發往系統內核的,應用程序沒有機會去處理它。在使用docker stop命令的時候,我們唯一能控制的是超時時間,比如設置爲20秒超時:docker stop --time=20 container_name

 

docker kill

接着我們來看看docker kill命令,默認情況下,docker kill命令不會給容器中的應用程序有任何gracefully shutdown的機會。它會直接發出SIGKILL的系統信號,以強行終止容器中程序的運行。通過查看docker kill命令的幫助,我們可以看到,除了默認發送SIGKILL信號外,還允許我們發送一些自定義的系統信號:

Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...] Kill one or more running containers Options:       --help            Print usage   -s, --signal string   Signal to send to the container (default "KILL")

比如,如果我們想向docker中的程序發送SIGINT信號,我們可以這樣來實現: 1 docker kill --signal=SIGINT container_name 與docker stop命令不一樣的地方在於,docker kill沒有任何的超時時間設置,它會直接發送SIGKILL信號,以及用戶通過signal參數指定的其他信號。 其實不難看出,docker stop命令,更類似於Linux系統中的kill命令,二者都是發送系統信號SIGTERM。而docker kill命令,更像是Linux系統中的kill -9或者是kill -SIGKILL命令,用來發送SIGKILL信號,強行終止進程。 在程序中接收並處理信號

瞭解了docker stop與docker kill的區別,我們能夠知道,docker kill適合用來強行終止程序並實現快速停止容器。而如果希望程序能夠gracefully shutdown的話,docker stop纔是不二之選。這樣,我們可以讓程序在接收到SIGTERM信號後,有一定的時間處理、保存程序執行現場,優雅的退出程序。

一切都做好了以後我們在開始指定容器停止

 docker stop --time=20 stf

終止成功!

然後在刪除

 docker rm c8d7f7e010206d185b7969fad8f92e955e8e4b2efb718fd02f82703f8b6b306c

刪除成功!

docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 

然後我們在重新走一遍docker run -d --name stf --privileged=true --net host openstf/stf stf local --public-ip 10.138.61.121 --adb-host 10.138.2

重啓後開啓stf

sudo service docker start

docker start rethinkdb

adb start-server

docker start stf

 

 


最後感謝

https://blog.csdn.net/saint_228/article/details/88690103

https://blog.csdn.net/u012070360/article/details/82259815

 

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