И вот мне понадобилось запустить ipmitool на ESXi 8.
Ipmitool — это утилита для управления и настройки устройств, поддерживающих стандарт IPMI (Intelligent Platform Management Interface).
В ESXi 8.0 и новее утилита ipmitool по умолчанию не работает. Причин несколько:
- Все старые сборки ipmitool для ESXi 7 32-битные, а для ESXi 8 нужны 64-битные.
- VIB пакета ipmitool для ESXi 8 я не нашёл
- По умолчанию в ESXi 8.0 блокируется запуск любых непроверенных исполняемых файлов из командной строки
В теории понятно что нужно делать. Как минимум, скомпилировать совместимый 64-битный ipmitool под архитектуру ESXi 8.0. Или найти готовый 64-битный ipmitool, но я не нашёл, или плохо искал. Загрузить его в ESXi 8 и временно отключить защиту:
esxcli system settings advanced set -o /User/execInstalledOnly -i 0Воспользоваться утилитой. Затем включить защиту:
esxcli system settings advanced set -o /User/execInstalledOnly -i 1Звучит просто, но две ночи потратил. Вооружился подсистемой Windows для Linux ака WSL, нейронками и вспомогательными напитками.
Скомпилированный бинарник загрузил в Сборку для VMware.
Где брать исходники ipmitool?
Ищем здесь:
https://github.com/ipmitool/ipmitool/releases#release-IPMITOOL_1_8_18
Компилировали, компилировали, да не выкомпилировали
Что мне не удалось?
Мне не удалось собрать последнюю версию ipmitool 1.8.19. В какой-то момент я словил несколько ошибок, с которыми не стал разбираться. Нейронка подсказала, что эти ошибки отсутствовали в версии 1.8.18, так что я в итоге работал с ipmitool 1.8.18. Возможно, я был не слишком настойчив, но мне и предпоследняя версия подойдёт.
Мне не удалось собрать ipmitool в операционной системе Kali Linux из-за версии OpenSSL 3.6.3 9 Jun 2026 (Library: OpenSSL 3.6.3 9 Jun 2026). Нейронка мне все уши прожужжала, что нужно просто компилировать из-под Ubuntu 18.04, ибо в ней OpenSSL версии 1.1.1 из коробки и ошибок таких нет. Ладно, поднял Ubuntu 18:
Мне не удалось выполнить сборку с первого раза, поэтому часть инструкций мог упустить.
Компиляция ipmitool для ESXi 8.0
Внутри приведён код вместе со всеми ошибками, которые я допустил при сборке.
Разворачиваем чистую Ubuntu 18.04.

Ставим пакеты.
apt update
apt install gcc-multilib libc6-i386 libc6-dev-i386 wget make -y
Создаём рабочую директорию под рутом.
mkdir work
cd ./work/
Скачиваем исходники.
wget https://github.com/ipmitool/ipmitool/releases/download/IPMITOOL_1_8_18/ipmitool-1.8.18.tar.gz
Распаковываем.
tar -xzvf ipmitool-1.8.18.tar.gz
cd ./ipmitool-1.8.18
Конфигурируем.
./bootstrapНа этом этапе я словил кучу ошибок, пришлось добавить пакеты.
apt install -y autoconf automake libtool pkg-config- autoconf — даёт autoconf и autoheader
- automake — даёт automake и aclocal
- libtool — даёт libtoolize
- pkg-config — нужен для поиска библиотек при configure
Конфигурируем.
./bootstrap
Теперь прошло хорошо.
Продолжаем конфигурировать. И вот здесь я пробовал много всего разного.
./configure CFLAGS=-m64 LDFLAGS=-static --enable-intf-lanplus- CFLAGS=-m64 — для ESXi 8.0 нужно 64 бита
- LDFLAGS=-static — в ESXi 8.0 нет нужных библиотек, их нужно статично загрузить в бинарник
- --enable-intf-lanplus — добавим интерфейс lanplus
Из всего этого нормально отработало не всё. Видим что lanplus не включён.
lanplus : no
После анализа логов нейронка предложила обмануть configure через кэш-переменные. Это стандартный обходной путь для статической сборки ipmitool. Нужно явно указать configure, что проверки прошли успешно, чтобы он не пытался их выполнять.
make distclean 2>/dev/null
rm -f config.cache
./configure CFLAGS=-m64 LDFLAGS=-static --enable-intf-lanplus ac_cv_lib_crypto_EVP_aes_128_cbc=yes ac_cv_lib_crypto_EVP_sha256=yes- ac_cv_lib_crypto_EVP_aes_128_cbc=yes — говорит configure "не проверяй, просто считай, что символ есть"
- ac_cv_lib_crypto_EVP_sha256=yes — то же для SHA256
Видим что lanplus включён.
lanplus : yes
На вид стало лучше. Компилируем.
make -j$(nproc)И ловим ошибку при сборке lanplus.

Решение: исправить lanplus_crypt_impl.c. Нужно заменить два места, где используется EVP_CIPHER_CTX ctx;, на указатель с динамическим созданием. Редактируем.
vim src/plugins/lanplus/lanplus_crypt_impl.cНаходим строку 167 (функция lanplus_encrypt_aes_cbc_128). Было:
EVP_CIPHER_CTX ctx;
Меняем на:
EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
Находим строку 242 (или 243 после предыдущего редактирования) (функция lanplus_decrypt_aes_cbc_128). Было:
EVP_CIPHER_CTX ctx;
Меняем на то же самое:
EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
Также нужно заменить EVP_CIPHER_CTX_cleanup(ctx) на EVP_CIPHER_CTX_free(ctx) в конце обеих функций. Было:

Стало:

Было:

Стало:

Компилируем.
make -j$(nproc)
Что-то собралось. Проверяем наличие файла.
ls -l src/ipmitoolПроверяем что файл тот что нужен.
file src/ipmitool
И видим хорошую и плохую новости. Хорошая заключается в том, что бинарник 64-bit. А плохая в том, что "dynamically linked". Библиотеки динамические, а нам нужны статические. Атрибут LDFLAGS=-static не сработал так как нам нужно.
Здесь было много разных попыток. Я уже и lanplus отключил и сделал сборку без неё. В итоге ход конём:
cd ~/work/ipmitool-1.8.18/src
../libtool --silent --tag=CC --mode=link gcc -m64 -fno-strict-aliasing -Wreturn-type -all-static -o ipmitool.static ipmitool.o ipmishell.o ../lib/libipmitool.la plugins/libintf.la
file ipmitool.static
Видим новый файл ipmitool.static. И в нём уже "statically linked".
Проверяем в Ununtu:
./ipmitool.static -VВерсия отобразилась.
./ipmitool.static -I lanplus -h 127.0.0.1 -U x -P x mc info 2>&1 | head -3
Распознаёт команду -I lanplus (выводит usage, а не "Invalid interface"). Теоретически, lanplus тоже должен работать.
Копируем себе бинарник.

Переименовываем его просто в ipmitool. Загружаем его в /tmp на наш ESXi 8. Проверим что файл на месте.
cd /tmp
ls -Fla | gep ipmi
Даём права на выполнение.
chmod +x ./ipmitoolОтключаем защиту.
esxcli system settings advanced set -o /User/execInstalledOnly -i 0Проверяем.
./ipmitool.static -VРаботает.

Попробуем получить список сенсоров.
./ipmitool.static sensor listИ снова работает.

Мы скомпилировали ipmitool под ESXi 8.0.