解决安装python3.7.4报错Can”t connect to HTTPS URL because the SSL module is not available

简述

从官网下载了Python3.7.4,直接编译安装后,使用pip3出现了报错信息: Can’t connect to HTTPS URL because the SSL module is not available

错误原因

在Python3.7之后的版本,依赖的openssl,必须要是1.1或者1.0.2之后的版本,或者安装了2.6.4之后的libressl。

image.png

而本地的openssl依然是1.0.1e的。

1
2
[root@localhost ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

解决方法

上openssl官网下载1.0.2或者1.1之后的openssl包,编译安装。我选择的是1.0.2r。

1
2
3
4
5
6
[root@localhost ~]# tar zxvf openssl-1.0.2r.tar.gz
[root@localhost ~]# ./config --prefix=/opt/openssl1.0.2r --openssldir=/opt/openssl1.0.2r/openssl no-zlib
[root@localhost ~]# make && make install
[root@localhost ~]# echo "/opt/openssl1.0.2r/lib" >> /etc/ld.so.conf
[root@localhost ~]# ldconfig -v

注意:编译openssl1.0.2r的时候建议加上no-zlib,否则后面可能会出现undefined symbol: SSL_CTX_get0_param错误

安装python3.7

下载Python包,编译

1
2
3
[root@localhost ~]# tar xvf  Python-3.7.4.tar.xz
[root@localhost ~]# cd Python-3.7.4;./configure --prefix=/data/tools/Python3.7.4

编译完成后不要make,先修改Python源码包中ssl的参数

打开源码解压目录中的 Modules/Setup ,直接搜索 SSL= ,将SSL=后面的目录改为前面openssl的安装目录,并把下面三行的注释去掉。

1
2
3
4
5
[root@localhost ~]# vim Modules/Setup
SSL=/opt/openssl1.0.2r
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

改完之后就在解压目录直接make就行了。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# make && make install
[root@localhost ~]# echo "export PATH=/data/tools/Python3.7.4/bin:$PATH" >> ~/.bashrc
[root@localhost ~]# source ~/.bashrc
[root@localhost ~]# pip3 list
Package  Version
---------- -------
pip    19.0.3
setuptools 40.8.0
You are using pip version 19.0.3, however version 19.2.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

python3中pip3安装出错,找不到SSL的解决方式

最近在Ubuntu16.04上安装Python3.6之后,使用pip命令出现了问题,提示说找不到ssl模块,出现错误如下:

1
2
3
4
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https:*******: There was a problem confirming the ssl certificate:
Can't connect to HTTPS URL because the SSL module is not available. - skipping

本人安装Python3.6的操作如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.wget获取安装包:
  wget http://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
2.解压安装包:
  tar -xvzf Python-3.6.2.tgz
3.检查安装平台属性,系统是否有编译时所需要额库,以及库的版本是否满足编译需要
  ./configure
4.编译源码
  make
5.成功编译之后,安装
  sudo make install

在安装完之后,我们希望用pip3命令来安装numpy。首先,用如下命令安装pip3:

1
sudo install python3-pip

安装完之后,使用pip3安装numpy:

1
sudo pip install python-numpy

但是此时就出错了,显示本文开始提到的错误,大致意思就是安装过程需要SSL,但是那个SSL找不到。

本人查阅网上资料,发现openSSL是系统自带的,所以一定是安装了的,本人用以下命令尝试再次安装openssl:

1
2
sudo apt-get install openssl
sudo apt-get install libssl-dev

但是安装结果显示是对其进行更新(update),这说明系统已经安装了openssl。但是pip3就是找不到ssl模块。

本人进入python3中,然后进行ssl导入操作:

1
import ssl

结果出错,错误如下:

1
no moudle named _ssl

显示没有ssl模块。本人再进入python中(即系统自带的python2.7中),进行ssl导入操作:

1
import ssl

发现并没有显示错误,导入正常。这说明openssl已经安装了,只是python2可以调用,新安装的python3却不能调用。

本人查阅资料发现,在./configure过程中,如果没有加上–with-ssl参数时,默认安装的软件涉及到ssl的功能不可用,刚好pip3过程需要ssl模块,而由于没有指定,所以该功能不可用。

解决办法是重新对python3.6进行编译安装,用一下过程来实现编译安装:

1
2
3
4
cd Python-3.6.2
./configure --with-ssl
make
sudo make install

这样就允许安装的python3使用ssl功能模块,进入python3中,执行import ssl发现未出错,正常再次调用pip3指令来安装numpy,发现正常,问题解决!

以上这篇python3中pip3安装出错,找不到SSL的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

centos6.5 无法上网的解决办法

新安装虚拟机centos6.5版本,可以ping通外网地址,却无法上网,无法用命令行下载文件,经解决后记录下解决方案
step1:检查虚拟机设置

确保网络连接工作在NAT模式,如图
这里写图片描述
step2:修改DNS地址

切换到root用户
切换到目录 /etc下

修改resolv.conf文件中的DNS地址,添加一个DNS地址 如nameserver:8.8.8.8 ,其中192.168.61.2是我虚拟机的网关IP,这个可以不用管,保存后退出。如图:
这里写图片描述

保存后打开火狐看能否登陆上百度,如果可以,那就OK了
但是,resolv.conf文件中的内容会在重启网络服务service network restart 或者虚拟机重启后 被重置。
所以要想配置被保留,我们需要修改虚拟机的网络配置
step3:修改虚拟机网络配置

切换到root用户
切换到目录network-scripts目录下,cd /etc/sysconfig/network-scripts/
修改网络配置文件ifcfg-eth0,在其中加入一项 DNS1=”8.8.8.8″,如图:
这里写图片描述

很多教程里面都说要设置启动模式为静态,把BOOTPROTO=”dhscp”改成BOOTPROTO=”static”,这样的话就会面临要加上静态的ip地址 IPADDR,还有网关GATEWAY等,这样比较麻烦,其实动态IP模式也能满足上网需求。
step4:重启网络服务

在root权限下通过命令 service network restart就可以重启网络服务
成功重启后,我们会发现/etc/resolv.conf文件中的DNS设置nameserver:8.8.8.8没有被重置掉
————————————————
版权声明:本文为CSDN博主「秒杀无心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012480148/article/details/73527370

CentOS7+STF环境搭建

一、简介

OpenSTF是一个手机设备管理平台,可以对手机进行远程管理、调试、远程手机桌面监控等操作,可以批量对大量设备进行WEB端管理。
STF (or Smartphone Test Farm) is a web application for debugging smartphones, smartwatches and other gadgets remotely, from the comfort of your browser.
二、环境搭建
1、基本命令安装
安装wget、zip等命令
yum install wget
yum install -y unzip zip
2、java环境配置
(1)下载jdk安装包并上传至Linux
因为在linux中直接使用curl或者wget下载jdk安装包会被重定向,所以我们要先在windows里先下载好所需的安装包再上传到linux中 jdk1.8官网下载地址 jdk1.9官网下载地址
我这里下载的包是:jdk-8u161-linux-x64.tar.gz

(2).解压安装
对安装包执行解压

[root@localhost ~]tar -zxvf jdk-8u161-linux-x64.tar.gz
解压出来一个文件夹jdk1.8.0_161
[root@localhost ~]# mv jdk1.8.0_161/ /usr/local/java
(3).配置环境变量
vi /etc/profile
在文件中增加如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
验证环境是否ok:
java -version

3.android SDK环境配置

首先下载SDK
cd /usr/local 
mkdir android 
cd android 
wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip 
unzip sdk-tools-linux-3859397.zip
配置环境变量
vi /etc/profile
在文件中增加如下内容
export PATH=$PATH:/usr/local/android/tools/bin
然后执行
source profile 
查看已安装信息
sdkmanager --list
安装platform-tools
sdkmanager "platform-tools"
配置环境变量
vi /etc/profile
在文件中增加如下内容:
export PATH=$PATH:/usr/local/android/platform-tools
执行
source profile sdkmanager --list
验证环境是否ok:
adb --version

4.node安装

cd /usr/local 
mkdir node 
cd node
wget https://nodejs.org/download/release/v9.0.0/node-v9.0.0-linux-x64.tar.gz 
tar xvf node-v9.0.0-linux-x64.tar.gz 
ln -s /usr/local/node/node-v9.0.0-linux-x64/bin/node /usr/local/bin/node 
ln -s /usr/local/node/node-v9.0.0-linux-x64/bin/npm /usr/local/bin/npm
检查环境
node -v 
npm -v

5.rethinkdb安装

执行:
cd /opt/dong -----即在opt新建一个目录用来用来其他依赖 
wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo
yum install rethinkdb
检查环境是否ok:
rethinkdb -v

6.GraphicsMagick安装

1.安装依赖
[root@localhost ~]# yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel
2、执行:
cd /opt/dong 
wget https://iweb.dl.sourceforge.net/project/graphicsmagick/graphicsmagick/1.3.26/GraphicsMagick-1.3.26.tar.gz 
tar xvf GraphicsMagick-1.3.26.tar.gz 
cd GraphicsMagick-1.3.26 
./configure 
make 
make install
验证环境是否ok:
gm

7.yasm安装

执行:
cd /opt/dong 
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 
tar xvf yasm-1.3.0.tar.gz 
cd yasm-1.3.0 
./configure 
make 
make install
验证环境是否ok:
yasm --version

8.libsodium安装

执行:
cd /opt/dong 
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.15.tar.gz 
tar xvf libsodium-1.0.15.tar.gz 
./configure 
make 
make install
验证环境是否ok:
whereis libsodium

9.zeromq安装

执行:
cd /opt/dong 
wget https://github.com/zeromq/libzmq/releases/download/v4.2.2/zeromq-4.2.2.tar.gz tar xvf zeromq-4.2.2.tar.gz 
cd zeromq-4.2.2 
./configure 
遇到报错,yum install gcc-c++ 
make 
make install

10.protobuf安装

执行:
cd /opt/dong 
wget https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz 
tar xvf protobuf-cpp-3.5.0.tar.gz 
cd protobuf-3.5.0 
./configure --prefix=/usr/local/protobuf 
make 
make install
配置变量:
vi /etc/profile
在文件中增加如下内容:
export PATH=$PATH:/usr/local/protobuf/bin/ 
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
执行
source profile
验证环境是否ok:
protoc --version

11.pkg-config安装

执行:
cd /opt/dong 
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz 
tar xvf pkg-config-0.29.2.tar.gz 
cd pkg-config-0.29.2 
./configure --prefix=/usr/local/pkg-config --with-internal-glib 
make 
make install
验证环境是否ok:
pkg-config --version

12.stf安装

执行:
npm install -g stf
如果安装失败,先执行如下命令,再安装
npm config set unsafe-perm=true
下载完成后,进入:
cd /usr/local/node/node-v9.0.0-linux-x64/lib/node_modules/stf/bin 
./stf doctor

检查结果

[root@localhost bin]# ./stf doctor
INF/cli:doctor 10067 [*] OS Arch: x64
INF/cli:doctor 10067 [*] OS Platform: linux
INF/cli:doctor 10067 [*] OS Platform: 3.10.0-327.el7.x86_64
INF/cli:doctor 10067 [*] Using Node 8.9.1
INF/cli:doctor 10067 [*] Using ZeroMQ 4.2.2
INF/cli:doctor 10067 [*] Using RethinkDB 2.3.6
INF/cli:doctor 10067 [*] Using GraphicsMagick 1.3.26
INF/cli:doctor 10067 [*] Using ADB 1.0.39
INF/cli:doctor 10067 [*] Using ProtoBuf 3.5.0
ok,至此环境搭建成功

启动stf

进入stf目录:
cd /usr/local/node/node-v9.0.0-linux-x64/lib/node_modules/stf/bin 
./stf local --public-ip 111.67.203.89 --allow-remote (172.31.3.243位centos服务器地址即stf服务器地址)
在其他地址的电脑上,打开浏览器,输入
http://111.67.203.89:7100
即可访问stf

遇到的问题

1、zmq.node文件错误
转到stf工程根目录执行:
npm rebuild
备注:
如果上述命令失败,可能会出现一个死循环,按Ctrl+C停止,执行npm config set unsafe-perm=true,再执行上述命令

2、libzmq.so.5 not found

cd /etc
vi /etc/ld.so.conf
#新增一行:
/usr/local/zeromq/lib
ldconfig

3、远程访问失败
可能是防火墙未关闭,关闭方法

#检查防火墙状态
firewall-cmd --state
#关闭防火墙
systemctl stop firewalld.service
#禁止开机启动
systemctl disable firewalld.service

CentOS7 安装远程桌面

Xrdp是Microsoft远程桌面协议(RDP)的一个开源实现,它允许以图形方式控制远程系统。使用RDP,您可以登录到远程计算机并创建一个真正的桌面会话,就像您登录到本地计算机一样。
系统环境
  • 服务端:Centos7.7 Minimal
  • 客户端:Windows10
安装桌面环境

本实验中安装的系统没有安装桌面环境,我们需要自己安装,如果已经安装桌面了清跳过这一步。Centos7提供了”Cinnamon Desktop”,”MATE Desktop”,”GNOME Desktop”,”KDE Plasma Workspaces”,”LXQt Desktop”,”Xfce”让我们安装。

下面的命令列出可用环境组:

[root@localhost ~]# yum grouplist
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Cinnamon Desktop
   MATE Desktop
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Cinnamon
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Educational Software
   Electronic Lab
   Fedora Packager
   General Purpose Desktop
   Graphical Administration Tools
   Haskell
   LXQt Desktop
   Legacy UNIX Compatibility
   MATE
   Milkymist
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
   TurboGears application framework
   Xfce
Done

我们可以选择自己喜欢的桌面环境,在这里选择安装Xfce桌面:

[root@localhost ~]# yum -y install epel-release && yum groupinstall Xfce
安装Xrdp
[root@localhost ~]# yum -y install xrdp

安装完成之后,设置开机启动并启动xrdp

[root@localhost ~]# systemctl start xrdp && systemctl enable xrdp

创建~/.Xclients,设置默认启动xfce4桌面

[root@localhost ~]# echo "xfce4-session" > ~/.Xclients
[root@localhost ~]# chmod +x .Xclients
在客户端远程连接

Centos7安装Xrdp远程桌面服务Centos7安装Xrdp远程桌面服务

Centos7安装Xrdp远程桌面服务Centos7安装Xrdp远程桌面服务

Centos7安装Xrdp远程桌面服务Centos7安装Xrdp远程桌面服务

jenkins 通过shell启动java应用程序会随着job完成而被自动关闭的解决方法

我们使用jenkins进行构建打包后,实现自动部署,但 通过shell启动应用程序后,构建job完成应用程序也会自动关闭。下面以tomcat为例

如上执行后,tomcat先关闭,而后部署启动成功,可以访问。但构建job只完成后,tomcat自动关闭。

解决如下:

在脚本前面添加上BUILD_ID=XXXXX,即可如下:

这样job结束后,tomcat不会自动关闭。

shell条件判断

1.判断语法

a)  test 条件表达式

b)  [ 条件表达式 ]

c)  [[ 条件表达式 ]]        可匹配正则 =~

d)  判断后执行多个命令

[  条件1 ] && {
          命令1
          命令2
}

例如:

[ 1 -eq 2 ]&&{
    echo aa;
    echo bb;
}||{
    echo cc
    echo dd
}

 

man test去查看,很多的参数都用来进行条件判断

 

2.文件类型判断

-e 是否存在 不管是文件还是目录,只要存在,条件就成立
-f 是否为普通文件
-d 是否为目录
-S socket
-p pipe
-c character
-b block
-L 软link

 

3.文件内容判断

-s 是否为非空文件

! -s 表示空文件

 

4.文件权限判断

-r  当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid
-g 是否sgid
-k 是否有t位

 

5.两个文件的比较判断

file1 -nt file2	 比较file1是否比file2新
file1 -ot file2	 比较file1是否比file2旧
file1 -ef file2	 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

 

6.整数之间的判断

-eq	 相等
-ne	 不等
-gt	 大于
-lt  	 小于
-ge	 大于等于
-le	小于等于

 

7.字符串之间的判断

-z  是否为空字符串 字符串长度为0,就成立
-n  是否为非空字符串 只要字符串非空,就是成立
string1 = string2    是否相等           --等号两边要有空格
string1 != string2   不等
! 结果取反

 

注意

[ “$1” = “abc” ]       —判断字符是否相等,变量也要用双引号

 

8.多重条件判断

逻辑判断符号:

-a 和 && 逻辑与

只有两个条件都成立,整个大条件才成立

[ 1 -eq 1 ] && [ 2 -ne 3 ]

[ 1 -eq 1 -a 2 -ne 3 ]

 

-o 和 || 逻辑或

只要其中一个条件成立,整个大条件就成立

[ 1 -eq 1 -o 2 -ne 2 ]

[ 1 -eq 1 ] || [ 2 -ne 2 ]

 

 

! 逻辑非 优先级最低

-a 优先级 比 -o 优先级要高

[[]] 和(())中可以使用&& || 不能使用 -a -o

9.实例

# [ $(id -u) -eq 0 ] && echo “当前是超级用户”            –id -u  username  可以查看用户id

$ [ $UID -eq 0 ] && echo “当前是超级用户” || echo “you不是超级用户”

# ((1==2));echo $?      –C语言风格的数值比较

# ((1>=2));echo $?

 

 

题目:输入一个路径,判断路径是否存在,而且输出是文件还是目录,如果是链接文件,还得输出是有效的连接还是无效的连接

思路:链接文件也属于文件,所以先判断链接文件,再去判断是否为文件

 #!/bin/bash
read -p "Input your path:" path
if [ -e $path -a -L $path ];then 
    echo "$0 is link file"
elif [ ! -e $path ] && [ -L $path ];then
    echo "$0 is not effctive link file"
elif [ -d $path ];then
    echo "$0 is a dirctory"
elif [ -f $path ];then
    echo " $0 is file"
else
    echo "$0 is other file"
fi

ls -L  dir                   -L可以判断软链接

–无效链接用-e判断会不存在

-L   如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;

nginx配置快捷启动service

1,/etc/init.d/目录下缺少nginx默认启动脚本
vim /etc/init.d/nginx
新建脚本文件,然后把下面的代码复制进去

#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f nginx defaults', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add nginx'

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

# Author:   licess
# website:  http://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=nginx
NGINX_BIN=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid

case "$1" in
start)
    echo -n "Starting $NAME... "

    if netstat -tnpl | grep -q nginx;then
        echo "$NAME (pid `pidof $NAME`) already running."
        exit 1
    fi

    $NGINX_BIN -c $CONFIGFILE

    if [ "$?" != 0 ] ; then
        echo " failed"
        exit 1
    else
        echo " done"
    fi
    ;;

 stop)
    echo -n "Stoping $NAME... "

    if ! netstat -tnpl | grep -q nginx; then
        echo "$NAME is not running."
        exit 1
    fi

    $NGINX_BIN -s stop

    if [ "$?" != 0 ] ; then
        echo " failed. Use force-quit"
        exit 1
    else
        echo " done"
    fi
    ;;

 status)
    if netstat -tnpl | grep -q nginx; then
        PID=`pidof nginx`
        echo "$NAME (pid $PID) is running..."
    else
        echo "$NAME is stopped"
        exit 0
    fi
    ;;

 force-quit)
    echo -n "Terminating $NAME... "

    if ! netstat -tnpl | grep -q nginx; then
        echo "$NAME is not running."
        exit 1
    fi

    kill `pidof $NAME`

    if [ "$?" != 0 ] ; then
        echo " failed"
        exit 1
    else
        echo " done"
    fi
    ;;

 restart)
    $0 stop
    sleep 1
    $0 start
    ;;

 reload)
    echo -n "Reload service $NAME... "

    if netstat -tnpl | grep -q nginx; then
        $NGINX_BIN -s reload
        echo " done"
    else
        echo "$NAME is not running, can't reload."
        exit 1
    fi
    ;;

 configtest)
    echo -n "Test $NAME configure files... "

    $NGINX_BIN -t
    ;;

 *)
    echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
    exit 1
    ;;

esac

2,切换目录,修改权限

cd /etc/init.d

chmod +x nginx

/sbin/chkconfig --level 345 nginx on

service nginx start