Packer+VirtualBox部署Ubuntu时无法找到preseed文件的问题排查
问题排查与解决方法
先看你遇到的错误Could not find kernel image: preseed/url=http:/ubuntu.,结合你的配置和目录结构,主要问题出在路径不匹配、配置语法错误,下面逐一拆解:
1. Preseed文件路径不匹配(核心问题)
你的boot_command里指定的preseed路径是http://{{.HTTPIP}}:{{.HTTPPort}}/ubuntu/{{user preseed_file}},但从你的目录结构来看,temp.cfg是直接放在http目录下的,并没有ubuntu子目录。Packer的http_directory指定的是http,所以访问路径应该是http://{{.HTTPIP}}:{{.HTTPPort}}/{{user preseed_file}},不需要加ubuntu/前缀。
修改后的boot_command应该是:
"boot_command": [ "<enter><wait5>", "<esc><enter><wait5>", "preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/{{user `preseed_file`}} ", "<enter>" ]
2. 配置文件的语法错误
你的variables和post-processors里有两处语法错误,会导致Packer解析失败:
ssh_username变量的闭合标签缺失:"ssh_username": "{{ userssh_username}"应该改为"ssh_username": "{{ userssh_username}}"(少了一个闭合的})post-processors的output路径语法错误:"output": "C:/Users/{import/automation/packer/boxes/ubuntu/{{ userbox_name}}.box"里的{import是明显笔误,建议修正为合法的本地路径,比如"output": "C:/Users/你的用户名/automation/packer/boxes/ubuntu/{{ userbox_name}}.box"(替换成你的实际系统用户名)
3. Preseed文件的获取方法
如果还没有合适的preseed文件,有两种常用方式:
- 使用Ubuntu官方模板:Ubuntu官方为不同版本提供了预配置的preseed模板,你可以根据安装的Ubuntu版本下载对应模板,再根据需求修改核心项(比如用户名、密码、磁盘分区规则等)。
- 自定义编写:根据你的安装需求手动编写,核心配置示例:
把编写好的内容保存为# 设置语言与区域 d-i debian-installer/language string en_US d-i debian-installer/country string US d-i debian-installer/locale string en_US.UTF-8 # 设置用户账号 d-i passwd/user-fullname string Packer User d-i passwd/username string packer d-i passwd/user-password password packer d-i passwd/user-password-again password packer # 磁盘自动分区 d-i partman-auto/disk string /dev/sda d-i partman-auto/method string regular d-i partman-auto/choose_recipe string atomic # 安装后配置:安装OpenSSH、禁用自动更新 d-i pkgsel/include string openssh-server d-i pkgsel/update-policy select nonetemp.cfg,放在http目录下即可。
验证步骤
修改完配置后,先运行packer validate template.json检查配置语法是否合法,确认无错误后再执行packer build template.json启动构建。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

