Долой флешки, 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 я использовал когда настраивал загрузку телефонов (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 '{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.