首先,很抱歉这篇文章很长。
好吧,我按照 Debian 网站上的指南预置了 Debian 安装,编写了preseed.cfg
然后将其添加到initrd.gz
就像他们所描述的那样。
我遵循的指南
这是预置 ISO 的脚本
- 我正在使用debian 11 网络安装
#!/bin/bash
COMMON_PATH=$HOME/test
ISO_NAME=debian11-net
RAW_DEBIAN_ISO=$COMMON_PATH/$ISO_NAME.iso
WORKDIR=$COMMON_PATH/DEBIAN_ISO_WORKDIR
PRESEED_FILE=$COMMON_PATH/preseed.cfg
PRESEED_ISO=$COMMON_PATH/$ISO_NAME-preseeded.iso
function preseed(){
##### Scrub workdir
sudo rm -rf $WORKDIR/*
#### Mount image
mkdir -p $WORKDIR/loopdir
sudo mount -o loop $RAW_DEBIAN_ISO $WORKDIR/loopdir/
#### Copy extracted/mounted image
mkdir -p $WORKDIR/isodir
cp -rT $WORKDIR/loopdir $WORKDIR/isodir
# delete the temp loop dir
sudo umount $WORKDIR/loopdir
sudo rm -rf $WORKDIR/loopdir/
#### unzip initrd
sudo chmod +w -R $WORKDIR/isodir/install.amd/
gunzip $WORKDIR/isodir/install.amd/initrd.gz
#### add preseed file to initrd
echo $PRESEED_FILE | cpio -H newc -o -A -F $WORKDIR/isodir/install.amd/initrd
#### zip back initrd
gzip $WORKDIR/isodir/install.amd/initrd
sudo chmod -w -R $WORKDIR/isodir/install.amd/
#### Fix md5sum
cd $WORKDIR/isodir
sudo chmod +w md5sum.txt
find -follow -type f ! -name md5sum.txt -print0 | xargs -0 md5sum > md5sum.txt
sudo chmod -w md5sum.txt
cd ..
##### Create ISO
sudo chmod +w $WORKDIR/isodir/isolinux/isolinux.bin
genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-o $PRESEED_ISO $WORKDIR/isodir/
sudo chmod -w $WORKDIR/isodir/isolinux/isolinux.bin
# commented out for checking the output image files
# sudo rm -rf $WORKDIR/isodir/
}
preseed;
exit 0
这是实际的预置文件
#_preseed_V1
### Localization
d-i debian-installer/locale string en_US
### Keyboard selection.
d-i keyboard-configuration/xkb-keymap select us
### Network configuration
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string someHostName
d-i netcfg/get_domain string someDomainname
d-i netcfg/wireless_wep string
### Mirror settings
d-i mirror/country string manual
d-i mirror/http/hostname string http.es.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# Suite to install.
d-i mirror/suite string testing
### Account setup
d-i passwd/root-password-crypted password $2b$10$/YuZPntPhCZfjEi3LNWXZer3W1HYiy25rgtoBged4nf026RNXfGzC
d-i passwd/user-fullname string firstName lastName
d-i passwd/username string myUsername
d-i passwd/user-password-crypted password $2b$10$/ly237ccHCsTATdtVGpP3eRs65Oe7BWdi58G1z.jfEoFw0./TfH1m
d-i passwd/user-default-groups string sudo audio video plugdev netdev
### Clock and time zone setup
d-i clock-setup/utc boolean true
d-i time/zone string America/New_York
d-i clock-setup/ntp boolean true
### Partitioning
# choosing the smallest partition first
d-i partman/early_command \
string PRIMARYDISK=/dev/$(lsblk -o name sort \
size --include 8 \
| head -n 1) \
debconf-set partman-auto/disk "$PRIMARYDISK";
d-i partman-auto/method string regular
d-i partman-auto/expert_recipe string \
boot-root :: \
30000 30000 30000 ext4 \
\$primary{ } \$bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } . \
\
219000 220000 220000 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /home } .
### Apt setup
d-i apt-setup/cdrom/set-first boolean false
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
### Package selection
tasksel tasksel/first multiselect standard
d-i pkgsel/include string build-essential
popularity-contest popularity-contest/participate boolean true
### Boot loader installation
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean false
### Finishing up the installation
d-i finish-install/reboot_in_progress note
我期望发生什么
我需要能够使用预置的便携的任何机器上的 ISO,不需要单击任何内容,Debian 安装程序应该立即自动开始读取preseed.cfg
并配置我的操作系统。
我读到可以使用 initrd 方法。
实际发生的情况
安装继续进行,就好像没有预置文件一样,并提示我使用常用的安装菜单。正常的手动安装过程。
我尝试过的
作为调试方法:我选择了auto installation
选项“似乎 initrd 仍处于压缩状态,我无法链接到它”。
我发现另一篇文章建议删除安装菜单。我尝试过,但似乎它会退回到其他菜单版本或其他版本。
我不记得另一篇文章指出有一种方法可以修改某个子菜单,例如graphical install
告诉它在单击时自动查找预置。
我还在某处读到可以让虚拟机自动执行此操作。
但这不是我真正想要的。