Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC и Intel Xeоn
  • Серверы с AMD Ryzen и Intel Core i9
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • GPU
  • Распродажа
  • VPS
    GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • Распродажа
    Маркетплейс
    Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Кластеры
    Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита L3-L4 от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • AI-чат-бот Lite
  • О нас
  • Работа в HOSTKEY
  • Панель управления серверами и API
  • Дата-центры
  • Сеть
  • Тест скорости
  • Специальные предложения
  • Отдел продаж
  • Для реселлеров
  • Гранты для специалистов по Data Science
  • Гранты для научных проектов и стартапов
  • Документация и Частые вопросы
  • Новости
  • Блог
  • Оплата
  • Документы
  • Сообщите о нарушении
  • Looking Glass
  • 20.07.2023

    PXE деплой ESXI-Foreman

    server one
    HOSTKEY
    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Автор: Автор — Султан Усманов, специалист отдела DevOps компании Hostkey

    Сегодня в большинстве компаний широко применяется виртуализация в инфраструктуре, что позволяет размещать различные сервисы компании и эффективно использовать ресурсы физических серверов. В связи с этим мы приняли решение внедрить виртуализацию VMware ESXi. При выборе метода установки мы рассмотрели два варианта: Legacy и UEFI.

    Для реализации развертывания мы воспользовались Foreman — инструментом с открытым исходным кодом, предназначенным для управления полным жизненным циклом систем. Он обеспечивает возможность настройки и мониторинга физических и виртуальных серверов.

    Режим установки Legacy

    Рассмотрим установку на примере гипервизора VMware ESXi 8.0. Была создана операционная система:

    Затем прикреплены шаблоны:

    Описание по шаблонам

    Шаблон — default_provision_ESXi. Основан на примере с официального сайта Foreman (раздел Create the Kickstart Template) и доработан под наш деплой:

    <%#
    kind: provision
    name: default_provision_ESXi
    model: ProvisioningTemplate
    oses:
    - ESXi
    -%>
    #Accept VMware License agreement
    accepteula
    # Set the root password
    rootpw <%= host_param('password')%>
    # Install ESXi on the first disk (Local first, then remote then USB)
    install --firstdisk=local --overwritevmfs --ignoreprereqwarnings --ignoreprereqerrors --forceunsupportedinstall
    # Set the keyboard
    #keyboard French
    #vmserialnum --esx=PUT IN YOUR LICENSE KEY
    # Set the network
    network --bootproto=dhcp
    # reboot the host after installation is completed
    reboot
    %pre --interpreter=busybox 
    #esxcli network firewall set --enabled false
    # run the following command only on the firstboot
    %firstboot --interpreter=busybox
    sleep 10
    # enable & start remote ESXi Shell (SSH)
    vim-cmd hostsvc/enable_ssh
    vim-cmd hostsvc/start_ssh
    # enable & start ESXi Shell (TSM)
    vim-cmd hostsvc/enable_esx_shell
    vim-cmd hostsvc/start_esx_shell
    # supress ESXi Shell shell warning — Thanks to Duncan (http://www.yellow-bricks.com/2011/07/21/esxi-5-suppressing-the-localremote-shell-warning/)
    esxcli network firewall set --enabled false
    esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1
    #FQDN="${HostName}.${SuffixDNS}"
    # set static IP + default route + DNS
    sleep 10
    esxcli network ip interface ipv4 set --interface-name=vmk0 --type=static --ipv4=<%= host_param('ip')%> --netmask=<%= host_param('netmask')%>
    esxcli network ip route ipv4 add --gateway <%= host_param('gateway')%> --network 0.0.0.0/0
    esxcli network ip dns server add --server <%= @host.subnet.dns_primary %>
    # Set VLAN ID
    #esxcli network vswitch standard portgroup set --portgroup-name "Management Network" --vlan-id 50
    #Disable ipv6
    esxcli network ip set --ipv6-enabled=0
    # set suffix and FQDN host configuration
    esxcli system hostname set --fqdn=<%= @host.name %>
    esxcli network ip dns search add --domain=<%= @host.name %>}
    #user creation
    esxcli system account add -i user -p <%= host_param('password')%> -c <%= host_param('password')%>
    esxcli system permission set --id user -r Admin
    # NTP Configuration (thanks to http://www.virtuallyghetto.com)
    cat > /etc/ntp.conf << __NTP_CONFIG__
    restrict default kod nomodify notrap noquerynopeer
    restrict 127.0.0.1
    server <%= host_param('ntp_server1')%>
    server <%= host_param('ntp_server2')%>
    __NTP_CONFIG__
    /sbin/chkconfig ntpd on
    # rename local datastore to something more meaningful
    vim-cmd hostsvc/datastore/rename datastore1 "Local — $(hostname -s)"
    esxcli network firewall set --enabled true
    # restart a last time
    reboot

    Этот шаблон делает следующее:

    1. Задает пароль для пользователя root.
    2. Устанавливает систему на первый локальный диск, игнорирует ошибки.
    3. Прописывает настройки сети.
    4. Указывает имя сервера.
    5. Добавляет дополнительный пользователь с правами root и паролем.
    6. Настраивает серверы времени.
    7. Изменяет имя хранилища.
    8. Настраивает файрвол.

    Шаблон — default_PXELinux_ESXi. Основан на примере с официального сайта Foreman (раздел Create provisioning templates) и доработан под наш деплой:

    TIMEOUT 10
    DEFAULT default_PXELinux_ESXI
    
    LABEL default_PXELinux_ESXI
    		KERNEL boot/esxi/8.0/mboot.c32
    		APPEND -c boot/esxi/8.0/boot2.cfg ks=http://адрес сервере откуда мы забираем файл с автонастройкам/unattended/provision
    	IPAPPEND 2

    Содержимое шаблона:

    • наименование шаблона;
    • расположение загрузчика;
    • расположение конфигурационного файла.

    При рассмотрении варианта установки Legacy-образа операционной системы мы разместили его по пути /var/lib/tftpboot/boot/esxi/8.0. Прежде чем перенести распакованный образ системы на наш Foreman, необходимо извлечь содержимое из ISO-образа. Кроме того, важно переименовать все файлы и папки в нижний регистр, так как установщик может не обнаружить файлы, если их названия содержат заглавные буквы. Особое внимание следует уделить конфигурационному файлу boot.cfg, который должен быть отформатирован следующим образом, чтобы обеспечить корректную работу:

    bootstate=0
    title=Loading ESXi installer
    timeout=5
    prefix=
    kernel=./b.b00
    kernelopt=runweasel cdromBoot  allowLegacyCPU=true
    modules=./jumpstrt.gz --- ./useropts.gz --- ./features.gz --- ./k.b00 --- ./uc_intel.b00 --- ./uc_amd.b00 --- ./uc_hygon.b00 --- ./procfs.b00 --- ./vmx.v00 --- ./vim.v00 --- ./tpm.v00 --- ./sb.v00 --- ./s.v00 --- ./atlantic.v00 --- ./bcm_mpi3.v00 --- ./bnxtnet.v00 --- ./bnxtroce.v00 --- ./brcmfcoe.v00 --- ./cndi_igc.v00 --- ./dwi2c.v00 --- ./elxiscsi.v00 --- ./elxnet.v00 --- ./i40en.v00 --- ./iavmd.v00 --- ./icen.v00 --- ./igbn.v00 --- ./intelgpi.v00 --- ./ionic_en.v00 --- ./irdman.v00 --- ./iser.v00 --- ./ixgben.v00 --- ./lpfc.v00 --- ./lpnic.v00 --- ./lsi_mr3.v00 --- ./lsi_msgp.v00 --- ./lsi_msgp.v01 --- ./lsi_msgp.v02 --- ./mtip32xx.v00 --- ./ne1000.v00 --- ./nenic.v00 --- ./nfnic.v00 --- ./nhpsa.v00 --- ./nmlx5_co.v00 --- ./nmlx5_rd.v00 --- ./ntg3.v00 --- ./nvme_pci.v00 --- ./nvmerdma.v00 --- ./nvmetcp.v00 --- ./nvmxnet3.v00 --- ./nvmxnet3.v01 --- ./pvscsi.v00 --- ./qcnic.v00 --- ./qedentv.v00 --- ./qedrntv.v00 --- ./qfle3.v00 --- ./qfle3f.v00 --- ./qfle3i.v00 --- ./qflge.v00 --- ./rdmahl.v00 --- ./rste.v00 --- ./sfvmk.v00 --- ./smartpqi.v00 --- ./vmkata.v00 --- ./vmksdhci.v00 --- ./vmkusb.v00 --- ./vmw_ahci.v00 --- ./bmcal.v00 --- ./clusters.v00 --- ./crx.v00 --- ./elx_esx_.v00 --- ./btldr.v00 --- ./esx_dvfi.v00 --- ./esx_ui.v00 --- ./esxupdt.v00 --- ./tpmesxup.v00 --- ./weaselin.v00 --- ./esxio_co.v00 --- ./loadesx.v00 --- ./lsuv2_hp.v00 --- ./lsuv2_in.v00 --- ./lsuv2_ls.v00 --- ./lsuv2_nv.v00 --- ./lsuv2_oe.v00 --- ./lsuv2_oe.v01 --- ./lsuv2_sm.v00 --- ./native_m.v00 --- ./qlnative.v00 --- ./trx.v00 --- ./vdfs.v00 --- ./vds_vsip.v00 --- ./vmware_e.v00 --- ./vsan.v00 --- ./vsanheal.v00 --- ./vsanmgmt.v00 --- ./tools.t00 --- ./xorg.v00 --- ./gc.v00 --- ./imgdb.tgz --- ./basemisc.tgz --- ./resvibs.tgz --- ./esxiodpt.tgz --- ./imgpayld.tgz
    build=8.0.1-0.0.21495797
    updated=0

    Процесс добавления и настройки операционной системы также описан на сайте Foreman в разделе ESXi installation in Legacy BIOS mode. Несмотря на рекомендации разработчиков, мы не правили bootloader и не создавали отдельный вариант установки. Конфигурационный файл — /usr/share/foreman/app/models/concerns/pxe_loader_support.rb.

    def all_loaders_map(precision = 'x64')
      {
        "None" => "",
        "PXELinux BIOS" => "pxelinux.0",
        "PXELinux UEFI" => "pxelinux.efi",
        "PXELinux Alt BIOS" => "syslinux386/pxelinux.0", # Add this line
        ...

    В нашем проекте мы применили универсальный загрузчик, который совместим со всеми операционными системами. Однако в разделе Family при создании операционной системы мы указали RedHat. Благодаря этому решению нам не потребовалось вносить какие-либо изменения или модификации:

    Содержимое файла в Legacy: /var/lib/tftpboot/pxelinux.cfg/ MAC-адрес сервера:

    TIMEOUT 10
    DEFAULT default_PXELinux_ESXI
    
    LABEL default_PXELinux_ESXI
    		KERNEL boot/esxi/8.0/mboot.c32
    		APPEND -c boot/esxi/8.0/boot2.cfg ks=http://адрес сервере откуда мы забираем файл с автонастройкам/unattended/provision
    	IPAPPEND 2

    После перезагрузки сервера начинается процесс установки:

    Затем система обращается к серверу, на котором размещен файл kickstart (ks=http://адрес_сервера/unattended/provision). Этот файл содержит автонастройки, указанные в разделе APPEND файла default_PXELinux_ESXI.

    Если оборудование поддерживается гипервизором ESXi, операционная система будет установлена без ошибок и произойдет перезагрузка. В результате получим полностью настроенную операционную систему с двумя пользователями, которых мы указали в шаблоне default_provision_ESXi:

    Установка в UEFI-режиме

    Операционная система VMware ESXi создается один раз и может быть использована для установки как в режиме Legacy, так и в режиме UEFI. На ранее представленных скриншотах мы указали использование шаблона Grub2_Default, но не дали описание по нему. Он служит для проверки и загрузки системы в режиме UEFI. Foreman выполняет проверку имени операционной системы: если оно содержит название ESXi, передаются необходимые параметры в виде переменных и происходит загрузка LiveCD.

    После загрузки LiveCD выполняется скрипт, содержащий следующие проверки:

    1. Тип диска.
    2. Поиск диска с наименьшим размером, но не менее 20 ГБ.
    3. Проверка наличия логического тома (logical volume) или группы томов (volume group) на диске. Если такие настройки присутствуют, они удаляются для очистки диска.

    После подготовки диска система создает раздел для размещения UEFI-загрузчика. Ниже приведена часть скрипта:

        parted -s /dev/${INST_DRIVE} mklabel gpt mkpart fat32 1MiB 1GiB set 1 esp on
    	EFI_PART=$(lsblk -l | grep "${INST_DRIVE}" | grep part | awk '{print $1}')
    	mkdir -p /mnt/{iso,efipart,wim}
    	wget ${medium_uri}/${branch}/esxi${os_version}pe.iso
    	mount -o loop esxi${os_version}pe.iso /mnt/iso
    	mkfs.fat -F32 /dev/$EFI_PART
    	mount /dev/$EFI_PART /mnt/efipart
    	mkdir -p /mnt/efipart/EFI/redhat/
    	mkdir -p /mnt/efipart/kickstart
    	rsync -r /mnt/iso/ /mnt/efipart/
    
    	cp /mnt/efipart/EFI/BOOT/BOOTX64.EFI /mnt/efipart/EFI/redhat/grubx64.efi
    	cp /mnt/efipart/EFI/BOOT/CRYPTO64.EFI /mnt/efipart/EFI/redhat/crypto64.efi
    	cp /mnt/efipart/EFI/BOOT/SAFEBOOT.EFI /mnt/efipart/EFI/redhat/safeboot.efi
    	cp /mnt/efipart/boot.cfg /mnt/efipart/EFI/redhat/boot.cfg
    
    	curl -s "http://${foreman_fqdn}/unattended/provision?token=${foreman_token}" >> /mnt/efipart/kickstart/ks.cfg
    	tar -czf /mnt/efipart/kickstart.gz --directory=/mnt/efipart kickstart
    
    	###sed -i "s#kernelopt=runweasel cdromBoot#kernelopt=ks=file://kickstart/ks.cfg#g" /mnt/efipart/EFI/redhat/boot.cfg ##for 7.3
    	sed -i "s#^kernelopt.*#kernelopt=ks=file://kickstart/ks.cfg#g" /mnt/efipart/EFI/redhat/boot.cfg
    	sed -ie 's#^modules.*$#& --- /kickstart.gz#g' /mnt/efipart/EFI/redhat/boot.cfg
    
    	umount /mnt/iso
    	rm esxi${os_version}pe.iso
    	/usr/bin/env wget --no-proxy --quiet --output-document=/dev/null --no-check-certificate "http://${foreman_fqdn}/unattended/built?token=${foreman_token}"
    	umount /mnt/efipart
    sync
    fi
    reboot
    
    Что делает этот скрипт:
    1. На диске создает раздел FAT32 размером 1 Гб.
    2. Создает точки монтирования: iso, efipart, wim в разделе /mnt.
    3. Копирует с нашего зеркала ISO-образ с ESXi 8.0 и монтирует его в /mnt/iso.
    4. Создает раздел FAT32 и монтирует в раздел /mnt/efipart.
    5. Для корректной работы загрузчика Foreman создается структура директорий: /mnt/efipart/EFI/redhat/ и /mnt/efipart/kickstart.
    6. Копируется содержимое ISO-образа в /mnt/efipart/.
    7. В ранее созданные директории копируются:
      • cp /mnt/efipart/EFI/BOOT/BOOTX64.EFI /mnt/efipart/EFI/redhat/grubx64.efi — EFI-загрузчик;
      • cp /mnt/efipart/EFI/BOOT/CRYPTO64.EFI /mnt/efipart/EFI/redhat/crypto64.efi — криптографический модуль;
      • cp /mnt/efipart/EFI/BOOT/SAFEBOOT.EFI /mnt/efipart/EFI/redhat/safeboot.efi — файл проверки безопасной загрузки. Машина отказывается загружать какой-либо драйвер или приложение UEFI, если загрузчик операционной системы не имеет криптографической подписи;
      • cp /mnt/efipart/boot.cfg /mnt/efipart/EFI/redhat/boot.cfg — конфигурационный файл с параметрами загрузки, указанными модулями, параметрами ядра.
    8. Скачивает с нашего Foreman заранее прописанный шаблон default_provision_ESXi со всем настройками сервера и помещает его в файл /mnt/efipart/kickstart/ks.cfg.
    9. Запаковывает в архив с названием kickstart.gz и помещает его вместе со стандартными модулями ESXI в раздел UEFI/mnt/efipart.
    10. Подменяет настройки kernelopt со стандартных — runweasel cdromBoot на указание нашего kickstart файла ks.cfg в boot.cfg.
    11. Добавляет в boot.cfg файл информацию о новом модуле kickstart.gz.
    12. Размонтирует раздел /mnt/iso.
    13. Удаляет ISO-образ.
    14. Отправляет запрос в Foreman и переводит в статус Installed.
    15. Размонтирует раздел /mnt/efipart.
    16. Отправляет сервер на перезагрузку.

    После перезагрузки система обнаруживает раздел UEFI и начинает загрузку с него. Затем появляется меню загрузки Foreman, в котором он ищет раздел, в нашем случае — redhat.

    Пример меню загрузки показан ниже:

    set default=local
    set timeout=20
    echo Default PXE local template entry is set to 'local'
    
    insmod part_gpt
    insmod fat
    insmod chain
    
    echo "VMWare hosts with QuickBoot feature enabled may not find the local ESP"
    echo "partition due to not initializing all the EFI devices. To workaround, upgrade"
    echo "to the latest grub2 (*) and uncomment "connectefi scsi" statement in the"
    echo "grub2_chainload template."
    echo
    echo "Virtual or physical hosts using Software RAID for the ESP partition may try"
    echo "booting on the Software RAID, which will fail. To workaround, upgrade to the"
    echo "latest grub2 (*) and add "--efidisk-only" argument to the "search" command in"
    echo "the grub2_chainload template."
    echo
    echo "(*) grub2-efi-x64-2.02-122.el8 (upstream doesn't have the patches yet)"
    echo
    #connectefi scsi
    
    menuentry 'Chainload Grub2 EFI from ESP' --id local_chain_hd0 {
    	echo "Chainloading Grub2 EFI from ESP, enabled devices for booting:"
    	ls
    	echo "Trying /EFI/fedora/shim.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/fedora/shim.efi
    	if [ -f ($chroot)/EFI/fedora/shim.efi ]; then
    		chainloader ($chroot)/EFI/fedora/shim.efi
    		echo "Found /EFI/fedora/shim.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/fedora/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/fedora/grubx64.efi
    	if [ -f ($chroot)/EFI/fedora/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/fedora/grubx64.efi
    		echo "Found /EFI/fedora/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/redhat/shim.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/redhat/shim.efi
    	if [ -f ($chroot)/EFI/redhat/shim.efi ]; then
    		chainloader ($chroot)/EFI/redhat/shim.efi
    		echo "Found /EFI/redhat/shim.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/redhat/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/redhat/grubx64.efi
    	if [ -f ($chroot)/EFI/redhat/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/redhat/grubx64.efi
    		echo "Found /EFI/redhat/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/centos/shim.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/centos/shim.efi
    	if [ -f ($chroot)/EFI/centos/shim.efi ]; then
    		chainloader ($chroot)/EFI/centos/shim.efi
    		echo "Found /EFI/centos/shim.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/centos/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/centos/grubx64.efi
    	if [ -f ($chroot)/EFI/centos/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/centos/grubx64.efi
    		echo "Found /EFI/centos/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/rocky/shim.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/rocky/shim.efi
    	if [ -f ($chroot)/EFI/rocky/shim.efi ]; then
    		chainloader ($chroot)/EFI/rocky/shim.efi
    		echo "Found /EFI/rocky/shim.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/rocky/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/rocky/grubx64.efi
    	if [ -f ($chroot)/EFI/rocky/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/rocky/grubx64.efi
    		echo "Found /EFI/rocky/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/debian/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/debian/grubx64.efi
    	if [ -f ($chroot)/EFI/debian/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/debian/grubx64.efi
    		echo "Found /EFI/debian/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/ubuntu/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/ubuntu/grubx64.efi
    	if [ -f ($chroot)/EFI/ubuntu/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/ubuntu/grubx64.efi
    		echo "Found /EFI/ubuntu/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/sles/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/sles/grubx64.efi
    	if [ -f ($chroot)/EFI/sles/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/sles/grubx64.efi
    		echo "Found /EFI/sles/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/opensuse/grubx64.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/opensuse/grubx64.efi
    	if [ -f ($chroot)/EFI/opensuse/grubx64.efi ]; then
    		chainloader ($chroot)/EFI/opensuse/grubx64.efi
    		echo "Found /EFI/opensuse/grubx64.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Trying /EFI/Microsoft/boot/bootmgfw.efi "
    	unset chroot
    	# add --efidisk-only when using Software RAID
    	search --file --no-floppy --set=chroot /EFI/Microsoft/boot/bootmgfw.efi
    	if [ -f ($chroot)/EFI/Microsoft/boot/bootmgfw.efi ]; then
    		chainloader ($chroot)/EFI/Microsoft/boot/bootmgfw.efi
    		echo "Found /EFI/Microsoft/boot/bootmgfw.efi at $chroot, attempting to chainboot it..."
    		sleep 2
    		boot
    	fi
    	echo "Partition with known EFI file not found, you may want to drop to grub shell"
    	echo "and investigate available files updating 'pxegrub2_chainload' template and"
    	echo "the list of known filepaths for probing. Available devices are:"
    	echo
    	ls
    	echo
    	echo "If you cannot see the HDD, make sure the drive is marked as bootable in EFI and"
    	echo "not hidden. Boot order must be the following:"
    	echo "1) NETWORK"
    	echo "2) HDD"
    	echo
    	echo "The system will poweroff in 2 minutes or press ESC to poweroff immediately."
    	sleep -i 120
    	halt
    }
    
    menuentry 'Chainload into BIOS bootloader on first disk' --id local_chain_legacy_hd0 {
    	set root=(hd0,0)
    	chainloader +1
    	boot
    }
    
    menuentry 'Chainload into BIOS bootloader on second disk' --id local_chain_legacy_hd1 {
    	set root=(hd1,0)
    	chainloader +1
    	boot
    }
    
    common="rootflags=loop root=live:/fdi.iso rootfstype=auto ro rd.live.image acpi=force rd.luks=0 rd.md=0 rd.dm=0 rd.lvm=0 rd.bootif=0 rd.neednet=0 nokaslr nomodeset proxy.url=https://foreman.hostkey.com proxy.type=foreman BOOTIF=01-$net_default_mac"
    
    if [ ${grub_platform} == "pc" ]; then
    	menuentry 'Foreman Discovery Image' --id discovery {
    		linux boot/fdi-image/vmlinuz0 ${common}
    		initrd boot/fdi-image/initrd0.img
    	}
    else
    	menuentry 'Foreman Discovery Image EFI' --id discovery {
    		linuxefi boot/fdi-image/vmlinuz0 ${common}
    		initrdefi boot/fdi-image/initrd0.img
    	}
    fi

    После того как Foreman прошел по меню и увидел, что у нас имеется раздел redhat на диске, система запускает ESXi-установку, распаковывает модули, которые были скопированы в /mnt/efipart, а также наш kickstart.gzkickstart/ks.cfg и принимает этот файл с настройками, в которых указано, каким образом будет установлена и настроена операционная система:

    Если оборудование поддерживается гипервизором ESXi, операционная система будет установлена без ошибок и произойдет перезагрузка. В результате получим полностью настроенную операционную систему с двумя пользователями, которых мы указали в шаблоне default_provision_ESXi:

    Заключение

    PXE-деплой ESXi-Foreman представляет собой мощный инструмент для автоматизации установки и настройки виртуальных серверов ESXi. Эта комбинация позволяет администраторам значительно упростить процесс развертывания и управления инфраструктурой виртуализации.

    ESXi-Foreman обеспечивает централизованное управление и контроль над всеми этапами деплоя — от загрузки операционной системы до установки необходимого программного обеспечения. Благодаря использованию PXE-загрузки администраторы могут осуществлять удаленное развертывание ESXi-серверов без необходимости физического доступа к каждому узлу.

    Этот подход также способствует повышению эффективности и стандартизации процесса развертывания, что в свою очередь уменьшает возможные ошибки и снижает время, затрачиваемое на установку и настройку серверов. Кроме того, ESXi-Foreman предоставляет широкие возможности для автоматизации и интеграции с другими инструментами и системами, что делает его гибким и масштабируемым решением для различных сценариев виртуализации.

    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Другие статьи

    16.12.2024

    Как посмотреть запущенные контейнеры в Docker?

    Хотите узнать, какие контейнеры запущены в вашем Docker? В этой статье мы расскажем о простых командах, которые помогут это сделать.

    28.11.2024

    OpenWebUI обновился. Что нового привнесла версия 0.4.5?

    OpenWebUI обновился до версии 0.4.5! Новые функции для RAG, групп пользователей, аутентификации, улучшенная производительность и многое другое. Узнайте, как обновиться и использовать его возможности на максимум.

    18.11.2024

    Настройка Nginx на сервере

    Как правильно установить и настроить Nginx на сервере для повышения производительности вашего сайта. Пошаговая инструкция поможет вам настроить Nginx быстро и без ошибок.

    18.11.2024

    Рейтинг быстрых VPS и VDS-серверов

    Топ-10 самых быстрых VPS и VDS-серверов: узнайте, какие серверы обеспечат максимальную производительность и скорость для ваших проектов.

    25.10.2024

    TS3 Manager: что происходит, когда додумываешь документацию

    Есть проблемы с подключением к TS3 Manager после установки на VPS? Управление сервером TeamSpeak через TS3 Manager не такое уж и простое, как кажется. Давайте решим проблемы вместе!

    HOSTKEY Выделенные серверы в Европе, России и США Готовые решения и индивидуальные конфигурации серверов на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS-атак и безлимитный соединением на скорости 1 Гбит/с 30
    4.3 48 48
    Upload