Translated message

A translation of this page exists in English.

How does one set up a serial terminal and/or console in Red Hat Enterprise Linux?

更新 -

はじめに

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

コンテンツ

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

最初に、カーネルがシリアルポートにすべてのコンソールメッセージを出力するようにするには、起動時に console=ttyS0 (ここの 0 は数字のゼロ) パラメーターをカーネルに渡す必要があります。この設定は、通常ブートローダーを使用して実施しますが、この例では 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 システム管理者のガイド』26.9. を参照してください。シリアルコンソールでの GRUB 2

Red Hat Enterprise Linux 8

  • GRUB ブートパラメーターは、grub2-editenv コマンドを使用して編集されます。まず、現在のパラメーターを取得します。

    # grub2-editenv - list | grep kernelopts
    kernelopts=root=/dev/mapper/rhel_example-root ro crashkernel=auto resume=/dev/mapper/rhel_example-swap
    rd.lvm.lv=rhel_example/root rd.lvm.lv=rhel_example/swap 
    
  • ここから、行全体をコピーし、シリアルコンソールパラメーターを追加して、上記のコマンドに渡します。

    grub2-editenv - set "kernelopts=root=/dev/mapper/rhel_example-root ro crashkernel=auto resume=/dev/mapper/rhel_example-swap rd.lvm.lv=rhel_example/root rd.lvm.lv=rhel_example/swap console=tty0 console=ttyS0,115200"
    
  • これでコンソールパラメーターが設定されるはずです。パラメーターを有効にするには再起動が必要です。パラメーターをリスト表示して、パラメーターが設定されたことを確認できます。

    # grub2-editenv - list | grep kernelopts
    kernelopts=root=/dev/mapper/rhel_example-root ro crashkernel=auto resume=/dev/mapper/rhel_example-swap
    rd.lvm.lv=rhel_example/root rd.lvm.lv=rhel_example/swap console=tty0 console=ttyS0,115200
    

Red Hat Enterprise Linux 9

  • grubby コマンドを使用してカーネルパラメーターを変更します。

  • 現在のパラメーターを取得します。

       # grubby --info=ALL|grep -i args
    
      # grubby --info=ALL|grep -i args
       args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root      rd.lvm.lv=rhel/swap 
    
  • パラメーター console=tty0 console=ttyS0,115200 を更新します。

      # grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200"
    
  • これでコンソールパラメーターが設定されるはずです。パラメーターを有効にするには再起動が必要です。パラメーターをリスト表示して、パラメーターが設定されたことを確認できます。

     # grubby --info=ALL|grep -i args
      args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap console=tty0 console=ttyS0,115200"  
     # reboot
     # cat /proc/cmdline
    

シリアルコンソールからの 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