Как установить Linux из сети
Буквально вчера хабраюзер Arceny поведал нам об установке дебиана с USB-flash. В статье он упомянул о возможности установки С помощью загрузки по сети (PXE boot)
, благодаря чему я решил наконец написать материал по созданию сервера pxe boot.
Повествование будет вестись на примере всё той же ОС — Debian (так что пути и команды у вас могут отличаться).
Для начала — поставим tftp-сервер. Смотрим доступные варианты (apt-cache search tftp | fgrep server
):
- atftpd
- dnsmasq
- tftpd
- tftpd-hpa
Сначала я поставил tftpd-hpa, т.к. о нём рассказывалось в мануале, с которого я начинал создание сервера. Затем я перешёл на atftpd, т.к. мне потребовалось логирование. Рассмотрим оба варианта:
tftpd-hpa:
Устанавливаем пакет, редактируем файл/etc/default/tftpd-hpa
, дабы демон знал, что ему стоит жить:
Создаём нужный каталог:#Defaults for tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot"
mkdir /var/lib/tftpboot
, и стартуем сервисinvoke-rc.d tftpd-hpa start
atftpd:
После установки обнаруживаем, что по-умолчанию этот сервис работает через inetd. Я, почему-то, не фанат этого метода, поэтому первым делом закомментировал соответствующую строку в/etc/inetd.conf
. Затем редактируем/etc/default/atftpd
:USE_INETD=false OPTIONS="--daemon --tftpd-timeout 1500 --no-multicast --retry-timeout 20 --logfile /var/log/atftpd.log --maxthread 100 --verbose=5 /var/lib/tftpboot"
--tftpd-timeout
— время жизни потока, при отсутствии запросов
--retry-timeout
— таймаут отдачи файла
у меня установлены большие таймауты, т.к. сервис транслируется в городскую локальную сеть, которая периодически прогибается от обилия абонентов, и не справляется с потоком запросов.
Ну и, как и в предыдущем пункте, — создаём нужный каталог:mkdir /var/lib/tftpboot
, и стартуем сервисinvoke-rc.d atftpd start
Теперь у нас есть tftp-сервер. Один шаг мы сделали :) Далее — настройка dhcp:
dhcp3:
В конфигурационный файл/etc/dhcp3/dhcpd.conf
добавляем информацию о загрузке:
Если tftpd установлен на том же сервере, что и dhcpd — директиву next-server можно опустить. И перезапускаем dhcp3-server:filename "pxelinux.0"; next-server
; invoke-rc.d dhcp3-server restart
dnsmasq:
В конфиг/etc/dnsmasq.conf
дописываем:
Опять же, если сервера tftp и dhcp совпадают — последние 2 атрибута можно не заполнять. Перезапускаем:dhcp-boot=pxelinux.0,<tftp-server-hostname>,<tftp-server-ip>
invoke-rc.d dnsmasq restart
Шаг второй пройден. Дальше — непосредственно настройка pxe-boot.
Идём на ftp.debian.org, выбираем каталог installer-*
, соответствующий необходимой архитектуре. Затем переходим в директорию current/images/netboot
внутри мы найдём файлы netboot.tar.gz
и gtk/netboot.tar.gz
— это файлы текстовой и графической установки соответственно. Выбираем понравившийся, качаем и распаковываем в /var/lib/tftpboot
.
Осталось убедиться, что зазрешён доступ на 69 UDP порт, и можно пользоваться прелестями сетевой установки.
В качестве бонуса прилагаю меню, которое получилось у меня в результате нескольких дней издевательств. В текущей конфигурации возможна установка нескольких ОС (установка Debian возможна как в текстовом, так и в графическом режиме), загрузка xUbuntu (через nfs), SystemRescueCD (через http-boot), memtest86 (через tftp). Установка всех ОС возможна для 2 архитектур — x86 и x64. Т.к. у меня лежит внутрисетевое зеркало репозиториев Ubuntu 8.10 и Debian 5.0, то установщики не предлают выбор репозитория, а автоматически сливают всё с него.
Архив /var/lib/tftpboot
(без малого 200мб), а так же — файлы конфигурации для установщиков Ubuntu и Debian: в них указаны репозитории + Ubuntu разбивается на Ubuntu, kUbuntu, xUbuntu, edUbuntu.
В этой конфигурации есть один большой минус, который мне лень исправить: при открытии меню подгружается порядка 70 файлов, бОльшая часть из которых не нужна пользователю. Что бы избавиться от этого — отображение подменю нужно перевести из подключения меню инклудами в их вызов через ядро vesamenu.c32
, которое идёт с pxeboot. Так же — не помешает очистить каталоги меню от дубликатов — большая часть конфигов для меню x64 и x86 совпадает.