Если вам нужно установить Debian на несколько машин, то, конечно, лучше загружать и устанавливать его по сети. Ну и хотелось бы, чтобы установка проходила в полностью автоматическом режиме. Об этом и будет статья. Основная часть статьи — это вольный пересказ вики дебиана, но так же здесь описано пара нюансов, о которых не сказано в вики, но без них установка не будет полностью автоматической.
Начну с того, что в сети должен присутствовать DHCP/TFTP сервер. Если его нет, то можно сначала вручную установить на одну из машин Debian и поднять на нём DHCP и TFTP. Для этого нужно установить пакеты dhcp3-server и tftpd-hpa. Для DHCP настроим раздачу адресов для нужной подсети (далее в примерах 192.168.2.0/24) и информации о том, какой образ должен грузиться по TFTP.
Пример простого конфигурационного файла dhcp3-server:
P. S. В примере в качестве DNS раздаётся Google Public DNS. Все сервера находятся в домене debianfarm.org, ну и для каждого желательно привязать статически IP и hostname по MAC, хотя это не обязательно. В примере это cделано только для одного хоста. Так же, TFTP сервер может находиться и на другом хосте. Для указания его адреса нужно добавить опцию next-server <сервер>;
После редактирования конфига нужно перезагрузить демон DHCP:
Теперь нужно скачать нужные файлы и положить в корень для TFTP (по-умолчанию /srv/tftp, хотя во время установки пакета tftpd-hpa будет предложено выбрать другой путь).
Отредактируем файл ./pxelinux.cfg/default в корне TFTP так, чтобы загрузчик syslinux не ждал реакции пользователя после загрузки, а сам через секунду начинал установку. Для этого значение опции timeout установим равное 1.
Теперь нужно добавить к параметрам ядра переменную для debian-installer для загрузки файла preseed. В этом файле хранятся значения переменных, которые обычно спрашиваются у пользователя во время установки. То есть, вы заранее создаёте файл с «ответами на вопросы» установщика Debian (о его содержимом позже). Но есть один нюанс, о котором не сказано в wiki: файл preseed загружается не сразу после запуска установщика, а только после того, как будут заданы пользователю некоторые вопросы, а это значит, что используя только файл preseed нельзя добиться полностью автоматической установки. Поэтому, ответы на вопросы установщика до загрузки preseed нужно передать параметрами загрузки ядра, которые потом подхватит установщик Debian. Впрочем, можно было бы передать ядру все нужные «ответы на вопросы» установщика, но вам не позволит это зделать ограничение на максимальную длинну строки запуска ядра.
Передавая значения этих переменных ядру можно опустить первую часть названия переменной (та, которая до слеша вместе со слешем). Но так делать нельзя для таких переменных, у которых вторая часть названия конфликтует с другой переменной, например:
console-keymaps-at/keymap нужно указывать полностью, так как есть ещё переменная console-keymaps-usb/keymap.
Конфиг syslinux теперь должен выглядеть примерно так:
P. S. Имя хоста здесь нужно задавать обязательно, но помните, что значение, позже полученное по DHCP, будет иметь высший приоритет. То же относится и к домену.
На хосте 192.168.2.1 должен быть поднят http-сервер. Если его нет, можно установить nginx, в конфигурационном файле в раздел http добавить что-то вроде этого:
Впрочем, файл preseed можно разместить где угодно (dropbox, etc.)
Теперь немного о содержимом файла preseed. Пример такого файла можно посмотреть здесь www.debian.org/releases/squeeze/example-preseed.txt. Вот так выглядит рабочий вариант файла:
Что-то комментировать здесь нет смысла, ибо каждая переменная дублирует предельно понятные диалоги установщика, по каждой можно посмотреть комментарий в примере.
Способ разметки диска был просто скопипащен из примера, так как он зависит от количества жёстких дисков, их размера и нужд сервера.
Ну вот и всё, теперь останется только включить те машины, на которые нужно установить Debian, всё остальное произойдёт «само».
Начну с того, что в сети должен присутствовать DHCP/TFTP сервер. Если его нет, то можно сначала вручную установить на одну из машин Debian и поднять на нём DHCP и TFTP. Для этого нужно установить пакеты dhcp3-server и tftpd-hpa. Для DHCP настроим раздачу адресов для нужной подсети (далее в примерах 192.168.2.0/24) и информации о том, какой образ должен грузиться по TFTP.
Пример простого конфигурационного файла dhcp3-server:
cat /etc/dhcp/dhcpd.conf | grep -v '#'
option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.2.0 netmask 255.255.255.0
{
range 192.168.2.10 192.168.2.120;
option routers 192.168.2.1;
option domain-name "debianfarm.org";
filename "pxelinux.0";
host firstserver
{
option host-name "firstserver";
hardware ethernet 08:00:27:91:DA:57;
fixed-address 192.168.2.21;
}
}
P. S. В примере в качестве DNS раздаётся Google Public DNS. Все сервера находятся в домене debianfarm.org, ну и для каждого желательно привязать статически IP и hostname по MAC, хотя это не обязательно. В примере это cделано только для одного хоста. Так же, TFTP сервер может находиться и на другом хосте. Для указания его адреса нужно добавить опцию next-server <сервер>;
После редактирования конфига нужно перезагрузить демон DHCP:
# /etc/init.d/isc-dhcp-server restart
Теперь нужно скачать нужные файлы и положить в корень для TFTP (по-умолчанию /srv/tftp, хотя во время установки пакета tftpd-hpa будет предложено выбрать другой путь).
# cd /srv/tftp
# wget mirror.yandex.ru/debian/dists/squeeze/main/installer-i386/current/images/netboot/netboot.tar.gz
# tar -xvf netboot.tar.gz
Отредактируем файл ./pxelinux.cfg/default в корне TFTP так, чтобы загрузчик syslinux не ждал реакции пользователя после загрузки, а сам через секунду начинал установку. Для этого значение опции timeout установим равное 1.
Теперь нужно добавить к параметрам ядра переменную для debian-installer для загрузки файла preseed. В этом файле хранятся значения переменных, которые обычно спрашиваются у пользователя во время установки. То есть, вы заранее создаёте файл с «ответами на вопросы» установщика Debian (о его содержимом позже). Но есть один нюанс, о котором не сказано в wiki: файл preseed загружается не сразу после запуска установщика, а только после того, как будут заданы пользователю некоторые вопросы, а это значит, что используя только файл preseed нельзя добиться полностью автоматической установки. Поэтому, ответы на вопросы установщика до загрузки preseed нужно передать параметрами загрузки ядра, которые потом подхватит установщик Debian. Впрочем, можно было бы передать ядру все нужные «ответы на вопросы» установщика, но вам не позволит это зделать ограничение на максимальную длинну строки запуска ядра.
Передавая значения этих переменных ядру можно опустить первую часть названия переменной (та, которая до слеша вместе со слешем). Но так делать нельзя для таких переменных, у которых вторая часть названия конфликтует с другой переменной, например:
console-keymaps-at/keymap нужно указывать полностью, так как есть ещё переменная console-keymaps-usb/keymap.
Конфиг syslinux теперь должен выглядеть примерно так:
cat ./debian-installer/i386/boot-screens/txt.cfg
default install
label install
menu label ^Install
menu default
kernel debian-installer/i386/linux
append vga=788 initrd=debian-installer/i386/initrd.gz locale=en_US country=BY language=en console-keymaps-at/keymap=en url=http://192.168.2.1/preseed.cfg hostname=debian domain=debianfarm.org -- quiet
P. S. Имя хоста здесь нужно задавать обязательно, но помните, что значение, позже полученное по DHCP, будет иметь высший приоритет. То же относится и к домену.
На хосте 192.168.2.1 должен быть поднят http-сервер. Если его нет, можно установить nginx, в конфигурационном файле в раздел http добавить что-то вроде этого:
server
{
listen 80;
server_name localhost;
location /
{
root /path/to/dir/with/preseed/;
}
}
Впрочем, файл preseed можно разместить где угодно (dropbox, etc.)
Теперь немного о содержимом файла preseed. Пример такого файла можно посмотреть здесь www.debian.org/releases/squeeze/example-preseed.txt. Вот так выглядит рабочий вариант файла:
d-i netcfg/choose_interface select auto
d-i netcfg/wireless_wep string
d-i mirror/country string manual
d-i mirror/http/hostname string mirror.yandex.ru
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
d-i passwd/make-user boolean false
d-i passwd/root-password password juststrongpassword
d-i passwd/root-password-again password juststrongpassword
d-i clock-setup/utc boolean true
d-i time/zone string US/Eastern
d-i clock-setup/ntp boolean true
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
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 boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-md/confirm boolean true
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
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server
popularity-contest popularity-contest/participate boolean false
d-i finish-install/reboot_in_progress note
Что-то комментировать здесь нет смысла, ибо каждая переменная дублирует предельно понятные диалоги установщика, по каждой можно посмотреть комментарий в примере.
Способ разметки диска был просто скопипащен из примера, так как он зависит от количества жёстких дисков, их размера и нужд сервера.
Ну вот и всё, теперь останется только включить те машины, на которые нужно установить Debian, всё остальное произойдёт «само».