CentOS7.5 编译 Python3.6.8+OpenStack 私有云 API 运维
一、文章简介
1. 适用场景
本文内容完全提取 PPT 内所有标注截图 10-x.jpg 实操步骤,无冗余理论废话,适配职业院校云计算技能大赛私有云运维赛项、高校 Linux+OpenStack 上机实训。赛项核心需求:Controller 节点离线 / 在线编译 Python3.6.8,编写测试脚本、调用 OpenStack 原生 API 完成云资源自动化管理,全部操作可直接截图提交,实训报告、竞赛答题直接套用。
2. 实验环境
- 操作系统:CentOS 7.5 1804(VMware Workstation NAT 模式)
- 节点角色:OpenStack all-in-one Controller 控制节点
- 节点 IP:192.168.1.241
- 核心任务:网络环境调试→YUM 软件源替换→离线 FTP 传输 Python 源码→源码编译安装 Python3.6.8→全局环境变量配置→Python 进度条测试程序→OpenStack Keystone V3 鉴权 API 开发
3. 文章优势
- 严格对应 PPT 每一张截图操作,一步一命令,无遗漏;
- 补充每一步操作目的、易错点、踩坑解决方案,实训报告加分项;
- 区分在线下载、离线 FTP 两套 Python 安装包获取方案,适配竞赛断网场景;
- 区分 Windows 端代码编写、Linux 终端运行两种 Python 脚本开发方式;
- 提供 OpenStack 原生 requests 鉴权代码,为创建用户、创建云主机赛题打底;
- 格式规范,可直接作为实训报告正文、CSDN 技术博客发布,评分点全覆盖。
二、截图 10-1:配置 ens33 静态网卡(打通虚拟机网络)
操作目的
NAT 模式下配置固定静态 IP,保证虚拟机与物理机互通、可访问外网,是后续下载 Python、FTP 传输文件的基础。
- 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33- 完整配置参数
DEVICE=ens33 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes IPADDR=192.168.137.10 PREFIX=24 GATEWAY=192.168.137.1 DNS1=10.91.87.88易错点说明
ONBOOT=yes必须开启,否则重启后网卡不自动启动;- BOOTPROTO 设置为 none,禁用 DHCP,固定 IP 避免 IP 变动导致 FTP、OpenStack 访问异常。
三、截图 10-2:配置 DNS 解析文件
操作目的
单独配置 DNS,解决 yum 下载依赖、wget 下载 Python 源码域名解析失败问题。
vi /etc/resolv.conf # 添加DNS服务地址 nameserver 10.91.87.88补充说明
CentOS7 网卡重启会覆盖 resolv.conf,如需永久生效,可在网卡配置增加 DNS 字段,本次实训临时配置满足需求。
四、截图 10-3:Windows 开启 VMnet8 ICS 网络共享
操作目的
虚拟机 NAT 模式无法直接上网时,通过物理机网卡共享网络,给 CentOS 提供外网访问通道。
- 物理机本地网卡右键【属性】→切换至【共享】选项卡;
- 勾选「允许其他网络用户通过此计算机的 Internet 连接来连接 (N)」;
- 家庭网络连接下拉选择:
VMware Network Adapter VMnet8; - 点击确定保存 ICS 共享配置。
踩坑提示
共享后 Windows 防火墙会拦截虚拟机流量,后续需关闭 Linux 防火墙,避免网络不通。
五、截图 10-4:核对网卡网关参数
操作目的
确认网关与 VMware 虚拟网卡网段一致,防止跨网段无法访问外网、物理机 FTP。 核心配置字段:GATEWAY=192.168.1.254网关必须与 VMnet8 网段网关匹配,否则 ping 外网全部丢包。
六、截图 10-5:重启网卡并验证外网连通
操作目的
网卡配置生效,测试网络连通性,确认外网可用后再执行后续 YUM、Python 下载操作。
# 重启网络服务加载网卡配置 systemctl restart network # 外网连通测试 ping www.baidu.com判断标准
持续收到数据包回复,无请求超时,代表网络配置全部完成。
七、截图 10-6:备份系统默认 YUM 源
操作目的
CentOS7.5 官方源已归档,无法正常下载软件包,先备份原有 repo 文件,避免后续出错无法回滚。
# 移动全部默认源文件至/opt目录备份 mv /etc/yum.repos.d/* /opt # 验证备份目录文件 ls /opt # 确认原repo目录已清空 ls /etc/yum.repos.d/八、替换清华 Vault CentOS7.5 软件源(配套实训流程)
操作目的
官方源失效,使用清华镜像归档源适配 7.5.1804 版本,保证 gcc、编译依赖完整下载。
vi /etc/yum.repos.d/CentOS-Vault.repo完整源配置:
[C7.5.1804-base] name=CentOS-7.5.1804 - Base baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.5.1804/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [C7.5.1804-updates] name=CentOS-7.5.1804 - Updates baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.5.1804/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [C7.5.1804-extras] name=CentOS-7.5.1804 - Extras baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.5.1804/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [C7.5.1804-centosplus] name=CentOS-7.5.1804 - CentOSPlus baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.5.1804/centosplus/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [C7.5.1804-fasttrack] name=CentOS-7.5.1804 - fasttrack baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.5.1804/fasttrack/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1刷新缓存:
yum clean all && yum makecache九、截图 10-7:vsftpd 开启匿名上传配置(离线传 Python 包)
操作目的
竞赛环境断网无法 wget 下载 Python 源码,搭建 FTP 服务,物理机离线上传安装包。
# 安装ftp服务 yum install vsftpd -y # 修改ftp配置文件 vi /etc/vsftpd/vsftpd.conf删除行首 #注释,开启上传权限:
write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES十、截图 10-8:注释 vsftpd 本地用户 umask 配置
操作目的
关闭本地用户权限掩码限制,避免匿名文件上传后权限异常无法解压。 编辑vsftpd.conf,修改:
#local_umask=022在行首添加 #注释屏蔽该配置。
十一、截图 10-9:授权 FTP 匿名上传目录权限
操作目的
匿名 ftp 用户默认无 pub 目录写入权限,修改归属与权限,支持拖拽上传文件。
# 修改目录归属ftp用户组 chown ftp /var/ftp/pub # 开放全部读写执行权限 chmod 777 /var/ftp/pub # 查看目录权限验证配置生效 ll /var/ftp易错点
权限不足会出现物理机拖拽文件报错,777 为实训临时方案,生产环境不推荐。
十二、截图 10-10:启动 FTP 服务、关闭防火墙与 SELinux
操作目的
放行 FTP21 端口,关闭安全拦截策略,保证物理机可正常访问ftp://192.168.137.10
# 启动vsftpd服务 systemctl start vsftpd # 临时关闭SELinux(永久关闭需修改配置文件) setenforce 0 # 关闭防火墙放行端口 systemctl stop firewalld物理机操作
浏览器输入ftp://192.168.137.10,将本地Python-3.6.8.tgz拖拽至 pub 文件夹完成上传。
十三、截图 10-11:解压 Python3.6.8 源码包
操作目的
将 FTP 上传的压缩包转移至编译目录,解压源码用于后续编译安装。
# 创建源码存放目录 mkdir /opt/ph # 复制FTP上传的压缩包到编译目录 cp /var/ftp/pub/* /opt/ph # 进入工作目录解压源码包 cd /opt/ph tar -xzf Python-3.6.8.tgz # 查看解压结果确认文件存在 ls输出结果:Python-3.6.8 Python-3.6.8.tgz
十四、截图 10-12:安装编译依赖 + 编译 Python3.6.8
操作目的
Python 源码编译需要 gcc 编译器、ssl、zlib 等依赖库,缺失会导致 pip、https 模块失效,无法调用 OpenStack API。
- 一键安装全套编译依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y- 编译安装流程
# 创建Python3安装目录 mkdir /usr/local/python3 # 进入解压后的源码目录 cd /opt/ph/Python-3.6.8 # 指定自定义安装路径 ./configure --prefix=/usr/local/python3 # 编译+安装,虚拟机配置低会耗时10分钟以上 make && make install实训重点
--prefix指定自定义路径,不和系统自带 Python2.7 冲突,是私有云运维标准部署方式。
十五、截图 10-13:配置 Python 全局环境变量
操作目的
任意终端直接输入 python3 即可调用新版本,无需写完整绝对路径。
vi /etc/profile文件末尾追加两行环境变量配置:
export PYTHON=/usr/local/python3 export PATH=$PYTHON/bin:$PATH执行命令刷新配置永久生效:
source /etc/profile原理说明
将 Python3 bin 目录前置到 PATH,系统优先调用新版 Python,不覆盖系统 python2 软链接,不影响 OpenStack 原有服务运行。
十六、Python3 环境验证
操作目的
校验编译、环境变量配置全部生效,确认 Python3 可正常运行。 任意目录执行:
python3正常输出:
Python 3.6.8 (default,May 6 2024,21:57:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help","copyright","credits" or "license" for more information >>> exit()输入 exit () 退出交互模式。
十七、截图 10-14:无中文进度条测试脚本(Linux 兼容版)
操作目的
编写基础 Python 程序,验证语法、循环、time 库、格式化输出功能,规避 Linux 中文编码报错。 文件名:jdt.py
python
import time wz = 56 print("starting download".center(wz-3,"=")) for i in range(1,wz-6+1): jd = i/(wz-6) ks1 = "*"*i js1 = "。"*(wz-6-i) print("\r{:3.0%}[{}{}]".format(jd,ks1,js1),end="") time.sleep(0.1) print() print("download finished".center(wz-3,"="))开发说明
PPT 支持两种编写工具:Windows PyCharm/Notepad++ 编写后上传,或 Linux vi 直接编写;脚本去除全部汉字,解决 CentOS 默认 ASCII 编码乱码问题。
十八、截图 10-15:执行 Python 测试脚本
操作目的
在 Controller 节点运行脚本,完整验证 Python 运行环境可用。
# 使用vi新建脚本粘贴代码 vi ~/jdt.py # 执行测试程序 python3 jdt.py运行效果
终端动态刷新百分比进度条,程序结束打印下载完成分割线,代表 Python 环境搭建全部完成。
十九、OpenStack Keystone V3 鉴权 API 代码(实训赛题核心)
操作目的
赛题任务 A 创建用户、任务 B 创建云主机前置鉴权步骤,通过 requests 调用 Keystone 接口获取 Token,后续所有 OpenStack 接口调用都需要该令牌。
python
import json import requests import time try: # Keystone V3认证地址,替换为本地Controller IP url = "http://192.168.1.241:5000/v3/auth/tokens" body = { "auth":{ "identity":{ "methods":["password"], "password":{ "user":{"domain":{"name":"demo"},"name":"admin","password":"000000"} } }, "scope":{"project":{"domain":{"name":"demo"},"name":"admin"}} } } headers = {"Content-Type":"application/json"} resp = requests.post(url,json.dumps(body),headers=headers) Token = resp.headers["X-Subject-Token"] headers = {"X-Auth-Token":Token} print("获取认证Token成功:",Token) except Exception as e: print(f"鉴权失败,错误信息:{str(e)}") exit(0)赛题拓展说明
拿到 Token 后,可扩展代码调用 Nova、Identity 接口,实现赛题要求:创建用户、查询云主机、删除同名云主机、新建 pvm1 云主机。
三、实训常见问题汇总
- Python 编译缺失 ssl/zlib 模块原因:yum 依赖未完整安装;解决方案:重新执行截图 10-12 的 yum 安装命令,所有 devel 包缺一不可。
- FTP 无法上传文件原因:未关闭防火墙 / SELinux、pub 目录权限不足;对照截图 10-9、10-10 权限与服务配置修正。
- yum 下载软件 404 报错原因:使用 CentOS7 最新源,7.5 版本已归档;解决方案:使用 PPT 内清华 Vault 源。
- 运行 Python 脚本中文乱码 / 报错原因:Linux 默认无中文编码;解决方案:脚本全部使用英文(截图 10-14 标准代码)。
- OpenStack API 返回 401 无权限原因:domain、project、用户名、密码、5000 端口防火墙拦截;核对鉴权 body 内账号信息,关闭 Linux 防火墙。
四、实训总结
本次实训完整完成 OpenStack Controller 节点 Python3.6.8 离线部署全流程,严格按照 PPT 截图步骤完成网络调试、YUM 源替换、FTP 离线文件传输、源码编译、环境变量配置、Python 程序开发、OpenStack API 鉴权开发。 通过本次实操掌握了 Linux 静态网络配置、YUM 软件源管理、vsftpd 文件传输服务、Python 源码编译部署、RESTful API 调用私有云资源等核心运维技能,理解了企业私有云自动化运维的基础开发环境搭建流程,规避了编译缺失依赖、网络权限、编码、鉴权等典型故障,具备独立完成云计算赛项 Python 自动化运维任务的能力。