Загрузка и установка Debian по сети для чайников

Если вам нужно установить 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, всё остальное произойдёт «само».
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 12
  • +3
    vlad.pro/p ещё один пример preseed'a. Авторазметка дисков, / + swap. Я его под виртуалки писал.
    • +1
      Тему лучше сменить на «Загрузка и установка Debian по протоколу Trivial FTP». Размер статьи и количество картинок не соответствует заявленной целевой аудитории ИМХО
      • +1
        Под термином «чайник» я имел в виду не полных чайников, а чайников именно в этом вопросе.
        • +1
          А насчёт темы: всё же делать акцент в названии на протокол TFTP не стоит, ибо в этом процессе ещё участвуют как минимум протоколы DHCP и PXE.
        • +2
          А я уже почти Убунту на чайник накатил :))
          • +1
            Интересно, а с устройством на mips какой вариант прокатит? Уж очень хочется к моему зомбоящику блэкджек и шлюх прикурутить.
            • +1
              хмм, «сеть для чайников» как-то связана с RFC 2324? :)
              • +1
                Дл Debian есть FAI и подобные этому штуки. Но кто бы что ни говорил, этот метод сродни pxe / tftp / kickstart, и на мой взгляд серьезнее, и может быть довольно гибок.
                • +1
                  О да, помню свое первое знакомство с Линуксом. Ставил Debian на ноутбук, который не умел грузиться с флешки и у которого был дохлый CD-ROM. Единственным вариантом был PXE. Усугублялось все еще и тем, что в пределах досягаемости были только Win компьютеры соседей по общежитию, которые были категорически против «установить на 5 минут линукс, чтобы все сделать». В итоге делал тоже самое но уже под Win — ставил какие-то TFTP-сервер и DHCP-сервер, потом распаковывал DVD образ и читал логи TFTP. Точно помню, что была проблема с симлинками, которые на NTFS системе распаковались неправильно — поборол копированием.
                  В итоге установил его, но сейчас уже повторить не смогу.
                  • +1
                    cat /etc/dhcp/dhcpd.conf | grep -v '#'
                    и так вы потеряете строки вроде:
                    filename «pxelinux.0»; # lalablabla

                    grep -v "^#"|grep -v "^$"
                    • 0
                      Верно. Я об этом знал, но так же я знал, что у меня небыло таких комментариев, поэтому я просто не задумывался об этом.
                      • +1
                        Уж тогда, имхо, проще и короче:
                        grep -Ev "^#|^$"

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.