无人值守安装Debian10.4

最近这两天一直在折腾debian的preseed,只能说这玩意真的是个深坑,东拼西凑的文档看了无数遍。。。

我的需求是要做到真正的完全无人值守安装,安装过程中不能有任何交互行为。

搜了下Google,知道了大致思路是把preseed.cfg直接内嵌到initrd里面,然后重新封装iso,但是网上没有详细的文档,这里做个记录,留给可能需要的人。

首先安装需要用到的工具:

apt -y update  apt -y install p7zip-full genisoimage

下载debian的最小网络安装镜像,然后解压出来里面所有的内容:

cd /opt  wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.4.0-amd64-netinst.iso  7z x debian-10.4.0-amd64-netinst.iso -oimlala

首先编辑isolinux.cfg

nano imlala/isolinux/isolinux.cfg

把超时改为1,这步的目的是让系统开机的时候自动进入安装的步骤,而不需要人为的按一次回车:

timeout 1

由于Debian10的菜单启动顺序是图形化安装在第一位,但图形化安装是不支持preseed的,所以这里要把启动顺序改一下。编辑txt.cfg:

nano imlala/isolinux/txt.cfg

把这个菜单设置为debian默认的,添加如下配置:

default install          menu default

如图所示:

无人值守安装Debian10.4

然后编辑gtk.cfg:

nano imlala/isolinux/gtk.cfg

取消图形化的默认安装菜单,删除如下的配置:

default installgui          menu default

接下来新建preseed.cfg文件:

nano preseed.cfg

写入如下配置,这个配置我删删改改最终使用Debian10.4的iso在VMWare/VirtualBox测试通过,是可以做到完全无人值守的,另外我写了点注释方便理解:

# 配置语言  d-i debian-installer/locale string en_US    # 配置键盘  d-i keyboard-configuration/xkb-keymap select us    # 使用自动的方式配置网络(DHCP)  d-i netcfg/choose_interface select auto    # 配置hostname和domain  d-i netcfg/get_hostname string unassigned-hostname  d-i netcfg/get_domain string unassigned-domain  d-i netcfg/hostname string imlala    # 配置软件源  d-i mirror/country string manual  d-i mirror/http/hostname string mirrors.163.com  d-i mirror/http/directory string /debian  d-i mirror/http/proxy string    # 开启root登录并设置root密码,关闭普通用户创建  d-i passwd/root-login boolean true  d-i passwd/make-user boolean false  d-i passwd/root-password password 123456  d-i passwd/root-password-again password 123456    # 设置时区为东八区  d-i clock-setup/utc boolean true  d-i time/zone string Asia/Shanghai  d-i clock-setup/ntp boolean false    # 硬盘分区,注意/dev/sda这里的设备名,要改为你自己的设备名,一般虚拟机如VMware/VirtualBox都是这个设备名  d-i partman-auto/disk string /dev/sda  d-i partman-auto/method string regular  d-i partman-auto/choose_recipe select atomic    # 如果硬盘内之前有lvm或是raid的分区,全部删除  d-i partman-md/device_remove_md boolean true  d-i partman-lvm/device_remove_lvm boolean true    # 下面的这些配置可以做到没有交互式的完成硬盘分区  d-i partman-partitioning/confirm_write_new_label boolean true  d-i partman/choose_partition select finish  d-i partman/confirm boolean true  d-i partman/confirm_nooverwrite boolean true    # 禁止在安装的时候弹出CD/DVD扫描提示  d-i apt-setup/non-free boolean true  d-i apt-setup/contrib boolean true  d-i apt-setup/cdrom/set-first boolean false  d-i apt-setup/cdrom/set-next boolean false     d-i apt-setup/cdrom/set-failed boolean false    # 软件包选择  tasksel tasksel/first multiselect standard    # 安装额外的软件包,不更新系统  d-i pkgsel/include string openssh-server  d-i pkgsel/upgrade select none    # 禁止在安装的时候弹出popularity  popularity-contest popularity-contest/participate boolean false    # grub安装  d-i grub-installer/only_debian boolean true  d-i grub-installer/with_other_os boolean true  d-i grub-installer/bootdev string default    # 安装完成之后不要弹出安装完成的界面,直接重启  d-i finish-install/reboot_in_progress note

接下来把install.amd目录给写权限,我这是使用的64位iso,如果是32位这里的目录应该是i386:

chmod +w -R imlala/install.amd

解压initrd.gz:

gunzip imlala/install.amd/initrd.gz

把preseed.cfg的配置内嵌到initrd:

echo preseed.cfg | cpio -H newc -o -A -F imlala/install.amd/initrd

完成之后重新压缩initrd.gz并还原install.amd目录之前的权限:

gzip imlala/install.amd/initrd  chmod -w -R imlala/install.amd

最后一步,重新封装iso:

genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o preseedv5-debian-10.4.0-amd64-netinst.iso imlala

在VirtualBox上的测试:

参考文献:

https://www.debian.org/releases/stable/example-preseed.txt
https://www.debian.org/mirror/list
https://wiki.debian.org/DebianInstaller/Preseed/EditIso
https://unix.stackexchange.com/questions/409212/preseed-directive-to-skip-another-cd-dvd-scanning

评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注