Files
senior-kiosk/preseed.cfg
T
jgitta 23779690d6 fix: bypass final installer dialog with background reboot in late_command
d-i finish-install/reboot_in_background doesn't suppress the 'Installation
complete, click Continue' dialog in Trixie. Instead, fork a background
reboot from late_command that fires 3s after setup completes, killing the
dialog before it can block. Also removes the redundant reboot_in_background
setting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 00:15:35 +00:00

75 lines
4.4 KiB
INI

# Debian Preseed — SeniorNet Kiosk
# Silent unattended Debian base install.
# After install, downloads preseed-bootstrap.sh which installs a first-boot
# setup wizard. On first reboot the wizard prompts for username/name,
# installs the kiosk, then reboots into kiosk mode.
# ── Locale / keyboard ──────────────────────────────────────────────
d-i debian-installer/locale string en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select us
# ── Network ────────────────────────────────────────────────────────
# Auto, but early_command will pin to the first wired (eth/en) interface
# if one exists — prevents installer from defaulting to WiFi and asking
# for a WPA passphrase. Ethernet must be plugged in during install.
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string kiosk
d-i netcfg/get_domain string local
# ── Mirror ─────────────────────────────────────────────────────────
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# ── Clock / timezone ───────────────────────────────────────────────
d-i time/zone string UTC
d-i clock-setup/utc boolean true
d-i clock-setup/ntp boolean true
# ── Accounts ───────────────────────────────────────────────────────
# Root only — install-kiosk.sh creates the kiosk user interactively.
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
d-i passwd/root-password password kiosk
d-i passwd/root-password-again password kiosk
# ── Disk — auto-detect first real disk ─────────────────────────────
# Handles /dev/sda, /dev/nvme0n1, /dev/vda, etc.
d-i preseed/early_command string \
DISK=$(ls /sys/block/ | grep -Ev '^(loop|sr|fd|ram)' | head -1); \
debconf-set partman-auto/disk "/dev/$DISK" || true; \
debconf-set grub-installer/bootdev "/dev/$DISK" || true; \
ETH=$(ls /sys/class/net/ 2>/dev/null | grep -E '^(eth|en)' | head -1 || true); \
if [ -n "$ETH" ]; then debconf-set netcfg/choose_interface "$ETH" || true; fi; \
true
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm_write_new_label boolean true
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# ── APT ────────────────────────────────────────────────────────────
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org
# ── Package selection ──────────────────────────────────────────────
tasksel tasksel/first multiselect standard, ssh-server
d-i pkgsel/include string curl git
# ── Bootloader ─────────────────────────────────────────────────────
d-i grub-installer/only boolean true
d-i grub-installer/bootdev string default
# ── Post-install bootstrap ─────────────────────────────────────────
# Downloads preseed-bootstrap.sh which installs the first-boot setup service.
d-i preseed/late_command string \
in-target bash -c 'curl -fsSL https://gitea.jgitta.com/jgitta/senior-kiosk/raw/branch/master/preseed-bootstrap.sh | bash' ; \
(sleep 3 && reboot) &
# ── Finish ─────────────────────────────────────────────────────────
# reboot is triggered by late_command background job, bypassing the final dialog