Инструменты пользователя

Инструменты сайта


wiki:technical:ds:ipmi

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
wiki:technical:ds:ipmi [2026/11/03 12:32] – создано Dimanwiki:technical:ds:ipmi [2026/11/03 12:38] (текущий) – [2. Скрипт автоматизации (ipmi.sh)] Diman
Строка 1: Строка 1:
-# Запуск старых KVM-консолей Supermicro (X8/X9) на Linux+====== Запуск старых KVM-консолей Supermicro (X8/X9) на Linux ======
  
-Старые серверы Supermicro (на базе платформ X8 и X9) используют IPMI-контроллеры с iKVM-консолями на базе Java (ATEN). Эти консоли используют устаревшие технологии сжатия (Pack200) и параметры виртуальной машины, которые были удалены в современных версиях Java. +Старые серверы Supermicro (на базе платформ X8 и X9) используют IPMI-контроллеры с iKVM-консолями на базе Java (ATEN). Эти консоли используют устаревшие технологии сжатия (Pack200) и параметры виртуальной машины, которые были удалены в современных версиях Java.
  
-Эта инструкция описывает, как запустить такую консоль на современном Linux (например, Debian 12), используя "правильную" (расово верную) Java и автоматический скрипт-парсер.+Эта инструкция описывает, как запустить такую консоль на современном Linux (например, Debian 12), используя «правильную» (расово верную) Java и автоматический скрипт-парсер.
  
-## 1. Подготовка окружения (Установка Java)+===== 1. Подготовка окружения (Установка Java) =====
  
 Для работы нам понадобятся две вещи: Для работы нам понадобятся две вещи:
-1. **Java 8** для запуска самого приложения. +  * **Java 8** для запуска самого приложения. 
-2. Инструмент **`unpack200`** для распаковки старых `.pack.gz` файлов (в современных OpenJDK его удалили).+  * Инструмент ''unpack200'' для распаковки старых файлов ''*.pack.gz'' (в современных OpenJDK его удалили).
  
 В Debian 12 (и производных) проще всего установить пакет от NVIDIA, который содержит нужный нам инструмент: В Debian 12 (и производных) проще всего установить пакет от NVIDIA, который содержит нужный нам инструмент:
  
-```bash+<code bash>
 sudo apt update sudo apt update
 sudo apt install nvidia-openjdk-8-jre sudo apt install nvidia-openjdk-8-jre
 +</code>
 +
 +После установки ''unpack200'' будет доступен по пути: ''/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/unpack200''
 +
 +===== 2. Скрипт автоматизации (ipmi.sh) =====
 +
 +Скрипт читает ''.jnlp'' файл, скачанный из веб-интерфейса IPMI, автоматически извлекает из него IP-адрес сервера и имена нужных JAR-файлов, скачивает их, распаковывает и запускает консоль.
 +
 +<file bash ipmi.sh>
 +#!/bin/bash
 +
 +if [ "$#" -ne 3 ]; then
 +    echo "Использование: $0 <путь_к_jnlp> <логин> <пароль>"
 +    exit 1
 +fi
 +
 +JNLP_FILE="$1"
 +USER="$2"
 +PASS="$3"
 +
 +if [ ! -f "$JNLP_FILE" ]; then
 +    echo "Ошибка: файл $JNLP_FILE не найден."
 +    exit 1
 +fi
 +
 +# Удаляем возможные символы возврата каретки (Windows)
 +sed -i 's/\r$//' "$JNLP_FILE"
 +
 +# 1. Извлекаем IP-адрес (codebase)
 +CODEBASE=$(grep -oP 'codebase="[^"]+"' "$JNLP_FILE" | head -1 | cut -d'"' -f2)
 +IP=$(echo "$CODEBASE" | sed -E 's|https?://||' | cut -d':' -f1 | cut -d'/' -f1)
 +PORT=$(echo "$CODEBASE" | sed -E 's|https?://[^:/]+:?||' | cut -d'/' -f1)
 +if [ -z "$PORT" ]; then PORT="80"; fi
 +
 +# 2. Извлекаем имя основного JAR
 +JAR_NAME=$(grep -oP '<jar[^>]*>' "$JNLP_FILE" | tr -d '\n' | grep -oP 'href="[^"]+"' | head -1 | cut -d'"' -f2)
 +if [ -z "$JAR_NAME" ]; then
 +    JAR_NAME=$(grep -oP 'href="[^"]+\.jar[^"]*"' "$JNLP_FILE" | head -1 | cut -d'"' -f2)
 +fi
 +
 +# 3. Извлекаем имя нативной библиотеки для Linux x86_64
 +NAT_NAME=$(awk '/<resources os="Linux" arch="(x86_64|amd64)">/,/<\/resources>/' "$JNLP_FILE" | grep -oP 'href="[^"]+"' | head -1 | cut -d'"' -f2)
 +if [ -z "$NAT_NAME" ]; then
 +    NAT_NAME=$(awk '/<resources os="Linux"/,/<\/resources>/' "$JNLP_FILE" | grep -oP 'href="[^"]+"' | head -1 | cut -d'"' -f2)
 +fi
 +
 +# Очищаем имена от возможных суффиксов
 +JAR_BASE=$(echo "$JAR_NAME" | sed 's/\.pack\.gz$//;s/\.pack$//;s/\.jar$//')
 +NAT_BASE=$(echo "$NAT_NAME" | sed 's/\.pack\.gz$//;s/\.pack$//;s/\.jar$//')
 +
 +if [ -z "$JAR_BASE" ] || [ -z "$NAT_BASE" ]; then
 +    echo "Ошибка: не удалось найти JAR или нативную библиотеку в JNLP."
 +    exit 1
 +fi
 +
 +WORK_DIR="/tmp/ikvm_${IP}"
 +mkdir -p "$WORK_DIR"
 +cd "$WORK_DIR" || exit 1
 +
 +echo "[*] Сервер: $IP:$PORT"
 +echo "[*] Основной JAR: ${JAR_BASE}.jar"
 +echo "[*] Нативная библиотека: ${NAT_BASE}.jar"
 +
 +# 4. Скачивание и распаковка
 +for BASE in "$JAR_BASE" "$NAT_BASE"; do
 +    if [ ! -f "${BASE}.jar" ]; then
 +        echo "[*] Скачивание ${BASE}.jar.pack.gz..."
 +        wget -q "http://${IP}:${PORT}/${BASE}.jar.pack.gz" -O "${BASE}.jar.pack.gz"
 +        if [ $? -eq 0 ]; then
 +            gunzip -f "${BASE}.jar.pack.gz"
 +            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/unpack200 "${BASE}.jar.pack" "${BASE}.jar" 2>/dev/null
 +            rm -f "${BASE}.jar.pack"
 +        else
 +            echo "[*] Файл ${BASE}.jar.pack.gz не найден, пробуем ${BASE}.jar..."
 +            wget -q "http://${IP}:${PORT}/${BASE}.jar"
 +        fi
 +    fi
 +done
 +
 +# 5. Извлечение нативной библиотеки .so
 +if [ -f "${NAT_BASE}.jar" ]; then
 +    unzip -o -q "${NAT_BASE}.jar"
 +fi
 +
 +if [ ! -f "${JAR_BASE}.jar" ]; then
 +    echo "Ошибка: главный JAR файл не найден."
 +    exit 1
 +fi
 +
 +# 6. Запуск консоли
 +echo "[*] Запуск консоли..."
 +java -Djava.library.path=. -cp "${JAR_BASE}.jar" tw.com.aten.ikvm.KVMMain "$IP" "$USER" "$PASS" null 5900 623 2 0
 +</file>
 +
 +Не забудьте сделать скрипт исполняемым после скачивания:
 +<code bash>
 +chmod +x ipmi.sh
 +</code>
 +
 +===== 3. Как пользоваться =====
 +
 +  - Зайдите в веб-интерфейс вашего IPMI (например, ''http://10.101.0.28'').
 +  - Нажмите кнопку запуска KVM-консоли, чтобы браузер скачал файл ''launch.jnlp''.
 +  - Запустите скрипт, передав ему путь к скачанному файлу, ваш логин и пароль:
 +
 +<code bash>
 +./ipmi.sh ~/Загрузки/launch.jnlp ADMIN ВАШ_ПАРОЛЬ
 +</code>
 +
 +Скрипт сам скачает нужные файлы с сервера, распакует их и откроет окно удаленной консоли.
 +
 +===== 4. Если что-то пошло не так =====
 +
 +  * **Ошибка ''Usage: IP USER_NAME PASSWORD PORT''**: означает, что вы запустили Java-класс вручную без аргументов. Используйте скрипт, он передает все нужные параметры.
 +  * **Ошибка ''UnsupportedOperationException: Pack200''**: вы пытаетесь запустить консоль через ''javaws''. Используйте только скрипт, он обходит эту проблему, распаковывая файлы вручную.
 +  * **Ошибка ''ArrayIndexOutOfBoundsException''**: в старых версиях iKVM требуется передавать ровно 8 параметров. В скрипте это уже учтено.
wiki/technical/ds/ipmi.1793709132.txt.gz · Последнее изменение: — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki