Debian initrd内置preseed未执行,无头SSH安装无法启动求助
兄弟,你这情况我之前也碰到过——明明按文档一步步操作,preseed就是不生效,network-console也没启动,直接进了普通安装选项,急得不行。我给你梳理几个关键排查点,咱们一步步来解决:
1. 先确认preseed.cfg有没有被正确打包进ISO里
你用xorriso重新打包的时候,有没有把preseed.cfg放在解压后的ISO根目录里?如果文件位置不对,安装器根本找不到它。
可以先挂载你生成的ISO验证一下:
mount -o loop debian-12.4.0-amd64-netinst-headless.iso /mnt ls /mnt/preseed.cfg # 能看到这个文件才算对 umount /mnt
如果看不到,赶紧把preseed.cfg移到你打包用的./目录(就是和isolinux文件夹同级的目录),重新执行xorriso打包命令。
2. 给启动菜单加preseed加载参数
就算preseed在根目录,有时候安装器也不会自动加载,得在启动参数里明确指定。你需要修改启动配置文件:
- 针对BIOS启动:修改
isolinux/isolinux.cfg,找到默认的install条目,在append行末尾加上preseed/file=/cdrom/preseed.cfg,比如:label install menu label ^Install kernel /install.amd/vmlinuz append vga=788 initrd=/install.amd/initrd.gz preseed/file=/cdrom/preseed.cfg --- quiet - 针对EFI启动:修改
boot/grub/grub.cfg,找到默认启动项,在linux行末尾加同样的参数。
修改完再重新打包ISO,这样安装器启动时就会主动去加载preseed文件了。
3. 调整preseed的配置顺序和内容
你的preseed里同时用了anna/choose_modules和preseed/early_command,这俩有点重复,而且顺序不对——加载network-console的命令必须放在最前面,确保安装器一开始就加载SSH模块。建议把preseed改成这样:
# 优先加载network-console模块,这是无头安装的核心 d-i preseed/early_command string anna-install network-console d-i network-console/start select continue d-i network-console/password password [你的密码] d-i network-console/password-again password [你的密码] # 下面是系统基础配置,顺序无所谓 d-i debian-installer/locale string en_US.UTF-8 d-i debian-installer/language string en d-i debian-installer/country string PL d-i console-keymaps-at/keymap select us d-i keyboard-configuration/xkb-keymap select us d-i netcfg/choose_interface select auto d-i netcfg/get_hostname string headless d-i netcfg/get_domain string local d-i hw-detect/load_firmware boolean true # 无线配置可以先注释掉!先搞定有线SSH,排除无线干扰 # d-i netcfg/wireless_show_essids select manual # d-i netcfg/wireless_essid string [你的SSID] # d-i netcfg/wireless_security_type select wpa # d-i netcfg/wireless_wpa string [你的无线密码]
另外,强烈建议先注释掉无线配置,先用有线网络测试——无线配置容易出问题,先让SSH在有线环境下跑起来,再回头搞无线。
4. 验证xorriso打包命令的正确性
你的xorriso命令大体没问题,但要注意两个细节:
- 确保你是在完全解压的Debian原ISO目录里执行的命令,所有原文件都在,包括
isohdpfx.bin的路径要正确(你用的../isohdpfx.bin,说明这个文件在当前目录的上级,要确认它存在)。 - 打包时加了
-r参数,确保文件权限正确,安装器能读取preseed.cfg。
5. 最后一招:临时接显示器看日志
如果还是不行,临时接个显示器,选“Expert install”进入,或者在启动菜单里给安装参数加debug,看看安装器的报错信息——比如是不是找不到preseed文件,或者加载network-console模块失败,这些日志能直接定位问题。
备注:内容来源于stack exchange,提问作者Bytequill

