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