# shellcheck disable=SC2148,SC2154
# https://www.debian.org/releases/stable/amd64/apbs04.zh-cn.html
# https://www.debian.org/releases/stable/example-preseed.txt
# https://preseed.debian.net/debian-preseed/bookworm/amd64-main-full.txt

  # 下面这行语句无效,因为本行后面有反斜杠,前面有空格(安装器认为不算注释)\
d-i debian-installer/locale string en_US

# B.4.1. 本地化
d-i debian-installer/locale string en_US
d-i keyboard-configuration/xkb-keymap select us

# B.4.2. 网络设置
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/hostname string localhost

# B.4.3. 网络控制台

# B.4.4. 镜像设置
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian/

# B.4.5. 帐号设置
d-i passwd/make-user boolean false
d-i passwd/root-password password 123@@@
d-i passwd/root-password-again password 123@@@

# B.4.6. 时钟与时区设置
d-i time/zone string Asia/Shanghai

# B.4.7. 分区
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md 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

# vm 原有系统是 bios + gpt,切换成 efi,用 iso 重装,需要确认此项
# 用脚本重装的话,强制安装在第二个硬盘上也可能会遇到?
d-i partman-efi/non_efi_system boolean true

### Description: Do you want to return to the partitioning menu?
#   You have not selected any partitions for use as swap space. Enabling swap
#   space is recommended so that the system can make better use of the
#   available physical memory, and so that it behaves better when physical
#   memory is scarce. You may experience installation problems if you do not
#   have enough physical memory.
#   .
#   If you do not go back to the partitioning menu and assign a swap partition,
#   the installation will continue without swap space.
# 坑的一比
# 不是确认是否 no_swap
# 而是 recipe no_swap 时,确认是否返回上一级重新分区
# 选择 true 就一直死循环
d-i partman-basicfilesystems/no_swap boolean false


# 最小值 膨胀权重 最大值
# https://salsa.debian.org/installer-team/partman-auto/-/blob/master/recipes/atomic?ref_type=heads
# https://salsa.debian.org/installer-team/partman-auto/-/blob/master/recipes-amd64-efi/atomic?ref_type=heads
d-i partman-auto/expert_recipe_efi string efi :: \
    106 1 106 free \
    $iflabel{ gpt } $reusemethod{ } method{ efi } format{ } . \
    1 1 -1 $default_filesystem \
    method{ format } format{ } use_filesystem{ } $default_filesystem{ } mountpoint{ / } .

d-i partman-auto/expert_recipe_bios string bios :: \
    1 1 1 free \
    $iflabel{ gpt } $reusemethod{ } method{ biosgrub } . \
    1 1 -1 $default_filesystem \
    method{ format } format{ } use_filesystem{ } $default_filesystem{ } mountpoint{ / } .

# B.4.8. 基本系统安装

# B.4.9. 设置 apt
d-i apt-setup/non-free boolean true
d-i apt-setup/non-free-firmware boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/enable-source-repositories boolean false
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org

# B.4.10. 选择软件包
tasksel tasksel/first multiselect ssh-server
d-i pkgsel/upgrade select none

# B.4.11. 安装 bootloader
# 添加 bootx64.efi
d-i grub2/force_efi_extra_removable boolean true

# B.4.12. 完成安装
d-i finish-install/reboot_in_progress note

# B.4.13. 预置其他的软件包

# B.5.1. 安装过程中运行用户命令
d-i preseed/early_command string \
    hostname="$(grep -o 'extra\.deb_hostname=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
    debconf-set mirror/http/hostname "$hostname"

d-i partman/early_command string \
    confhome="$(grep -o 'extra\.confhome=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
    swapfile=/target/swapfile; \
    postinst=/var/lib/dpkg/info/bootstrap-base.postinst; \

    cp $postinst $postinst.orig; \
    echo "fallocate -l 384M $swapfile; mkswap $swapfile; swapon $swapfile; $postinst.orig" >$postinst; \

    echo "swapoff $swapfile; rm $swapfile" >/usr/lib/finish-install.d/95swapoff; \
    chmod a+x /usr/lib/finish-install.d/95swapoff; \

    xda=$(wget --tries=5 $confhome/get-xda.sh -O- | sh -s); \
    debconf-set partman-auto/disk "/dev/$xda"; \
    debconf-set grub-installer/bootdev "/dev/$xda"; \
    rm -rf /usr/sbin/fdisk /usr/sbin/sfdisk; \

    ttys=$(wget --tries=5 $confhome/ttys.sh -O- | sh -s console=); \
    debconf-set debian-installer/add-kernel-opts "$ttys"; \

    kernel="$(grep -o 'extra\.kernel=[^ ]*' /proc/cmdline | cut -d= -f2)"; \
    debconf-set base-installer/kernel/image "$kernel"; \

    [ -d /sys/firmware/efi ] && debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_efi)"; \
    [ -d /sys/firmware/efi ] || debconf-set partman-auto/expert_recipe "$(debconf-get partman-auto/expert_recipe_bios)"; \

    true >/bin/os-prober

# os-prober 卡太久,因此跳过

# debian 10 没有 /target/etc/ssh/sshd_config.d/ 文件夹
d-i preseed/late_command string \
    echo "PermitRootLogin yes" >/target/etc/ssh/sshd_config.d/01-permitrootlogin.conf || \
    echo "PermitRootLogin yes" >>/target/etc/ssh/sshd_config