Задача
Установить Debian Lenny на сервер, который находится на удалённой площадке.
На площадке уже есть один Linux-based сервер, и есть инженер, который может подключить новый сервер к сети и включить.
Решение
Загрузить образ netinstall по PXE и воспользоваться пакетом network-console для установки, используя ssh.
В Интернете как обычно много обломков документации, я попытался собрать всё это воедино.
На существующем сервере (для примера там будет установлен тот же Debian Lenny) нам потребуются dhcp3-server, tftpd-hpa и любой http-сервер.
Настраиваем dhcp3-server:
/etc/dhcp3/dhcpd.conf ddns-update-style none; option domain-name "local"; option domain-name-servers 192.168.1.1; default-lease-time 600; max-lease-time 7200; authoritative; log-facility local7; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.198.1.1; option domain-name-servers 192.168.1.1; option domain-name "local"; next-server 192.168.1.1; filename "pxelinux.0"; range 192.168.1.100 192.168.1.250; }
Опция next-server передаст PXE-загрузчику сетевой карты IP-адрес TFTP-сервера, а filename — имя файла с загрузчиком linux.
TFTP в особой настройке не нуждается, поэтому дальше нам нужно настроить конфиги загрузчика pxelinux, они находятся в файле /var/lib/tftpboot/pxelinux.cfg/default. Он должен быть такого вида:
default lenny-ssh prompt 0 label lenny-ssh kernel linux append initrd=initrd.gz locale=en_US console-keymaps-at/keymap=us netcfg/choose_interface=eth0 netcfg/get_hostname=debian netcfg/get_domain=local url=http://192.168.1.1/preseed.cfg
Внимание, в этом конфиге важны отступы!
При возникновении проблем, можно включить debug, добавив опцию DEBCONF_DEBUG=5
Файлы pxelinux.0, linux и initrd.gz берутся из репозитория, там же можно найти pxelinux.0.
Файл preseed.cfg должен быть таким:
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 network-console/password password r00tme d-i network-console/password-again password r00tme d-i preseed/early_command string anna-install network-console d-i anna/choose_modules string network-console tasksel tasksel/first multiselect none d-i pkgsel/include string openssh-server sudo screen d-i pkgsel/upgrade select full-upgrade
Во всех манах в него включают опции, связанные с настройками локали и сети, у меня это не заработало, возможно из-за того, что файл preseed.cfg подключается уже после настройки этих параметров, поэтому их нужно передать как опции initrd.
Собственно дальше включаем новую железку, смотрим в логах dhcp IP-адрес, который получил хост, и подключаемся к нему по ssh с логином installer и паролем r00tme
По аналогии можно настроить полностью автоматизированную установку, дополнив preseed.cfg. Лично мне такой вариант не удобен, т. к. очень часто на серверах имеется разная конфигурация дисковой подсистемы и единого «рецепта» не существует.
Ссылки
Официальная документация
Вторая официальная инструкция
Дока, которая помогла больше всего, на японском