# 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