SlideShare a Scribd company logo
1 of 48
Download to read offline
Масштабное системное администрирование
Настройка и управление системой из нескольких
сотен серверов
Александр Берсенёв
Вычислительный кластер. Вид издалека
План доклада
Случай 0. Включили N новых узлов. Установка ОС и ПО
Случай 1. Что-то идёт немного не так на N узлах(Easy)
Случай 2. + … и непонятно как быстро исправить (Medium)
Случай 3. + … и потерялся доступ к ним (Hard)
Случай 4. + … и нельзя перезагружаться (Nightmare)
Примечание: N > 100
Случай 0 Включили N новых узлов
N = 1 → установка с USB или CDROM
N > 100 → установка по сети
UEFI Boot Screen
DHCP: подготовка к загрузке по TFTP
/etc/dhcp/dhcpd.conf:
group {
filename "phi/pxelinux.0";
host phi1 {hardware ethernet f4:52:14:19:df:21; fixed-address 192.168.81.1; }
host phi2 {hardware ethernet f4:52:14:19:e1:e1; fixed-address 192.168.81.2; }
host phi3 {hardware ethernet f4:52:14:19:e1:c1; fixed-address 192.168.81.3; }
}
group {
filename "gpu/pxelinux.0";
host gpu1 {hardware ethernet f4:52:14:22:78:f1; fixed-address 192.168.81.11; }
host gpu2 {hardware ethernet f4:52:14:19:db:11; fixed-address 192.168.81.12; }
host gpu3 {hardware ethernet f4:52:14:22:79:01; fixed-address 192.168.81.13; }
}
Конфигурация загрузки для запуска
инсталлятора
/var/lib/tftpboot/gpu/pxelinux.cfg/default:
default installauto
timeout 300
label installauto
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.80.1/ks/setup-phi.cfg ksdevice=bootif
IPAPPEND 2
Пошла загрузка ядра
Конфиг инсталлятора
Самый главный файл с ответами на вопросы установки
/var/www/ks/setup-phi.cfg (часть 1 из 2):
install
url --url http://192.168.80.1/centos/ # откуда брать дистрибутив
text # выключаем gui
lang en_US.UTF-8
timezone --utc Asia/Yekaterinburg
rootpw --iscrypted $6$AkJqf3$9jk0861a75SAQlG4uDUO8Da..lBNT8fkoc0KGGxg/
services --enabled autofs,nslcd,nscd,munge,slurm # включаем сервисы
services --disabled postfix,NetworkManager # выключаем сервисы
# Разделы на диске
… удалено …
network --bootproto=dhcp --device=enp0s26u1u5u5 --onboot=off
reboot # Перезагрузиться после окончания установки
/var/www/ks/setup-phi.cfg (часть 2 из 2):
repo --name="EPEL" --baseurl=http://mirror.yandex.ru/epel/7/x86_64/ --cost=1001
repo --name="imkn" --baseurl=http://192.168.80.1/imkn_repo/ --cost=1001
%packages
@base
@core
puppet
nss-pam-ldapd
nfs-utils
autofs
%end
%post --log=/root/ks-post.log
rmdir /home /opt/rh /opt
ln -s /misc/common /misc/opt /misc/home /
mount 192.168.80.1:/common /mnt -o nolock,udp,ro,vers=3
rsync -a --cvs-exclude /mnt/admin/configs/all/ /
rsync -a --cvs-exclude /mnt/admin/configs/gpu/ /
%end
Конфиг инсталлятора
Работает инсталлятор
Работает инсталлятор
Работает инсталлятор
Перезагрузка в рабочую систему
Puppet. Настройка узлов
– Программы -> пакеты -> репозиторий
– Список пакетов которые должны бысть установлены -> Puppet -> хосты
/common/packages.pp:
# python's libraries
package { 'numpy': ensure => 'latest' }
package { 'scipy': ensure => 'latest' }
package { 'sympy': ensure => 'latest' }
package { 'net-snmp': ensure => 'latest' }
package { 'python-tables': ensure => 'latest' }
package { 'python-numexpr': ensure => 'latest' }
package { 'python-pyparsing': ensure => 'latest' }
package { 'python-argparse': ensure => 'latest' }
package { 'mpi4py-mpich2': ensure => 'latest' }
package { 'mpi4py-openmpi': ensure => 'latest' }
package { 'python-ply': ensure => 'latest' }
package { 'python-matplotlib': ensure => 'latest' }
Автоконфигурация узлов. Итоги
Новые узлы при подключении сами устанавливаются и настраиваются
Возможно, потребуется добавить одну строчку в конфигурацию
DHCP-сервера (у нас это автоматизировано)
Случай 1. Что-то пошло не так
Кстати: как мы понимаем что что-то пошло не так?
– Icinga (форк Nagios) с кастомными модулями + смс, email
– Система распределения ресурсов
– Тесты для узлов
– Патченный collectl + система визуализации с разбивкой по
задачам
– Фидбек от пользователей
Посмотреть (можно прямо сейчас):
http://umt.imm.uran.ru/procstat.php
https://alexbers.com/stat/
Обнаружился подозрительный узел
… или много подозрительных узлов
Запуск команды на нескольких узлах
A) $ for host in node{10..55}; do ssh "$host" uname -r; done
B) $ for host in node{10..55}; do ssh "$host" uname -r& done
C) $ pdsh -w node[2,4-6,10] uname -r
node2: 2.6.32-573.el6.x86_64
node10: 2.6.32-573.el6.x86_64
node5: 2.6.32-573.el6.x86_64
node6: 2.6.32-573.el6.x86_64
node4: 2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
…
Объединение вывода с узлов
$ pdsh -w phi[49-208],node[1-52] uname -r | dshbak -c
----------------
node[2,4-52],phi[49-74,77-176]
----------------
2.6.32-573.el6.x86_64
----------------
phi[75-76]
----------------
2.6.32-358.23.2.el6.x86_64
$ pdsh -w node[1-52] uname -r
node2: 2.6.32-573.el6.x86_64
node10: 2.6.32-573.el6.x86_64
...
Развёртывание интервалов имён на Python
>>> import hostlist
>>> hosts = hostlist.expand_hostlist("node[1-3,17]")
>>> hosts
['node1', 'node2', 'node3', 'node17']
>>> hostlist.collect_hostlist(hosts)
'node[1-3,17]'
>>> hostlist.collect_hostlist(["x1y1","x2y2", "x1y2", "x2y1"])
'x[1-2]y[1-2]'
Параллельное выполнение команды. Итоги
Умеем быстро выполнять команды на группах узлов
Умеем находить узлы, где результат выполнения команд
отличается
Случай 2. Поможет только переустановка ОС
Как загрузиться по сети?
Решение: изменить настройки bios/efi, чтобы узел
грузился по сети и свести задачу к предыдущей
(«перенакатить узел»)
IBM – ASU (Advanced Settings Utility)
$ asu64 set IMM.PXE_NextBootEnabled Enabled
$ reboot
HP – hp-scripting-tools
$ hp-reboot pxe
Синхронизация настроек BIOS/EFI
IBM – ASU (Advanced Settings Utility)
$ asu64 show
HP – hp-scripting-tools
$ conrep --save
$ conrep --load
Удалённое управление BIOS/UEFI. Итоги
Умеем изменять настройки bios/efi
Умеем синхронизировать настройки bios/efi
Случай 3. Потерян доступ к узлам
Доступ через управляющий модуль
В серверы встраивается плата управляющего модуля с
доступом через Ethernet
HP – Integrated Lights-Out
IBM – Integrated Management Module
Нужен API
API дистанционного управления
У HP есть официальный perl'овский API.
И есть неофициальный питоновский:
https://github.com/seveas/python-hpilo:
import hpilo
ilo = hpilo.Ilo(host, login="admin", password="admin")
ilo.set_one_time_boot("network")
ilo.reset_server()
Существует отраслевой стандарт IPMI
$ ipmitool -I lanplus -H host -U admin -P admin chassis
bootparam pxe
Слабая защита в IPMI
Доступ через управляющие модули. Итоги
Большинство производителей серверов встраивают
модули удалённого управления и предоставляют API для них
Если включён IPMI, срочно поместите его в отдельный vlan :)
Случай 4. Всё плохо и нельзя перезагружать узлы
Доступ к консоли через веб – ужасен
Самоподписанные сертификаты
Доступ к консоли через веб – ужасен
Вход на управляющий модуль
Доступ к консоли через веб – ужасен
Вход на управляющий модуль
Доступ к консоли через веб – ужасен
Java. Предупреждение 1
Доступ к консоли через веб – ужасен
Java. Предупреждение 2
Доступ к консоли через веб – ужасен
Java. Предупреждение 3
Доступ к консоли через веб – ужасен
Java. Предупреждение 4
Доступ к консоли через веб – ужасен
Консоль без Copy-Paste и за $$
Правильный доступ к консоли.
Решение: используем удалённый доступ к serial-
порту
– работает copy-paste
– не требует лицензии
– работает по ssh, по ключам, в одну команду
$ ssh admin@node2-mgmt -t console 1
Настраиваем хост на работу с serial-консолью
Необходимо:
– выставить в bios/efi настройку, чтобы процесс
загрузки (до ОС) попадал в serial-port
– добавить serial --unit=1 --speed=115200 в
параметры загрузчика
– добавить console=ttyS1,115200 в параметры ядра
Автоматизируем работу с консолью
import pexpect
import sys
F1 = "x1bOP"
UP = "x1b[A"
DOWN = "x1b[B"
ESC = "x1b"
ssh_args = [ "-l", "admin", sys.argv[1], "-t"]
s = pexpect.spawn("/usr/bin/ssh", ssh_args, logfile=sys.stdout, timeout=180)
s.expect('system> '); s.sendline("reset")
s.expect('system> '); s.sendline("console 1")
s.expect('<F1> Setup'); s.send(F1)
s.expect('Exit Setup'); s.send(DOWN * 4 + "rn")
s.expect('Select Next One-Time Boot'); s.send(DOWN * 8 + "rn")
# skipped
s.expect('Do you want to Reset System'); s.send("y")
Удалённый доступ к консоли. Итоги
Не пользуйтесь веб-интерфейсом, вешайте консоль на
последовательный порт и пользуйтесь ей
С помощью модуля Pexpect можно автоматизировать ввод команд в
консоль сотен машин. Получается очень грязно, но работает.
Спасибо
Александр Берсенёв
bay@hackerdom.ru
https://github.com/alexbers/
https://twitter.com/alex_bers

More Related Content

What's hot

сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27MoscowJS
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данныхPyNSK
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоAvitoTech
 
Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 newInfoTeCS
 
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоевнастройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоевMedia Gorod
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep e-Legion
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиYandex
 
NeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeo_QUEST
 
Android emulators features
Android emulators featuresAndroid emulators features
Android emulators featuresRoman Butok
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting Yandex
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Anastasia Lubennikova
 

What's hot (20)

сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27"Web Audio Api", Анатолий Найда, MoscowJS 27
"Web Audio Api", Анатолий Найда, MoscowJS 27
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данных
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 new
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоевнастройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Антон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасностиАнтон Карпов - Обзорная лекция по безопасности
Антон Карпов - Обзорная лекция по безопасности
 
NeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железо
 
Android emulators features
Android emulators featuresAndroid emulators features
Android emulators features
 
Installcd Kyivbsd09
Installcd Kyivbsd09Installcd Kyivbsd09
Installcd Kyivbsd09
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
 

Similar to Управление большим количеством физических серверов, Александр Берсенев, Институт Математики и Механики УрО РАН

Upg_Pack_DUW.docx
Upg_Pack_DUW.docxUpg_Pack_DUW.docx
Upg_Pack_DUW.docxUOPSETIF
 
Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Как приручить проектное окружение. PHP UG Minsk, июнь'2014Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Как приручить проектное окружение. PHP UG Minsk, июнь'2014kamazee
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntusamsolutionsby
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментовVitalii Morvaniuk
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Ontico
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 

Similar to Управление большим количеством физических серверов, Александр Берсенев, Институт Математики и Механики УрО РАН (20)

Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Upg_Pack_DUW.docx
Upg_Pack_DUW.docxUpg_Pack_DUW.docx
Upg_Pack_DUW.docx
 
Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Как приручить проектное окружение. PHP UG Minsk, июнь'2014Как приручить проектное окружение. PHP UG Minsk, июнь'2014
Как приручить проектное окружение. PHP UG Minsk, июнь'2014
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
2017-03-11 01 Игорь Родионов. Docker swarm vs Kubernetes
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Пакетирование для Debian/Ubuntu
Пакетирование для Debian/UbuntuПакетирование для Debian/Ubuntu
Пакетирование для Debian/Ubuntu
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Net2
Net2Net2
Net2
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Введение в Docker
Введение в DockerВведение в Docker
Введение в Docker
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

Управление большим количеством физических серверов, Александр Берсенев, Институт Математики и Механики УрО РАН

  • 1. Масштабное системное администрирование Настройка и управление системой из нескольких сотен серверов Александр Берсенёв
  • 2.
  • 4. План доклада Случай 0. Включили N новых узлов. Установка ОС и ПО Случай 1. Что-то идёт немного не так на N узлах(Easy) Случай 2. + … и непонятно как быстро исправить (Medium) Случай 3. + … и потерялся доступ к ним (Hard) Случай 4. + … и нельзя перезагружаться (Nightmare) Примечание: N > 100
  • 5. Случай 0 Включили N новых узлов N = 1 → установка с USB или CDROM N > 100 → установка по сети
  • 7. DHCP: подготовка к загрузке по TFTP /etc/dhcp/dhcpd.conf: group { filename "phi/pxelinux.0"; host phi1 {hardware ethernet f4:52:14:19:df:21; fixed-address 192.168.81.1; } host phi2 {hardware ethernet f4:52:14:19:e1:e1; fixed-address 192.168.81.2; } host phi3 {hardware ethernet f4:52:14:19:e1:c1; fixed-address 192.168.81.3; } } group { filename "gpu/pxelinux.0"; host gpu1 {hardware ethernet f4:52:14:22:78:f1; fixed-address 192.168.81.11; } host gpu2 {hardware ethernet f4:52:14:19:db:11; fixed-address 192.168.81.12; } host gpu3 {hardware ethernet f4:52:14:22:79:01; fixed-address 192.168.81.13; } }
  • 8. Конфигурация загрузки для запуска инсталлятора /var/lib/tftpboot/gpu/pxelinux.cfg/default: default installauto timeout 300 label installauto kernel vmlinuz append initrd=initrd.img ks=http://192.168.80.1/ks/setup-phi.cfg ksdevice=bootif IPAPPEND 2
  • 10. Конфиг инсталлятора Самый главный файл с ответами на вопросы установки /var/www/ks/setup-phi.cfg (часть 1 из 2): install url --url http://192.168.80.1/centos/ # откуда брать дистрибутив text # выключаем gui lang en_US.UTF-8 timezone --utc Asia/Yekaterinburg rootpw --iscrypted $6$AkJqf3$9jk0861a75SAQlG4uDUO8Da..lBNT8fkoc0KGGxg/ services --enabled autofs,nslcd,nscd,munge,slurm # включаем сервисы services --disabled postfix,NetworkManager # выключаем сервисы # Разделы на диске … удалено … network --bootproto=dhcp --device=enp0s26u1u5u5 --onboot=off reboot # Перезагрузиться после окончания установки
  • 11. /var/www/ks/setup-phi.cfg (часть 2 из 2): repo --name="EPEL" --baseurl=http://mirror.yandex.ru/epel/7/x86_64/ --cost=1001 repo --name="imkn" --baseurl=http://192.168.80.1/imkn_repo/ --cost=1001 %packages @base @core puppet nss-pam-ldapd nfs-utils autofs %end %post --log=/root/ks-post.log rmdir /home /opt/rh /opt ln -s /misc/common /misc/opt /misc/home / mount 192.168.80.1:/common /mnt -o nolock,udp,ro,vers=3 rsync -a --cvs-exclude /mnt/admin/configs/all/ / rsync -a --cvs-exclude /mnt/admin/configs/gpu/ / %end Конфиг инсталлятора
  • 16. Puppet. Настройка узлов – Программы -> пакеты -> репозиторий – Список пакетов которые должны бысть установлены -> Puppet -> хосты /common/packages.pp: # python's libraries package { 'numpy': ensure => 'latest' } package { 'scipy': ensure => 'latest' } package { 'sympy': ensure => 'latest' } package { 'net-snmp': ensure => 'latest' } package { 'python-tables': ensure => 'latest' } package { 'python-numexpr': ensure => 'latest' } package { 'python-pyparsing': ensure => 'latest' } package { 'python-argparse': ensure => 'latest' } package { 'mpi4py-mpich2': ensure => 'latest' } package { 'mpi4py-openmpi': ensure => 'latest' } package { 'python-ply': ensure => 'latest' } package { 'python-matplotlib': ensure => 'latest' }
  • 17. Автоконфигурация узлов. Итоги Новые узлы при подключении сами устанавливаются и настраиваются Возможно, потребуется добавить одну строчку в конфигурацию DHCP-сервера (у нас это автоматизировано)
  • 18. Случай 1. Что-то пошло не так
  • 19. Кстати: как мы понимаем что что-то пошло не так? – Icinga (форк Nagios) с кастомными модулями + смс, email – Система распределения ресурсов – Тесты для узлов – Патченный collectl + система визуализации с разбивкой по задачам – Фидбек от пользователей Посмотреть (можно прямо сейчас): http://umt.imm.uran.ru/procstat.php https://alexbers.com/stat/
  • 21. … или много подозрительных узлов
  • 22. Запуск команды на нескольких узлах A) $ for host in node{10..55}; do ssh "$host" uname -r; done B) $ for host in node{10..55}; do ssh "$host" uname -r& done C) $ pdsh -w node[2,4-6,10] uname -r node2: 2.6.32-573.el6.x86_64 node10: 2.6.32-573.el6.x86_64 node5: 2.6.32-573.el6.x86_64 node6: 2.6.32-573.el6.x86_64 node4: 2.6.32-573.el6.x86_64 2.6.32-573.el6.x86_64 2.6.32-573.el6.x86_64 2.6.32-573.el6.x86_64 2.6.32-573.el6.x86_64 …
  • 23. Объединение вывода с узлов $ pdsh -w phi[49-208],node[1-52] uname -r | dshbak -c ---------------- node[2,4-52],phi[49-74,77-176] ---------------- 2.6.32-573.el6.x86_64 ---------------- phi[75-76] ---------------- 2.6.32-358.23.2.el6.x86_64 $ pdsh -w node[1-52] uname -r node2: 2.6.32-573.el6.x86_64 node10: 2.6.32-573.el6.x86_64 ...
  • 24. Развёртывание интервалов имён на Python >>> import hostlist >>> hosts = hostlist.expand_hostlist("node[1-3,17]") >>> hosts ['node1', 'node2', 'node3', 'node17'] >>> hostlist.collect_hostlist(hosts) 'node[1-3,17]' >>> hostlist.collect_hostlist(["x1y1","x2y2", "x1y2", "x2y1"]) 'x[1-2]y[1-2]'
  • 25. Параллельное выполнение команды. Итоги Умеем быстро выполнять команды на группах узлов Умеем находить узлы, где результат выполнения команд отличается
  • 26. Случай 2. Поможет только переустановка ОС
  • 27. Как загрузиться по сети? Решение: изменить настройки bios/efi, чтобы узел грузился по сети и свести задачу к предыдущей («перенакатить узел») IBM – ASU (Advanced Settings Utility) $ asu64 set IMM.PXE_NextBootEnabled Enabled $ reboot HP – hp-scripting-tools $ hp-reboot pxe
  • 28. Синхронизация настроек BIOS/EFI IBM – ASU (Advanced Settings Utility) $ asu64 show HP – hp-scripting-tools $ conrep --save $ conrep --load
  • 29. Удалённое управление BIOS/UEFI. Итоги Умеем изменять настройки bios/efi Умеем синхронизировать настройки bios/efi
  • 30. Случай 3. Потерян доступ к узлам
  • 31. Доступ через управляющий модуль В серверы встраивается плата управляющего модуля с доступом через Ethernet HP – Integrated Lights-Out IBM – Integrated Management Module Нужен API
  • 32. API дистанционного управления У HP есть официальный perl'овский API. И есть неофициальный питоновский: https://github.com/seveas/python-hpilo: import hpilo ilo = hpilo.Ilo(host, login="admin", password="admin") ilo.set_one_time_boot("network") ilo.reset_server() Существует отраслевой стандарт IPMI $ ipmitool -I lanplus -H host -U admin -P admin chassis bootparam pxe
  • 34. Доступ через управляющие модули. Итоги Большинство производителей серверов встраивают модули удалённого управления и предоставляют API для них Если включён IPMI, срочно поместите его в отдельный vlan :)
  • 35. Случай 4. Всё плохо и нельзя перезагружать узлы
  • 36. Доступ к консоли через веб – ужасен Самоподписанные сертификаты
  • 37. Доступ к консоли через веб – ужасен Вход на управляющий модуль
  • 38. Доступ к консоли через веб – ужасен Вход на управляющий модуль
  • 39. Доступ к консоли через веб – ужасен Java. Предупреждение 1
  • 40. Доступ к консоли через веб – ужасен Java. Предупреждение 2
  • 41. Доступ к консоли через веб – ужасен Java. Предупреждение 3
  • 42. Доступ к консоли через веб – ужасен Java. Предупреждение 4
  • 43. Доступ к консоли через веб – ужасен Консоль без Copy-Paste и за $$
  • 44. Правильный доступ к консоли. Решение: используем удалённый доступ к serial- порту – работает copy-paste – не требует лицензии – работает по ssh, по ключам, в одну команду $ ssh admin@node2-mgmt -t console 1
  • 45. Настраиваем хост на работу с serial-консолью Необходимо: – выставить в bios/efi настройку, чтобы процесс загрузки (до ОС) попадал в serial-port – добавить serial --unit=1 --speed=115200 в параметры загрузчика – добавить console=ttyS1,115200 в параметры ядра
  • 46. Автоматизируем работу с консолью import pexpect import sys F1 = "x1bOP" UP = "x1b[A" DOWN = "x1b[B" ESC = "x1b" ssh_args = [ "-l", "admin", sys.argv[1], "-t"] s = pexpect.spawn("/usr/bin/ssh", ssh_args, logfile=sys.stdout, timeout=180) s.expect('system> '); s.sendline("reset") s.expect('system> '); s.sendline("console 1") s.expect('<F1> Setup'); s.send(F1) s.expect('Exit Setup'); s.send(DOWN * 4 + "rn") s.expect('Select Next One-Time Boot'); s.send(DOWN * 8 + "rn") # skipped s.expect('Do you want to Reset System'); s.send("y")
  • 47. Удалённый доступ к консоли. Итоги Не пользуйтесь веб-интерфейсом, вешайте консоль на последовательный порт и пользуйтесь ей С помощью модуля Pexpect можно автоматизировать ввод команд в консоль сотен машин. Получается очень грязно, но работает.