SerialLogin: различия между версиями
Asy (обсуждение | вклад) (Скорректирована скорость RS-232) |
Asy (обсуждение | вклад) (Упорядочил по задачам настройки.) |
||
Строка 12: | Строка 12: | ||
На всех этапах следует выбирать одинаковую скорость порта. | На всех этапах следует выбирать одинаковую скорость порта. | ||
== Установка mgetty == | == Настройка BIOS == | ||
Как выше было написано, это есть не в каждом BIOS. Практически всегда встречается в BIOS серверных материнских плат Intel. Следует найти соответствующий раздел и настроить. | |||
== Настройка загрузчика == | |||
=== Grub === | |||
Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком GRUB по последовательному порту. Для этого в файл /boot/grub/menu.lst (или /boot/grub/grub.conf, смотря как у вас) нужно записать: | |||
<pre> | |||
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 | |||
terminal --timeout=30 console serial | |||
</pre> | |||
При этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру. | |||
=== Lilo === | |||
== Настройка ядра == | |||
Есть ещё один приём, рассказанный мне Сергеем Власовым. Не знаю, актуален ли он ещё, но мне в своё время помог. Если GRUB по последовательному порту работает нормально, но ядро, несмотря на параметр console=ttyS0, при загрузке не выводит ни одного сообщения, то может помочь специальное значение параметра console (привожу блок конфига целиком): | |||
<pre> | |||
title ALTLinux Sisyphus | |||
root (hd0,0) | |||
kernel /vmlinuz-smp ro root=/dev/hda2 console=uart,io,0x3f8,115200n8 fastboot | |||
initrd /initrd-smp.img | |||
</pre> | |||
== настройка getty == | |||
Годятся mgetty и agetty. Ставятся из соответствующих пакетов. | |||
=== Установка mgetty === | |||
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic). | В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic). | ||
== /etc/inittab == | === /etc/inittab === | ||
Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5). | Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5). | ||
Строка 29: | Строка 59: | ||
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8). | Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8). | ||
== /etc/mgetty+sendfax/mgetty.config == | === /etc/mgetty+sendfax/mgetty.config === | ||
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}. | Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}. | ||
== Проверка == | === Проверка === | ||
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}. | Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}. | ||
== | === Systemd === | ||
Всё вышеизложенное касается настройки для классического '''SySV-init'''. В случае использования '''systemd''' достаточно дать от суперпользователя команду {{cmd|ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service}} (Команда {{cmd|systemctl enable getty@ttyS0}} по умолчанию не действует, т.к. нет отдельного service-файла). Аналогично для других консолей. Это запустит agetty, требуемый systemd, при загрузке. Заметьте, что файл {{path|/etc/securetty}} действует и тут. Параметры запуска getty можно посмотреть в {{path|/lib/systemd/system/getty@.service}}. | Всё вышеизложенное касается настройки для классического '''SySV-init'''. В случае использования '''systemd''' достаточно дать от суперпользователя команду {{cmd|ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service}} (Команда {{cmd|systemctl enable getty@ttyS0}} по умолчанию не действует, т.к. нет отдельного service-файла). Аналогично для других консолей. Это запустит agetty, требуемый systemd, при загрузке. Заметьте, что файл {{path|/etc/securetty}} действует и тут. Параметры запуска getty можно посмотреть в {{path|/lib/systemd/system/getty@.service}}. | ||
Версия от 22:37, 27 октября 2016
Как настроить вход на машину через последовательный порт (Serial Login)
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.
Напомню, что последовательные порты в Linux именуются в виде файлов /dev/ttyS* (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться /dev/ttyUSB* (тоже начиная с нуля).
Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели.
- Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им.
- Настройка редиректа у загрузчика. Позволяет управлять видеть сообщения загрузчика и управлять им.
- Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic).
- Настройка getty. Позволяет получить доступ к загруженной ОС.
На всех этапах следует выбирать одинаковую скорость порта.
Настройка BIOS
Как выше было написано, это есть не в каждом BIOS. Практически всегда встречается в BIOS серверных материнских плат Intel. Следует найти соответствующий раздел и настроить.
Настройка загрузчика
Grub
Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком GRUB по последовательному порту. Для этого в файл /boot/grub/menu.lst (или /boot/grub/grub.conf, смотря как у вас) нужно записать:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=30 console serial
При этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.
Lilo
Настройка ядра
Есть ещё один приём, рассказанный мне Сергеем Власовым. Не знаю, актуален ли он ещё, но мне в своё время помог. Если GRUB по последовательному порту работает нормально, но ядро, несмотря на параметр console=ttyS0, при загрузке не выводит ни одного сообщения, то может помочь специальное значение параметра console (привожу блок конфига целиком):
title ALTLinux Sisyphus root (hd0,0) kernel /vmlinuz-smp ro root=/dev/hda2 console=uart,io,0x3f8,115200n8 fastboot initrd /initrd-smp.img
настройка getty
Годятся mgetty и agetty. Ставятся из соответствующих пакетов.
Установка mgetty
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита mgetty. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic).
/etc/inittab
Нужно поправить файл /etc/inittab, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).
Например, это может выглядеть так:
~ # grep -iE '^[^#].*mgetty' /etc/inittab T3:23:respawn:/sbin/mgetty -r -s 115200 -x 0 ttyS0 T4:23:respawn:/sbin/mgetty -r -s 115200 -x 0 ttyS1
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды telinit q от суперпользователя или перезагрузки машины).
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).
/etc/mgetty+sendfax/mgetty.config
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл /etc/mgetty+sendfax/mgetty.config. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — info mgetty.
Проверка
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу (cu, minicom, cutecom), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением login:. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя root через последовательные порты. Вы можете это изменить, поправив файл /etc/securetty.
Systemd
Всё вышеизложенное касается настройки для классического SySV-init. В случае использования systemd достаточно дать от суперпользователя команду ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service (Команда systemctl enable getty@ttyS0 по умолчанию не действует, т.к. нет отдельного service-файла). Аналогично для других консолей. Это запустит agetty, требуемый systemd, при загрузке. Заметьте, что файл /etc/securetty действует и тут. Параметры запуска getty можно посмотреть в /lib/systemd/system/getty@.service.
Дополнительное чтение.