Тема сетевой установки Ubuntu уже поднималась на наших страницах. Сегодня мы поговорим о том, как создать универсальный сервер сетевой установки, позволяющий устанавливать различные варианты ОС и, при необходимости, быстро изменять набор доступных систем.
В статье Михаила Пинаева рассказывалось, как создать простой сервер сетевой установки (PXE-сервер) на базе уже имеющегося в сети роутера, в нашем материале пойдет речь о создании автономного сервера. В тоже время все приведенные рекомендации можно использовать для обоих решений, так как они затрагивают исключительно содержимое каталога TFTP сервера, откуда производится сетевая загрузка клиентов.

Для реализации данного решения мы использовали Ubuntu Server 10.04.3 LTS 64-бита, на котором установлен mc и ssh, а также настроена сеть и доступ в интернет через наш роутер. Также подразумевается, что читатель умеет создавать папки, файлы, редактировать и сохранять их, а также владеет навыком монтирования CD дисков в среде командной строки Ubuntu.
Прежде всего установим необходимые пакеты, это tftpd-hpa для создания TFTP сервера и apt-cacher-ng для организации локального кэша пакетов, чтобы их не приходилось каждый раз скачивать из сети.
sudo apt-get install tftpd-hpa apt-cacher-ngОба пакета не требуют настройки и начинают работать сразу, тонкая настройка apt-cacher-ng рассматривалась в статье М. Пинаева.
Теперь настроим DHCP сервер, чтобы он сообщал клиентам параметры сетевой загрузки, для этого на роутере в /etc/dnsmasq.conf добавим строку:
dhcp-boot=pxelinux.0,ubuntu-tftp,10.0.0.124где ubuntu-tftp сетевое имя PXE сервера, а 10.0.0.124 его IP-адрес. Перезапустим DHCP сервер:
sudo service dnsmasq restartВернемся к нашему PXE серверу. Допустим, мы хотим иметь возможность сетевой установки любой версии Ubuntu 11.10 как 32-х так и 64-х битной архитектуры. Что нам для этого понадобится? Специальные образы для сетевой установки, их можно взять с alternate дисков (в каталоге install/netboot) или скачать отдельно (i386 и amd64).
Перейдем в каталог /var/lib/tftpboot в котором будут размещаться наши файлы для сетевой загрузки. В его корне разместим файл pxelinux.0, его можно взять из любого дистрибутива, он везде одинаков. Будьте внимательны, не перепутайте файл с одноименной символической ссылкой, имеющей нулевой размер. Затем создайте две папки, скажем i386 и amd64, где будут размещаться загрузочные образы для разных архитектур. В каждый из них скопируйте файлы linux и initrd.gz с дисков соответствующих архитектур.
Следующим шагом будет создание загрузочного меню, создайте в /var/lib/tftpboot каталог pxelinux.cfg а в нем файл default, в котором поместите следующее содержимое:
DEFAULT 1TIMEOUT 30PROMPT 1DISPLAY boot.menuLABEL 1KERNEL i386/linuxappend vga=788 initrd=i386/initrd.gz --quietLABEL 2KERNEL amd64/linuxappend vga=788 initrd=amd64/initrd.gz --quiet
Все пути в данном файле указываются от корня TFTP сервера, т.е. от /var/lib/tftpboot. Файл содержит две основные секции LABEL, в которых указываются пути к загрузочным образам разных архитектур. Названия секций лучше выбирать цифровыми, так как их придется вводить вручную при загрузке. Коротко рассмотрим основные параметры:
- DEFAULT - секция выбираемая по умолчанию, если пользователь не выбрал никакого варианта или просто нажал Enter.
- TIMEOUT - время в секундах, в течении которого показывается загрузочное меню.
- PROMPT - отображает строку для ввода варианта загрузки (1 - отображать, 0 - скрыть)
- DISPLAY - содержимое файла для вывода на экран.
Выйдем на уровень выше (в корень TFTP) и создадим там файл boot.menu следующего содержания:
------BOOT MENU------1. Install Ubuntu 11.10 32-bit (default)2. Install Ubuntu 11.10 64-bit---------------------
В принципе здесь можно написать все, что вы хотите, главное дать пользователю понять, что для выбора нужного варианта он должен ввести номер нужного пункта и нажать Enter.
Если все сделано правильно, то вы должны получить следующую структуру каталогов:

Теперь попробуем загрузиться с нашего сервера, для этого сетевая карта вашего компьютера должна поддерживать загрузку по сети и эта опция должна быть активирована в BIOS. Вначале компьютер получает с DHCP сервера необходимые параметры загрузки, скачивает и запускает загрузчик pxelinux, который выводит на экран наше меню и ждет дальнейших действий.
В зависимости от нашего выбора будет загружен образ для соответствующей архитектуры и начнется процесс установки, который ничем не отличается от установки с alternate диска. Но на некоторых моментах мы остановимся.
После того как вы выберете зеркало для загрузки файлов, система предложит вам указать прокси. Здесь мы вводим http://10.0.0.124:3142 - адрес и порт на которых работает apt-cacher-ng, это позволит не скачивать второй раз одни и те же пакеты и избавит от необходимости прописывать службу кэширования пакетов в /etc/apt/apt.conf на рабочих станциях.
Следующий раз наше внимание понадобится при выборе устанавливаемого ПО. Здесь, кроме Ubuntu Desktop, рабочего стола по умолчанию (Unity), можно выбрать Kubuntu, Xubuntu, LXDE и т.п., получив на выходе установку соответствующей версии Ubuntu, или выбрать сразу несколько рабочих столов и выбирать их перед входом в систему. Также сразу можете выбрать иное необходимое ПО, хотя никто не мешает установить его позже.
Далее следует запастись терпением, если это первая ваша установка, так как время загрузки пакетов из сети зависит от скорости вашего канала и может занять длительное время.
В дальнейшем вы можете легко добавлять или изменять варианты предлагаемые вашим сервером, для этого нужно создать папку с файлами linux и initrd.gz для сетевой загрузки нужной системы и добавить новую секцию в pxelinux.cfg/default, также не забудьте отредактировать загрузочное меню в boot.menu.
Дополнительные материалы:

Во! то что нужно спасибо. сейчас сяду попробую
при рестарте dnsmasq вылетает failed to create listening socket: Адрес уже используется
У вас где-то ошибка в конфиге. Давайте разбираться. Если вы уже настроили PXE сервер по статье Михаила Пинаева, то вам надо было начинать с абзаца "Вернемся к нашему PXE серверу. " Все что раньше нужно пропустить, так как TFTP сервер у вас уже есть и DHCP настроен.
пробывад и по его статье и по вашей. При настройке по его статье выдается ошибка в строчке tftp-boot=pxelinux.0
при замене на dhcp-boot (или на ваши параметры) вылетает ailed to create listening socket: Адрес уже используется
Ну так вы разберитесь. Если делаете по той статье нужно найти и раскомментировать одни строки, по этой -другую (и всего одну). Внимательно проверьте конфигурационный файл, где-то в синтаксисе у вас ошибка.
Спасибо разобрался, лишнюю строчку раскоментил.
Настроил по вашей статье с маленькой поправкой - адрес записал сервера. (т.е у меня один сервер он же DNS)
Еще можно вопрос? При попытке установится с сети пишет "Обнаружена ошибка при попытке использовать указанное зеркало Ubuntu"...Что это?
Выберите другое зеркало или проверьте соединение с интернет.
на всех зеркалах такая песня интернет работает, версия серверной ОС с версией устанавливаемой должна совпадать или не обязательно?
А сервер с apt-cacher-ng в интернет доступ имеет? Кстати как он у вас организован?
сервером с apt-cacher-ng это та же машина настроенная по статье Настройка роутера (NAT + DHCP + Squid) (инет на нем есть так как он инет и раздает) папка repository/apt-cacher-ng создана в папке var как прописано по умолчанию дальше загрузочное меню сделано по образцу Меню вываливается без проблем, этапы проходят до выбора зеркала - а далше пишет ошибку использования зеркала (еще интересный момент - при попытке записи Ubuntu 10.04 после выбора строчки меню пропадает изображение (монитор рисует нет сигнала как при неправильной настройке частоты в винде или просто висит цветовая полоса) при 11.04, 11.10 таких проблем нет)
на сервере стоит 10.04 Sever
Проверьте доступность зеркал с сервера (подробнее о зеркалах здесь: https://wiki.ubuntu.com/Mirrors) в любом случае у вас что-то с сетевыми настройками.
По поводу экрана, то здесь два варианта: не указали опцию vga=788 или несовместимое железо.
он при установке к зеркалу через какой порт обращается 8080 (если мимо apt-cacher-ng)?
По умолчанию через 80 (HTTP), но может и через прокси, для этого нужно явно указать порт. Вообще проверьте как у вас работает NAT, похоже что у вас доступ только через прокси.
сейчас у меня NAT выглядит так:
#!/bin/sh
# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Разрешаем трафик на loopback-интерфейсе
iptables -A INPUT -i lo -j ACCEPT
# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
# Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.1:8081
я так понимаю надо добавить правило для порта 3142
#Разрешаем входящие подключения на 3142
iptables -A FORWARD -i eth0 -p tcp --dport 3142 -j ACCEPT
# Форвардинг 3142
iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 tcp -m--dport 3142 -j DNAT --to-destination 10.0.0.1:3142
iptables -t nat -A POSTROUTING -p tcp --dst 10.0.0.1 --dport 3142
Как-то так (поправьте если ни так)
У вас все должно работать и без доп. правил. Тем более у вас все расположено на роутере, т.е. должно выходить в интернет напрямую. На 8081 у вас случаем не DansGuardian работает?
Он самый, куда без него на школьном роутере
Да, он....
у меня еще маленькая просьба, если будет время, опишите установку на ваш сервер еще и LTSP,
Попробуйте временно без него, временно уберите последнюю строку, которая заворачивает http на прокси.
закоментил строчку - все так же, с 10.04 с видео проблема решилась при замене vga=788 на vga=normal но к нету все равно не цепляется
У вас NAT вообще работает? На клиентских машинах интернет есть?
на клиентских машинах нет работает - более того - гружу свою тестовую машину с LiveCD инет есть
Тогда проверяйте доступ из локалки к архивам установки, что-то у вас где-то закрыто.
на тех машинах где стоит бунта обновление проходит нормально - но из сети (не через apt-cacher-ng) как еще можно проверить?
А через apt-cacher-ng пробовали?
Эт называется тормоз - написанно же вводить в стандартном виде (http не написал перед адресом прокси)
Извините за чайниковоть, но еще один вопрос, что делать, если текстовый установщик загрузился но при определении оборудования не находит сетевую плату, как следствие установка прерывается
В вашем случае будет проще заменить сетевую карту на поддерживаемую.
У меня 15 типовых машин - 15 сетевых карт на новые машины - мне на это денег никто не даст :(
А что за сетевухи?
JMicron PCI express adapter - сейчас еверест скачаю - точную модель посмотрю
Вы лучше название мат. платы скажите, карты, как я понял, интегрированные.
материнка ECS G41T-R3 на 775 сокете
сетевая интегрированная
JMC260 10/100 Fast Ethernet NIC, меняйте на совместимую карту, эти работать не будут.
то есть если даже я установлю систему с диска сетевуха у меня все равно не запустится?
Нет, вам надо будет скачать (а перед этим еще найти) модуль драйвера, собрать его и запустить.
Только что "развлекались" с Atheros AR8151, пришлось переставлять диск с системой в другой системник (т.к. в этом не было ни одного PCI слота), ставить gcc, собирать модуль и возвращать все это обратно.
жалко, с моей квалификацией это скорее всего выполнить не удастся, а машины на линух переводить надо - придется им пока без интернета и локальной сети обходится
Кроме того, после каждого обновления ядра вам придется собирать и подключать модуль заново. Проще и дешевле купить совместимые карты, например на RTL8139, сейчас им цена около 120-150 руб.
Самое интересное - после установки системы - воткнул свою PCI карточку, встроенная сетевуха преспокойно заработала
Извиняюсь за флуд, но не могу просмотреть ответ Уварова к моему предыдущему комментарию. Можно написать ответ сюда.
Не работает сеть :( иными словами, меня не видят по сети. В чем может быть проблема? Что смотреть?
Что значит "не работает сеть" и вас "не видят" по сети? Опишите подробнее: откуда, куда и как вы пытаетесь соединяться и что при этом получается.