หน้าฝน + พายุเข้า + น้ำมันแพง = ไฟดับ + ไฟตก + ไฟกระชาก? :-P
ว่าแล้วก็เลยติด UPS ให้กับคอมพิวเตอร์ซะ หลังจากที่ผัดผ่อนมานาน พร้อมกันนี้ ก็ไปเซ็ตระบบ auto
shutdown ให้กับเซิร์ฟเวอร์ที่โรงเรียนด้วย
สำหรับเครื่องเดสก์ท็อปตามปกติ แค่มีตัวกรองไฟเวลาปกติ เพื่อยืดอายุ power supply
และมีตัวจ่ายไฟสำรองเวลาไฟดับ พอให้มีเวลาเซฟงานและสั่ง shutdown เครื่อง ก็น่าจะเพียงพอแล้ว
แต่สำหรับเซิร์ฟเวอร์ที่ต้องเปิดทำงานนานๆ โดยไม่มีคนอยู่ประจำตลอดนั้น นอกจากต่อ UPS แล้ว
ก็ต้องมีระบบ shutdown อัตโนมัติ เพื่อให้เครื่องได้ shutdown ให้เรียบร้อย ก่อนที่แบตเตอรีของ UPS
จะหมด และต้อง restart เมื่อไฟมา หรือ activate on LAN ด้วย เพื่อการให้บริการที่ไม่สะดุด
จากความรู้ที่ได้จาก UPS
HOWTO ปรากฏว่า โปรโตคอลที่ UPS ใช้แจ้งเหตุมายังคอมพิวเตอร์ เป็นโปรโตคอลที่ยุ่งเหยิงที่สุด
แต่ละยี่ห้อจะใช้สายส่งสัญญาณต่างๆ กันไป ทั้ง RS-232 ปกติ, สายต่อพิเศษที่ใช้หัวต่อแบบ RS-232,
และ USB ซึ่ง UPS แบบเก่าจะใช้ RS-232 เป็นหลัก และใช้สายสัญญาณต่างๆ ของ RS-232
ส่งข้อมูลไม่เหมือนกันอีก ตามแต่ผู้ผลิตจะตั้งเอาเอง ดังนั้น ถ้าจะให้เซ็ตง่ายๆ ควรเลือก UPS แบบใช้
USB จะดีกว่า
แต่โชคดีหน่อย ที่ UPS มักจะมีโปรแกรม monitor สำหรับยูนิกซ์ต่างๆ รวมทั้งลินุกซ์มาให้ด้วย
(คงเป็นเพราะยูนิกซ์/ลินุกซ์ยังครองส่วนแบ่งตลาดเซิร์ฟเวอร์เยอะอยู่) แต่ถ้าไม่มี หรือมี แต่อยากใช้
FOSS มากกว่า ก็มีตัวเลือกหลักๆ คือ Network
UPS Tools (NUT) กับ APC UPS Daemon
(Apcupsd) ซึ่ง NUT ค่อนข้างเป็น framework ที่ใหญ่กว่า และครอบคลุม UPS กว้างกว่า
ส่วน Apcupsd นั้น มุ่งใช้กับ UPS ยี่ห้อ APC โดยเฉพาะ
ทั้งสองตัวมี Windows client ด้วย สามารถใช้ UPS ร่วมกับ Windows server ได้
NUT จะแบ่งองค์ประกอบเป็น upsd และ upsmon โดย upsd ทำหน้าที่ติดต่อกับ UPS โดยตรง
ส่วน upsmon จะคอยตรวจสอบสถานะของ UPS ผ่าน upsd ซึ่งเราสามารถกำหนดพารามิเตอร์ของ
upsmon ได้ ว่าจะให้ปิดเครื่องในสถานการณ์ไหน ดังนั้น สำหรับเครื่องที่ต่อสายข้อมูลกับ UPS ก็จะมี
upsd และ upsmon ทำงานอยู่ ส่วนเครื่องอื่นที่ใช้ UPS ร่วมกัน ก็จะเปิดแค่ upsmon แล้วเชื่อมต่อไปยัง
upsd ผ่านเครือข่าย แต่ upsmon ที่อยู่บนเครื่องที่เชื่อมตรงกับ UPS จะต่างจาก upsmon
ในเครื่องอื่น ตรงที่มันต้องสั่ง shutdown เป็นเครื่องสุดท้าย (ไม่งั้นเครื่องอื่นจะไม่มีข้อมูลสำหรับการตัดสินใจshutdown) ก็เลยจะเป็น upsmon แบบ master ส่วนที่เครื่องอื่นเป็นแบบ slave
ส่วน Apcupsd จะมี daemon ตัวเดียว ที่สามารถ config ให้รับข้อมูลจาก serial/USB port
หรือผ่านเน็ต และตั้งให้เป็น master หรือ slave ได้
ในกรณีที่ใช้ UPS ตัวเดียว จ่ายไฟให้กับเครื่องเครื่องเดียว ก็ตั้ง UPS daemon แบบ serial
หรือ USB แล้วแต่กรณี โดยตั้งค่า driver และ port ใน ups.conf ถ้าเป็น NUT (หรือ
apcupsd.conf ถ้าเป็น Apcupsd) จากนั้น ก็ตั้งค่าการ monitor โดยตั้งค่าใน upsmon.conf
ถ้าเป็น NUT (หรือ apcupsd.conf [ไฟล์เดิมนั่นแหละ] ถ้าเป็น Apcupsd)
ถ้ามีเครื่องอื่นใช้ UPS ร่วมด้วย ก็ตั้ง UPS monitor ที่เครื่องอื่น โดยถ้าเป็น NUT
ก็ให้เครื่องพวกนั้น monitor แบบ slave (ส่วนเครื่องหลัก ไม่่ว่าจะมีเครื่องอื่นต่อพ่วงหรือไม่ ก็ monitor
แบบ master อยู่แล้ว) แต่ถ้าเป็น Apcupsd ก็มีสองแบบที่เป็นไปได้
คือแบบ master-slave เหมือนกันนี้ (โดยที่ slave ตั้งชนิด UPS เป็นแบบ ethernet [แทนที่จะเป็น
serial หรือ USB] แล้วชี้ไปยัง IP ของ master ส่วน master ก็ลิสต์รายการ slave ทั้งหมด)
กับอีกแบบหนึ่งคือผ่าน NIS โดยให้ master เปิด NIS service แล้วให้เครื่องอื่น poll ข้อมูล UPS
เป็นระยะๆ เอา (ซึ่งคู่มือ Apcupsd บอกว่า แบบนี้เป็นแบบใหม่ เซ็ตง่ายกว่า เพราะไม่ต้องแก้ config ที่
master ทุกครั้งที่มีการเพิ่ม-ลดหรือเปลี่ยน IP ของ slave)
แล้วก็ตั้งพารามิเตอร์ใน upsmon.conf (สำหรับ NUT) หรือ apcupsd.conf
(สำหรับ Apcupsd) ว่าจะให้ shutdown เมื่อแบตเตอรีเหลือไฟกี่เปอร์เซ็นต์
หรือเหลือเวลาจ่ายไฟได้อีกกี่นาที ทั้งนี้ ขึ้นอยู่กับชนิดของ UPS ว่าเป็น smart UPS หรือไม่ด้วย
ถ้าเป็น UPS แบบดาดๆ ก็จะแจ้งแค่ OL/OB (on-line/on-battery) และ LB (low battery)
เท่านั้น ก็อาจจะสั่ง shutdown เครื่องเมื่อได้รับสัญญาณ LB ก็น่าจะเพียงพอ
NUT ยังมี component อื่นช่วยอำนวยความสะดวกอีก เช่น upsc (UPS client) เป็น command
line ไว้สอบถามสถานะของ UPS, nut-cgi เป็น cgi-bin ไว้ให้ตรวจสอบสถานะของ UPS
ผ่านเว็บได้
ดูๆ แล้ว NUT ท่าทางน่าใช้กว่า แต่ถ้าใช้ UPS ยี่ห้อ APC ล่ะก็ Apcupsd ดูจะใช้ความสามารถของ
APC ได้เต็มที่กว่า (แต่ apcsmart module ของ NUT ก็พยายามพัฒนาให้ใช้ข้อมูลจาก APC
ให้หมดเหมือนกัน)