Установку Debian можно полностью автоматизировать путем использования специального файла с заранее указанным сценарием ответов на все вопросы инсталлятора. Данный способ автоматической установки называется Debian Preseed. Далее созданный файл-сценарий ответов preseed.cfg запаковывается в initrd установочного iso-образа Debian.
Информацию с описанием параметров сценария Preseed можно можно найти на официальном сайте. И я не вижу смысла дублировать эту информацию в своем блоге. Вместо этого я сразу размещу содержимое используемого мной файла preseed.cfg, а если у вас возникнут вопросы, то описание параметров вы всегда сможете найти по указанной выше ссылке.
В файле сценариев для своих нужд я использовал такие переменные параметры, как: ($IP), ($NETMASK), ($GATEWAY). Ниже привожу пример моего файла сценария Debian Preseed. Внимание! Особенно обратите внимание на блок ### Partitioning, вначале которого я полностью забиваю нулями содержимое диска. Данные будут полностью стерты со всех дисков в системе, будьте крайне осторожны.
### Localization
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us
### Network configuration
d-i netcfg/choose_interface select auto
d-i netcfg/disable_autoconfig boolean true
# IPv4
d-i netcfg/get_ipaddress string ($IP)
d-i netcfg/get_netmask string ($NETMASK)
d-i netcfg/get_gateway string ($GATEWAY)
d-i netcfg/get_nameservers string ($NAMESERVER)
d-i netcfg/confirm_static boolean true
# Hostname
d-i netcfg/get_hostname string ($HOSTNAME)
### Mirrors
d-i mirror/country string manual
d-i mirror/http/hostname string ($MIRROR)
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string ($HTTPPROXYv4)
d-i mirror/suite string stable
### Account setup
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
d-i passwd/root-password-crypted password ($PASS_CRYPT)
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
### Clock
d-i clock-setup/utc boolean true
d-i time/zone string ($TIMEZONE)
d-i clock-setup/ntp boolean false
### Partitioning
d-i partman/early_command string \
for DISK in $(list-devices disk); do \
parted -s ${DISK} mklabel gpt; \
parted -s ${DISK} mklabel msdos; \
dd if=/dev/zero of=${DISK} bs=512 count=1; \
done;
d-i partman-auto/method string regular
d-i partman-basicfilesystems/no_swap boolean false
d-i partman-auto/expert_recipe string \
root :: \
5000 5000 -1 ext4 \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
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
d-i partman/mount_style select uuid
### Apt setup
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multiselect security, volatile
tasksel tasksel/first multiselect minimal
d-i pkgsel/include string openssh-server
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
### Finish install
d-i finish-install/keep-consoles boolean true
d-i finish-install/reboot_in_progress note
d-i preseed/late_command string \
sed -i '/^PermitRootLogin/c PermitRootLogin yes' /target/etc/ssh/sshd_config ;\
if [ -n "($SSHPUBKEYS)" ]; then \
mkdir -p /target/root/.ssh ;\
chmod 700 /target/root/.ssh ;\
echo "($SSHPUBKEYS)" > /target/tmp/keyfile ;\
cat /target/tmp/keyfile | /target/usr/bin/base64 -d > /target/root/.ssh/authorized_keys ;\
in-target rm -f /tmp/keyfile ;\
fi ;\
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c GRUB_CMDLINE_LINUX_DEFAULT="quiet"' /target/etc/default/grub ;\
sed -i '/^GRUB_TIMEOUT/c GRUB_TIMEOUT=0' /target/etc/default/grub && in-target update-grub