Как настроить PXE сервис на Ubuntu Bionic

Posted by

Долой флешки, dvd-ромы — уже все устройства давно поддерживают удаленную установку по сети.

Вот на этой ноте, точнее мне как-то понадобилось дома вместо ранее использовавшихся ригов для майнига взгромоздить не Windows , а ось Ubuntu 18.04 Desktop но тут я столкнулся, то нет USB носителя, то нет привода, а если внешний привод есть, но нет болванок. Но во всех компьютерах (по крайней мере что есть у меня дома и на работе) имеется поддержка загрузки системы по сети.

Раз у меня есть мое хранилище HP MicroServer Gen8 то пусть в дополнении к сервисам которые обслуживают мои нужды будет еще один — это PXE сервис для удаленной инсталляции.

Но прежде чем разворачивать сервис на одной из VM моего хранилища все действия должны быть отрепетированы, а значит мне на помощь приходит Ubuntu 18.04 Server развернутая внутри моего полигона Virtualbox.

ekzorchik@srv-bionic:~$ hg clone --insecure https://172.33.33.7/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ apt-cache search tftpd-hpa

tftpd-hpa - HPA's tftp server

Устанавливаю в систему пакет tftpd-hpa:

ekzorchik@srv-bionic:~$ sudo apt-get install tftpd-hpa -y

ekzorchik@srv-bionic:~$ sudo mkdir /media/pxeboot

ekzorchik@srv-bionic:~$ sudo chmod -R 777 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo chown -R nobody:nogroup /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup

Создаю конфигурационный файл для работы сервиса tftpd-hpa:

ekzorchik@srv-bionic:~$ sudo nano /etc/default/tftpd-hpa

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/media/pxeboot"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="--secure --create --verbose"

Перезапускаю сервис tftpd-hpa:

ekzorchik@srv-bionic:~$ sudo service tftpd-hpa restart && sudo service tftpd-hpa status | head -n 5

● tftpd-hpa.service - LSB: HPA's tftp server

Loaded: loaded (/etc/init.d/tftpd-hpa; generated)

Active: active (running) since Thu 2018-11-22 21:51:00 MSK; 57ms ago

Docs: man:systemd-sysv-generator(8)

Process: 4208 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS)

Проверяю, что сервис tftp ожидает подключение:

ekzorchik@srv-bionic:~$ ss -l4 | grep tftp

udp UNCONN 0 0 0.0.0.0:tftp 0.0.0.0:*

Копирую с основной системы на данную образ Ubuntu 18.04 Server amd64

ekzorchik@navy:~$ scp /media/ekzorchik/iso/ubuntu-18.04.1-server-amd64.iso ekzorchik@172.33.33.25:/home/ekzorchik

Монтирую образ Ubuntu 18.04 Server который был передан с основной системы в каталог /mnt:

ekzorchik@srv-bionic:~$ sudo mount -o loop ubuntu-18.04.1-server-amd64.iso /mnt

mount: /mnt: WARNING: device write-protected, mounted read-only.

Копирую файлы netboot в каталог откуда будет стартовать загрузка системы при текущем настраиваемом PXE сервиса на данной системе:

ekzorchik@srv-bionic:~$ sudo cp -fr /mnt/install/netboot/* /media/pxeboot/

ekzorchik@srv-bionic:~$ ls /media/pxeboot/

ldlinux.c32 pxelinux.0 pxelinux.cfg ubuntu-installer version.info

Затем устанавливаю в систему Webсервис где будут располагаться файлы ответов посредством которых система будет установлены если в ней будет выставлена установка по сети:

ekzorchik@srv-bionic:~$ sudo apt-get install apache2 -y

Создаю каталог с именем ubuntu, а внутри него подкаталог для server на Webсервисе откуда будет устанавливать образ Ubuntu Server:

ekzorchik@srv-bionic:~$ sudo mkdir -p /var/www/html/ubuntu/server/preseed

ekzorchik@srv-bionic:~$ sudo nano /var/www/html/ubuntu/server/preseed/oem.seed

#General configuration

d-i auto-install/enable boolean true

d-i debconf/priority string critical

d-i pkgsel/update-policy select none

#Localization

d-i debian-installer/locale string en_US

d-i debian-installer/language string en

d-i debian-installer/country string US

d-i console-setup/ask_detect boolean false

#hostname

d-i netcfg/get_hostname string srv-bionic

#HW clock

d-i clock-setup/utc boolean true

#time zone

d-i time/zone string Europe/Moscow

#Use a http proxy

d-i mirror/http/proxy string

#The Debian release to install

d-i mirror/suite string bionic

#user setup

d-i passwd/user-fullname string Ubuntu 18.04 test user

d-i passwd/username string ekzorchik

d-i passwd/user-password password 712mbddr@

d-i passwd/user-password-again password 712mbddr@

d-i user-setup/allow-password-weak boolean true

d-i user-setup/encrypt-home boolean false

d-i live-installer/enable boolean false

#Partitioning

d-i partman-auto/disk string /dev/sda

d-i partman-auto/method string lvm

d-i partman-lvm/device_remove_lvm boolean true

d-i partman-lvm/confirm boolean true

d-i partman-lvm/confirm_nooverwrite boolean true

d-i partman-auto-lvm/guided_size string max

d-i partman-auto/choose_recipe select atomic

d-i partman-partitioning/confirm_write_new_label boolean true

d-i partman/choose_partition select finish

d-i partman/confirm boolean true

d-i partman/confirm_nooverwrite boolean true

#Software selection

d-i tasksel/first multiselect standard

d-i preseed/late_command string apt-install tmux mercurial vim build-essential multipath-tools lsscsi lvm2 htop net-tools openssh-server

d-i finish-install/reboot_in_progress no

Создаю файл где будет указано поведение загрузки системы:

ekzorchik@srv-bionic:~$ sudo nano /media/pxeboot/pxelinux.cfg/default

# D-I config version 2.0

# search path for the c32 support libraries (libcom32, libutil etc.)

path ubuntu-installer/amd64/boot-screens/

include ubuntu-installer/amd64/boot-screens/menu.cfg

default ubuntu-installer/amd64/boot-screens/vesamenu.c32

prompt 0

timeout 0

label Ubuntu 18.04 Server

kernel ubuntu-installer/amd64/linux

append url=http://172.33.33.25/ubuntu/server/preseed/oem.seed vga=normal initrd=ubuntu-installer/amd64/initrd.gz auto=true priority=critical ramdisk_size=16432 root=/dev/rd/0 rw -

# загрузка системы с диска

label Boot from first hard disk

localboot 0x80

ekzorchik@srv-bionic:~$ sudo chown -R nobody:nogroup /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/

ekzorchik@srv-bionic:~$ sudo umount /mnt

Теперь нужно на сервисе DHCP указать порядок загрузки при обращении широковещательным запросом кто является сервисом удаленной загрузки. В моем случае сервис DHCP развернут на базе оборудования Mikrotik RB2011UiAS-2HnD

ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.100

[ekzorchik@router] > ip dhcp-server network print

[ekzorchik@router] > ip dhcp-server network set numbers=0 next-server=172.33.33.25 boot-file-name=pxelinux.0

[ekzorchik@router] > quit

Это сейчас все кажется простым в настройке, а до этого я думал что нужна вот такая запись и что я делал чтобы понять почему она не работает:

[ekzorchik@router] > ip dhcp-server option add code=66 name=tftp66 value="'172.33.33.25'"

Но в момент когда пытался по сети запустить установку Ubuntu системы получал ошибку: PXE-E32: TFTP open timeout

Включив расширенное логирование:

winbox —host:port - user&pass — System — Logging — Add

  • Topics: dhcp
  • Prefix: _dhcp
  • Action: memory

увидел в логах на Mikrotik запись: _dhcp: Unknown(66) = AC-21-21-19

Ошибочная запись 66 для PXE на Mikrotik

и тут я задумался, ведь запись 66 я использовал когда настраивал загрузку телефонов (Cisco CP-7925G), а тут у меня другое.

В роли подопытной системы, чтобы проверить что загрузка по сети отработает я использую Virtualbox по аналогии, как я создавал систему когда тестировал самосборный образ для Destkop & Server. В свойствах виртуальной машины выставляю что первым загрузку следует производить по сети, а уже далее «Оптический диск», «Диск».

Virtualbox VM: первым идет загрузка по сети

Нажимаю ОК окна настройки виртуальной машины UT и запускаю загрузку и после того, как VM обратилась широковещательным запросом со шлюза получила направление на развернутую систему где поднят PXE сервис. И вот меня встречает мое окно с именованием выбора загрузки Ubuntu 18.04 Server:

Install → это обычная загрузка в интерактивном режиме

Выбираю меню загрузки Ubuntu 18.04 Server

 

 

Выбираю пункт меню «Ubuntu 18.04 Server» и нажимаю клавишу Enter, ожидаю и вот сразу же в дело вступает файл ответов.

На заметку: Важно чтобы в системы которая загружается с PXE сервиса был доступ в интернет.
По окончании я получаю установленную ось Ubuntu 18.04 Server amd64 выполненную через PXE сервис при загрузке по сети. В следующей заметке я разберу, как объединить/настроить загрузку обоих систем (Desktop & Server).

Если перезагрузиться и не убрать загрузку по сети первым пунктом то опять выйду на меню выбора, либо опять запустить установку, но система установлена — как же быть, а загрузиться в диска вот для этого я добавил меню «label Boot from first hard disk» выбираю его и нажимаю клавишу Enter и система ожидает авторизации:

Ubuntu 18.04 Server успешно установлена через PXE сервис

 

Проверяю, а установлены дополнительные пакеты которые указаны у меня в oem.seed:

ekzorchik@ubuntu:~$ dpkg -l | grep "tmux\|mercurial\|htop" | awk '{print $1"\t"$2}'
ii htop
ii mercurial
ii mercurial-common
ii tmux
Ответ да они успешно установлены.

Данная заметка это не сколько построенная заметка в лабораторный условиях, но и также проверенная на физическом компьютере.

На этом я прощаюсь, заметка по разворачиванию PXE сервиса на базе Ubuntu 18.04 выполнена и теперь ее можно перенести на мое хранилище HP MicroServer Gen8 где развернуты мои боевые сервисы, такие как: Asterisk, DokuWiki, Mercurial(WEB), OwnCloud, NAS. С уважением, автор Олло Александр aka ekzorchik.