Translated message

A translation of this page exists in English.

Red Hat Enterprise Linux でシリアルターミナルまたはコンソールをセットアップする方法

更新 -

はじめに

デバッグの用途に、シリアルコンソールがあると便利な場合があります。また、ヘッドレス運用にはシリアルターミナルがあると便利です。シリアルコンソールは、すべてのコンソール出力をシリアルポートに送付します。シリアルターミナルが適切に設定されていれば、リモートターミナルとしてシリアルポート経由でシステムにログオンすることができます。シリアルターミナルとコンソールの両方、またはどちらかだけをセットアップすることができます。このアーティクルでは、RHEL でのシリアルターミナルの設定について説明します。

コンテンツ

シリアルコンソール用のカーネルオプション設定

まず初めに、カーネルにすべてのコンソールメッセージをシリアルポートに出力させるには、起動時に console=ttyS0 (最後の文字はアルファベットの O ではなくゼロなので注意してください) パラメーターをカーネルに渡す必要があります。この設定は、通常ブートローダーを使用して実施します。ここでは、GRUB を使用しています。以下に示す例の設定では、システムはコンソール出力を通常のコンソール (「モニター」) tty0 に送付するのに加えて、出力を 115200 のボーレートでシリアルポート ttyS0 に送付します。

  • ファイル /boot/grub/grub.conf を編集して、カーネル行に以下のカーネルオプションを追加します。

    console=ttyS0,115200 console=tty0
    
  • たとえば、grub.conf を以下のように編集します

    [root@localhost ~]# cat /boot/grub/grub.conf
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/hda2
    #          initrd /initrd-version.img
    #boot=/dev/hda
    default=0
    timeout=10
    splashimage=(hd0,0)/grub/splash.xpm.gz
    title Red Hat Enterprise Linux AS (2.4.21-27.0.2.ELsmp)
            root (hd0,0)
            kernel /vmlinuz-2.4.21-27.0.2.ELsmp ro root=LABEL=/ console=ttyS0,115200 console=tty0
            initrd /initrd-2.4.21-27.0.2.ELsmp.img
    
  • 注記: 上記の例ではボーレートを 115200 としていますが、実際の構成でのボーレートは、ハードウェアの設定により異なります。それぞれのサーバーには独自のシリアルコンソール設定があり、一般的にはシステム BIOS に記載されています。これらの設定を適用する前に、サーバーのマニュアルも確認することを推奨します。誤ったボーレートが設定されると、ログイン時に意味のない文字が表示される場合があります。

  • 注記: システム出力のプライマリーコンソールは、カーネルパラメーターのリスト中 最後の コンソールです。上記の例では、VGA コンソール tty0 がプライマリーディスプレーで、シリアルコンソールがセカンダリーディスプレーです。つまり、シリアルコンソールはセカンダリーコンソールなので、init スクリプトからのメッセージは送付されません。ただし、ブートメッセージおよび重大な警告はシリアルコンソールに送付されます。init スクリプトのメッセージをシリアルコンソールにも表示させる必要があれば、コンソールパラメーターの順番を入れ替えてシリアルコンソールをプライマリーにしなければなりません。

    console=tty0 console=ttyS0,115200
    
  • grub.conf に加えたすべての設定変更は、次回のシステム再起動時に有効になります。

  • シリアルポート経由の root ログインを許可するためには、Red Hat Enterprise Linux 4、5、および 6 では、/etc/securetty ファイルにシリアルポートを追加する必要もあります。リストの最後に新しい行として ttyS0 を追加します。

    tty9
    tty10
    tty11
    ttyS0
    
  • Red Hat Enterprise Linux 7 の場合には、デフォルトで /etc/securettyttyS0 のエントリーがあります。

RHEL 4 および RHEL 5 でのシリアルターミナル設定

この設定では、シリアルコンソール経由でログインすることができるように、リモートターミナルとしてシリアルポートをセットアップします。そのためには、シリアルポート用に agetty プロセスを生成する必要があります。

  • 具体的には、/etc/inittab ファイルに以下の行を追加します。

    co:2345:respawn:/sbin/agetty ttyS0 115200 vt100
    
  • このオプションを、# Run gettys in standard runlevels セクションに追加する必要があります。

    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    co:2345:respawn:/sbin/agetty ttyS0 115200 vt100
    
  • この編集を行った後に、以下のコマンドを実行します。

    # init q
    

RHEL 6 でのシリアルターミナル設定

RHEL6 では、プライマリーコンソールがシリアルポートの場合には、 upstart (init プロセス) により agetty プロセスが自動的に開始されます (注記: 最後の console= パラメーターがプライマリーコンソールです)。

  • プライマリーコンソールではないシリアルポートで agetty を開始するには、以下の内容で新たな /etc/init/serial-ttyS0.conf ファイルを作成します。

    start on stopped rc RUNLEVEL=[2345]
    stop on runlevel [S016]
    
    respawn
    exec /sbin/agetty /dev/ttyS0 115200 vt100-nav
    
  • 続いて、再起動または以下のコマンドの実行により、新たな agetty を開始します。

    [root@localhost ~]# initctl start serial-ttyS0
    
  • 注記: 新たな agetty でキーボードが正常に機能しない場合には、カーネルパラメーターから console=ttyS0 を削除しなければならない場合があります。

    • 背景となる情報:

      • システムを起動すると、ハードウェアデバイスを取り扱う udev が開始されます。/lib/udev/rules.d/10-console.rules ファイルに従い udev は /dev/console を含む多数のデバイスを確認し、それぞれのデバイスに対して /lib/udev/console_check helper ヘルパープログラムを実行します。

        # Console initialization - keyboard, font, etc.
        KERNEL=="tty0",         RUN+="/lib/udev/console_init %k"
        
        # Check and set up serial and serial-like consoles if necessary
        KERNEL=="console",      RUN+="/lib/udev/console_check %k"
        KERNEL=="ttySG*",       RUN+="/lib/udev/console_check %k"
        KERNEL=="xvc*",         RUN+="/lib/udev/console_check %k"
        KERNEL=="hvsi*",        RUN+="/lib/udev/console_check %k"
        KERNEL=="hvc*",         RUN+="/lib/udev/console_check %k"
        
      • console_check が /dev/console をシリアルコンソールと判断すると (ioctl() システムコールを実行して)、以下のコマンドを実行します。

        /sbin/initctl emit --no-wait fedora.serial-console-available DEV=ttyS0 SPEED=115200
        
      • このコマンドにより fedora.serial-console-available イベントが init デーモンに送付されます。このイベントに対する init デーモンの処理は、/etc/init/serial.conf で設定されています。

        start on fedora.serial-console-available DEV=* and stopped rc RUNLEVEL=[2345]
        stop on runlevel [S016]
        
        instance $DEV
        respawn
        pre-start exec /sbin/securetty $DEV
        exec /sbin/agetty /dev/$DEV $SPEED vt100-nav
        
      • init デーモンは、serial.conf の exec 行からのコマンドを実行して agetty を起動します。

        /sbin/agetty /dev/ttyS0 115200 vt100-nav
        
      • これにより、シリアルコンソールにログインプロンプトが表示されます。

  • シリアルコンソールのステータスを確認するには、initctl コマンドを使用して init デーモンのジョブをクエリーします。

    [root@localhost ~]# initctl list | grep serial
    serial (ttyS0) start/running, process 1254
    
  • あるいは、

    [root@localhost ~]# initctl status serial DEV=ttyS0
    serial (ttyS0) start/running, process 1254
    
  • 上記の DEV=ttyS0 パラメーターに注意してください。このパラメーターを指定しないと、initctl はコマンドが不明確であることを示すエラーメッセージを返します。

    [root@localhost ~]# initctl status serial
    initctl: Unknown parameter: DEV
    
  • /etc/init/serial.conf でのジョブ定義のために、DEV=ttyS0 パラメーターが必要です (上記を参照)。

RHEL 7 でのシリアルターミナル設定

  • /etc/default/grub に以下の行を追加します (行がすでに存在する場合には、更新します)。

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
    GRUB_TERMINAL=serial
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    • GRUB_CMDLINE_LINUX_DEFAULT は、この設定をデフォルトのメニューエントリーにしか適用しません。設定をすべてのメニューエントリーに適用するには、GRUB_CMDLINE_LINUX を使用します。
    • 注記: /etc/default/grub ファイルでは、上記の各行のタイプは 1 回だけしか指定しないでください。 行がすでに存在する場合には、同じ行をコピーして追加するのではなく、その行を変更します。 これは、GRUB_CMDLINE_LINUX_DEFAULT 行をファイル内で 1 回だけ指定するためです。
  • 以下のように grub2-mkconfig -o コマンドを実行し、/boot/grub2/grub.cfg ファイルを再ビルドします

    • BIOS ベースのマシンの場合: ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    • UEFI ベースのマシンの場合: ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  • 追加の情報は、『RHEL 7 システム管理者のガイド』の「シリアルコンソールでの GRUB 2」から利用可能です。

シリアルコンソールからの GRUB のコントロール

VGA コンソールではなくシリアルコンソールを使用するように grub を設定することもできます。これにより、起動プロセスを中断し、別のカーネルを選択したりカーネルパラメーターを追加したりできます (例: シングルユーザーモードでの起動)。

  • シリアルコンソールを使用するように GRUB を設定するには、grub.conf でスプラッシュイメージをコメントアウトし、serial および terminal オプションを追加します。

    [root@localhost ~]# cat /boot/grub/grub.conf
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/hda2
    #          initrd /initrd-version.img
    #boot=/dev/hda
    default=0
    timeout=10
    #splashimage=(hd0,0)/grub/splash.xpm.gz
    serial --unit=0 --speed=115200
    terminal --timeout=5 serial console
    title Red Hat Enterprise Linux AS (2.4.21-27.0.2.ELsmp)
            root (hd0,0)
            kernel /vmlinuz-2.4.21-27.0.2.ELsmp ro root=LABEL=/ console=ttyS0,115200 console=tty0
            initrd /initrd-2.4.21-27.0.2.ELsmp.img
    
  • grub.conf に加えたすべての設定変更は、次回のシステム再起動時に有効になります。

Comments