SerialLogin: различия между версиями

Материал из ALT Linux Wiki
м (ModemManager: mcst#4856; беглая вычитка)
(не показано 16 промежуточных версий 3 участников)
Строка 7: Строка 7:
Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели.
Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели.
# Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им.
# Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им.
# Настройка редиректа у загрузчика. Позволяет управлять видеть сообщения загрузчика и управлять им.
# Настройка редиректа у загрузчика. Позволяет видеть сообщения загрузчика и управлять им.
# Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic).
# Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic).
# Настройка getty. Позволяет получить доступ к загруженной ОС.
# Настройка getty. Позволяет получить доступ к загруженной ОС.
Строка 17: Строка 17:
== Настройка загрузчика ==
== Настройка загрузчика ==


=== Grub ===
Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком по последовательному порту.


Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком GRUB по последовательному порту. Для этого в файл /boot/grub/menu.lst (или /boot/grub/grub.conf, смотря как у вас) нужно записать:
=== GRUB ===
...при этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.
 
==== GRUB2 ====
 
В файл {{path|/etc/sysconfig/grub2}} нужно записать:
<pre>
GRUB_TERMINAL_OUTPUT='serial console'
GRUB_TERMINAL_INPUT='serial console'
GRUB_SERIAL_COMMAND='serial --unit=0 --speed=115200'
GRUB_TIMEOUT=30
</pre>
и далее выполнить {{cmd|update-grub}} (если этого скрипта ещё не было, то {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}}).
 
==== GRUB1 ====
 
В файл /boot/grub/menu.lst нужно записать:
<pre>
<pre>
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=30 console serial
terminal --timeout=30 console serial
</pre>
</pre>
При этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.


=== Lilo ===
=== LILO ===


В общие параметры загрузчика следует добавить  
В общие параметры загрузчика следует добавить  
Строка 33: Строка 48:


0 - номер порта com1, 1 - номер порта com2. К сожалению, это переключит весь ввод/вывод на RS-232, на мониторе сообщения загрузчика отображаться не будут. USB-serial с Lilo использовать невозможно.
0 - номер порта com1, 1 - номер порта com2. К сожалению, это переключит весь ввод/вывод на RS-232, на мониторе сообщения загрузчика отображаться не будут. USB-serial с Lilo использовать невозможно.
=== SYSLINUX ===
В общую часть syslinux.cfg (isolinux.cfg, extlinux.cfg -- по надобности) добавляем:
serial 0 115200


== Настройка ядра ==
== Настройка ядра ==


Загрузчик не влияет на то, как будет выводить сообщения ядро. Для него существует отдельный параметр console, который может иметь различное содержание в зависимости от конкретной ситуации. Добавляется в соответствии с используемым загрузчиком.
Загрузчик не влияет на то, как будет выводить сообщения ядро. Для него существует отдельный параметр console, который может иметь различное содержание в зависимости от конкретной ситуации. Добавляется в соответствии с используемым загрузчиком (само значение параметра console зависит, разумеется, не от загрузчика, а от ядра и железа).


Пример для Grub (с подсказками от Сергеея Власова):
=== GRUB2 ===
Пример изменения {{path|/etc/sysconfig/grub2}} (''без'' splash!):
<pre>
GRUB_CMDLINE_LINUX_DEFAULT='console=ttyS0,115200n8 panic=60'
</pre>
 
=== GRUB1 ===
Пример записи в {{path|/boot/grub/menu.lst}} с подсказками от Сергея Власова:
<pre>
<pre>
title ALTLinux Sisyphus
title ALTLinux Sisyphus
Строка 46: Строка 74:
</pre>
</pre>


Пример для Lilo:
=== LILO ===
Пример записи в {{path|/etc/lilo.conf}}:
<pre>
<pre>
image="/boot/vmlinuz-2.6.32-ovz-el-alt145"
image="/boot/vmlinuz-2.6.32-ovz-el-alt145"
Строка 57: Строка 86:
</pre>
</pre>


== настройка getty ==
== Настройка getty ==


Годятся mgetty и agetty. Ставятся из соответствующих пакетов.
=== Установка ===
 
Годятся mgetty и agetty. Ставятся из соответствующих пакетов. Для настройки входа вам нужно установить одну из этих утилит. Сделайте это обычным методом (apt-get, aptitude, synaptic).
=== Установка mgetty ===
В 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).


Например, это может выглядеть так:
Например, это может выглядеть так (mgetty):
<pre>
<pre>
~ # grep -iE '^[^#].*mgetty' /etc/inittab
~ # grep -iE '^[^#].*mgetty' /etc/inittab
Строка 74: Строка 101:
</pre>
</pre>


Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 115200 бит/с (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).


Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).
agetty настраивается аналогично, но командная строка отличается:
T0:23:respawn:/sbin/agetty -L ttyS0 115200 vt100


=== /etc/mgetty+sendfax/mgetty.config ===
=== /etc/mgetty+sendfax/mgetty.config ===
Строка 82: Строка 113:


=== Проверка ===
=== Проверка ===
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom''', '''miniterm.py''' из {{pkg|python-module-serial}}), указать ей параметры соединения — порт (на машине, откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.


=== Systemd ===
=== 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}}.
Всё вышеизложенное касается настройки для классического '''[[sysvinit]]'''. В случае использования '''[[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}}.


Дополнительное [http://0pointer.de/blog/projects/instances.html чтение].
Дополнительное [http://0pointer.de/blog/projects/instances.html чтение].
{{attention|без {{cmd|systemctl disable ModemManager}} могут наблюдаться проблемы в работе COM-порта с подобными симптомами (mcst#4856):<pre>ModemManager: <warn>  (ttyS0): couldn't set serial port closing_wait to none: Invalid argument
ModemManager: <warn>  (ttyS0): serial port closing_wait was reset!</pre>}}
== Удаленное подключение к Serial Console через IPMI ==
Для удаленного подключения к Serial Console через [[IPMI]] потребуется настроить управление сервером в BIOS или при помощи [[ipmitool]]; для подключения используется следующая команда:
<pre>$ ipmitool -I lanplus -U admin -f /home/admin/.ipmi_password' -H 10.32.4.178 sol activate</pre>
== Ссылки ==
* [http://www.tldp.org/HOWTO/Remote-Serial-Console-HOWTO/ Remote Serial Console HOWTO]
* [http://git.altlinux.org/people/mike/packages/?p=installer-feature-serial-stage3.git installer-feature-serial-stage3]
* [http://elinux.org/Grabserial ещё один скриптик для работы с COM-портом] (отличается развитыми возможностями хронометража, найдено [https://unix.stackexchange.com/questions/104834/how-to-log-serial-data-with-time-stamp здесь])


[[Категория:Admin]]
[[Категория:Admin]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}

Версия от 10:38, 21 августа 2020

Как настроить вход на машину через последовательный порт (Serial Login)

Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.

Напомню, что последовательные порты в Linux именуются в виде файлов /dev/ttyS* (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться /dev/ttyUSB* (тоже начиная с нуля).

Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели.

  1. Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им.
  2. Настройка редиректа у загрузчика. Позволяет видеть сообщения загрузчика и управлять им.
  3. Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic).
  4. Настройка getty. Позволяет получить доступ к загруженной ОС.

На всех этапах следует выбирать одинаковую скорость порта.

Настройка BIOS

Как выше было написано, это есть не в каждом BIOS. Практически всегда встречается в BIOS серверных материнских плат Intel. Следует найти соответствующий раздел и настроить.

Настройка загрузчика

Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком по последовательному порту.

GRUB

...при этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.

GRUB2

В файл /etc/sysconfig/grub2 нужно записать:

GRUB_TERMINAL_OUTPUT='serial console'
GRUB_TERMINAL_INPUT='serial console'
GRUB_SERIAL_COMMAND='serial --unit=0 --speed=115200'
GRUB_TIMEOUT=30

и далее выполнить update-grub (если этого скрипта ещё не было, то grub-mkconfig -o /boot/grub/grub.cfg).

GRUB1

В файл /boot/grub/menu.lst нужно записать:

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=30 console serial

LILO

В общие параметры загрузчика следует добавить

serial=0,115200n8

0 - номер порта com1, 1 - номер порта com2. К сожалению, это переключит весь ввод/вывод на RS-232, на мониторе сообщения загрузчика отображаться не будут. USB-serial с Lilo использовать невозможно.

SYSLINUX

В общую часть syslinux.cfg (isolinux.cfg, extlinux.cfg -- по надобности) добавляем:

serial 0 115200

Настройка ядра

Загрузчик не влияет на то, как будет выводить сообщения ядро. Для него существует отдельный параметр console, который может иметь различное содержание в зависимости от конкретной ситуации. Добавляется в соответствии с используемым загрузчиком (само значение параметра console зависит, разумеется, не от загрузчика, а от ядра и железа).

GRUB2

Пример изменения /etc/sysconfig/grub2 (без splash!):

GRUB_CMDLINE_LINUX_DEFAULT='console=ttyS0,115200n8 panic=60'

GRUB1

Пример записи в /boot/grub/menu.lst с подсказками от Сергея Власова:

title ALTLinux Sisyphus
        root (hd0,0)
        kernel /vmlinuz-smp ro root=/dev/hda2 console=uart,io,0x3f8,115200n8 fastboot
        initrd /initrd-smp.img

LILO

Пример записи в /etc/lilo.conf:

image="/boot/vmlinuz-2.6.32-ovz-el-alt145"
        initrd="/boot/initrd-2.6.32-ovz-el-alt145.img"
        label="2.6.32-ovz-el-alt145"
        addappend=" console=ttyS0,115200"
        root="UUID=c0de2323-72f0-4d8a-bcd0-6bc4815dfac1"
        read-only
        optional

Настройка getty

Установка

Годятся mgetty и agetty. Ставятся из соответствующих пакетов. Для настройки входа вам нужно установить одну из этих утилит. Сделайте это обычным методом (apt-get, aptitude, synaptic).

/etc/inittab

Нужно поправить файл /etc/inittab, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).

Например, это может выглядеть так (mgetty):

~ # 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, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 115200 бит/с (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды telinit q от суперпользователя или перезагрузки машины).

Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).

agetty настраивается аналогично, но командная строка отличается:

T0:23:respawn:/sbin/agetty -L ttyS0 115200 vt100

/etc/mgetty+sendfax/mgetty.config

Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл /etc/mgetty+sendfax/mgetty.config. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — info mgetty.

Проверка

Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу (cu, minicom, cutecom, miniterm.py из python-module-serial), указать ей параметры соединения — порт (на машине, откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением login:. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT не пускает пользователя root через последовательные порты. Вы можете это изменить, поправив файл /etc/securetty.

systemd

Всё вышеизложенное касается настройки для классического sysvinit. В случае использования 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.

Дополнительное чтение.

Внимание! без systemctl disable ModemManager могут наблюдаться проблемы в работе COM-порта с подобными симптомами (mcst#4856):
ModemManager: <warn>  (ttyS0): couldn't set serial port closing_wait to none: Invalid argument
ModemManager: <warn>  (ttyS0): serial port closing_wait was reset!


Удаленное подключение к Serial Console через IPMI

Для удаленного подключения к Serial Console через IPMI потребуется настроить управление сервером в BIOS или при помощи ipmitool; для подключения используется следующая команда:

$ ipmitool -I lanplus -U admin -f /home/admin/.ipmi_password' -H 10.32.4.178 sol activate

Ссылки