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

ESXi 8 — собираем VIB пакет ipmitool

VMware vSphere 8

Сегодня у нас важная и полезная миссия. Мы собираем VIB пакет для запуска ipmitool в ESXi 8. Нам предстоит решить две проблемы:

  1. В ESXi 8.0 и новее утилита ipmitool по умолчанию не работает
  2. Старые утилиты для сборки VIB пакетов не подходят для ESXi 8

Ipmitool — это утилита для управления и настройки устройств, поддерживающих стандарт IPMI (Intelligent Platform Management Interface).

Давно я не собирал VIB пакеты, в ESXi 8 теперь всё не так как раньше.

До vSphere 8.0 формат ESXi VIB практически не менялся с того момента, как у конечных пользователей появилась возможность создавать собственные VIB пакеты, начиная с выпуска vSphere 5.0. В vSphere 8.0 в спецификацию VIB было добавлено новое поле, требующее включения контрольной суммы SHA-256 в файл дескриптора VIB. После этого все утилиты для сборки VIB пакетов перестали работать. Вернее, такие VIB пакеты перестали быть совместимыми с ESXi 8.

Спойлер:

Готорый VIB пакет ipmitool с поддержкой lanplus доступен в Сборке для VMware. Можете качать и пользоваться на свой страх и риск.
Ни одна нейронка при сборке пакета не пострадала.

vib

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

В ESXi 8.0 и новее утилита ipmitool по умолчанию не работает. Причин несколько:

  • Все старые сборки ipmitool для ESXi 7 32-битные, а для ESXi 8 нужны 64-битные.
  • VIB пакета ipmitool для ESXi 8 я не нашёл
  • По умолчанию в ESXi 8.0 блокируется запуск любых непроверенных исполняемых файлов из командной строки

Первую проблему удалось решить ранее, скомпилировав совместимый 64-битный ipmitool под архитектуру ESXi 8.0:

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

Сам бинарник у нас теперь есть.

Сборка VIB пакета под ESXi 8

Решаем вторую проблему. Работать будем с ESXi 8.0.3.

VMware предоставляет своим партнёрам по экосистеме официальный способ сборки и упаковки VIB, интегрируемых с ESXi, через программу VMware I/O Vendor Partner (IOVP). Но у нас её нет, мы же community. Поэтому для расчёта контрольных сумм воспользуемся утилитой ar.

Рекомендуется использовать виртуальную машину Ubuntu, которая включает все необходимые утилиты, в том числе ar. Поднял Ubuntu 18 в WSL.

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

Весь процесс сборки завёрнут в bash скрипт:

#!/bin/bash

set -euo pipefail

CUSTOM_VIB_TEMP_DIR=/tmp/vib-temp-$$
CUSTOM_VIB_NAME=il-ipmitool
CUSTOM_VIB_VERSION="1.8.18-1"
CUSTOM_VIB_VENDOR="internet-lab.ru"
CUSTOM_VIB_VENDOR_URL="https://internet-lab.ru"
CUSTOM_VIB_SUMMARY="ipmitool 1.8.18"
CUSTOM_VIB_DESCRIPTION="ipmitool 1.8.18 with lanplus"
CUSTOM_VIB_BUILD_DATE=$(date '+%Y-%m-%dT%H:%I:%S')

# clean up any prior builds
CUSTOM_VIB_FILE_NAME=${CUSTOM_VIB_NAME}.vib
rm -f ${CUSTOM_VIB_FILE_NAME}

# Setting up VIB spec confs
VIB_DESC_FILE=${CUSTOM_VIB_TEMP_DIR}/descriptor.xml
VIB_PAYLOAD_DIR=${CUSTOM_VIB_TEMP_DIR}/payloads/payload1

# Create VIB temp & spec payload directory
mkdir -p ${CUSTOM_VIB_TEMP_DIR}
mkdir -p ${VIB_PAYLOAD_DIR}

# Create ESXi folder structure for file(s) placement
CUSTOM_VIB_BIN_DIR=${VIB_PAYLOAD_DIR}/bin
mkdir -p ${CUSTOM_VIB_BIN_DIR}

# Copy file(s) to destination folder
cp ipmitool ${CUSTOM_VIB_BIN_DIR}

# Create tgz with payload
tar czf ${CUSTOM_VIB_TEMP_DIR}/payload1 -C ${VIB_PAYLOAD_DIR} bin

# Calculate payload size/hash
PAYLOAD_FILES=$(tar tf ${CUSTOM_VIB_TEMP_DIR}/payload1 | grep -v -E '/$' | sed -e 's/^/    <file>/' -e 's/$/<\/file>/')
PAYLOAD_SIZE=$(stat -c %s ${CUSTOM_VIB_TEMP_DIR}/payload1)
PAYLOAD_SHA256=$(sha256sum ${CUSTOM_VIB_TEMP_DIR}/payload1 | awk '{print $1}')
PAYLOAD_SHA256_ZCAT=$(zcat ${CUSTOM_VIB_TEMP_DIR}/payload1 | sha256sum | awk '{print $1}')
PAYLOAD_SHA1_ZCAT=$(zcat ${CUSTOM_VIB_TEMP_DIR}/payload1 | sha1sum | awk '{print $1}')

# Create descriptor.xml
cat > ${VIB_DESC_FILE} << __VIB_DESC__
<vib version="5.0">
  <type>bootbank</type>
  <name>${CUSTOM_VIB_NAME}</name>
  <version>${CUSTOM_VIB_VERSION}</version>
  <vendor>${CUSTOM_VIB_VENDOR}</vendor>
  <summary>${CUSTOM_VIB_SUMMARY}</summary>
  <description>${CUSTOM_VIB_DESCRIPTION}</description>
  <release-date>${CUSTOM_VIB_BUILD_DATE}</release-date>
  <urls>
    <url key="website">${CUSTOM_VIB_VENDOR_URL}</url>
  </urls>
  <relationships>
    <depends>
    </depends>
    <conflicts/>
    <replaces/>
    <provides/>
    <compatibleWith/>
  </relationships>
  <software-tags>
  </software-tags>
  <system-requires>
    <maintenance-mode>false</maintenance-mode>
  </system-requires>
  <file-list>
${PAYLOAD_FILES}
  </file-list>
  <acceptance-level>community</acceptance-level>
  <live-install-allowed>true</live-install-allowed>
  <live-remove-allowed>true</live-remove-allowed>
  <cimom-restart>false</cimom-restart>
  <stateless-ready>true</stateless-ready>
  <overlay>false</overlay>
  <payloads>
    <payload name="payload1" type="tgz" size="${PAYLOAD_SIZE}">
        <checksum checksum-type="sha-256">${PAYLOAD_SHA256}</checksum>
        <checksum checksum-type="sha-256" verify-process="gunzip">${PAYLOAD_SHA256_ZCAT}</checksum>
        <checksum checksum-type="sha-1" verify-process="gunzip">${PAYLOAD_SHA1_ZCAT}</checksum>
    </payload>
  </payloads>
</vib>
__VIB_DESC__

# Create VIB using ar utility
touch ${CUSTOM_VIB_TEMP_DIR}/sig.pkcs7
ar r ${CUSTOM_VIB_FILE_NAME} ${VIB_DESC_FILE} ${CUSTOM_VIB_TEMP_DIR}/sig.pkcs7 ${CUSTOM_VIB_TEMP_DIR}/payload

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

vib

Если кому-то интересна структура директорий, то вот она:

/tmp/vib-temp-77850
├── descriptor.xml
├── payload1
├── payloads
│   └── payload1
│       └── bin
│           └── ipmitool
└── sig.pkcs7
vib

Осталось закинуть VIB пакет в ESXi 8, установить и проверить работу утилиты ipmitool.

vib

Копируем il-ipmitool.vib в /tmp.

Включаем на хосте SSH, заходим под рутом. Проверяем что пакет загружен.

cd /tmp
ll | grep ipmi

Устанавливаем пакет.

esxcli software vib install -v /tmp/il-ipmitool.vib -f

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

esxcli software vib list | grep ipmi
which ipmitool

Пробуем воспользоваться.

ipmitool sensor list
vib

Всё работает. Напоминаю, что данный VIB пакет доступен в Сборке для VMware.

Увидимся завтра в новых приключениях.

 

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

vCenter 6.7 — не работает Proxy

В vCenter 6.7 есть возможность настроить proxy. Вы можете отправить HTTP, HTTPS, FTP трафик через указанный прокси-сервер. Но на деле всё не так хорошо и красиво. Как показала практика, проксирование нормально не работает.