Установку 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