静看光阴荏苒
不管不顾不问不说也不念

无人值守安装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

如图所示:

然后编辑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

赞(7)
未经允许不得转载:荒岛 » 无人值守安装Debian10.4
分享到: 更多 (0)

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    用 moeclub 的 DD 脚本不是也很方便嘛?当然,如果纯折腾这个功能,当我没说。 :roll:

    wuyn4个月前 (07-16) Google Chrome 83.0.4103.116 Google Chrome 83.0.4103.116 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    无人值守安装不应该配合PXE吗 :arrow:

    clone4个月前 (07-16) Google Chrome 80.0.3987.132 Google Chrome 80.0.3987.132 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 你要一整套完整的环境那当然需要。。

      LALA4个月前 (07-16) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    老板,研究一下怎么在VPS里DD一个openwrt吧

    不得不说有坑3个月前 (07-28) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿