Вы наверное может задаться вопросом — а здесь то Docker зачем? В чем проблема зайти на веб интерфейс ILO и настроить свой сервер как надо?

Так и я думал когда мне отдали пару старых ненужных серверов, которые мне надо было переустановить (то что называется reprovision). Сами сервер находятся за океаном, единственное что доступно это веб интерфейс. Ну и соответственно мне надо было зайти в Virtual Console для выполнения некоторых команд. Тут и началось.

Как известно для разного рода виртуальных консолей обычно используется Java, что в HP, что в Dell. Во всяком случае раньше так точно (а системы очень старые). Но Firefox и Chrome давно уже перестали поддерживать эти апплеты, да и не работает новый IcedTea с этими системами. Поэтому обозначилось несколько вариантов:

  1. Начать конструировать зоопарк из браузеров и Java версий на своей машине, этот вариант отпал сразу. Никакого желания издеваться над системой ради пары команд нет.
  2. Запустить на виртуалке что-нибудь достаточно старое (опытным путем выяснилось что нужна Java 6) и через него сконфигурировать все что нужно.
  3. То же самое что и пункт 2, только в контейнере, так как с той же проблемой столкнулись несколько коллег и гораздо легче передать им ссылку на контейнер на dockerhub, чем образ виртуалки, со всеми паролями и т.д.

(На самом деле до пункта 3 я дошел только после того как сделал пункт 2)

Пункт 3 мы и сделаем сегодня.

Я вдохновлялся в основном двумя проектами:

  1. docker-baseimage-gui
  2. docker-firefox-java

В принципе первый проект docker-baseimage-gui уже содержит утилиты и конфигурации для запуска десктопных приложений в докере. Обычно вам нужно определить стандартные переменные и ваше приложение будет доступно через браузер (websocket) или VNC. В нашем случае мы будет запускать через Firefox и VNC, через websocket не получилось.

Сначала установим нужные пакеты — Java 6 и IcedTea:

RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list && 	apt-get update && 	apt-get -y upgrade && 	apt-get -y install firefox 		nano curl         icedtea-6-plugin         icedtea-netx         openjdk-6-jre         openjdk-6-jre-headless         tzdata-java

Теперь осталось зайти на страницу ILO интерфейса и вбить свой логин и пароль. Запускаем Firefox в автостарте:

RUN bash -c 'echo "exec openbox-session &" >> ~/.xinitrc' && 	bash -c 'echo "firefox \${HILO_HOST}">> ~/.xinitrc' && 	bash -c 'chmod 755 ~/.xinitrc'

Переменная окружения HILO_HOST содержит веб адрес нашего ILO интерфейса, например myhp.example.com.

Для автоматизации входа давайте прикрутим авторизацию. Логин в ILO происходит обычным POST запросом, в результате которого получаете JSON session_key, который потом передаете в GET запросе.

Вычислим session_key через curl, если определены переменные окружения HILO_USER и HILO_PASS:

export HOME=/config
export HILO_HOST=${HILO_HOST%%/}
SESSION_KEY=""
data="{\"method\":\"login\",\"user_login\":\"${HILO_USER}\",\"password\":\"${HILO_PASS}\"}"
if [[ -n "${HILO_USER}" && -n "${HILO_PASS}" ]]; then
    SESSION_KEY=$(curl -k -X POST "${HILO_HOST}/json/login_session" -d "$data" 2>/dev/null | grep -Eo '"session_key":"[^"]+' | sed 's/"session_key":"//')
fi
echo "SESSION_KEY=$SESSION_KEY"
echo $SESSION_KEY > /session_key

После того как мы записали session_key в докере, можно запускать VNC:

exec x11vnc -forever -create

Теперь просто соединяемся по VNC к порту 5900 (или любому другому по вашему выбору) на localhost и заходим в виртуальную консоль.

Весь код находится в репозитории docker-ilo-client.

Полная команда для подключения к ILO:

docker run -d --rm --name ilo-client -p 5900:5900 -e HILO_HOST=https://ADDRESS_OF_YOUR_HOST -e HILO_USER=SOME_USERNAME -e HILO_PASS=SOME_PASSWORD sshnaidm/docker-ilo-client

где ADDRESS_OF_YOUR_HOST это имя хоста ILO, SOME_USERNAME — логин и соответственно SOME_PASSWORD пароль к ILO.

После этого просто запускаете любой VNC клиент на адрес: vnc://localhost:5900
Дополнения и пулл реквесты, конечно, приветствуются.

Похожий проект существует для соединения к IDRAC интерфейсам DELL машин: docker-idrac6.

Комментарии (16)


  1. Oz_Alex
    13.05.2019 04:11

    Del, невнимательно читал статью.


  1. gecube
    13.05.2019 06:47

    Интересно, почему всё-таки не запаковали в вирт.машину. Тот же вагрант прекрасно заходит. А в качестве ОС у админа тогда может быть что угодно. ОК. docker легче, быстрее стартует и т.п.
    К тому же в крупных организациях на случай необходимости такого доступа — обычно есть отдельный rdp/vdi-сервер с windows со всеми нужными установленными штуками. Но его тоже нужно поддерживать в актуальном состоянии и тут уже есть слабое место, т.к. обычно этим занимаются коллеги из техпода. По остаточному принципу :-(

    apt-get -y upgrade

    Ещё добавлю, что в docker это не является best practice, т.к.
    1. Совершенно не ясно, что попадет в итоговый образ
    2. Образ излишне пухнет
    3. Если нужны обновленные системные компоненты — наследуйся от обновленного базового образа


    1. dominigato Автор
      13.05.2019 10:21

      Я сначала и сделал в виртуалке, но потом оказалось что многим это тоже надо. Мне гораздо легче послать одну команду через чат, чем выкладывать куда-то образ виртуалки, очень большой и ненужный overhead.
      В принципе насчет апгрейда верно, но этот образ не будет много пересобираться :) он изначально задуман как песочница для легаси.


      1. gecube
        13.05.2019 11:15

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

        не засчитывается :-) докер образ тоже нужно где-то хранить (публичный докер хаб?).
        Теоретически его можно передать как исходный Dockerfile — это действительно просто. Но с тем же успехом можно переслать Vagrantfile с провижионингом виртуалки (он умеет подключить ansible и прочие системы для конфигурирования). Это я не к тому, что Вы неправы, а к тому, что могут быть альтернативные подходы.


        1. dominigato Автор
          13.05.2019 15:40

          Ну здесь по-моему достаточно изоляции, виртуализация все-таки потяжелее будет.


  1. Deadbeat
    13.05.2019 12:22

    А вот это не пробовали: https://support.hpe.com/hpsc/doc/public/display?docId=c03334058?
    Делать докер-контейнер, чтобы потом все равно накликивать в GUI — как-то не true way.


    1. BDI
      13.05.2019 14:33

      Зайти на iLO не то чтобы проблема — на десятке из под IE и FF актуальных версий нормально вхожу на iLO2, Edge не опознаётся как поддерживаемый браузер, хромобраузеры отказываются открывать(ERR_SSL_BAD_RECORD_MAC_ALERT). Собственно чтоы посмотреть состояние или передёрнуть по питанию этого достаточно.
      А вот если потребуется Remote Console, то тут всё становится грустно — «Microsoft Internet Explorer is required to run Integrated Remote Console.», это в IE11 в режиме ActiveX. В режиме java-апплета предлагает скачать JVM(со ссылкой на hp.com, где попадаем на 403) — установленную в системе 1.8 он за яву не считает(IE11, FF66.0.5).
      Так что приходится для таких вещей держать виртуалки с XP/2003. В своей сети терпимо, а когда нужно видеть консоль географически удалённого сервера, то тут при не слишком широком канале между офисами возникают сложности из-за лага(POST экраны, запрос на «для загрузки с CD нажмите любую кнопку» и т.п. могут отобразиться когда уже сервер ушёл далеко вперёд).

      Я полагаю автор статьи решал именно эту проблему, а не просто подёргать iLO удалённо.

      На микросервере(Gen8, iLO4) относительно сказочно — там отдельная софтинка есть «HP Lights-Out Stand Alone Remote Console», позволяет цепляться в виртуальную консоль без всякого WEB. В принципе работает — не идеал, но довести установку в графическом режиме до состояния когда уже можно подключиться в ОС штатными средствами вполне реально(если лицензия на графический режим есть :)). Мне кажется внутри тоже ява, но работает и на XP(не помню какая у меня там ява стояла, кажется 1.6 — чтоб на PiX входить можно было) и на десятке. Вот только iLO2 она не умеет :(.

      P.S. С iDRAC на прошлом сервере тоже периодически приходилось танцевать с бубном, помню удавалось скачанный апплет запустить ручками(пока не протух) — а вот прямо из браузера(FF/IE) виртуальная консоль то открывалась, то нет(в зависимости от версий браузера, JAVA и расположения звёзд на небе).


      1. dominigato Автор
        13.05.2019 14:49

        Да, мне нужна была именно виртуальная консоль, с остальным особых проблем не было.


        1. BDI
          13.05.2019 15:02

          Сейчас погуглил, часть проблем с работой под JRE 7/8 вроде пофиксили в 2.29(может не все, у меня прошивка древнее). К тому же оказывается в 2018 году были новые версии(последняя 2.33 от 2018-03-30). Может сейчас уже[пока] можно опять ходить в виртуальную консоль распространёнными браузерами актуальных версий :). Но у меня все сервера до сих пор под 2.23(11/05/2013 ) — когда была острая нужда в виртуальной консоли, обновлений ещё не было, а потом… Работает — не трогай. Буду переставлять один из серверов, надо будет обновить прошивку до актуальной…


          1. Taciturn
            13.05.2019 16:03

            А что страшного в обновлении прошивки iLO? На ОС не влияет, прекрасно обновляется в любое время.
            Проверил сейчас, на актуальной 2.33 никакого ERR_SSL_BAD_RECORD_MAC_ALERT, в Chrome всё открывается.


            1. BDI
              13.05.2019 17:11

              А виртуальная консоль на 2.33 работает хоть как нибудь в актуальных браузерах на актуальной яве? Если нет, то смысла в обновлении для меня нет.

              Прошивка обычно из под OS ставится(*). На одном OS установлена давно(04.04.2009), и повидала многое. Не хочется словить сбой в процессе прошивки и окирпичить iLO — тогда и питание не включить удалённо будет(самое ценное для меня). На другом стоит Hyper-V 2012R2, кастрирован он сильно — не всё ставится, и не всё что удаётся установить потом запускается/работает(даже если попробовать докинуть недостающие либы в папку программы, хотя для многих утилит HP это работает). Так как оба под боком, трудности с доступом в консоль не сильно напрягают.
              (*) Хотя вроде пункт для загрузки bin-файла в вэбморде вижу, но не проверял глючит ли этот процесс через web-интерфейс, или работает нормально.

              Третий хоть и с полноценной ОС в качестве гипервизора(онли), но стоит в другой стране, что малость отбивает желание перепрошивать железки удалённо без явной надобности. Хоть и понимаю что при проблемах с прошивкой iLO максимум без этого iLO останусь и всё, но полноценного местного админа в случае чего там нет…

              Может из под ОС можно перепрошить и после неудачной попытки, не проверял. Вопрос сей пока не гуглил т.к. острой необходимости в данный момент нет. Если нужда возникнет — буду разбираться, а пока пусть работает как есть. «Не мешай технике работать», как учили нас на военной кафедре :).


              1. Taciturn
                13.05.2019 17:59

                С актуальной Java 8.211/212 оно вообще ни в каких актуальных браузерах не работает. В Firefox 52.9 ESR (можно Portable) работает (после «In Control Panel, Java, Advanced Tab, down at the bottom, uncheck «Use TLS 1.1» and «Use TLS1.2».»).

                Устанавливать прошивку из OS действительно очень опасный метод, через браузер намного надёжнее, можно хоть сервер в процессе перезагружать. Обновлял 2.09>2.12>2.15>2.23>2.25>2.27>2.29>2.30>2.31>2.32>2.33 (ни разу не пригодилось, но сохраняю старые версии прошивок), проблем не было. Даже если сеть в процессе отвалится, то ничего не случится — сначала прошивка целиком передаётся на сервер, потом проверяется цифровая подпись и только потом происходит обновление.

                Хотя именно в iLO куда лучше работает ActiveX консоль, благо IE11 даже в новейших версиях W10 есть, по возможности стараюсь пользоваться ей.


                1. BDI
                  13.05.2019 18:09

                  Спасибо, ценная информация, буду иметь ввиду. Как раз один из серверов планируется под полную переустановку(с небольшой модернизацией по железу), если планы не поменяются — на нём и попробую.


      1. Deadbeat
        14.05.2019 00:58

        спс., не то, чтобы я осуждаю, но чет давно выпал из мира проприетарных гуев. Так-то, статья годная.



  1. inkvizitor68sl
    13.05.2019 13:43

    О, у нас из этой штуки давно сервис с вебмордой сделан =) На каждый iKVM запускаем отдельный контейнер, пользователю плюём уникальной ссылкой с уже открытым iKVM.
    Сами контейнеры запускает bash-лапша через xinetd. Ну и контейнер сами с нуля собираем, само собой.