Как настроить PXE сервис на Ubuntu Bionic
Долой флешки, 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
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
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
d-i auto-install/enable boolean true
d-i debconf/priority string critical
d-i pkgsel/update-policy select none
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
d-i netcfg/get_hostname string srv-bionic
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i mirror/http/proxy string
#The Debian release to install
d-i mirror/suite string bionic
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
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
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
# search path for the c32 support libraries (libcom32, libutil etc.)
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
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
увидел в логах на Mikrotik запись: _dhcp: Unknown(66) = AC-21-21-19
и тут я задумался, ведь запись 66 я использовал когда настраивал загрузку телефонов (Cisco CP-7925G), а тут у меня другое.
В роли подопытной системы, чтобы проверить что загрузка по сети отработает я использую Virtualbox по аналогии, как я создавал систему когда тестировал самосборный образ для Destkop & Server. В свойствах виртуальной машины выставляю что первым загрузку следует производить по сети, а уже далее «Оптический диск», «Диск».
Нажимаю ОК окна настройки виртуальной машины UT и запускаю загрузку и после того, как VM обратилась широковещательным запросом со шлюза получила направление на развернутую систему где поднят PXE сервис. И вот меня встречает мое окно с именованием выбора загрузки Ubuntu 18.04 Server:
Install → это обычная загрузка в интерактивном режиме
Выбираю пункт меню « Ubuntu 18.04 Server » и нажимаю клавишу Enter, ожидаю и вот сразу же в дело вступает файл ответов.
На заметку: Важно чтобы в системы которая загружается с PXE сервиса был доступ в интернет.
По окончании я получаю установленную ось Ubuntu 18.04 Server amd64 выполненную через PXE сервис при загрузке по сети. В следующей заметке я разберу, как объединить/настроить загрузку обоих систем ( Desktop & Server ).
Если перезагрузиться и не убрать загрузку по сети первым пунктом то опять выйду на меню выбора, либо опять запустить установку, но система установлена — как же быть, а загрузиться в диска вот для этого я добавил меню « label Boot from first hard disk » выбираю его и нажимаю клавишу Enter и система ожидает авторизации:
Проверяю, а установлены дополнительные пакеты которые указаны у меня в oem.seed:
ekzorchik@ubuntu:~$ dpkg -l | grep «tmux\|mercurial\|htop» | awk »
ii htop
ii mercurial
ii mercurial-common
ii tmux
Ответ да они успешно установлены.
Данная заметка это не сколько построенная заметка в лабораторный условиях, но и также проверенная на физическом компьютере.
На этом я прощаюсь, заметка по разворачиванию PXE сервиса на базе Ubuntu 18.04 выполнена и теперь ее можно перенести на мое хранилище HP MicroServer Gen8 где развернуты мои боевые сервисы, такие как: Asterisk, DokuWiki, Mercurial(WEB), OwnCloud, NAS. С уважением, автор Олло Александр aka ekzorchik.
От ekzorchik
Всем хорошего дня, меня зовут Александр. Я под ником — ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог — это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору.