Перейти к основному содержанию

ESXi 8 — компилируем ipmitool

VMware vSphere 8

И вот мне понадобилось запустить 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:

Добавляем Ubuntu 18.04 в WSL

Мне не удалось выполнить сборку с первого раза, поэтому часть инструкций мог упустить.

Компиляция ipmitool для ESXi 8.0

Внутри приведён код вместе со всеми ошибками, которые я допустил при сборке.

Разворачиваем чистую Ubuntu 18.04.

ipmitool

Ставим пакеты.

apt update
apt install gcc-multilib libc6-i386 libc6-dev-i386 wget make -y
ipmitool

Создаём рабочую директорию под рутом.

mkdir work
cd ./work/
ipmitool

Скачиваем исходники.

wget https://github.com/ipmitool/ipmitool/releases/download/IPMITOOL_1_8_18/ipmitool-1.8.18.tar.gz
ipmitool

Распаковываем.

tar -xzvf ipmitool-1.8.18.tar.gz
cd ./ipmitool-1.8.18
ipmitool

Конфигурируем.

./bootstrap

На этом этапе я словил кучу ошибок, пришлось добавить пакеты.

apt install -y autoconf automake libtool pkg-config
  • autoconf — даёт autoconf и autoheader
  • automake — даёт automake и aclocal
  • libtool — даёт libtoolize
  • pkg-config — нужен для поиска библиотек при configure

Конфигурируем.

./bootstrap
ipmitool

Теперь прошло хорошо.

Продолжаем конфигурировать. И вот здесь я пробовал много всего разного.

./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
ipmitool

После анализа логов нейронка предложила обмануть 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
ipmitool

На вид стало лучше. Компилируем.

make -j$(nproc)

И ловим ошибку при сборке lanplus.

ipmitool

Решение: исправить 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;
ipmitool

Меняем на:

EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
ipmitool

Находим строку 242 (или 243 после предыдущего редактирования) (функция lanplus_decrypt_aes_cbc_128). Было:

EVP_CIPHER_CTX ctx;
ipmitool

Меняем на то же самое:

EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
ipmitool

Также нужно заменить EVP_CIPHER_CTX_cleanup(ctx) на EVP_CIPHER_CTX_free(ctx) в конце обеих функций. Было:

ipmitool

Стало:

ipmitool

Было:

ipmitool

Стало:

ipmitool

Компилируем.

make -j$(nproc)
ipmitool

Что-то собралось. Проверяем наличие файла.

ls -l src/ipmitool

Проверяем что файл тот что нужен.

file src/ipmitool
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

Видим новый файл 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
ipmitool

Распознаёт команду -I lanplus (выводит usage, а не "Invalid interface"). Теоретически, lanplus тоже должен работать.

Копируем себе бинарник.

ipmitool

Переименовываем его просто в ipmitool. Загружаем его в /tmp на наш ESXi 8. Проверим что файл на месте.

cd /tmp
ls -Fla | gep ipmi
ipmitool

Даём права на выполнение.

chmod +x ./ipmitool

Отключаем защиту.

esxcli system settings advanced set -o /User/execInstalledOnly -i 0

Проверяем.

./ipmitool.static -V

Работает.

ipmitool

Попробуем получить список сенсоров.

./ipmitool.static sensor list

И снова работает.

ipmitool

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

 

Похожие материалы

HPE ProLiant MicroServer Gen10 и ESXi 6.7 — добавление Storage

Недавно поставил ESXi 6.7 на сервер HPE ProLiant MicroServer Gen10. На сервере штатными средствами собрано зеркало RAID1 из двух дисков. Пришла пора проверить, увидит ли ESXi собранный RAID массив, и если да, то добавить его как Storage.