Кажется, у каждого есть старенький ноутбук, который давно служит лишь для просмотра фильмов. У меня такой тоже есть — подключён по HDMI к телевизору и почти забыт. Однажды ради эксперимента я установил на него Linux, а через пару месяцев, когда понадобилось место, решил просто удалить линуксовый раздел. Затем я перезагрузил ноутбук и винда, конечно же, не загрузилась. После установки линукса, загрузчик GRUB переписал MBR, и теперь система не знала, откуда грузиться.
Что делать? Казалось бы, всё просто: берём флешку, загружаемся с Live CD, восстанавливаем MBR. Но флешки у меня не было. Можно было бы флешку одолжить, но хотелось решить проблему здесь и сейчас. Размышляя об этом, я залез в биос и обнаружил, что ноутбук поддерживает загрузку по сети через PXE…
Дилемма
Так как у меня на диске 2 операционных системы, я могу выбрать один из 2 вариантов:
Загрузить установку Windows и настроить MBR через diskpart
Установить линукс через PXE с новым GRUB
Первый вариант показался мне муторным и неочевидным, а вот поставить пару сервисов на линукс — наоборот. Поэтому я выбрал второй вариант и образ Ubuntu server netboot, который весит всего 64 МБ. У меня на основном ноутбуке стоит минт в дуалбуте, так что я все настраивал на нем.
Установка PXE
Загрузка по сети работает через PXE. Установка состоит глобально из 3 шагов:
Настройка интерфейса
Настройка tftp и DHCP-серверов
Загрузка по сети
Настройка интерфейса
Для загрузки через PXE нам нужно, чтобы компьютеры были в одной сети. Выяснять, какие сетевые карты поддерживают загрузку по WiFi я не стал, поэтому просто соединил компьютеры кабелем и создал новый интерфейс.
На Linux Mint 21 настройка сети должна выполняться через Network manager. Выведем список всех интерфейсов:
nmcli device status
Интерфейсу надо назначить IP-адрес. Я использовал подсеть 10.0.0.0. Подставьте в команду ниже свой IP-адрес и название интерфейса. Она создаст соединение:
sudo nmcli connection add type ethernet ifname enp0s31f6 con-name NewInterface ipv4.addresses 10.0.0.1/24 ipv4.dns «8.8.8.8» ipv4.method manual connection.autoconnect yes
Интерфейс создан и готов к работе, его состояние можно проверить командами ip a
или nmcli device status
.
Настройка tftp и DHCP серверов
Далее установим tftp сервер, чтобы он отдавал установочные файлы по сети:
sudo apt install tftpd-hpa apache2 syslinux isc-dhcp-server -y
Добавим в конфиг tftp папку с установочными файлами:
sudo sed -i 's|TFTP_DIRECTORY=.*|TFTP_DIRECTORY=»/opt/tftp»|' /etc/default/tftpd-hpa
Создадим папку и распакуем файлы системы в папку tftp:
sudo mkdir /opt/tftp
sudo cp /usr/lib/syslinux/modules/bios/* /opt/tftp/
wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz
sudo tar -xzvf netboot.tar.gz -C /opt/tftp/
А затем настроим собственно установку образа Ubuntu по сети в конфиге PXE. Для этого откроем конфиг файл PXE
sudo nano /opt/tftp/pxelinux.cfg/default
и приведем его к такому виду:
DEFAULT ubuntu
LABEL ubuntu
MENU LABEL ^Install Ubuntu Server 18
KERNEL ubuntu-installer/amd64/linux
APPEND vga=788 initrd=ubuntu-installer/amd64/initrd.gz
Перезапустим службу tftp для применения изменений.
sudo systemctl restart tftpd-hpa
Наш tftp сервер готов к работе.
Настройка DHCP
Теперь настроим DHCP сервер. Для этого отредактируем настройки сервера.
sudo nano /etc/dhcp/dhcpd.conf
Укажем в файле IP-адреса вашей подсети. Мой конфиг для подсети 10.0.0.0:
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.100;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
next-server 10.0.0.1;
filename «pxelinux.0»;}
Сохраним изменения и перезапустим службу. По умолчанию служба не выводит результата запуска поэтому я добавил в команду запрос статуса.
sudo systemctl restart isc-dhcp-server; sudo systemctl status isc-dhcp-server --no-pager
Если служба запустилась, значит сервер поднялся и работает.
На этом настройка серверов завершена. Осталось загрузиться по сети и установить систему.
Установка системы
Включаем компьютер и выбираем сеть первой в порядке загрузки. Компьютер получает IP-адрес и начинается установка системы.
Нажимаем далее до момента выделения места. Здесь выбираем Manual
. Будьте внимательны, неверный выбор может стереть весь диск.
Сейчас винда занимает диск целиком. Поэтому нам необходимо этот диск сжать, а потом установить Ubuntu на освободившееся место.
Открываем диск #1 и выбираем resize
. Указываем новый размер вместе со словом GB
и нажимаем Continue
. Затем выбираем свободное место как установочный диск:
Ну вот и все. Просто прокликиваем установку до конца, т.к. никакие дополнительные пакеты нам не нужны. Установщик перепишет GRUB и система снова будет загружаться.
Заключение
Все закончилось благополучно и ноутбук снова работает. Настройку PXE и остальных серверов сразу захотелось автоматизировать.. я захотел сделать плейбук для Ansible, но отказался от этой затеи, потому что узнал о существовании Fog project. Fog project — опенсорсная система, упрощающая установку по сети. Я её не пробовал, но выглядит несложно, а все нужные серверы идут в комплекте.
Комментарии (11)
NutsUnderline
12.11.2024 06:07велосипед, но довольно красивый. не очень понятно зачем ставить пакеты
apache2 syslinux
dhcp как бы понятно, но он ведь в роутере есть, только тогда бы уже к нему пришлось подключаться. более того, на роутере и tftp иногда есть.
появилась мысль а не сделать ли мне что то загрузочное на роутере...
hedger
12.11.2024 06:07Очень сложно, задачу "бутнуть железку по сети" прекрасно решает pixiecore: https://github.com/danderson/netboot/tree/main/pixiecore
Буквально скачать и запустить одной командой один бинарник. Универсальный к тому же.
Avonae Автор
12.11.2024 06:07ну это как раз тот случай, что про эту утилиту я не знал и нагуглить не смог)
JoshMil
12.11.2024 06:07Разве у граб основная часть не в мбр? Нажимаешь е и говоришь с чего дальше загрузится.
mgairat
12.11.2024 06:07Автор лукавит: все причины, заставившие грузиться с pxe, минуя флешку с livecd высосаны из пальца (что готовой флешки нет, поверю, что нет флешки вообще - вряд ли, а сделать livecd при наличии любой флешки и другого компа - процесс менее сложный, чем описан здесь). Просто челу захотелось поиграться с pxe на принцип, потому что интересно. У него получилось и он не поленился поделиться рабочим алгоритмом. Респект.
werter_l
12.11.2024 06:07Спасибо. Есть еще iventoy от автора ventoy. Позволяет с .iso прямо по сети загружаться.
QuarkDoe
Героическое преодоление препятствий созданных своими же руками.
geher
Зато в результате имеем простенькое описание настройки для загрузки через PXE.