У меня есть старенький ноутбук, который лежит под телевизором и подключен по HDMI. Он используется в основном для просмотров кино, а подключаюсь к нему я через Parsec.
Однажды ради эксперимента я установил на него Linux в надежде как-нибудь превратить его в домашний сервер, но не сложилось. Так он и висел, пока мне не понадобилось освободить место. Поэтому я просто удалил линуксовый раздел.... и потом перезагрузил компьютер.
Конечно же, винда не загрузилась. Потому что после установки линукса GRUB переписал MBR и теперь не мог найти систему, с которой надо грузиться.
Что делать? Очевидным решением было сделать флешку с Live CD и загрузиться с нее.. но у меня нет флешки. Погуглив другие решения, я обнаружил, что сетевая карта поддерживает установку через PXE и решил попробовать переустановить систему по сети. Благо, патчкорд дома нашёлся.
Что делаем?
Так как у меня на диске 2 операционных системы, я могу выбрать один из 2 вариантов установки по сети:
- Запуск установки Windows и настройка MBR через diskpart
- Установки линукса с новым GRUB
Первый вариант показался мне муторным и неочевидным, а вот второй — наоборот.
Для установки линукса я выбрал старенький убрас Ubuntu server 18 netboot, который весит всего 64 МБ. У меня на основном ноутбуке стоит минт в дуалбуте, так что я все настраивал на нем.
Настраиваем установку по сети
Установка состоит глобально из 3 шагов:
- Настройка интерфейса
- Настройка tftp и DHCP-серверов
- Загрузка по сети
Начнем с создания интерфейса.
Настройка интерфейса
Для загрузки через PXE нам нужно, чтобы компьютеры были в одной сети. Выяснять, какие сетевые карты поддерживают загрузку по WiFi я не стал, поэтому просто соединил компьютеры кабелем и создал новый интерфейс.
На Linux Mint 21 настройка сети должна выполняться через Network manager. Выведем список всех интерфейсов:
nmcli device status
У меня Ethernet интерфейс называется enp0s31f6
. Ему надо назначить 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 сервера
Далее установим 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. Откроем конфиг
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
Если служба запустилась, значит сервер поднялся и работает.
На этом настройка серверов завершена. Осталось загрузиться по сети и установить систему.
Установка системы через PXE
Включаем компьютер и выбираем сеть первой в порядке загрузки. Компьютер получает IP-адрес и начинается установка системы.
Нажимаем далее до момента выделения места. Здесь выбираем “Manual”. Будьте внимательны, неверный выбор может стереть весь диск.
Сейчас винда занимает весь диск. Поэтому сначала необходимо этот диск сжать, а потом установить Ubuntu на освободившееся место. Я выделил 8 гб, но вероятно хватит и меньшего количества:
Открываем диск #1 и выбираем resize
.Указываем новый размер вместе со словом GB
и нажимаем Continue. Затем выбираем свободное место как установочный диск:
Почти все. Просто прокликиваем установку до конца, т.к. никакие дополнительные пакеты нам не нужны. Установщик перепишет GRUB и система снова будет загружаться.
Заключение
Все закончилось благополучно и ноутбук снова работает. Настройку PXE и остальных серверов сразу захотелось автоматизировать.. я захотел сделать плейбук для Ansible, но отказался от этой затеи, потому что узнал о существовании Fog project. Fog project — опенсорсная система, упрощающая установку по сети. Я её не пробовал, но выглядит несложно, а все нужные серверы идут в комплекте.
Подписывайтесь на мой телеграм канал)
Как поменять порядок загрузки в GRUB
Заодно я решил изменить порядок загрузки, чтобы винда загружалась по умолчанию.
По умолчанию порядок загрузки такой:
Ubuntu → Advanced option for Ubuntu → Windows
Чтобы винда загружалась первой, отредактируем строчку в конфиге GRUB:
sudo nano /etc/default/grub
В строчке GRUB_DEFAULT=2
меняем 0 на 2.
Порядок загрузки GRUB считается с 0, т.е. Ubuntu — это 0, advanced — 1, а windows — 2. Примените изменения:
sudo update-grub
Теперь windows будет загружаться по умолчанию в GRUB.
Хороший гайд!
Если есть выход в интернет, то можно было попробовать загрузиться с образов у ребят с https://netboot.xyz/
У них, кстати, есть гайд как заселфхостить все это дело.
А если телефон на андроиде и есть рут то приложение drive droid позволяет грузить iso как с флешки
От прочтения заголовка нахлынули красноглазые воспоминания и бросило в холодный пот. Порадовался что давно таким не занимался. Статья отличная.
О да, когда-то давно показывал по офисам чорную магию установки операционки прямо из интернета, вытягивая лица у младых админов.
Сорри за душку, но из первых абзацев я понял, что раньше была венда, а потом второй системой приехал линукс и записал в mbr grub. Получился дуалбут в венду и линукс. Потом из под венды грохнулся раздел с линуксом и ноут перезагрузился. Теперь линукс недоступен, но grub остался в mbr и случилось что? Граб не смог загрузить венду? А как раньше грузил и при чем тут линукс? Если граб остался в mbr, то можно было через его cli граба загрузиться в венду, grub умеет грузить венду)) В общем как гайд "Как установить linux через PXE" круто, но мотивация не ясна))) Если бы заголовок был "Устанавливаем linux по PXE" возпросов бы не возникло ¯(ツ)/¯