Так и я думал когда мне отдали пару старых ненужных серверов, которые мне надо было переустановить (то что называется reprovision). Сами сервер находятся за океаном, единственное что доступно это веб интерфейс. Ну и соответственно мне надо было зайти в Virtual Console для выполнения некоторых команд. Тут и началось.
Как известно для разного рода виртуальных консолей обычно используется Java, что в HP, что в Dell. Во всяком случае раньше так точно (а системы очень старые). Но Firefox и Chrome давно уже перестали поддерживать эти апплеты, да и не работает новый IcedTea с этими системами. Поэтому обозначилось несколько вариантов:
- Начать конструировать зоопарк из браузеров и Java версий на своей машине, этот вариант отпал сразу. Никакого желания издеваться над системой ради пары команд нет.
- Запустить на виртуалке что-нибудь достаточно старое (опытным путем выяснилось что нужна Java 6) и через него сконфигурировать все что нужно.
- То же самое что и пункт 2, только в контейнере, так как с той же проблемой столкнулись несколько коллег и гораздо легче передать им ссылку на контейнер на dockerhub, чем образ виртуалки, со всеми паролями и т.д.
(На самом деле до пункта 3 я дошел только после того как сделал пункт 2)
Пункт 3 мы и сделаем сегодня.
Я вдохновлялся в основном двумя проектами:
В принципе первый проект 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)
gecube
13.05.2019 06:47Интересно, почему всё-таки не запаковали в вирт.машину. Тот же вагрант прекрасно заходит. А в качестве ОС у админа тогда может быть что угодно. ОК. docker легче, быстрее стартует и т.п.
К тому же в крупных организациях на случай необходимости такого доступа — обычно есть отдельный rdp/vdi-сервер с windows со всеми нужными установленными штуками. Но его тоже нужно поддерживать в актуальном состоянии и тут уже есть слабое место, т.к. обычно этим занимаются коллеги из техпода. По остаточному принципу :-(
apt-get -y upgrade
Ещё добавлю, что в docker это не является best practice, т.к.
1. Совершенно не ясно, что попадет в итоговый образ
2. Образ излишне пухнет
3. Если нужны обновленные системные компоненты — наследуйся от обновленного базового образаdominigato Автор
13.05.2019 10:21Я сначала и сделал в виртуалке, но потом оказалось что многим это тоже надо. Мне гораздо легче послать одну команду через чат, чем выкладывать куда-то образ виртуалки, очень большой и ненужный overhead.
В принципе насчет апгрейда верно, но этот образ не будет много пересобираться :) он изначально задуман как песочница для легаси.gecube
13.05.2019 11:15Мне гораздо легче послать одну команду через чат, чем выкладывать куда-то образ виртуалки, очень большой и ненужный overhead.
не засчитывается :-) докер образ тоже нужно где-то хранить (публичный докер хаб?).
Теоретически его можно передать как исходный Dockerfile — это действительно просто. Но с тем же успехом можно переслать Vagrantfile с провижионингом виртуалки (он умеет подключить ansible и прочие системы для конфигурирования). Это я не к тому, что Вы неправы, а к тому, что могут быть альтернативные подходы.dominigato Автор
13.05.2019 15:40Ну здесь по-моему достаточно изоляции, виртуализация все-таки потяжелее будет.
Deadbeat
13.05.2019 12:22А вот это не пробовали: https://support.hpe.com/hpsc/doc/public/display?docId=c03334058?
Делать докер-контейнер, чтобы потом все равно накликивать в GUI — как-то не true way.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 и расположения звёзд на небе).dominigato Автор
13.05.2019 14:49Да, мне нужна была именно виртуальная консоль, с остальным особых проблем не было.
BDI
13.05.2019 15:02Сейчас погуглил, часть проблем с работой под JRE 7/8 вроде пофиксили в 2.29(может не все, у меня прошивка древнее). К тому же оказывается в 2018 году были новые версии(последняя 2.33 от 2018-03-30). Может сейчас уже[пока] можно опять ходить в виртуальную консоль распространёнными браузерами актуальных версий :). Но у меня все сервера до сих пор под 2.23(11/05/2013 ) — когда была острая нужда в виртуальной консоли, обновлений ещё не было, а потом… Работает — не трогай. Буду переставлять один из серверов, надо будет обновить прошивку до актуальной…
Taciturn
13.05.2019 16:03А что страшного в обновлении прошивки iLO? На ОС не влияет, прекрасно обновляется в любое время.
Проверил сейчас, на актуальной 2.33 никакого ERR_SSL_BAD_RECORD_MAC_ALERT, в Chrome всё открывается.BDI
13.05.2019 17:11А виртуальная консоль на 2.33 работает хоть как нибудь в актуальных браузерах на актуальной яве? Если нет, то смысла в обновлении для меня нет.
Прошивка обычно из под OS ставится(*). На одном OS установлена давно(04.04.2009), и повидала многое. Не хочется словить сбой в процессе прошивки и окирпичить iLO — тогда и питание не включить удалённо будет(самое ценное для меня). На другом стоит Hyper-V 2012R2, кастрирован он сильно — не всё ставится, и не всё что удаётся установить потом запускается/работает(даже если попробовать докинуть недостающие либы в папку программы, хотя для многих утилит HP это работает). Так как оба под боком, трудности с доступом в консоль не сильно напрягают.
(*) Хотя вроде пункт для загрузки bin-файла в вэбморде вижу, но не проверял глючит ли этот процесс через web-интерфейс, или работает нормально.
Третий хоть и с полноценной ОС в качестве гипервизора(онли), но стоит в другой стране, что малость отбивает желание перепрошивать железки удалённо без явной надобности. Хоть и понимаю что при проблемах с прошивкой iLO максимум без этого iLO останусь и всё, но полноценного местного админа в случае чего там нет…
Может из под ОС можно перепрошить и после неудачной попытки, не проверял. Вопрос сей пока не гуглил т.к. острой необходимости в данный момент нет. Если нужда возникнет — буду разбираться, а пока пусть работает как есть. «Не мешай технике работать», как учили нас на военной кафедре :).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 есть, по возможности стараюсь пользоваться ей.BDI
13.05.2019 18:09Спасибо, ценная информация, буду иметь ввиду. Как раз один из серверов планируется под полную переустановку(с небольшой модернизацией по железу), если планы не поменяются — на нём и попробую.
Deadbeat
14.05.2019 00:58спс., не то, чтобы я осуждаю, но чет давно выпал из мира проприетарных гуев. Так-то, статья годная.
Deadbeat
13.05.2019 12:25И вот ещё: https://docs.ansible.com/ansible/latest/list_of_remote_management_modules.html (см. раздел Hpilo)
inkvizitor68sl
13.05.2019 13:43О, у нас из этой штуки давно сервис с вебмордой сделан =) На каждый iKVM запускаем отдельный контейнер, пользователю плюём уникальной ссылкой с уже открытым iKVM.
Сами контейнеры запускает bash-лапша через xinetd. Ну и контейнер сами с нуля собираем, само собой.
Oz_Alex
Del, невнимательно читал статью.