You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Packer中使用guest_additions_mode "attach"安装VirtualBox增强工具?

在Packer中使用guest_additions_mode = "attach"安装VirtualBox增强工具

我之前配置Packer构建VirtualBox镜像时也碰到过这个问题,官方文档确实没细说挂载点的处理细节,这里分享一套我实际用过的完整配置方案,涵盖模板设置和不同Linux发行版的安装脚本。

第一步:配置Packer VirtualBox Builder

先在你的Packer模板里,给VirtualBox builder指定guest_additions_mode = "attach",还可以按需指定增强工具ISO的路径(不填的话Packer会自动找VirtualBox安装目录下的对应ISO):

source "virtualbox-iso" "ubuntu-server" {
  iso_url            = "https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso"
  iso_checksum       = "sha256:0e0f488548794495d976a594a74d411945d6958e428b9ed4a43e78687a04736b"
  ssh_username       = "ubuntu"
  ssh_password       = "ubuntu"
  shutdown_command   = "sudo shutdown -P now"
  guest_additions_mode = "attach"
  # 可选:手动指定增强工具ISO路径,适合VirtualBox非默认安装的场景
  # guest_additions_path = "/opt/virtualbox/VBoxGuestAdditions.iso"
}

build {
  sources = ["source.virtualbox-iso.ubuntu-server"]

  provisioner "shell" {
    script = "install-vbox-guest-additions.sh"
  }
}

第二步:编写安装脚本(分发行版)

当guest_additions_mode设为attach时,VirtualBox只会把增强工具ISO作为CD-ROM设备连接到虚拟机,不会自动挂载,所以需要我们在shell脚本里手动处理挂载、安装、卸载的全流程。

适用于Debian/Ubuntu的脚本(install-vbox-guest-additions.sh)

#!/bin/bash
set -e

# 安装编译内核模块必需的依赖
sudo apt-get update
sudo apt-get install -y build-essential linux-headers-$(uname -r) dkms

# 创建临时挂载点
sudo mkdir -p /mnt/vboxiso

# 挂载增强工具ISO(兼容/dev/cdrom和/dev/sr0两种常见设备路径)
if [ -b /dev/cdrom ]; then
  sudo mount /dev/cdrom /mnt/vboxiso
elif [ -b /dev/sr0 ]; then
  sudo mount /dev/sr0 /mnt/vboxiso
else
  echo "无法识别VirtualBox增强工具ISO设备"
  exit 1
fi

# 运行安装脚本,跳过X Window相关步骤(适合无GUI服务器镜像)
sudo /mnt/vboxiso/VBoxLinuxAdditions.run --nox11

# 卸载ISO并清理临时挂载点
sudo umount /mnt/vboxiso
sudo rmdir /mnt/vboxiso

# 可选:重启系统让增强工具生效(部分场景需要)
# sudo reboot

适用于RHEL/CentOS/Rocky Linux的脚本

#!/bin/bash
set -e

# 安装依赖包
sudo dnf install -y gcc kernel-devel kernel-headers dkms make bzip2 perl

# 创建临时挂载点
sudo mkdir -p /mnt/vboxiso

# 挂载ISO
sudo mount /dev/cdrom /mnt/vboxiso

# 执行安装脚本
sudo /mnt/vboxiso/VBoxLinuxAdditions.run

# 清理操作
sudo umount /mnt/vboxiso
sudo rmdir /mnt/vboxiso

# 可选重启
# sudo reboot

关键细节说明

  • 设备路径兼容:大多数Linux系统里,CD-ROM设备会被识别为/dev/cdrom或/dev/sr0,脚本里做了双判断,避免因系统差异导致挂载失败。
  • 依赖必须安装:内核头文件、编译工具是增强工具内核模块编译的必要条件,缺了会直接导致安装失败。
  • --nox11参数:如果构建的是无GUI的服务器镜像,加上这个参数可以跳过X相关组件的安装,减少不必要的报错。

内容的提问来源于stack exchange,提问作者Ramón J Romero y Vigil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:27:47