Требовалось установить Debian с флешки или CD в полностью автоматическом режиме. Без доступа к Интернету. Софт- минимальный набор (Debian Jessie netinstall ISO). Архитектура - i686. После инсталляции необходимо установить дополнительные пакеты, произвести определенные настройки установленной ОС. Тоже в автоматическом режиме.Установку Debian'a можно полностью автоматизировать путем создания файла со сценарием ответов на все вопросы инсталлятора. Интегрировав данный сценарий в инсталляционный образ получим полностью самоустанавливаемый Debian. Способ автоматической установки называется Debian Preseed. Созданный файл-сценарий ответов (preseed.cfg) пакуется его в initrd инсталляционного ISO-образа Debian. На выходе получаем обычный ISO-образ, готовый к автоматической установке.
Для создания собственного инсталляционного ISO-образа необходимо произвести ряд действий. А именно:
*** смонтировать оригинальный ISO;
*** "выудить" из него initrd, распаковать его;
*** скопировать в "корень" initrd созданный файл preseed.cfg и все необходимое для настройки устанавливаемой системы по завершении установки (см. ниже);
*** собрать обратно ISO образ.
Для автоматизации сборки образа сделаем скрипт makeiso.sh. Выполнять его необходимо с правами рута. Для работы скрипта нужны установленные пакеты rsync, syslinux, genisoimage, md5sum.
В директорию, где находится скрипт, необходимо скопировать оригинальный Debian ISO и файл-сценарий preseed.cfg. Также необходимо создать директорию extra - в ней будут находиться пост-инсталляционный скрипт и все необходимое, для его работы.
cat makeiso.sh
#!/bin/bash
mkdir mnt
mkdir irmod
mkdir cd
INISO=debian-8.3.0-i386-netinst.iso
OUTISO=debian-preseed.iso
mount -o loop $INISO mnt
rsync -a -H --exclude=TRANS.TBL mnt/ cd
umount mnt
rmdir mnt
# Pack custom initrd
cd irmod
gzip -d < ../cd/install.386/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames
cp -f ../preseed.cfg preseed.cfg
find . | cpio -H newc --create --verbose | gzip -9 > ../cd/install.386/initrd.gz
cd ../
rm -fr irmod/
# Fix md5 sum
cd cd
md5sum `find -follow -type f` > md5sum.txt
cd ..
# Copy custom postinst script to new ISO
cp -Rf extra cd/
# Create new ISO
rm test.iso
genisoimage -o $OUTISO -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat ./cd
rm -rf cd
isohybrid -o $OUTISO
При успешной отработке скрипта получим образ debian-preseed.iso (в формате hybrid iso), готовый для записи как на USB-носитель, так и на CD.
Записать образ на флешку можно, например, вот так:
cat debian-preseed.iso /dev/sdX
где sdХ - флешка
Теперь, собственно, сам preseed-сценарий.
cat preseed.cfg
d-i debian-installer/locale string ru_RU.UTF8
d-i console-keymaps-at/keymap select ru
### Network configuration
d-i netcfg/enable boolean false
d-i netcfg/get_hostname string host_name
d-i netcfg/get_domain string domain.name
### Mirror settings
d-i mirror/country string enter information manually
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
### Partitioning
d-i partman-auto/method string regular
d-i partman-auto/disk string /dev/sda
d-i partman-auto/expert_recipe string \
boot-root:: \
1000 10000 1000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
label{root} \
\
500 10000 1000000000 ext4 \
$primary{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /var } \
\
128 2048 150% linux-swap \
$primary{ } method{ swap } format{ } \
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i partman/confirm boolean true
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
### Apt setup
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/use_mirror boolean false
# Additional repositories, local[0-9] available
d-i apt-setup/local0/repository string deb http://mirror.yandex.ru /debian jessie main
d-i apt-setup/local0/source boolean true
d-i apt-setup/local0/source string http://mirror.yandex.ru/debian jessie main
d-i debian-installer/allow_unauthenticated string true
### Account setup
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password MD5_password_hash
d-i passwd/make-user boolean true
d-i passwd/user-fullname string user
d-i passwd/username string user
d-i passwd/user-password-crypted password MD5_password_hash
### Base system installation
d-i base-installer/kernel/linux/initramfs-generators string yaird
### Boot loader installation
d-i grub-installer/skip boolean false
d-i lilo-installer/skip boolean true
d-i grub-installer/bootdev string default
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
### Package selection
tasksel tasksel/first multiselect standard, ssh-server
popularity-contest popularity-contest/participate boolean false
### Finishing up the first stage install
d-i finish-install/reboot_in_progress note
d-i preseed/late_command string cp -R /cdrom/extra/ /target/root/; \
cd /target; \
chmod +x /target/root/extra/postinst.sh; \
in-target /bin/bash /root/extra/postinst.sh;
Пароль рута и пользователя задан в виде хеша. Хеш получаем командой:
mkpasswd -m md5
Диск разбивается на 3 раздела: /, /var, и swap. ФС - ext4, Размер swap - не менее 128Мб, примерно 150% от объема установленной памяти. Остальные разделы - примерно пополам от объема диска.
После окончания установки в свежеустановленную (т.н. "target") систему копируется директория extra и в chroot-окружении запускается постинсталляционный скрипт postinst.sh. Что ему делать - решать вам. Например, доустановить дополнительный софт, произвести донастройку системы и т.п.
Все.
Литература
* [[https://wiki.debian.org/DebianInstaller/Preseed/EditIso How to modify an existing CD image to preseed d-i]]
* [[https://www.debian.org/releases/jessie/mips/apbs04.html.ru Автоматическая установка с помощью списка ответов]]
* [[https://www.debian.org/releases/etch/example-preseed.txt Example preseed]]
* [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=712907 Bug #712907]]
* [[https://fak3r.com/2011/08/18/howto-automate-debian-installs-.../ HOWTO automate Debian installs with preseed]]
URL: http://l8sae-rexhn1.livejournal.com/13806.html
Обсуждается: http://www.opennet.dev/tips/info/2939.shtml