W02-D03|VMware、CentOS 7 与 FinalShell 环境操作手册

一、用途和边界

本手册用于在 Windows 宿主机上安装 VMware Workstation、创建 CentOS 7 虚拟机、建立 FinalShell SSH 连接,并为 W02 项目复现准备经过验收的 Python 3.12 与 Git 环境。

CentOS Linux 7 已于 2024 年 6 月 30 日结束生命周期。本期按课程指定使用它做隔离实验;虚拟机不承载生产服务、真实业务数据或密钥。停止维护意味着系统不再持续获得常规安全与缺陷更新,因此生产环境应选择仍在维护周期内的发行版。

实机验收要求:本文的 Python 与 Git 安装路线已按 CentOS、Git、CPython 和 Fedora 的官方资料交叉核对;发布课程快照前,还要在本期实际 VMware、ISO 和网络条件下完整执行一次,并保存 yum、configure、make 与第 10.5 节的原始输出。文档中的命令不能代替这次实机证据。

二、环境关系

Windows 宿主机
  → VMware Workstation:提供虚拟硬件
    → CentOS 7:真正运行 Linux 进程和保存 Linux 文件
      → sshd:接受 SSH 连接
        → FinalShell:Windows 上的 SSH 客户端
          → Bash:解释输入的 Linux 命令

虚拟机不是远程服务器,而是运行在个人电脑中的一台“虚拟电脑”。它拥有独立的虚拟 CPU、内存、硬盘、网卡和操作系统。

个人电脑中的 Linux 虚拟机

三、课前材料

项目验收条件
Windows 宿主机虚拟化可用,磁盘空间满足虚拟机安装
VMware Workstation能启动并创建虚拟机,记录实际版本
CentOS ISO课程目录中的 CentOS-7-x86_64-DVD-1908.iso
FinalShell能新建 SSH 连接
课程运行时基线python3 -V 为 3.12.x,venv 可用,Git 可用
课程快照环境验收完成后创建,可供课堂恢复

课程已知 ISO 位置:

03_上课课件\上课所需软件\08.CentOS镜像\CentOS-7-x86_64-DVD-1908.iso

四、安装 VMware Workstation

  1. 确认 Windows 版本、CPU 虚拟化和剩余磁盘空间。
  2. 使用机构确认的安装包或 Broadcom 官方当前安装程序。
  3. 按官方要求以管理员身份运行安装程序。
  4. 选择典型安装,或按机房规范设置明确的虚拟机存放目录。
  5. 完成后重启 Windows。
  6. 启动 VMware,在“帮助 → 关于”记录版本。
  7. 创建空白测试虚拟机或进入新建向导,确认程序基本功能。

进入 VMware 后,从“创建新的虚拟机”进入向导。不同版本的按钮位置可能略有变化,动作名称基本一致。

VMware 创建新的虚拟机入口

安装失败时保留完整错误、Windows 版本、VMware 版本和是否重启。驱动与虚拟化问题应按机型和组织策略处理,来源不明的注册表或破解脚本会扩大系统风险。

五、从 ISO 创建 CentOS 7 虚拟机

  1. 选择“创建新的虚拟机”。
  2. 使用典型配置。
  3. 安装来源选择课程 CentOS ISO。
  4. 客户操作系统选择 Linux / CentOS 64 位。
  5. 虚拟机名称建议 W02-CentOS7。
  6. 存放位置使用空间充足、路径明确的目录。
  7. 建议资源基线:2 个虚拟 CPU、4 GB 内存、40 GB 动态磁盘;机房可按硬件调整。
  8. 网络选择 NAT,便于虚拟机通过宿主机访问网络。
  9. 启动虚拟机进入安装。

创建完成前检查名称、存放位置、磁盘、内存和网络模式。下图是向导汇总页示例,课堂以本手册给出的资源基线为准。

VMware 虚拟机配置汇总页

六、安装 CentOS 7

  1. 选择 Install CentOS 7。
  2. 设置语言、时区和键盘。
  3. 选择安装目标磁盘,确认只作用于虚拟磁盘。
  4. 网络与主机名页面开启虚拟网卡。
  5. 选择带基础工具的安装方案;图形界面不是本课必需。
  6. 设置 root 密码并创建普通学习账号。
  7. 安装完成后重启,弹出 ISO 或调整启动顺序。
  8. 使用普通学习账号登录。

完成安装并登录后,应能进入 CentOS 桌面或命令行。图形界面只是安装完成的一种表现,后续操作仍以终端命令为主。

CentOS 7 安装完成后的桌面

系统安装操作只影响 VMware 创建的虚拟磁盘。安装目标若误选宿主机真实磁盘会造成严重数据损失,因此必须在虚拟机窗口中确认设备信息。

七、基础环境取证

在 VMware 控制台执行:

cat /etc/centos-release
uname -r
whoami
pwd
hostname
ip addr

记录:

VMware 版本:
虚拟机名称:
CentOS 版本:
内核:
普通用户名:
IPv4:

八、准备 SSH

检查服务:

systemctl status sshd

未启动时由具备管理员权限的教师或学生按课程要求执行:

sudo systemctl start sshd
sudo systemctl enable sshd

再次执行 systemctl status sshd,确认 active (running)。

如果虚拟机没有 IPv4,先在 VMware 中确认网络适配器为 NAT 且“已连接”,再回到 CentOS 检查 ip addr。

先用 ping -c 3 <目标地址> 区分“虚拟机没有网络”与“某个网站或域名不可达”。-c 3 表示发送 3 次后停止,便于保留一段完整输出。

使用 ping 检查网络连通性

九、使用 FinalShell 连接

在 FinalShell 新建 SSH 连接:

字段填写内容
名称W02-CentOS7
主机ip addr 查到的虚拟机 IPv4
端口22
用户名普通学习账号
认证课堂统一的密码或密钥方式

下图展示 SSH 连接表单的位置。名称可以自定义,主机、端口和用户名必须填写本机实际值,图中的地址与账号只用于说明字段位置。

FinalShell SSH 连接参数表单

连接后再次执行:

cat /etc/centos-release
whoami
pwd
hostname

FinalShell 与 VMware 控制台显示同一版本、用户和主机名,说明连接到预期虚拟机。截图和提交物不包含密码、私钥或访问令牌。

FinalShell 成功连接到 CentOS

十、安装 Git 与 Python 3.12

CentOS 7 自带的软件版本较旧,而且官方仓库已经归档。这里采用一条可解释、可验收的安装路径:

  • Git 使用 CentOS 7 的 yum 包,满足本周的 clone、status、add、commit、push 等操作;
  • Python 3.12 从 Python 官方源码构建,安装到 /opt/python-3.12;
  • 系统原有 /usr/bin/python 保持不变,因为 CentOS 7 的 yum 等系统工具依赖它;
  • /usr/local/bin/python3 指向课程的 Python 3.12,让学生直接使用 python3;
  • OpenSSL 采用 CPython 官方为 RHEL 7 / CentOS 7 提供的 Misc/rhel7 配置方式。

下面的系统管理命令需要管理员权限。普通账号能够使用 sudo 时直接执行;没有 sudo 权限时,由教师在 VMware 控制台切换到管理员账号完成。

10.1 先检查 yum 软件源

sudo yum repolist

如果能正常读取课程机构已经配置好的 CentOS 7 归档源,可以继续到 10.2。若出现 Could not resolve host: mirrorlist.centos.org 或找不到可用镜像,原因是 CentOS 7 已结束维护、软件包已迁入 Vault。先备份原配置,再固定到 CentOS 7.9.2009 归档:

sudo cp -a /etc/yum.repos.d/CentOS-Base.repo \
  /etc/yum.repos.d/CentOS-Base.repo.before-vault
 
sudo tee /etc/yum.repos.d/CentOS-Base.repo >/dev/null <<'EOF'
[base]
name=CentOS-7.9.2009 - Base
baseurl=https://vault.centos.org/7.9.2009/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
[updates]
name=CentOS-7.9.2009 - Updates
baseurl=https://vault.centos.org/7.9.2009/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
[extras]
name=CentOS-7.9.2009 - Extras
baseurl=https://vault.centos.org/7.9.2009/extras/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
 
sudo yum clean all
sudo yum makecache
sudo yum repolist

Vault 是停止更新后的历史快照,不会继续获得安全修复。因此这台 CentOS 7 虚拟机只承担隔离教学实验,项目中不放真实业务数据、生产密钥或长期对外服务。

10.2 安装 Git

yum 会根据仓库元数据解决 Git 所需依赖。先安装,再用真实版本输出验收:

使用 yum 安装和管理软件

sudo yum install -y git
git --version
command -v git

CentOS 7 仓库中的 Git 版本可能低于当前官网版本。本周使用的 clone、status、log、add、commit、pull、push 等基础命令与该版本兼容。

10.3 准备 Python 3.12 的编译依赖

Python 3.12 的 ssl 和 hashlib 至少需要 OpenSSL 1.1.1,而 CentOS 7 原生 OpenSSL 版本更早。CPython 源码中的 Misc/rhel7 专门说明了在 RHEL 7 / CentOS 7 上使用 openssl11-devel 的配置方式。该包位于归档的 EPEL 7 中。

先安装 EPEL 7 的仓库描述包,并把软件源固定到归档地址:

sudo yum install -y \
  https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
 
sudo cp -a /etc/yum.repos.d/epel.repo \
  /etc/yum.repos.d/epel.repo.before-archive
 
sudo tee /etc/yum.repos.d/epel.repo >/dev/null <<'EOF'
[epel]
name=Extra Packages for Enterprise Linux 7 - Archive
baseurl=https://archives.fedoraproject.org/pub/archive/epel/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF
 
sudo yum clean all
sudo yum makecache

然后安装编译器、构建工具和 Python 常用标准库所需的开发包:

sudo yum groupinstall -y "Development Tools"
sudo yum install -y \
  curl tar xz xz-devel zlib-devel bzip2-devel \
  libffi-devel readline-devel sqlite-devel ncurses-devel \
  gdbm-devel libuuid-devel pkgconfig openssl11-devel
 
gcc --version
pkg-config --modversion libssl11

10.4 下载并编译 Python 3.12

下面以 Python 3.12.14 为本期固定补丁版本。固定版本能让全班得到一致环境;以后更新补丁版本时,应重新在教师虚拟机中完整验收后再更新课程快照。

cd /tmp
curl -fLO https://www.python.org/ftp/python/3.12.14/Python-3.12.14.tgz
tar -xzf Python-3.12.14.tgz
cd Python-3.12.14

先确认 CPython 为 CentOS 7 准备的 OpenSSL 配置能被 pkg-config 识别,再配置构建目录:

PKG_CONFIG_PATH="$PWD/Misc/rhel7" pkg-config --modversion openssl
 
PKG_CONFIG_PATH="$PWD/Misc/rhel7" ./configure \
  --prefix=/opt/python-3.12 \
  --with-ensurepip=install

编译会持续一段时间,并明显占用 CPU。终端最后若列出无法构建的模块,需要先保留完整输出并补齐依赖;不能只看到 make 返回就认定 Python 完整可用。

make -j "$(nproc)"
./python -V
./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
sudo make altinstall

这里使用 altinstall,它会安装带版本号的 python3.12,避免覆盖系统 Python。课程再单独建立 /usr/local/bin/python3 入口:

if [ ! -e /usr/local/bin/python3 ]; then
  sudo ln -s /opt/python-3.12/bin/python3.12 /usr/local/bin/python3
fi
 
hash -r
command -v python3
python3 -V

预期 command -v python3 指向 /usr/local/bin/python3,版本为 3.12.14。/usr/bin/python 仍由 CentOS 系统管理,不参与课程项目运行。

10.5 验收 Python 的关键能力

版本号只是第一层证据。W02 会用到 HTTPS、JSON、压缩库、SQLite、虚拟环境和 pip,因此继续验证关键模块:

python3 -c "import ssl, sqlite3, bz2, lzma, ctypes; print(ssl.OPENSSL_VERSION)"
python3 -m pip --version
python3 -m venv /tmp/w02_venv_check
/tmp/w02_venv_check/bin/python -V
/tmp/w02_venv_check/bin/python -m pip --version
git --version

通过条件:

python3 为 3.12.14
ssl 能输出 OpenSSL 1.1.1 系列版本
sqlite3、bz2、lzma、ctypes 导入成功
venv 中的 Python 仍为 3.12.14
主环境和 venv 的 pip 均能输出版本
Git 能输出版本

10.6 课程环境检查与补验

用于课堂的虚拟机应由教师或机构课前完成以上安装、验证和快照。学生拿到环境后仍要亲自执行:

python3 -V
python3 -m venv --help
git --version

任一命令未达到条件时,保存完整输出并标记“Python 项目运行门未通过”。Linux 文件操作和 Git 中仍可执行的部分可以继续;项目运行在恢复教师验收过的快照、重新通过三条命令后再开始。这样能把环境故障与代码故障分开,避免用旧解释器的报错去判断项目代码。

十一、创建环境基线快照

快照保存的是某个时间点的虚拟机状态。环境实验出现问题时,可以回到已知可用状态,而不必重新安装整套系统。

虚拟机快照与当前状态的关系

上述环境检查通过后:

  1. 正常关闭 CentOS;
  2. 在 VMware 快照管理器创建快照;
  3. 名称建议 W02-D03-环境基线;
  4. 描述写明日期、CentOS 版本、Python 版本、Git 版本和 FinalShell 连接状态;
  5. 启动虚拟机,确认快照后的环境仍可用。

快照用于恢复教学实验环境,不替代学生项目的 Git 提交。

恢复快照会丢弃快照之后的虚拟机状态,因此先把项目代码推送到自己的远端仓库,再在快照管理器中选择明确的恢复点。

VMware 快照管理器中的恢复操作

十二、Linux 文件实验

mkdir -p ~/w02_linux_lab/inbox
cd ~/w02_linux_lab
pwd
ls -la
touch inbox/orders.txt
printf "O20260827001 待支付 129.00元\nO20260827002 已取消 35.00元\n" > inbox/orders.txt
cat inbox/orders.txt
grep "待支付" inbox/orders.txt | wc -l
cp inbox/orders.txt inbox/orders.bak
mv inbox/orders.bak inbox/orders.backup.txt
pwd
ls -la inbox
rm -i inbox/orders.backup.txt

删除前确认 pwd 和 ls,使用明确文件名与 -i。原因是 Linux 命令行删除通常不进入 Windows 回收站,错误目录或通配符会扩大不可恢复范围。

十三、从远端复现项目

mkdir -p ~/projects
cd ~/projects
git clone <学生自己的仓库地址> w02-order-service
cd w02-order-service
git status
git log --oneline --decorate -5
python3 -m venv .venv
source .venv/bin/activate
python -V
python -c "import sys; print(sys.executable)"
python -m pip install -r requirements.txt
python -m pip install -e .
python -c "import order_management; print(order_management.__file__)"
python -m pytest tests/test_models.py tests/test_storage.py -q

Windows 和 CentOS 分别创建 .venv。两者的目录结构、可执行文件和基础解释器路径不同,复制 Windows .venv 无法形成可靠的 Linux 环境。

程序运行时,可以用 ps 观察 Linux 中真实存在的进程。ps -ef 列出进程,管道后的 grep 再筛选 Python:

使用 ps 查看 Linux 进程

ps -ef | grep '[p]ython'

方括号写法仍能匹配 python,同时避免把当前这条 grep python 命令本身列入结果。若项目脚本已经结束,列表为空是正常结果;需要观察长期运行进程时,可以另开一个 FinalShell 标签页执行检查。

十四、故障矩阵

现象先取证正确处理路径
VMware 提示虚拟化不可用Windows 版本、虚拟化状态、VMware 版本按机型与组织策略处理
CentOS 无 IPv4NAT、网卡连接、ip addr恢复虚拟网卡链路
FinalShell 超时虚拟机状态、IP、sshd从 VMware 控制台逐层检查
yum 找不到 mirrorlistsudo yum repolist 完整输出按 10.1 切换到 CentOS Vault 归档源
openssl11-devel 找不到yum repolist、EPEL repo 文件按 10.3 固定 EPEL 7 归档源后重建缓存
python3 命令不存在或版本旧python3 -V、command -v python3按第十节完成源码构建,或恢复教师课程快照补齐环境检查
ssl、sqlite3 等模块导入失败configure 与 make 尾部输出补齐开发包后重新配置、编译并完成 10.5 验收
venv 模块不可用python3 -m venv —help保持项目运行门未完成,回到 10.5 检查 Python 构建
git clone 认证失败remote URL、账号、完整错误核对仓库所有权与认证方式
Permission deniedwhoami、pwd、ls -l修正路径、所有者或权限
模块导入失败pwd、find、文件名大小写、解释器路径按路径和环境层定位

十五、环境验收表

  • VMware 实际版本和虚拟机名称;
  • CentOS 版本、内核、用户、主机名和 IPv4;
  • FinalShell 连接结果;
  • python3 -V 为 3.12.x;
  • venv 可用;
  • Git 可用;
  • 已创建环境基线快照;
  • Linux 文件实验完成;
  • 从学生自己的远端 clone;
  • Linux .venv 创建并激活;
  • 跨环境报告真实运行;
  • 提交物不包含密码或密钥。

参考资料