2011/06/23(Thu)Fedora 9以降でシリアルコンソールを使用可能にする方法

2011/06/23 1:40 Software::Linux
ちょっと所用でシリアルコンソールアクセスしたくなったのだが、init処理がFedora 9でSysVinitからUpstartに変更されたことによって、設定方法が色々変わってしまった。
今回は、Upstartを採用しているFedora 9以降でシリアルコンソールを有効にする方法を紹介。
# いざ必要なとき、ググっても過去の設定方法とかがヒットしてなかなか見つけられない…

/etc/inittab

これまでのinitの挙動を書いていた/etc/inittabはrunlevelの設定のみを残し、他の設定(システム初期化、Ctrl+Alt+Delete押下時の挙動、そして今回のターミナル関連の設定)が個々の設定ファイルに分散された。
よって、このファイルは編集する必要なし。
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

/etc/init/serial.conf

これがずばりシリアルコンソールを提供するagettyというプログラムを起動するためのconfigであるが、コメントにあるように、grubのkernelパラメータにconsole設定を与えると、fedora.serial-console-availableが有効になってポートが用意されると書いてある。
よって、このファイルも編集する必要なし。
 Automatically start a configured serial console
#
# How this works:
#
# On boot, a udev helper examines /dev/console. If a serial console is the
# primary console (last console on the commandline in grub),  the event
# 'fedora.serial-console-available  ' is emitted, which
# triggers this script. It waits for the runlevel to finish, ensures
# the proper port is in /etc/securetty, and starts the getty.
#
# If your serial console is not the primary console, or you want a getty
# on serial even if it's not the console, create your own event by copying
# /etc/init/tty.conf, and changing the getty line in that file.

start on fedora.serial-console-available DEV=* and stopped rc RUNLEVEL=[2345]
stop on runlevel [016]

instance $DEV
respawn
pre-start exec /sbin/securetty $DEV
exec /sbin/agetty /dev/$DEV $SPEED vt100-nav

/boot/grub/menu.lst

シリアルコンソールを有効にするには、先ほどのserial.confに書いてあったように、ブート設定が書いてあるmenu.lst(=grub.conf)を編集すればよい。
defaultで指定されている項目番号(0オリジン)のkernel行の最後に"console=tty0 console=ttyS0,115200n8"のように付加する。
シリアル設定は115200bps, parity = No, 8bitという具合に。
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/sda1
#          initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
#hiddenmenu
title Fedora (2.6.35.13-92.fc14.i686.PAE)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.35.13-92.fc14.i686.PAE ro root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=ja_JP.UTF-8 KEYTABLE=jp106 vga=791 console=tty0 console=ttyS0,115200n8

    initrd /boot/initramfs-2.6.35.13-92.fc14.i686.PAE.img

再起動後

rebootしてくると、このようにagettyが接続を待ち受けていることが確認できる。
# ps auxw | grep agetty
root      1304  0.0  0.0   2060   540 ttyS0    Ss+  01:08   0:00 /sbin/agetty /dev/ttyS0 115200 vt100-nav
root      2157  0.0  0.0   4464   772 pts/0    S+   01:25   0:00 grep --color=auto agetty