Как добавить сторонние драйверы в установочный образ VMware ESXi 8

tfxv1vp8afnjday1umupai_5hnc.png

Приветствую, %USERNAME%. Меня зовут Рубанов Николай и я технический евангелист компании Evrone. Моя роль подразумевает постоянное изучение новых технологий, так что нужно иметь некую песочницу для экспериментов. Под это я решил приспособить свой старый ноутбук на базе Core i7 4-го поколения.

Выбор бесплатных гипервизоров невелик, так что выбор я остановил на VMware ESXi. На этом пути есть много подводных камней, главным из которых является аппаратная совместимость. Сходу установить ESXi не получилось, поскольку система сообщила об отсутствии сетевой карты и невозможности продолжить установку.

Существующие инструкции по внедрению сторонних драйверов в ESXi или уже устарели, или содержали неполную информацию. Так что я перерыл кучу источников и решил написать небольшой собственный туториал. Надеюсь, что мой опыт сэкономит вам немало времени и нервов.

Предыстория


Два года назад я готовился к переезду на Кипр, поэтому решил привести свою технику в порядок. Я искал машину, которая не сломается от небольшого падения, опрокинутого стакана с кофе или попадания в дождь. Для работы на свежем воздухе был куплен «бронебойный» Acer Enduro Urban N3: заглушки со всех сторон предотвращают попадание в разъемы пыли, воды и песка. А у клавиатуры есть превосходный трюк, впервые представленный в ноутбуках ThinkPad — дренажные отверстия на случай залития.

Дома я предпочитаю до сих пор использовать свой 10-летний MSI GE60–2OC. Ему я решил сделать небольшой апгрейд в виде пары свежих SSD-дисков Samsung EVO 870 по 500 Гб каждый. Один сразу поставил в качестве основного. Второй диск просто взял с собой в качестве ЗИП. Спустя примерно год первый диск скончался, выдав множество бэдов, и на его место встал запасной. Впрочем, прожил он примерно столько же и также стал наращивать счётчик Reallocated sector count.

Пока делал финальный бэкап своих виртуальных машин, которые раньше крутил на Oracle VirtualBox, столкнулся с проблемой. Копирование прерывалось и операционная система ругалась на ошибку ввода-вывода. Пришлось привлечь тяжелую артиллерию в виде утилиты DMDE. Она имеет чудесную опцию копирования с пропуском бэд-блоков. Мне очень повезло, так как проблемный файл был только один, а в сбойных блоках не было важных данных. Так что все файлы я вытащил и поехал в магазин за новым диском. У меня уже был позитивный опыт с дисками Crucial, поэтому приобрёл модель BX500 объёмом 480 Гб. На март 2023 его стоимость составила 85 евро. Надеюсь, что проживёт он дольше EVO 870.

Первая попытка


Раз уж полез внутрь ноутбука, кроме SSD заменил и кулер. У линейки GE60 есть противная «детская болячка». Кулеры в этой линейке более года живут редко и меняются, как расходники. Мой экземпляр сменил уже 8 штук.

Когда ноутбук был собран обратно, я подумал, что было бы хорошей идеей превратить его в небольшой сервер. Сказано — сделано. Я отправился на портал VMware скачивать дистрибутив. Залил ISO на Zalman, о котором рассказывал в одной из моих статей, и запустил установку.

Разумеется, меня постигло фиаско в виде ошибки «No Network Adapters», и я полез в гугл выяснять про установку сторонних драйверов в ESXi. Первые же ссылки не обнадёживали, там речь шла о серверных картах, для которых был выпущен так называемый Community Networking Driver. Но я также узнал, что существует USB Network Native Driver, который позволяет использовать гигабитные сетевые карточки, подключаемые по USB. Например, на базе чипсетов ASIX88178a или RTL8152/RTL8153.

У меня под рукой была только карточка на базе ASIX88772a, но я всё равно решил попробовать. Забегая вперед, скажу, что эта сетевая карта так и не заработала, но вот сам процесс встраивания драйвера стал тем ещё квестом.

До 2018 года была такая классная штука, как ESXi-Customizer-PS. Это такой Powershell-скрипт, который позволял относительно просто встраивать драйверы в ESXi версий 5.x и 6.x. Но вот для ESXi версий 7.x и 8.x надо было искать другой способ. Этим способом стала пересборка образа с помощью PowerCLI и модуля ImageBuilder.

Подготовительная работа


Итак, на старте у меня был ноутбук с Windows 11, образ VMware-ESXi-8.0b-21203435-depot.zip и драйверы в файле ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip. Прежде чем приступать к сборке, нужно установить весь сопутствующий софт. Первое, чем нужно обзавестись — PowerCLI. Открываем PowerShell с правами администратора и выполняем установку:

Install-Module -Name VMware.PowerCLI


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

Следующий модуль будет содержать неподписанные сценарии, загруженные из интернета, поэтому вначале меняем политику исполнения:

Set-ExecutionPolicy RemoteSigned


И только теперь устанавливаем модуль сборщика:

Import-Module VMware.ImageBuilder


Сразу этот модуль не заработает, поскольку для своей работы требует наличия Python определённой версии и некоторых дополнительных компонентов. Вначале скачиваем и устанавливаем интерпретатор Python 3.7.9. При установке обязательно ставим галочку, чтобы путь к Python был прописан в PATH.

Теперь можно открыть обычную сессию PowerShell от пользователя и выполнить несколько команд. Прописываем в настройках PowerCLI путь до exe-шника интерпретатора:

Set-PowerCLIConfiguration -PythonPath ”C:\Users\\AppData\Local\Programs\Python\Python37\python.exe” -Scope User


Переходим в вышеуказанную директорию и обновляем pip:

python -m pip install --upgrade pip


Теперь устанавливаем необходимые пакеты:

pip install six
pip install psutil
pip install lxml
pip install pyopenssl


На этом подготовка системы завершена и можно попробовать собрать образ.

Сборка образа


Копируем архивы с образом и драйверами по адресу C:\Users\[username]\. Теперь проверяем версию образа ESXi командой:

Get-DepotBaseImages -Depot .\VMware-ESXi-8.0b-21203435-depot.zip


Ответ будет иметь такой вид:

Version Vendor Release date
8.0.0-1.20.21203435 VMware, Inc. 02.13.2023 23:00:00 
8.0.0-1.15.21203431 VMware, Inc. 02.13.2023 23:00:00


Теперь проверяем архив с драйверами:

Get-DepotComponents -Depot .\ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip


Получаем следующее:

Name Version ID Vendor Release date
VMware-vmkusb-nic-fling 1.11-1vmw.800.1.20.61054763 VMware-vmkusb-nic-fling:1.11-1vmw.800.1.20.61054763 VMware, Inc 11.21.2022 06:22:41


Из этих данных сформируем JSON-файл с будущими настройками, назовём его vmware-esxi8-custom-iso.json и положим вместе с образом и драйверами:

{
    "base_image": {
        "version": "8.0.0-1.20.21203435"
    },
    "components": {
       "VMware-vmkusb-nic-fling": "1.11-1vmw.800.1.20.61054763"
   }
}


Запускаем сборку:

New-IsoImage -Depots "VMware-ESXi-8.0b-21203435-depot.zip” , "ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip” -SoftwareSpec "./vmware-esxi8-custom-iso.json” -Destination "./VMware-ESXi-8.0b-21203435-custom.iso”


Процесс достаточно быстрый. Полученный образ VMware-ESXi-8.0b-21203435-custom.iso теперь можно использовать для установки ESXi.

Заключение


Я успешно загрузился с полученного ISO, но увы, моя сетевая карточка так и не определилась. Тем не менее, такой способ добавления драйверов в образ вполне рабочий. Как только до меня доедет карта на базе ASIX88178a, то я попробую ещё раз провернуть трюк с установкой. А пока что установил Proxmox 7.3, который обзавёлся новыми возможностями скачивания установочных образов и достаточно адекватной поддержкой Red Hat QXL драйвера.

Меня очень порадовала возможность эмуляции UEFI и TPM 2.0, а также то, что без проблем удалось перегнать VDI-образ в RAW и записать в выделенный машине ZFS-раздел. Так я перенёс виртуальную машину с Windows 11 и настроил доступ к экрану с нормальным разрешением, вплоть до 4k. Если вам интересны подробности, то сообщите в комментариях, я выделю время на написание такой статьи.

А вот ещё несколько интересных текстов:

— Ruby, Cucumber и русский язык: автотесты для Альфа-Банка
— 3 попытки и 8 лет перехода с Ruby на Elixir
— UseStdLibVars: используйте переменные стандартных библиотек

© Habrahabr.ru