使用 Ansible 和 Docker 从源码构建并部署最新的 open-vm-tools

发布: (2026年5月2日 GMT+8 19:21)
4 分钟阅读
原文: Dev.to

Source: Dev.to

为什么使用此角色?

在 VMware 上运行 Linux 虚拟机时,发行版提供的 open‑vm‑tools 包往往落后上游 1–2 年。这可能导致:

功能发行版包此角色
版本落后数月/数年始终为最新上游版本
VMCI 套接字支持常常缺失已编译进
CVE 补丁取决于发行版的回溯上游修复随发布
多发行版支持一次只能一个Ubuntu、Debian、RHEL、Rocky、Fedora、SUSE 等

该角色在隔离的 Docker 容器中构建最新的 open‑vm‑tools,生成干净的 .deb/.rpm 包,并在不污染 Ansible 控制节点的情况下将其部署到你的整批机器上。

构建软件包

构建在 Docker 容器中进行——每个发行版一个容器——因此你的主机保持干净。

# 为所有受支持的发行版构建
./build-all.sh

# 为单个发行版构建(例如 Rocky 9)
./build-all.sh --target rocky9

# 固定特定的上游版本
./build-all.sh --version 12.5.0

输出的(.deb.rpm)文件会放在 output/,并自动复制到 files/,供 Ansible 使用。

安装角色

ansible-galaxy install giuliosavini.vmware_tools_builder

清单示例

[debian]
srv-web01 ansible_host=10.0.0.1
srv-web02 ansible_host=10.0.0.2

[rhel]
srv-app01 ansible_host=10.0.0.10

[all:vars]
ansible_user=root

运行剧本

ansible-playbook -i inventory.ini playbook.yml

角色行为

角色自动处理三种情况——无需条件变量:

当前状态操作
未安装 open‑vm‑tools全新安装
已存在发行版的 open‑vm‑tools移除它,安装自定义构建
已存在先前的自定义构建原地升级

对每台主机,角色执行 preflight → deploy → post‑install → diagnose → verify。如果 vmtoolsd 启动失败,会收集日志并在报告失败前尝试自动恢复。

支持的发行版

发行版构建方式部署方式
Ubuntu 22.04+Docker 容器Ansible (apt)
Debian 12+Docker 容器Ansible (apt)
RHEL / Rocky / Alma 9Docker 容器Ansible (yum)
RHEL / Rocky / Alma 8Docker 容器Ansible (yum)
FedoraDocker 容器Ansible (yum)
SUSE / openSUSEAnsible (zypper)

示例剧本

- name: Deploy custom open-vm-tools
  hosts: all
  become: true
  gather_facts: true
  roles:
    - role: giuliosavini.vmware_tools_builder
      vmtools_remove_standard: true
      vmtools_diagnose_on_failure: true

要求

  • 构建主机上安装 Docker(仅用于编译软件包)
  • 控制节点上安装 Ansible 2.12+
  • 能够 SSH 访问目标机器

不需要特殊的构建依赖或污染的环境。

结论

如果你管理 VMware 基础设施并且厌倦了过时的客机工具,试试这个角色吧。该角色已在 Ansible Galaxy 上发布,源码托管在 GitHub。

  • GitHub:
  • Ansible Galaxy:
0 浏览
Back to Blog

相关文章

阅读更多 »