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

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

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

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

Мне не удалось на стандартном OpenSSL собрать сборку с lanplus. Прищлось компилировать ещё и OpenSSL.

Компиляция 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. Но без lanplus.

Плюс lanplus

Не знаю для чего может понадобиться lanplus в ESXi 8, на самом деле, но сделать можно. Нужно будет пересобрать openssl.

Далее было два часа работы. Не факт что итоговый код я собрал верно.

apt update
apt install build-essential wget -y
cd /opt
wget --no-check-certificate https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
tar -xzvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
make clean
rm -rf crypto/threads_pthread.o crypto/threads_pthread.d crypto/threads/*.o
rm -f libcrypto.a libssl.a
./config --prefix=/opt/openssl-1.1.1 --openssldir=/opt/openssl-1.1.1 \
  no-shared no-dso no-asm no-threads no-engine
make -j$(nproc)
make install

#пересобрать с новым OpenSSL
cd ~/work/ipmitool-1.8.18
make distclean 2>/dev/null
rm -f config.cache
./bootstrap
./configure \
  CFLAGS="-m64 -O2 -I/opt/openssl-1.1.1/include" \
  LDFLAGS="-static -L/opt/openssl-1.1.1/lib" \
  --enable-intf-lanplus \
  --disable-ipmishell \
  ac_cv_lib_crypto_EVP_aes_128_cbc=yes \
  ac_cv_lib_crypto_EVP_sha256=yes
make -j$(nproc) 2>&1 | tail -5

# линкуем статику
cd ~/work/ipmitool-1.8.18/src
gcc -static -m64 -O2 -o ipmitool.static \
  ipmitool.o ipmishell.o \
  plugins/.libs/libintf.a \
  ../lib/.libs/libipmitool.a \
  /opt/openssl-1.1.1/lib/libcrypto.a \
  -Wl,--start-group \
  -lreadline -ltinfo -lm -lpthread -ldl -lc \
  -Wl,--end-group

Проверяем.

root@ProBook:~/work/ipmitool-1.8.18/src# file ipmitool.static
ipmitool.static: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=254b4ba59d56cc367d025dacbe4aab4483b643c4, with debug_info, not stripped
root@ProBook:~/work/ipmitool-1.8.18/src# ./ipmitool.static -V
ipmitool.static version 1.8.18

ПОБЕДА! Бинарник работает. Скомпилированный бинарник загрузил в Сборку для VMware.

 

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

Сбой сети на виртуальной машине Windows Server 2012 R2 в среде VMware

Наступил на собственные грабли, забыл заменить тип сетевой карты с E1000 на VMXNET 3 на одном из новых серверов. Однако, мне повезло дважды. Во-первых, сервер был ещё не в бою и сбой не повлиял на работу системы. А во-вторых, удалось сделать несколько скриншотов для написания этой статьи. :)

Клавиатура Remote Console перестаёт работать при загрузке ESXi 6.0 на серверах HPE Proliant Gen10

Обнаружил проблему. При установке или загрузке ОС ESXi 6.0 Update 2 на сервера ProLiant Gen10 перестаёт работать клавиатура удалённой консоли управления.