Сервис PXE и NFS сервис

Posted by

Ранее я когда поднимал сервис PXE на базе Ubuntu 18.04 Server amd64 то весь дистрибутив выкачивался из сети интернет (desktop & server), а это не правильно. Если система разворачивается на несколько компьютеров то одни и те же файлы идут через интернет канал и так каждый раз.

Правильнее будет:

  • если deb-файлы будут закешированы
  • если загрузка образа будет с подмонтированного образа, а все не достающее через интернет соединение.

Вот сейчас я и разберу этот момент, т.е. Как к PXE сервису прописать/указать что образ разворачиваемой системы лежит на NFS ресурсе.

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

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

Шаг №1: Устанавливаю в систему пакет tftpd-hpa ответственный за службу через которую и будет работать PXE сервис:

ekzorchik@srv-bionic:~$ sudo apt-get install tftpd-hpa tree -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

Шаг №2: Создаю конфигурационный файл для работы сервиса 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"

Шаг №3: Перезапускаю сервис 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)

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

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

udp UNCONN 0 0 0.0.0.0:tftp 0.0.0.0:*

Шаг №5: Устанавливаю в системе теперь сервис NFS посредством которого буду подключать распакованный iso-образ к меню выбора установки через PXE дабы не выкачивать каждый раз дистрибутив из интернета:

ekzorchik@srv-bionic:~$ sudo apt-get install nfs-kernel-server nfs-common -y

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

ekzorchik@srv-bionic:~$ sudo nano /etc/exports

/media/nfs 172.33.33.0/24(rw,no_root_squash,no_subtree_check)

Проверяю файл на ошибки:

ekzorchik@srv-bionic:~$ sudo exportfs -ra

Шаг №6: Перезапускаю службу NFSсервиса:

ekzorchik@srv-bionic:~$ sudo systemctl restart nfs-server && sudo systemctl status nfs-server | head -n 5

● nfs-server.service - NFS server and services

Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)

Active: active (exited) since Sat 2018-11-24 23:59:27 MSK; 37ms ago

Process: 19262 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)

Process: 19261 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)

Шаг №7: Создаю структуру местонахождения распакованных образов редакции desktop & server на опубликованном nfs ресурсе:

ekzorchik@srv-bionic:~$ sudo mkdir /media/nfs{/server,/desktop}

Шаг №8: Выкачиваю либо из интернета дистрибутивы, либо я уже со своей рабочей станции передаю на эту систему iso образа и распаковываю по необходимым каталогам:

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

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

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

ekzorchik@srv-bionic:~$ sudo cp -fr /mnt/* /media/nfs/desktop/

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

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

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

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

ekzorchik@srv-bionic:~$ sudo cp -fr /mnt/* /media/nfs/server/

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

Шаг №9: Теперь создаю структуру загрузки файлов ядра и загрузчика в зависимости от выбора установки через PXE для главного каталога сервиса tftp:

ekzorchik@srv-bionic:~$ sudo mkdir -p /media/pxeboot/ubuntu{/server,/desktop}

Шаг №10:

Файлы ядра и загрузчика для Ubuntu 18.04 Desktop amd64:

ekzorchik@srv-bionic:~$ wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz

ekzorchik@srv-bionic:~$ sudo tar zxf netboot.tar.gz ./ubuntu-installer/amd64/linux ./ubuntu-installer/amd64/initrd.gz

ekzorchik@srv-bionic:~$ sudo cp ubuntu-installer/amd64/{linux,initrd.gz} /media/pxeboot/ubuntu/desktop/

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

total 53M

-rw-r--r-- 1 root root 45M Nov 27 21:11 initrd.gz

-rw-r--r-- 1 root root 7.9M Nov 27 21:11 linux

из данного архива каталога ubuntu-installer/amd64 нужно скопировать в каталог TFTP сервиса раздела desktop файлы ядра и загрузчика: linux & initrd.gz

Файлы ядра и загрузчика для Ubuntu 18.04 Server amd64:

ekzorchik@srv-bionic:~$ sudo cp /media/nfs/server/install/netboot/ubuntu-installer/amd64/linux /media/pxeboot/ubuntu/server/

ekzorchik@srv-bionic:~$ sudo cp /media/nfs/server/install/netboot/ubuntu-installer/amd64/initrd.gz /media/pxeboot/ubuntu/server/

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

total 53M

-r--r--r-- 1 root root 45M Nov 27 21:04 initrd.gz

-r--r--r-- 1 root root 7.9M Nov 27 21:04 linux

Шаг №11: Устанавливаю Webсервис Apache2 через который будет доступны файлы ответов устанавливаемых в автоматическом режиме для Desktop & Server релиза Ubuntu Bionic:

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

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

Шаг №12: Прописываю файлы загрузки которыми руководствуется загрузка по сети:

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

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/vesamenu.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/libcom32.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/libutil.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /media/pxeboot/

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

Шаг №13: Файлы автоматической настройки системы для Desktop & Server беру из своих предыдущих заметок, только главное не забыть изменить их именование и положить в указанные этой заметки места.

ekzorchik@srv-bionic:~$ tree /var/www/html/ubuntu/

/var/www/html/ubuntu/

├── desktop

│   └── preseed

│   └── desktop.seed

└── server

│   └──preseed

│   └── server.seed

4 directories, 2 files

Шаг №14: Важно не забыть на Mikrotik указать кто является сервисом PXE , об этом как делал я можно посмотреть в заметке где показывал как поднимается PXE-сервис на Ubuntu 18.04 Server перед переносом с тестовой системы на боевые развернутые на моем личном хранилище HP MicroServer Gen8 под ESXi 6.0

Шаг №15: Описываю меню при выборе которого будет либо возврат к загрузке текущего диска, установка Ubuntu 18.04 Desktop & Ubuntu 18.04 Server, все под архитектуру amd64

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

#Секция по умолчанию, если пользователь не выбрал никакого варианта или нажал клавишу Enter

DEFAULT vesamenu.c32

#Секция времени в секундах, в течении которого отображается загрузочное меню

TIMEOUT 600

#Секция отображения строки для выбора варианта загрузки (1 - view, 0 - hidden)

PROMPT 0

#Секция вывода на экран содержимого файла если DISPLAY boot.menu

#DISPLAY boot.menu

MENU TITLE PXE MENU

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

LABEL Boot from first hard disk

localboot 0x80

LABEL Ubuntu 18.04 Server (64-bit)

KERNEL ubuntu/server/linux

#INITRD ubuntu/server/initrd.gz

APPEND automatic-ubiquity url=http://172.33.33.25/ubuntu/server/preseed/server.seed initrd=ubuntu/server/initrd.gz vga=788 netboot=nfs nfsroot=172.33.33.25:/media/nfs/server quiet debian-installer/language=en debian-installer/country=US console-setup/ask_detect=false keyboard-configuration/layoutcode=us hostname=srv-bionic debian-installer/locale=en_US --

LABEL Ubuntu 18.04 Desktop (64-bit)

KERNEL ubuntu/desktop/linux

INITRD ubuntu/desktop/initrd.gz

APPEND url=http://172.33.33.25/ubuntu/desktop/preseed/desktop.seed netboot=nfs nfsroot=172.33.33.25:/media/nfs/desktop auto=true priority=critical debian-installer/locale=en_US keyboard-configuration/layoutcode=us ubiquity/reboot=true languagechooser/language-name=English countrychooser/shortlist=US localechooser/supported-locales=en_US.UTF-8 boot=casper automatic-ubiquity quiet splash noprompt noshell --

На рабочей системе где первым идет загрузка по сети (выставляет через Bios) появляется вот такое вот меню:

PXE меню выбора какую Ubuntu 18.04 устанавливать по сети

Тут все интуитивно понятно.

На заметку: по умолчанию согласно настройкам TIMEOUT = 600 задан отчет в течении которого я либо выбираю что-то либо дается команда грузиться с локального диска. Если передвинуть положение стрелками на клавиатуре отчет сбрасывается.

На заметку: Чтобы не было остановки на этапе boot: нужно в файле default сделать описание или вынести описание в предопределенный файл boot.menu

ekzorchik@srv-bionic:~$ sudo nano /media/pxeboot/boot.menu

:::::::::BOOT MENU:::::::::

1. Load "Boot from first hard disk"

2. Install "Ubuntu 18.04 Server (64-bit)"

:::::::::::::::::::::::::::

На заметку: Только в файле default нужно будет изменить метку выбора меня на 1 и 2, т. е. LABEL Boot from first hard disk заменить на LABEL 1 и только тогда все заработает.

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

#Секция вывода на экран содержимого файла если DISPLAY boot.menu

DISPLAY boot.menu

Boot-меню выбора что устанавливать через PXE-сервис

 

Мне не нравится пока этот метод, прикольно когда выбор представлен собственным меню, а потому удаляю boot.menu и запись в файле default комментирую до лучших времен:

ekzorchik@srv-bionic:~$ sudo rm /media/pxeboot/boot.menu

На заметку: Почему-то то работает установка имени хоста через файл ответов, а иногда нет и приходится ее прописывать не через seed файл, а через меню выбора что устанавливать. После как нибудь себе поправлю.

Вот собственно и все, у меня получилось, что дистрибутив устанавливается по сети, а недостающие пакеты из сети интернета. Хороший и практический опыт я кстати приобрел поставив себе вот такую вот задачу, как на базе Ubuntu 18.04 Server amd64 развернуть PXE с подгрузкой образов с NFS сервиса. На этом я прощаюсь, будут дополнения к этой заметке, будут и новые заметки, с уважением автор блога Олло Александр aka ekzorchik.