LINUX.ORG.RU

удалённое управление системной консолью

 


0

2

Вот есть uinput и /dev/vcs*. Вроде как, можно эмулировать ввод с клавиатуры и видеть содержимое /dev/tty. Есть что-то готовое, чтобы засунуть его в initramfs (ну и sshd с ним), и подключаясь по ssh видить, что там происходит в начальный момент загрузки?

Или это невозможно и какого-то функционала на уровне ядра не хватает?

★★★★★

Ответ на: комментарий от kostik87

Ну, как-бы в тему, но его же в initramfs не засунуть.

Меня то именно напрягает, что компьютер рабочий, включился, загрузил BIOS, Grub, initramfs, а там какая-нибудь ерунда, типа деградировашего RAID и нужно что-то нажать на клаве. И так как это всё мой зоопарк, то ip-kvm или ipmi не предвидется. И даже сооружать на ардуино/stm32 какой-то UART over Ethernet не хочется.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

Добавь реализацию opessh-server`а в initramfs, например dropbear.

А по поводу перенаправления вывода сообщений ядра, можно перенаправлять на com порт и его читать куда-нибудь.

Опять же, если будет сеть - можно в удалённый syslog слать.

Готового решения для тебя подсказать не могу.

Если железо серверное - там должен быть IPMI, даже в некоторых около десктопных чипсетах Intel есть аналог, если железо не серверное.

kostik87 ★★★★★
()
Ответ на: комментарий от mky

а там какая-нибудь ерунда, типа деградировашего RAID и нужно что-то нажать на клаве

Если надо просто, то сделай чтобы запускался с деградировавшим.

А касательно твоей идеи - она хорошая, но я бы не консоль в ssh пробрасывал, а кардинально менял идеологию загрузки (это долго делать): в initramfs должна быть базовая система с рабочим ssh, которая не имеет шансов незагрузиться, и если она смогла прочитаться с диска, а сетевая карта не сломалась - то оно уже будет. А дальше поверх этого уже можно запускать разную полезную нагрузку, включающую любые монтирования разделов с дисков. То есть корневой раздел - в оперативной памяти, а с диска пусть подтягиваются всякие /var /usr /home (/etc можно сделать симлинком на /var/etc).

firkax ★★★★★
()

Проще всего использовать серийный порт:

  1. Указать ядру использовать серийную консоль, гугли параметр ядра console.
  2. Указать грубу ту же самую консоль, гугли GRUB_TERMINAL и GRUB_SERIAL_COMMAND.

Если управляемый комп стоит далеко (для RS-232 заявленный максимум, кажись, около 15 метров), то можно купить на алике два конвертора RS-422 (заявленная максимальная длина проводов больше километра). Для связи нужно 4 проводника, сгодится старый езернетовский кабель с двумя витыми парами.

Платка RS-422 дешёвая, что-то около ста рублей (например), но нужно быть осторожным чтобы случайно не купить RS-485. Многие продавцы пишут RS-422/485, но это брехня. По уровню сигналов они совместимы, но RS-422 — двунаправленный точка—точка, а RS-485 — однонаправленный но один-ко-многим. Понятно, что RS-485 можно использовать для связи точка—точка, но связь будет однонаправленная.

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 1)
Ответ на: комментарий от debugger

RS-485 — однонаправленный но один-ко-многим. Понятно, что RS-485 можно использовать для связи точка—точка, но связь будет однонаправленная.

В таких случаях главное — случайно не рассказать этот бред кому-то, кто с 485 работает. Всё с точностью до наоборот. 485-й — двунаправленная шина. Да, часто применяют для Модбаса, где единственный мастер в шине, но связь при этом, естественно, двунаправленная (как иначе мастер ответ от слейва получит?).

alegz ★★★★
()
Ответ на: комментарий от firkax

Вот и вопрос, как запускать что-то, чтобы было видно и на мониторе и по ssh. Для меня починка только по ssh, не лучше, чем только через клаву/монитор.

Засунуть sshd в initramfs и сделать его запуск пораньше не сложно. И проверить, что sshd запускается в нужном месте, до того, как raid собирается и пр. И это проще, чем проверять, как поведут себя остальные скрипты из initramfs

Но сделать чтобы всё в initramfs после sshd запускалось в tmux или dtach? Как?

Писать свой initramfs совсем не хочется, видел пару брошеных проектов, сложно это. В начале просто налепить кода, а потом разбираться, допустим, как туда прикрутить LUKS... Старый я :)

Я хочу именно, чтобы оставался системный/дистрибутивный initramfs. И какую-то возможность зайдя по ssh понять, что происходит. С одной стороны, обновлять initramfs надо, но с другой стороны, в них вносят как новое, настраиваемое поведение, так и ошибки. За 20 лет несколько раз с таким сталкивался.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

а там какая-нибудь ерунда, типа деградировашего RAID и нужно что-то нажать на клаве

Просто положи dropbear в initramfs. Почитать логи, найти деградировавший рейд и продолжить загрузку или отправить в ребут - хватит.

pekmop1024 ★★★★★
()
Ответ на: комментарий от debugger

По мне, тогда уж лушче собирать uart over Ethernet на Ардуино + ENC28J60 или W5500. Будет дороже и геморой с прошивкой, но там сразу и usb-uart. Не знаю, правда, есть ли для grub драйвер для CH340. В случае с Ethernet обычно можно найти старый свич и им размножить один порт (если нет свободных пар совсем).

Но, я пока не совсем понял, а система сможет работать на две консоли (tty1 и serial0)? Груб, вроде как, работает, а initramfs-скрипты, они же, вроде, одну console= из параметров ядра выбирают.

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

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

Но, я пока не совсем понял, а система сможет работать на две консоли (tty1 и serial0)?

Камон, глянь, наконец, в документацию:

You can specify multiple console= options on the kernel command line. Output will appear on all of them. The last device will be used when you open /dev/console.
Serial Console

‘GRUB_TERMINAL_OUTPUT’
Select the terminal output device. You may select multiple devices here, separated by spaces.
<…>
‘GRUB_TERMINAL_INPUT’
Select the terminal input device. You may select multiple devices here, separated by spaces.
GNU Grub Manual

Я сам вывод на две консоли не пробовал, т. к. у меня был безголовый сервер (в котором не было даже видеокарты), и вывод на видеоконсоль мне не требовался. Менять настройки биоса (это был старый комп без уефи) такой сетап не позволяет, но начиная с груба уже можно работать удалённо.

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

Ну, про это сразу надо было писать. Схема с серийным портом — простейшая и лучшая, но только если компы расположены недалеко друг от друга, в пределах квартиры или дома.

У китайцев вроде есть конверторы Serial over Ethernet, но там цена уже под 1000 рублей, и я их не пробовал — нужды не было.

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 2)
Ответ на: комментарий от mky

Писать свой initramfs совсем не хочется,
Я хочу именно, чтобы оставался системный/дистрибутивный initramfs.

С этого и надо было начинать. Потому что на всё остальное имеются возражения. Ну да ладно.

Для меня починка только по ssh, не лучше, чем только через клаву/монитор.

Почему «только»? Хочешь чини через монитор, хочешь через ssh. Или тебе надо чтобы один сеанс починки можно было перекидывать туда-сюда в ходе его прогресса? Логи initramfs с ошибкой вроде в dmesg дублируются, их можно оттуда и посмотреть.

Засунуть sshd в initramfs и сделать его запуск пораньше не сложно.

Если просто засунуть то он начнёт себя странно вести после переключения корневой фс на дисковую.

firkax ★★★★★
()
Ответ на: комментарий от debugger

конвертор ( serial uart 232 ) - ethernet начинаются от 700 рублей, но в них не будет никакой защиты.
только простое преобразование serial в открытый TCP-порт и обратно.
в остальном согласен, самое эффективное - сможет показать все ошибки даже при инициализации ядра.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от mky

зависит от дистра. в некоторых инитрамфс генерится при каждой смене ядра и около него.
и достаточно будет прописать нужные строки в нужных скриптах в настройках инитрамфс и необходимы бинарь будет и внедрен и запущен и выдержит обновления инитрамфс…
ручками подвигать, эт да, придется.

pfg ★★★★★
()
Ответ на: комментарий от firkax

Если бы я хотел свой initramfs, я бы прикручивал туда tmux.

Почему «только»?

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

В целом, насколько я понимаю, initramfs работет, что-то делает, если ему что-то не понравилось, выкидывает shell и ждёт его завершения работы, чтобы пойти дальше. Как по ssh узнавать, чего он ждёт и где этот shell, и нормально ли kill этот shell, или нужен нулевой exit code?

В dmesg от initramfs нет сообщений. genkernel, насколько я понял из кода, вобще не ведёт лог. initramfs-tools пишет в /run/initramfs/initramfs.debug. mkinitcpio в /run/initramfs/init.log, причём первому нужно в cmdline параметр debug, а второму rd.debug rd.log=file. А если включена netconsole, то debug уйдет туда. И работает это, если не путаю, примитивно, через ″exec > filename 2>&1″, то есть вывод или на экран, или в файл, или в netconsole.

Куда пишет dracut не знаю. Но в целом получается, что каждый initramfs особый, и никаких гарантий, что завтра повдение не поменяется. Через два года понадобиться что-то починить и сиди разбирайся, куда лог пишется и почему не пишется.

mky ★★★★★
() автор топика
Ответ на: комментарий от debugger

Груб работает на несколько консолей. Сообщения ядра пишутся на несколько консолей. А initramfs скрипты могут сами парсить cmdline ядра, брать последнее значение и работать только на этой консоли.

Ну, плюс serial хорошо, пока ttyS1 физический. А если это будет USB, то нужно про это помнить, чтобы не воткнуть туда такой-же второй USB-UART (для МК, 1-wire, ещё чего-нибудь).

mky ★★★★★
() автор топика
Ответ на: комментарий от pfg

Но это будет просто бинарь в initramfs, а чтобы он стал мултиплексором терминалов, и скрипты initramfs запустились под ним просто так не получится. Я поэтому исходно и спрашивал, что есть ли бинарь, который мне показывает /dev/vcs1, а мой ввод с клавиатуры отправляет в uinput на целевой системе, как будто это клавиши нажимаются там.

mky ★★★★★
() автор топика

Не уверен, что совсем то, но для редхато-подобных дистрибутивов есть такой варинат для разблокировки LUKS по SSH https://github.com/gsauthof/dracut-sshd. Если требуется доступ к консоли без bmc/тележки с монитором, я обычно использую карту видеозахвата, которая втыкается в ноут по USB и консоль сервера выводится в OBS.

GLaDOS
()
Ответ на: комментарий от sergej

Спасибо. Да, похоже, что это почти то, что нужно. В условиях initramfs ещё не проверял, но в обычной системе c tty работает. Правда, автор так и не собрался силами и не сделал работу в терминале, а только по VNC. Для моих целей какой-то оверкилл получается — нужен vnc-клиент, чтобы посмотреть текстовую консоль.

Узнал, что в tty пишут через ioctl(fd,TIOCSTI,keycode). Правда, ощущение, что его начинают выпиливать. Хотя, с другой стороны, проект BRLTTY завязан на /dev/vcs* и TIOCSTI, может не выпилят полностью.

mky ★★★★★
() автор топика
Ответ на: комментарий от GLaDOS

Спасибо. Давно dracut не видел, там много прокачали, ЕМНИП, аналог /run/initramfs/rdsosreport.txt есть далеко не во всех initramfs. Странно, что ещё tmux запихнули, или systemd не позволяет...

я обычно использую карту видеозахвата

Ну у меня это настолько редко происходит, что мне без разницы что тащить — мониор или usb-video-capture с ноутом. Всё одно физически идти надо, а лень.

mky ★★★★★
() автор топика
Ответ на: комментарий от sergej

из ядра собирались выкидывать

Как-то слабо верится, но, в любом случае, в случае чего лет 10 можно на старом ядре рабоать и думать, куда бежать :)

С VNC в моём случае, не только в клиенте проблема. Я для ssh в initramfs ограничу вход только для локальной сети, плюс, когда что-то не загрузилось, может не быть тунелей между локалками. И, получается, туда зашёл по ssh, потом ещё, потом оказался по ssh в initramfs. И тут, вместо того, чтобы запустить, скажем так termtty, запускаешь linuxvnc и думаешь, где как порты пробросить, чтобы vnc-клиент законнектился.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

tty то останется. когда в последний раз смотрел - там хотели kmscon, я его даже попробовал. На самом деле действительно, зачем в ядре эмулятор терминала? Но выпиливать наверное будут очень долго.

sergej ★★★★★
()

Малинка с юсби рс232 , на малинке ssh сервер , в screen консоль системе которую надо мониторить.

Достоинство - можно мониторить несколько систем

bloodmeri
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.