Ubuntu → Установка Ubuntu по сети (DHCP, PXE, boot-menu) / На примере Ubuntu 14.04
Уже довольно давно, мной была написана статья о сетевой установке Ubuntu, по локальной сети, без использования различных носителей, только загрузка по PXE и все. В этот раз я решил обновить статью и сделать ее ближе к современным реалиям, а главное, расширить функционал. Все будет выполняться на примере Ubuntu 14.04!
Под разные требования, должны быть и разные решения, главная загвоздка в том, что зачастую, нам требуется не одна операционная система, а несколько. Вот я и решил написать на эту тему статью. С предыдущей статьей, можно ознакомиться по ссылке, Установка Ubuntu по сети.
Главная идея заключаться в том что у нас появится возможность, выбирать какую операционную систему мы будем устанавливать, а также ее разрядность, фактически, у нас появится меню загрузки, после загрузки системы по локальной сети.
Все это мы реализуем, на примере, только что вышедшей Ubuntu 14.04
Для тех кто не понял, все затевается ради того чтобы появилась возможность выбора, какую операционную систему устанавливать, а также ее разрядность т.е. должно появиться меню где будут представлены все ОС доступные для установи по сети, которое будет иметь следующий вид:
1) Настроенный шлюз, для примера, воспользуйтесь статьей: Настройка шлюза локальной сети, на базе Ubuntu
2) DHCP сервер, для примера, можно воспользоваться статьёй: Настройка DHCP сервера под управлением Ubuntu
3) Настроенный TFTP сервер, загружающий PXE загрузчик, воспользоваться статьёй: Настройка PXE Boot меню с мемтестом и паролями
Опционально!
3) Дополнительным, но не обязательным моментом, может быть настроенный DNS сервер, пример есть в статье Настройка DNS сервера для локальной сети
Предполагается что у вас настроен шлюз, DHCP, TFTP севрер, а также добавлено меню загрузки PXE т.к. на этом моменте я останавливаться не буду.
Т.к. файл сетевого загрузчика у нас лежат в директории директории /var/lib/tftpboot/ откуда они и подтягиваются TFTP сервером, то в ней нам нужно создать директорию Ubuntu, чтобы в нее сложить файлы с дисков установки, сделаем это:
В директории Uubntu мы создаем дополнительные директории для файлов загрузчика инсталлятора ОС для x86 разрядных систем и ADM64-соответсвенно.
Теперь нам требуется скачать установочный диск посмотреть можно тут mirror.yandex.ru/ubuntu-releases/14.04/
Мы качнем версию х86 для сервера т.к. она меньше весит
После завершения закачки ISO образа, нам нужно его смонтировать, чтобы извлечь нужные нам файлы, а для этого, в директории /media мы создадим директорию iso, давайте сделаем это:
Монтируем образ диска в эту директорию:
Система выдаст что диск смонтирован в режиме чтения:
Нас интересуют 2 файла linux и initrd.gz, которые нам нужно забрать и перенести в директорию /var/lib/tftpboot/ubuntu/x86
давайте скопируем их:
Все, установочный образ нам больше не нужен, для начала отмонтируем его из директории iso:
После этого ISO-образ можно удалить.
Похожие действия проводим для образа установочного диска с разрядностью x64, я не буду расписывать что и куда, просто приведу листинг команд, действия все те же, только пути немного отличаются, там прописано amd64
С файлами установки закончили, теперь настроим PXE меню загрузки.
Для начала добавим пункт меню с названием Linux Install, для этого нам нужно отредактировать файл:
В конец файла добавим запись:
Как видно из записи, у нас будет другая страница с выбором дисирибутивов для установки, создадим ее:
Добавим в нее названия пунктов для загрузки с возможностью выбора операционной системы для установки, пока это будет Ubuntu 14.04 x86 и amd64 архитектуры:
На этом настройка закончена, можно подключать клиентскую машину и пытаться загрузиться по PXE, в результате после загрузки системы по сети, у нас появится меню такого вида:

Выбираем то что мы хотим установить, установка начнется автоматически, ну а далее только следовать указаниям инсталятора системы.
Другие операционные системы добавляются аналогичным способом.
На этом, я пожалуй и закончу на сегодня.
Ну и как всегда, если возникли вопросы прошу в комментарии, нашли ошибку пишите в личку ну или на почту.
Под разные требования, должны быть и разные решения, главная загвоздка в том, что зачастую, нам требуется не одна операционная система, а несколько. Вот я и решил написать на эту тему статью. С предыдущей статьей, можно ознакомиться по ссылке, Установка Ubuntu по сети.
Главная идея заключаться в том что у нас появится возможность, выбирать какую операционную систему мы будем устанавливать, а также ее разрядность, фактически, у нас появится меню загрузки, после загрузки системы по локальной сети.
Все это мы реализуем, на примере, только что вышедшей Ubuntu 14.04
Для тех кто не понял, все затевается ради того чтобы появилась возможность выбора, какую операционную систему устанавливать, а также ее разрядность т.е. должно появиться меню где будут представлены все ОС доступные для установи по сети, которое будет иметь следующий вид:
Ubuntu_14.04x86
Ubuntu_14.04amd64
Для работы нам понадобится:
Обязательно!1) Настроенный шлюз, для примера, воспользуйтесь статьей: Настройка шлюза локальной сети, на базе Ubuntu
2) DHCP сервер, для примера, можно воспользоваться статьёй: Настройка DHCP сервера под управлением Ubuntu
3) Настроенный TFTP сервер, загружающий PXE загрузчик, воспользоваться статьёй: Настройка PXE Boot меню с мемтестом и паролями
Опционально!
3) Дополнительным, но не обязательным моментом, может быть настроенный DNS сервер, пример есть в статье Настройка DNS сервера для локальной сети
Предполагается что у вас настроен шлюз, DHCP, TFTP севрер, а также добавлено меню загрузки PXE т.к. на этом моменте я останавливаться не буду.
Переходим к настройке инсталлируемой системы.
Для начала мы создадим пункт установки для Ubuntu 14.04x86, для чего нам понадобится установочный диск соответствующей разрядности. Нам его необходим скачать и примонтировать, для того чтобы извлечь файлы загрузчика инасталятора системы.Т.к. файл сетевого загрузчика у нас лежат в директории директории /var/lib/tftpboot/ откуда они и подтягиваются TFTP сервером, то в ней нам нужно создать директорию Ubuntu, чтобы в нее сложить файлы с дисков установки, сделаем это:
mkdir /var/lib/tftpboot/ubuntu
В директории Uubntu мы создаем дополнительные директории для файлов загрузчика инсталлятора ОС для x86 разрядных систем и ADM64-соответсвенно.
mkdir /var/lib/tftpboot/ubuntu/x86
mkdir /var/lib/tftpboot/ubuntu/amd64
Теперь нам требуется скачать установочный диск посмотреть можно тут mirror.yandex.ru/ubuntu-releases/14.04/
Мы качнем версию х86 для сервера т.к. она меньше весит
wget http://mirror.yandex.ru/ubuntu-releases/14.04/ubuntu-14.04-server-i386.iso
После завершения закачки ISO образа, нам нужно его смонтировать, чтобы извлечь нужные нам файлы, а для этого, в директории /media мы создадим директорию iso, давайте сделаем это:
mkdir /media/iso
Монтируем образ диска в эту директорию:
sudo su
mount ubuntu-14.04-server-i386.iso /media/iso/
Система выдаст что диск смонтирован в режиме чтения:
mount: warning: /media/iso/ seems to be mounted read-only.Идем забирать загрузчик и ядро инсталятора:
cd /media/iso/install/netboot/ubuntu-installer/i386/
Нас интересуют 2 файла linux и initrd.gz, которые нам нужно забрать и перенести в директорию /var/lib/tftpboot/ubuntu/x86
давайте скопируем их:
cp linux /var/lib/tftpboot/ubuntu/x86
cp initrd.gz /var/lib/tftpboot/ubuntu/x86
Все, установочный образ нам больше не нужен, для начала отмонтируем его из директории iso:
umount /media/iso/
После этого ISO-образ можно удалить.
Похожие действия проводим для образа установочного диска с разрядностью x64, я не буду расписывать что и куда, просто приведу листинг команд, действия все те же, только пути немного отличаются, там прописано amd64
wget http://mirror.yandex.ru/ubuntu-releases/14.04/ubuntu-14.04-server-amd64.iso
mount ubuntu-14.04-server-amd64.iso /media/iso/
cd /media/iso/install/netboot/ubuntu-installer/amd64/
cp linux /var/lib/tftpboot/ubuntu/amd64
cp initrd.gz /var/lib/tftpboot/ubuntu/amd64
umount /media/iso/
С файлами установки закончили, теперь настроим PXE меню загрузки.
Настройка меню загрузки PXE
Для начала добавим пункт меню с названием Linux Install, для этого нам нужно отредактировать файл:
nano /var/lib/tftpboot/pxelinux.cfg/default
В конец файла добавим запись:
LABEL Linux Install
MENU LABEL ^Linux Install
KERNEL vesamenu.c32
APPEND pxelinux.cfg/linux.menu
Как видно из записи, у нас будет другая страница с выбором дисирибутивов для установки, создадим ее:
nano /var/lib/tftpboot/pxelinux.cfg/linux.menu
Добавим в нее названия пунктов для загрузки с возможностью выбора операционной системы для установки, пока это будет Ubuntu 14.04 x86 и amd64 архитектуры:
LABEL Install Ubuntu 14.04x86
MENU label ^Ubuntu 14.04x86
KERNEL ubuntu/x86/linux
APPEND initrd=ubuntu/x86/initrd.gz
LABEL Install Ubuntu 14.04amd64
MENU label ^Ubuntu 14.04amd64
KERNEL ubuntu/amd64/linux
APPEND initrd=ubuntu/amd64/initrd.gz
На этом настройка закончена, можно подключать клиентскую машину и пытаться загрузиться по PXE, в результате после загрузки системы по сети, у нас появится меню такого вида:

Выбираем то что мы хотим установить, установка начнется автоматически, ну а далее только следовать указаниям инсталятора системы.
Другие операционные системы добавляются аналогичным способом.
На этом, я пожалуй и закончу на сегодня.
Ну и как всегда, если возникли вопросы прошу в комментарии, нашли ошибку пишите в личку ну или на почту.
21 комментарий
Плюс в том что в таком варианте можно инсталлировать и Kubuntu, Lubuntu и т д, пакеты догружаются из сети.
Я продвинулся дальше и настроил запуск Live-CD для Ubuntu. Для этого пришлось использовать доступную папку на сервере где установлен антивирус (центр управления, доступ через веб-сервер), что бы не поднимать отдельный.
Этим можно дополнить статью или описать процес в отдельной.
Лучше сделать в виде отдельной статьи, чтобы было ее проще найти, а я сделаю ссылку из основной статьи.
Кстати, выложить образ через http не удавалось, установщик убунты не имел поддержки такого типа размещения.
Все машины были с 1Гб+ RAM и проблем с запуском не было. Да и не долго на гигабите происходила загрузка.
Думаю, ваше решение имеет право на жизнь, но оно, реально, сложное.
ДНС нужен!
3) Дополнительным, но не обязательным моментом, может быть настроенный DNS сервер, пример есть в статье Настройка DNS сервера для локальной сети
вот это пункт я пропустил, его тоже настраивать?
ставьте dnsmasq, bind слишком большой
а при установки ubuntu дохожу до проверки зеркала архива ubntu затем выдает ошибку проблема с зеркалом архива убунту
Apr 23 17:40:59 nirian-HP-655-Notebook-PC avahi-daemon[639]: Registering new address record for fe80::2a0:c6ff:fe00:0 on eth1.*.
Apr 23 17:41:06 nirian-HP-655-Notebook-PC ntpdate[6187]: adjust time server 91.189.94.4 offset 0.044609 sec
Apr 23 18:17:01 nirian-HP-655-Notebook-PC CRON[6379]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 23 18:19:05 nirian-HP-655-Notebook-PC kernel: [10942.562585] r8169 0000:03:00.0 eth0: link down
Apr 23 18:19:07 nirian-HP-655-Notebook-PC kernel: [10945.117404] r8169 0000:03:00.0 eth0: link up
Apr 23 18:19:25 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:25 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:25 nirian-HP-655-Notebook-PC dhcpd: unexpected ICMP Echo Reply from 94.100.180.200
Apr 23 18:19:25 nirian-HP-655-Notebook-PC dhcpd: unexpected ICMP Echo Reply from 94.100.180.200
Apr 23 18:19:26 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:26 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:28 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:28 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:28 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:28 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: Can't create new lease file: Permission denied
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: Wrote 3 leases to leases file.
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: DHCPREQUEST for 192.168.10.12 (192.168.10.1) from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: DHCPACK on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:32 nirian-HP-655-Notebook-PC in.tftpd[6385]: tftp: client does not accept options
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: DHCPREQUEST for 192.168.10.12 (192.168.10.1) from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:32 nirian-HP-655-Notebook-PC dhcpd: DHCPACK on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:19:45 nirian-HP-655-Notebook-PC kernel: [10982.819925] r8169 0000:03:00.0 eth0: link down
Apr 23 18:19:47 nirian-HP-655-Notebook-PC kernel: [10984.406970] r8169 0000:03:00.0 eth0: link up
Apr 23 18:20:42 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:42 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: unexpected ICMP Echo Reply from 94.100.180.200
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: unexpected ICMP Echo Reply from 94.100.180.200
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPDISCOVER from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPOFFER on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPREQUEST for 192.168.10.12 (192.168.10.1) from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPREQUEST for 192.168.10.12 (192.168.10.1) from 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPACK on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
Apr 23 18:20:43 nirian-HP-655-Notebook-PC dhcpd: DHCPACK on 192.168.10.12 to 00:d0:59:9c:a6:09 via eth0
кусок лога
зашел в лог машины на которую ставлю последняя строчка лога
mirror does not support the specified release (trusty) пробовал разные зеркала, проверял через нет доступно все в чем может быть причина? В сети нашел только вот это myx.ostankin.net/linux-net-install