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