SerialLogin
Материал из ALT Linux Wiki
м (→systemd) |
м (→Удаленное подключение к Serial Console через IPMI: викифицировал чуток) |
||
(19 промежуточных версий не показаны.) | |||
Строка 5: | Строка 5: | ||
Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля). | Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля). | ||
- | + | Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели. | |
+ | # Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им. | ||
+ | # Настройка редиректа у загрузчика. Позволяет видеть сообщения загрузчика и управлять им. | ||
+ | # Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic). | ||
+ | # Настройка getty. Позволяет получить доступ к загруженной ОС. | ||
- | == | + | На всех этапах следует выбирать одинаковую скорость порта. |
- | + | == Настройка BIOS == | |
+ | Как выше было написано, это есть не в каждом BIOS. Практически всегда встречается в BIOS серверных материнских плат Intel. Следует найти соответствующий раздел и настроить. | ||
- | == | + | == Настройка загрузчика == |
- | + | ||
- | + | Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком по последовательному порту. | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | === 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> | ||
- | |||
- | + | === 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 === | ||
+ | Пример изменения {{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> | ||
- | ==Systemd== | + | === LILO === |
- | Всё вышеизложенное касается настройки для классического '''SySV-init'''. В случае использования '''systemd''' достаточно дать от суперпользователя команду {{cmd|systemctl enable getty@ttyS0}} | + | Пример записи в {{path|/etc/lilo.conf}}: |
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | == настройка getty == | ||
+ | |||
+ | === Установка === | ||
+ | Годятся mgetty и agetty. Ставятся из соответствующих пакетов. Для настройки входа вам нужно установить одну из этих утилит. Сделайте это обычным методом (apt-get, aptitude, synaptic). | ||
+ | |||
+ | === /etc/inittab === | ||
+ | Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5). | ||
+ | |||
+ | Например, это может выглядеть так (mgetty): | ||
+ | <pre> | ||
+ | ~ # 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 | ||
+ | </pre> | ||
+ | |||
+ | Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 115200 бит/с (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины). | ||
+ | |||
+ | Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8). | ||
+ | |||
+ | agetty настраивается аналогично, но командная строка отличается: | ||
+ | |||
+ | T0:23:respawn:/sbin/agetty -L ttyS0 115200 vt100 | ||
+ | |||
+ | === /etc/mgetty+sendfax/mgetty.config === | ||
+ | Это необязательный шаг. Всё поведение 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}}. | ||
+ | |||
+ | === 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}}. | ||
+ | |||
+ | Дополнительное [http://0pointer.de/blog/projects/instances.html чтение]. | ||
+ | |||
+ | == Удаленное подключение к 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] | ||
[[Категория:Admin]] | [[Категория:Admin]] | ||
+ | {{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} |
Текущая версия на 12:11, 16 мая 2017
Как настроить вход на машину через последовательный порт (Serial Login)
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.
Напомню, что последовательные порты в Linux именуются в виде файлов /dev/ttyS* (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться /dev/ttyUSB* (тоже начиная с нуля).
Задача состоит из 4-х этапов, каждый из которых может быть необязательным, в зависимости от конечной цели.
- Настройка редиректа в BIOS. У десктопных материнских плат, как правило, отсутствует. Позволяет видеть процесс загрузки BIOS и управлять им.
- Настройка редиректа у загрузчика. Позволяет видеть сообщения загрузчика и управлять им.
- Настройка редиректа у ядра. Позволяет видеть сообщения ядра в процессе загрузки (включая kernel panic).
- Настройка 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), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске 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.
Дополнительное чтение.
Удаленное подключение к 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