Ранее я когда поднимал сервис 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) появляется вот такое вот меню:
Тут все интуитивно понятно.
На заметку: по умолчанию согласно настройкам 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.menu
и запись в файле default комментирую до лучших времен:
ekzorchik@srv-bionic:~$ sudo rm /media/pxeboot/boot.menu
На заметку: Почему-то то работает установка имени хоста через файл ответов, а иногда нет и приходится ее прописывать не через seed файл, а через меню выбора что устанавливать. После как нибудь себе поправлю.
Вот собственно и все, у меня получилось, что дистрибутив устанавливается по сети, а недостающие пакеты из сети интернета. Хороший и практический опыт я кстати приобрел поставив себе вот такую вот задачу, как на базе Ubuntu 18.04 Server amd64
развернуть PXE с подгрузкой образов с NFS сервиса. На этом я прощаюсь, будут дополнения к этой заметке, будут и новые заметки, с уважением автор блога Олло Александр aka ekzorchik.