news 2026/10/29 11:07:34

OpenStack Train 本地部署全记录:16G 笔记本 + VirtualBox + PackStack,10 个坑全踩了一遍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack Train 本地部署全记录:16G 笔记本 + VirtualBox + PackStack,10 个坑全踩了一遍

一、为什么要折腾这件事

我是教计算机专业课的,讲云计算和云安全。一直想给学生搭一套真正能跑起来的 OpenStack 实验环境——不是看 PPT,而是能在 Horizon 上点几下、看到网络拓扑、能讲清楚 Keystone 认证流程的那种。

这个环境主要服务两门课:

  • 云计算技术:Keystone 多租户认证、Glance 镜像管理、Nova 实例生命周期、Neutron SDN 网络拓扑,光靠模拟器和远程实验室不够直观;
  • 云安全:安全组规则、租户隔离、浮动 IP、镜像加固,没有一套自己能掌控的环境,根本演示不了。

手里这台笔记本配置很一般:

项目配置
CPUIntel i5-10210U(4 核 8 线程,轻薄本)
内存16 GB
系统Windows 10 家庭中文版 22H2
常驻Docker Desktop(WSL2 后端)

目标很明确:本地搭一套 all-in-one OpenStack,资源占用尽量小,能从 Windows 浏览器访问 Horizon,最好还能创建真实实例。

这篇文章把从 Docker 一路试到 VMware、再到 VirtualBox 的完整过程写下来,包括每一个报错的真实原因和最终解法。照着做,你不用再踩我踩过的坑。


二、适合谁 / 不适合谁

适合你,如果你:

  • 高校老师/学生,要做「云计算技术」「云计算基础」课程实验;
  • 讲「云安全」,需要一套能演示安全组、租户隔离、浮动 IP 的环境;
  • 想在本地练手 OpenStack,但没有服务器;
  • 照着网上教程装到一半卡住,想找一份「踩过坑的完整版」。

不适合你,如果你:

  • 想跑生产环境——这是教学 all-in-one,单节点、无高可用;
  • 追求高性能建实例——无 KVM 硬件加速时,QEMU 软件模拟会很慢;
  • 需要 Cinder / Swift / Heat 全套——为了省内存,这些组件被裁剪掉了。

三、路线决策:哪些路走不通,为什么

3.1 Docker Desktop 直接部署?否决

第一反应:机器上已经有 Docker Desktop,能不能docker-compose up一把拉起 OpenStack?

核查后否决,三个原因:

  1. WSL2 里没有/dev/kvm。Docker Desktop 跑在 WSL2 上,WSL2 又跑在 Hyper-V 上,硬件虚拟化已经被 Hyper-V 占了,Nova 做不了硬件加速,建实例只能纯软件 QEMU,慢到没法用。
  2. 没有 openvswitch 内核模块。Neutron 需要 OVS 或 Linux Bridge 的内核支持,WSL2 里跑不起来。
  3. 官方openstack/docker仓库已归档不维护,GitHub 直连也不稳定。

结论:Docker Desktop 不适合做「能建真实虚拟机」的 OpenStack。

3.2 VMware Workstation?两次失败

  1. 本机装的是 VMware Workstation 9.0.1(2012 年的版本),和 Hyper-V 直接冲突,启动就报:

    VMware Workstation and Hyper-V are not compatible.

  2. 想升级到 VMware 17,Broadcom 收购后下载要注册账号,163 / QQ 邮箱都收不到验证邮件,官方直链全部 404。

干脆卸载 VMware,转 VirtualBox。

3.3 最终方案

VirtualBox 7.2 + CentOS 7.9 Minimal + RDO PackStack Train,all-in-one,4 核 / 6GB 内存 / 30GB 磁盘,linuxbridge 网络后端。

选它的理由:

  • VirtualBox 官方直链免注册,下载快;
  • CentOS 7.9 + Train 是 RDO 支持最成熟、中文资料最多的组合;
  • PackStack 一条命令拉起全套,不用手搓 20 个服务;
  • 裁掉 Cinder/Heat/Telemetry/Swift/Manila,只留 Keystone + Glance + Nova + Neutron + Horizon,16GB 够跑。

为什么还用 CentOS 7.9 + Train(都已经 EOL 了)?

因为它是国内高校教材、课程大纲、实验指导书里最普及的一套,学生搜得到答案、老师接得上课程。教学场景优先「稳」和「资料全」,不是优先「新」。需要新版本(Ubuntu + Yoga/Zed)的话,配置不能直接套用。


四、VirtualBox 安装与虚拟机创建

4.1 安装

官网下载VirtualBox-7.2.x-Win.exe,默认装 C 盘。

📦 VirtualBox / CentOS ISO / Cirros 镜像三个安装包我都放网盘了,链接见5.1 节,懒得找直链的直接拿。

⚠️额外小问题 A:想装 D 盘会报Invalid installation directory。

原因是 VirtualBox 7.x 要求安装路径每一级目录都不能让普通用户有写/删权限,而 D 盘根目录 ACL 天生带Authenticated Users:(M)写权限。改 D 盘根目录 ACL 风险大,最后选择程序装 C 盘,虚拟机文件放 D 盘。

装完后在全局设置里把「默认虚拟电脑位置」改到D:\VirtualBox VMs。

4.2 创建虚拟机

项目值
名称OpenStack
内存6144 MB(6GB)
CPU4 核
硬盘30GB VDI,动态分配
网卡NAT

桥接模式在这台机器上选不了——Hyper-V 占用了虚拟化,VirtualBox 绑不上物理网卡,「确定」按钮是灰的。这一点很关键,后面坑 10 会用到。

4.3 NAT 端口转发

NAT 模式下 Windows 访问不了虚拟机,必须加端口转发:

&'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe'controlvm"OpenStack"natpf1"ssh,tcp,127.0.0.1,2222,,22"&'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe'controlvm"OpenStack"natpf1"horizon,tcp,127.0.0.1,8088,,80"

之后:

  • SSH:plink -ssh -P 2222 root@127.0.0.1
  • Horizon:http://127.0.0.1:8088/dashboard

⚠️最容易卡住的一点:Windows 上不要用10.0.2.15访问。

虚拟机在 NAT 模式下,10.0.2.15是虚拟机内部的地址,宿主机根本路由不到。你在 Windows 浏览器里输http://10.0.2.15只会超时。

所有访问都必须走端口转发,落到127.0.0.1:

要访问什么Windows 上输什么
Horizon 控制台http://127.0.0.1:8088/dashboard
SSHssh -p 2222 root@127.0.0.1
虚拟机内部的10.0.2.15只在虚拟机里有效,宿主机用不了

本文示例的 root 密码是123,登录 Horizon 用admin/admin。

⚠️额外小问题 B:8080 端口可能被占用(我这台被 PID 10552 占了),换成 8088 就好。


五、CentOS 7.9 安装

5.1 下载镜像

CentOS 7 已 EOL,官方源下线,用清华 vault 源:

https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso

Minimal 版就够,图形界面没用还吃资源。

📦三样安装资源我都打包放网盘了,省得你到处找:

文件大小说明
VirtualBox-7.2.20-175154-Win.exe169.94MB官网下载,未修改
CentOS-7-x86_64-Minimal-2009.iso973.00MB清华 vault 源下载,未修改
cirros-0.6.3-x86_64-disk.img20.69MB已校验 qcow2,可直接上传 Glance

链接:https://pan.baidu.com/s/1PEC_9PxM3wb70SKhjgHepw
提取码:k3a7

全部为官方/镜像站原始文件,无解压密码、未做任何修改。百度网盘非会员下载慢,急用的话直接用上面的官方直链。

5.2 安装时的选择

  • 软件选择:最小安装
  • root 密码:教学环境设简单点(示例123,别用于任何联网环境)
  • 网络:安装时就把以太网打开,否则装完连不上网

5.3 换国内 yum 源

装完第一件事换源。全部用阿里云 + 中科大双 baseurl,一个挂了另一个自动顶上:

# /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-7 - Base baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/os/$basearch/ gpgcheck=0 enabled=1 [updates] name=CentOS-7 - Updates baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/updates/$basearch/ gpgcheck=0 enabled=1 [extras] name=CentOS-7 - Extras baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/extras/$basearch/ gpgcheck=0 enabled=1

OpenStack Train 源:

[openstack-train] name=OpenStack Train baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/cloud/x86_64/openstack-train/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/cloud/x86_64/openstack-train/ gpgcheck=0 enabled=1

现在就加上 Virt SIG 源,否则后面 compute 阶段会报qemu-kvm-rhev找不到(见坑 7):

[virt-kvm-common] name=CentOS-7 - Virt KVM common baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/virt/x86_64/kvm-common/ https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/virt/x86_64/kvm-common/ gpgcheck=0 enabled=1

/etc/yum.conf加两行,防止下载瞬断:

retries=15 timeout=120

5.4 关闭 SELinux

setenforce0sed-i's/^SELINUX=.*/SELINUX=permissive/'/etc/selinux/config

六、PackStack 部署

6.1 装 PackStack

yum-yinstallcentos-release-openstack-train yum-yinstallopenstack-packstack

6.2 生成并裁剪 answers.cfg

packstack --gen-answer-file=/root/answers.cfg

然后改这几个关键参数(省资源 + 避坑):

# 管理员密码 CONFIG_KEYSTONE_ADMIN_PW=admin # 数据库和消息队列密码(固定下来,避免历次失败残留凭据) CONFIG_MYSQL_PW=mysqlroot CONFIG_RABBIT_PW=rabbitmq # 不装 demo 实例,省资源 CONFIG_PROVISION_DEMO=n # 网络后端选 linuxbridge(不要用默认 OVS,见坑 6) CONFIG_NEUTRON_L2_AGENT=linuxbridge CONFIG_NEUTRON_LB_INTERFACE_MAPPINGS=physnet1:br-ex # ML2 机制驱动 CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=linuxbridge,l2population CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan # 以下全部关掉,省资源 CONFIG_CINDER_INSTALL=n CONFIG_HEAT_INSTALL=n CONFIG_CEILOMETER_INSTALL=n CONFIG_AODH_INSTALL=n CONFIG_SWIFT_INSTALL=n CONFIG_MANILA_INSTALL=n CONFIG_TROVE_INSTALL=n CONFIG_SAHARA_INSTALL=n CONFIG_IRONIC_INSTALL=n CONFIG_MAGNUM_INSTALL=n

6.3 启动部署

packstack --answer-file=/root/answers.cfg

30~60 分钟,下载几百个包。下面是我实际踩过的所有坑,按出现顺序排列。


七、10 个坑(核心章节,建议收藏)

坑 1:facter 崩溃,leatherman_curl.so.1.3.0缺失

现象:puppet 阶段报 facter 运行失败,日志有leatherman_curl.so.1.3.0: cannot open shared object file。

原因:openstack-train 需要 leatherman 1.3.0,但 EPEL 装了 1.10.0,版本错配。

解法:

yum-ydowngrade leatherman ldd /usr/bin/facter# 确认没有 not found

坑 2:yum 下载反复 TCP reset,995 个 puppet 资源被 skip

现象:装到一半python-netifaces、openstack-selinux等包下载失败,puppet 连锁失败。

原因:国内网络到国外源不稳定,连接被 reset。

解法:

  1. /etc/yum.conf加retries=15、timeout=120;
  2. 所有 repo 改阿里云 + 中科大双 baseurl;
  3. 关键包预先手动装好,每个包重试 5 次:
forpkginopenstack-selinux openstack-dashboard openstack-neutron-linuxbridge openstack-nova-compute;doforiin12345;doyum-yinstall"$pkg"&&breakecho"retry$pkg($i)";sleep5donedone

坑 3:python2-qpid-proton版本冲突

现象:yum 事务失败,qpid-proton 版本矛盾。

原因:EPEL 里有 qpid-proton-c 0.37,但 Train 需要 0.26。

解法:epel.repo的[epel]段加排除:

exclude=qpid-proton* python2-qpid-proton*

然后手动装 0.26:

yum-yinstallqpid-proton-c-0.26.0 python2-qpid-proton-0.26.0

坑 4:MariaDB 凭据不一致

现象:Insufficient credentials to authenticate,Keystone 起不来。

原因:历次失败运行残留了 root 密码,和 answers.cfg 里的CONFIG_MYSQL_PW对不上。

解法:彻底重置 MariaDB:

systemctl stop mariadbrm-rf/var/lib/mysqlmkdir/var/lib/mysqlchownmysql:mysql /var/lib/mysql mysql_install_db--user=mysql systemctl start mariadb

并在 answers.cfg 里固定CONFIG_MYSQL_PW=mysqlroot、CONFIG_RABBIT_PW=rabbitmq。

坑 5:neutron-server 死循环重启

现象:journalctl -u neutron-server显示:

The following mechanism drivers were not found: set(['ovn'])

原因:packstack 生成的默认 answers.cfg 里CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=ovn,但我们没装 OVN。

解法:改成

CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=linuxbridge,l2population

坑 6:OVS 后端 puppet 报Missing title

现象:network 阶段报:

Error: Evaluation Error: Missing title. The title expression resulted in undef (file: .../neutron/manifests/plugins/ovs/port.pp, line: 7)

原因:puppet-neutron 模块在 OVS 后端的一个 bug,bridge_mappings解析后 title 变成 undef。

解法:不用 OVS,直接换 linuxbridge:

CONFIG_NEUTRON_L2_AGENT=linuxbridge CONFIG_NEUTRON_LB_INTERFACE_MAPPINGS=physnet1:br-ex

linuxbridge 不经过那个有 bug 的 OVS port 资源定义,问题绕开。

坑 7:compute 阶段qemu-kvm-rhev >= 2.10.0找不到

现象:

Error: Package: openstack-nova-compute-20.6.0-1.el7.noarch (openstack-train) Requires: qemu-kvm-rhev >= 2.10.0

原因:这个包不在 base/updates/cloud-train 源里,在 CentOSVirt SIG源里。

解法:加上virt-kvm-common.repo(见 5.3),然后:

yum-yinstallopenstack-nova-compute openstack-nova-migration

坑 8:Horizon 从 Windows 访问 404

现象:虚拟机内curl http://10.0.2.15/dashboard返回 200,Windows 浏览器访问http://127.0.0.1:8088/dashboard返回 404。

原因:Apache 的15-horizon_vhost.conf里 ServerAlias 只有10.0.2.15、openstack.local、localhost,没有127.0.0.1。请求落到了默认 vhost。

解法:

<VirtualHost *:80> ServerName openstack.local ServerAlias 10.0.2.15 ServerAlias openstack.local ServerAlias localhost ServerAlias 127.0.0.1 # 加这一行 ... </VirtualHost>
systemctl reload httpd

坑 9:时间同步被跳过

现象:PackStack 最后警告Time synchronization installation was skipped。

原因:最小化安装没装 chrony,时间漂移会导致 Keystone token 校验失败。

解法:

yum-yinstallchrony systemctlenable--nowchronyd

坑 10:启动实例报PortBindingFailed,br-ex 不存在

现象:openstack server create后实例变 ERROR,nova-compute 日志:

PortBindingFailed: 绑定端口 da3155ca 失败 Interface br-ex for physical network physnet1 does not exist. Agent terminated!

openstack network agent list里看不到 linuxbridge-agent。

原因:linuxbridge-agent 需要br-ex网桥存在并绑定物理网卡,但 VirtualBoxNAT 模式下 PackStack 不会自动创建这个网桥。

三条处理路径,按你的机器条件选:

方案前提代价
A 改桥接宿主机没开 Hyper-V,桥接网卡可选最干净,但虚拟机 IP 会变,answers.cfg 要同步改
B 手动建 br-ex只能用 NAT会断 SSH,必须在 VirtualBox 控制台操作,先拍快照
C 不建实例纯教学演示最稳,控制台/镜像/拓扑全都能演示,只是起不了实例

方案 B 的关键步骤(完整版含回滚见资源包踩坑排查表.md):

# 先备份cp/etc/sysconfig/network-scripts/ifcfg-enp0s3 /root/ifcfg-enp0s3.bak# 建桥、迁 IP(执行完 SSH 立刻断,去 VirtualBox 控制台继续)brctl addbr br-ex brctl addif br-ex enp0s3ipaddr flush dev enp0s3ipaddradd10.0.2.15/24 dev br-exiplinksetbr-ex upiprouteadddefault via10.0.2.2 systemctl restart network systemctl restart neutron-linuxbridge-agent openstack network agent list

💡我的建议:如果你的课程重点是 Keystone、Glance、Neutron 拓扑、Horizon 操作,方案 C 就够了。上传镜像、建网络、建路由、看拓扑图,这些完全不需要实例。真要让学生建实例,优先考虑方案 A,或者换一台没装 Docker Desktop 的机器。


八、部署成功后的验收

看到这一行就是成了:

**** Installation completed successfully ******

逐项验证:

source/root/keystonerc_admin openstackservicelist# keystone / glance / nova / neutron / placementopenstack computeservicelist# nova-compute / scheduler / conductor 全部 upopenstack hypervisor list# Type 显示 QEMU(无 /dev/kvm 时正常)

/etc/nova/nova.conf里确认virt_type=qemu。

💡 Windows 上 Hyper-V 占了硬件虚拟化,VirtualBox 拿不到 VT-x,Nova 只能用 QEMU 纯软件模拟。能建、能跑,但慢,教学够用,别跑生产。


九、最终访问方式

入口地址账号
Horizon Webhttp://127.0.0.1:8088/dashboardadmin / admin
SSHplink -ssh -P 2222 root@127.0.0.1root / 123(本文示例)
OpenStack CLI虚拟机内source /root/keystonerc_adminadmin / admin

再强调一次:10.0.2.15只在虚拟机内部有效,宿主机一律走127.0.0.1+ 转发端口。

登录后的 Dashboard 概况:


管理员视角的 hypervisor 状态(QEMU 类型,说明在软件模拟模式):


刷新后的概况页,可以看到资源占用情况:


项目视角上传镜像后的 Images 列表:

网络拓扑:外部网络(ext-net,flat)和内部网络(demo-net,vxlan)通过路由器连接:


十、上传镜像与创建第一台实例

10.1 关于 Cirros 镜像(我已经搞到了,附校验方法)

Cirros 是 OpenStack 官方最小测试镜像,约 21MB,启动快、占内存小,专门用来验证 Glance / Nova / Neutron 是否连通。

先说结论:我已经下载成功,并把它传到虚拟机、上传进 Glance,能正常出现在镜像列表里。

但我踩过一个很隐蔽的坑,值得你花 30 秒看完:

国内镜像站现在基本都下不到了。我逐个试了清华、阿里、腾讯、华为、北大、中科大的 cirros 目录,全部 404 或返回一个 SPA 页面。如果你用下载工具保存那个 404 页面,会得到一个 10–50KB 的cirros.img——看起来像镜像,其实是 HTML。我第一次就是这么中招的。

所以拿到文件后,务必先校验:

ls-lhcirros.img# 真实镜像应 > 1MB(实际约 21MB)xxd-l4cirros.img# 应输出 514649fb(qcow2 魔数 QFI\xfb)
  • 输出514649fb→ 真镜像,继续;
  • 输出3c 21 44 4f(即<!DO)→ HTML 错误页,删掉重下。

最终能用的版本:cirros-0.6.3-x86_64-disk.img,20.69MB,qcow2 格式,校验通过后即可上传。这个文件我也放在 5.1 节那个网盘里了,直接下,不用再到处试镜像站。

如果你实在拿不到,用占位镜像也能把流程走完:

qemu-img create-fqcow2 /root/test.img 5M

Glance 上传、镜像列表、网络拓扑、Horizon 操作全部可以完整演示,只是实例起不来。资源包里的09-first-instance脚本已经内置了这层判断:文件头不是 qcow2 就自动回退到占位镜像,不会把 HTML 传上去。

10.2 上传镜像

# 先把镜像传到虚拟机(Windows 上用 pscp)# pscp -P 2222 -pw 123 cirros-0.6.3-x86_64-disk.img root@127.0.0.1:/root/cirros.imgsource/root/keystonerc_admin openstack image create"cirros-0.6.3"\--file/root/cirros.img\--disk-format qcow2\--container-format bare\--public\--min-disk1\--min-ram64

上传成功后,在 Horizon「项目 → 计算 → 镜像」能看到:cirros-0.6.3,20.69MB,QCOW2,公有,状态运行中(见上面第 5 张图)。

openstack image list# 确认 status=active

10.3 创建密钥对

openstack keypair create test-key>/root/test-key.pemchmod600/root/test-key.pem

10.4 创建外部网络(ext-net)

对应 VirtualBox 的enp0s3网卡(10.0.2.0/24),flat 模式:

openstack network create--external\--provider-physical-network physnet1\--provider-network-type flat ext-net openstack subnet create--networkext-net\--allocation-poolstart=10.0.2.100,end=10.0.2.200\--gateway10.0.2.1\--subnet-range10.0.2.0/24 ext-subnet

10.5 创建内部网络(demo-net)

vxlan 模式,租户隔离:

openstack network create demo-net openstack subnet create--networkdemo-net\--dns-nameserver114.114.114.114\--subnet-range192.168.1.0/24 demo-subnet

10.6 创建路由器

openstack router create demo-router openstack routerset--external-gateway ext-net demo-router openstack routeraddsubnet demo-router demo-subnet

10.7 启动实例

openstack flavor list openstack server create--flavorm1.tiny\--imagecirros-0.6.3\--key-name test-key\--networkdemo-net\my-first-vm

⚠️ 这一步在 NAT 模式下会撞上坑 10(PortBindingFailed)。按第七节的方案 A / B / C 处理。

10.8 验证命令汇总

source/root/keystonerc_admin openstack image list openstack keypair list openstack network list openstack subnet list openstack router list openstack server list openstack flavor list

十一、已知限制(先说清楚,免得你踩到再骂)

  1. 实例创建需要额外处理:NAT 模式下br-ex不存在,见坑 10。不做处理也能完整演示控制台、镜像、网络拓扑。
    补充一个实用细节:启动失败的实例会变成ERROR,但仍然占着配额(管理员的 hypervisor 页面会显示「实例 0、内存已用 512MB」这种对不上的状态)。记得openstack server delete <名字>清掉,否则后面的实例可能因配额不足起不来。
  2. 没有硬件加速:宿主机开了 Hyper-V 时只能 QEMU 软件模拟,建实例慢。
  3. 组件是裁剪的:没有 Cinder、Swift、Heat、计量告警。要这些得自己开,内存也会上去。
  4. 版本已 EOL:CentOS 7.9 + Train 都是老版本,胜在资料全、和教材对得上,不适合生产。
  5. 明文口令:admin/admin、root/123仅为实验,严禁联网使用。

十二、我把踩坑过程整理成了手册

文章已经够你照着做了,但有些东西重复敲很烦。我把这套环境里实际跑通的配置和脚本整理成了一个包:

内容说明
answers.cfg已裁剪、已避坑的 packstack 配置
4 个 yum repo阿里云 + 中科大双源,含 Virt SIG
5 个修复脚本leatherman/qpid 修复、Virt 源、linuxbridge 切换、MariaDB 重置、干净重启
verify.sh一键验收,不用自己敲一堆 openstack 命令
Horizon vhost加了ServerAlias 127.0.0.1,解决 404
踩坑排查表10 个坑的症状 → 原因 → 解法,含坑 10 的三种方案与回滚
6 张实测截图可直接用于课件
00-开始之前.md版本说明、能力边界、安全声明
不含 Cirros 镜像约 21MB,为控制包体积未打包,正文 10.1 有获取与校验方法

🔗资源包地址:https://download.csdn.net/download/ntc19235/93774999

0 积分即可下载(免费)。配置和脚本全部在我这台 i5-10210U / 16GB 笔记本上跑过,拿走直接用。

环境实在起不来、又赶着上课的,也可以私信我远程协助(另计)。


十三、写在最后

这套环境平时开着占 5~6GB,不影响写代码查资料。对教学来说,学生能亲手在 Horizon 上看网络拓扑、建项目、配安全组,比讲十遍 PPT 都管用。云计算课的实验环节、云安全课的安全组和租户隔离演示,这套都够用。

如果这篇帮你少走点弯路,欢迎点赞收藏;有问题评论区留言,我会回。


版本:v1.3 |更新:2026-10 |环境:VirtualBox 7.2 + CentOS 7.9.2009 + OpenStack Train

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 11:07:32

小白程序员必看:AI岗位全解析,找到你的高薪进阶之路!

本文详细解析了AI领域的四层岗位结构&#xff0c;从模型制造到应用开发&#xff0c;再到端侧部署与支撑岗位&#xff0c;帮助读者根据自身技能和背景找到最合适的AI发展方向 去年秋招&#xff0c;有个学自动化的同学来问我。 他说&#xff1a;AI 岗是不是都得发 paper&#xff…

作者头像 李华
网站建设 2026/10/29 11:06:52

微信小程序实验:map组件

微信小程序提供原生<map>地图组件&#xff0c;适合校园导航、点位展示类小程序开发。本文基于课程案例&#xff0c;实现地图渲染、获取当前位置、手动选择位置、唤起微信内置地图&#xff0c;同时配置 3 个标记点位&#xff0c;其中包含黑龙江东方学院第四学生公寓真实经…

作者头像 李华
网站建设 2026/10/29 11:06:50

Agent降本40%攻略:少绕、少带、复用、路由,小白也能学会大模型优化

本文提供了一套完整的Agent成本优化策略&#xff0c;从成本拆分、瓶颈定位到具体优化方法&#xff0c;帮助读者在保证任务成功率与延迟的前提下降低单任务成本。文章强调优化应遵循“先减少不必要的轮次&#xff0c;再减少每轮携带的信息&#xff0c;然后复用重复计算&#xff…

作者头像 李华
网站建设 2026/10/29 11:06:41

设备数据上不来、协议对不上?工业网关要解决的正是这件事

工厂做数字化&#xff0c;第一步往往就卡住。车间里的设备来自不同年代、不同品牌。新上的产线支持以太网和标准协议&#xff0c;老设备还在用串口甚至私有协议。想把它们的数据统一采上来&#xff0c;接进系统&#xff0c;发现“语言不通”。有人尝试用软件方案硬解&#xff0…

作者头像 李华
网站建设 2026/10/29 11:06:35

【无标题】EXTI外部中断

中断系统中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行。中断优先级&#xff1a;当…

作者头像 李华
网站建设 2026/10/29 11:06:21

Kotlin教程 Flow(数据流)-中级讲解

一.代码使用1.ViewModel操作数据class UserInfoViewModel : ViewModel() {/*** 保存用户信息* */fun saveUserInfo(userInfoDao: UserInfoDao, userInfo: UserInfo) {viewModelScope.launch(Dispatchers.IO) {val dbUserInfo fromJson2Bean(fromObject2Json(userInfo), DBUser…

作者头像 李华