คอนฟิก Serial Port เพื่อใช้เป็น Console Redirection บนลินุกซ์

ในบางครั้งที่เกิดปัญหากับลินุกซ์จนทำให้ไม่สามารถจะ login, telnet หรือ ssh เข้าไปที่ตัวเครื่องได้ ซึ่งอาจเนื่องมาจาก network ที่ต่ออยู่มีปัญหาหรืออาจจะเป็นปัญหาอื่นๆ

การที่จะแก้ปัญหาในเบื้องต้นจำเป็นต้องใช้หน้าจอ console ของเครื่องโดยตรงเพื่อ login เข้าไป ซึ่งการที่จะทำได้นั้น จำเป็นต้องมีคีย์บอร์ดและจอภาพต่ออยู่ ซึ่งถ้ามีอยู่แล้วหรือใช้เป็นแบบ KVM ก็สามารถทำได้ทันที แต่ในบางกรณีไม่ได้ต่ออุปกรณ์จำพวกนี้ไว้ ต้องไปหามาแล้วยกมาจากที่อื่น บางทีอาจต้องไปถอดจากเครื่องอื่นมาทำให้ไม่สะดวก

วิธีการหนึ่งที่ทำได้ แต่ต้องคอนฟิกไว้ตั้งแต่ตอนต้น ก่อนเกิดปัญหาคือ การใช้ console ผ่านทาง Serial Port หรือ COM Port ของเครื่อง โดยคอนฟิกพอร์ตนี้ให้ทำหน้าที่เป็น console ของเครื่อง แล้วใช้เครื่องอื่นๆ เช่น notebook ต่อสาย console เข้าไป ก็สามารถที่จะ login ผ่าน console ได้ ถ้าเปรียบเทียบก็เหมือนกับใช้ notebook ต่อสาย console เข้ากับอุปกรณ์ network ที่มีแต่ Serial Port เท่านั้น เช่น Cisco, 3Com, Alcatel,..

คุณสมบัตินี้โดยทั่วไปเรียกกันว่า Console Redirection ซึ่งถ้าเป็นเครื่องระดับ server ของ IBM, HP, Dell จะมีคุณสมบัติพวกนี้ติดมาอยู่แล้ว ส่วนถ้าเป็นเครื่อง PC ทั่วไปต้องตรวจสอบจากเครื่องหรือ mainboard ดู ว่ามีหรือไม่ ถ้ามีก็สามารถทำได้เหมือนกัน ในที่นี้จะแสดงตัวอย่างการคอนฟิกบนเครื่อง IBM x3400

การเปิดคุณสมบัติ Console Redirection ใน BIOS ของเครื่องที่รันลินุกซ์
เริ่มต้นต้อง reboot เครื่องเพื่อเข้าสู่โหมดคอนฟิก BIOS ของเครื่อง เพื่อเปิดคุณสมบัติ (enable) Console Redirection ซึ่งส่วนใหญ่โดยดีฟอลต์คุณสมบัตินี้จะถูกปิดอยู่ (disable) ลองหาเมนูที่เกี่ยวกับ I/O port สำหรับเครื่อง IBM x3400 จะอยู่ในเมนู Device and I/O Ports

หลังจากเปิดคุณสมบัติแล้ว จะมีเมนูย่อยเพื่อให้ตั้งค่าต่างๆ เกี่ยวกับ Serial Port โดยจะมีค่าต่างๆ เช่น Baud Rate, Flow Control, Type ซึ่งด้านล่างจะเป็นตัวอย่างการตั้งค่าคอนฟิก Serial Port ของเครื่อง IBM x3400

Console Redirection:
 Remote Console Serial Port [COM1]
 Baud Rate: 115.2K
 Console Type: VT100
 Flow Control [CTS/RTS]
 Console Connection: [Direct]
 Console Redirection after POST: [On]

ความหมายของค่าต่างๆ จะมีดังนี้

  •  Remote Console Serial Port : เลือกว่าจะใช้พอร์ตไหนเพื่อทำหน้าที่เป็น console โดยทั่วไปก็เลือกได้เป็น COM1 หรือ COM2
  •  Baud Rate : เลือกความเร็วในการรับส่งข้อมูล ซึ่งต้องตรงกับการตั้งค่าในโปรแกรมที่จะทำหน้าที่เป็น Terminal ด้วย ในที่นี้เลือกไว้สูงสุด 115.2K ซึ่งอาจต้องจดจำค่านี้ไปด้วย เพื่อไปตั้งค่าในโปรแกรม Terminal เพราะว่าถ้าความเร็วนี้ไม่ตรงก็ไม่สามรถ console ได้
  • Console Type : เลือกชนิดของ Terminal
  • Flow Control : การควบคุมการส่งข้อมูลผ่าน console แนะนำให้เลือกเป็น CTS/RTS (ใน HyperTerminal จะเรียกเป็น Hardware)
  • Console Connection : ลักษณะการเชื่อมต่อ
  • Console Redirection after POST : โดยดีฟอลต์ คุณสมบัติของ Console Redirection จะมีผลตอนบู๊ตเครื่องเท่านั้น หลังจากที่ขึ้นเมนูบู๊ตของ OS แล้ว เช่นอยู่ใน grub แล้ว คุณสมบัตินี้จะปิดไป   ต้องเปิดคุณสมบัตินี้หลังจากการบู๊ตเครื่องเสร็จด้วย เพื่อให้สามารถ login ได้

การรันโปรแกรม  Terminal บน Notebook และต่อสาย console
เราสามารถใช้สาย console ที่ใช้กับอุปกรณ์เช่น Cisco ได้ เพียงแต่ต้องมีหัวแปลงเพิ่มเติมตรงปลายสายจาก RJ45 – DB9 เพื่อต่อเข้ากับ Serial Port ของเครื่องลินุกซ์

แล้วก็ใช้โปรแกรม Terminal เช่น HyperTerminal โดยต้องตั้งค่าโปรแกรมให้ตรงกับที่ตั้งใน BIOS ของเครื่องลินุกซ์ เช่น Baud Rate และ Flow Control

หลังจากต่อสายและคอนฟิกโปรแกรม Terminal เรียบร้อย ก็บู๊ตเครื่องลินุกซ์อีกครั้งหนึ่ง ตอนนี้ข้อความต่างๆ ตอนบู๊ตเครื่อง จะมาแสดงในหน้าโปรแกรม Terminal ด้วย

แก้ไขคอนฟิก grub.conf
เมื่อบู๊ตเครื่องขึ้นมาเสร็จเรียบร้อย จะยังไม่สามารถ login ผ่าน console ได้ ต้องแก้ไขคอนฟิกเพิ่มเติม  สำหรับ grub ต้องเพิ่มคอนฟิก “console=ttyS0,115200 console=tty1” เข้าไปในไฟล์ /etc/grub.conf โดยอยู่ต่อท้ายบรรทัดที่มีการระบุ kernel ที่ใช้บู๊ตเครื่อง

ตัวอย่างการเพิ่มคอนฟิกเข้าไปในไฟล์ /etc/grub.conf  ใน Fedora 9

default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.25-14.fc9.x86_64)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.25-14.fc9.x86_64 ro root=UUID=xxx  console=ttyS0,115200 console=tty1
        initrd /boot/initrd-2.6.25-14.fc9.x86_64.img

แก้ไขคอนฟิก inittab หรือ event.d
ส่วนการแก้ไขไฟล์ inittab นั้นจะแตกต่างกันระหว่างลินุกซ์เวอร์ชั่นใหม่กับเก่า ซึ่งจะมีการคอนฟิก inittab แตกต่างกัน สำหรับ Fedora นั้น เวอร์ชั่นเก่าๆ ถึง Fedora 8 จะใช้ไฟล์ /etc/inittab แต่ถ้าเป็น Fedora 9 คอนฟิกจะแยกเป็นไฟล์อยู่ใน /etc/event.d/

ตัวอย่างการเพิ่มคอนฟิกในไฟล์ /etc/inittab ให้เพิ่มบรรทัดนี้เข้าไปต่อท้ายไฟล์ /etc/inittab <= Fedora 8

s0:2345:respawn:/sbin/agetty -h ttyS0 115200 vt100

ในกรณีนี้ หลังจากแก้ไขไฟล์ /etc/inittab เพื่อให้มีผลเลย ต้องใช้คำสั่ง init q เพื่อให้ระบบมีการอ่านไฟล์ /etc/inittab

หมายเหตุ การอ้างอิง Serial Port หรือ console บนลินุกซ์นั้น จะอ้างอิงชื่อเป็น ttyS0, ttyS1

ส่วนเวอร์ชั่นใหม่ๆ นั้น คอนฟิกของ init จะถูกแยกเป็นไฟล์ต่างๆ อยู่ใน /etc/event.d/ ซึ่งถ้ามีคอนฟิกเพิ่มเติม ต้องมีการสร้างไฟล์ใหม่ ในที่นี้จะใช้ชื่อเป็น ttyS0

ตัวอย่างไฟล์คอนฟิก /etc/event.d/ttyS0 Fedora 9

# ttyS0 - agetty
#
# Console Redirection
start on stopped rc2
start on stopped rc3
start on stopped rc4
start on started prefdm
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /sbin/agetty -h ttyS0 115200 vt100

เมื่อเพิ่มไฟล์เข้าไปใน /etc/event.d/ ต้องรันคำสั่ง initctl ตามตัวอย่างต่อไปนี้

[root@server ~]# initctl start ttyS0
ttyS0 (start) waiting
ttyS0 (start) starting
ttyS0 (start) pre-start
ttyS0 (start) spawned, process 2504
ttyS0 (start) post-start, (main) process 2504
ttyS0 (start) running, process 2504

แก้ไขคอนฟิก /etc/ securetty
สุดท้ายต้องเพิ่มบรรทัดที่มี ttyS0 เข้าไปในไฟล์ /etc/securetty ด้วย เพื่ออนุญาตให้ root สามารถ login ผ่าน ttyS0 ได้ด้วย มิฉะนั้น root จะไม่สามารถ login ผ่าน console ได้เลย

สรุป
เมื่อแก้ไขคอนฟิกต่างๆ แล้ว ก็สามารถจะ login ทาง console โดยผ่าน Serial Port ได้แล้ว โดยไม่จำเป็นต้องใช้คีย์บอร์ดหรือจอภาพเพื่อต่อเข้ากับเครื่องอีกต่อไป เหมาะสำหรับคอนฟิกเผื่อไว้ สำหรับในกรณีฉุกเฉิน

ถ้าทดลองบู๊ตเครื่องอีกครั้งการแก้ไขไฟล์ /etc/grub.conf จะทำให้ข้อความต่างๆ ตอนที่ลินุกซ์บู๊ตนั้น จะแสดงผลผ่านทาง console ด้วย ทำให้เราสามารถที่จะวิเคราะห์ปัญหาได้

Leave a Reply

Your email address will not be published.