Tuesday, May 22, 2012

FreeBSD: สภาวะแวดล้อมการทำงาน single user mode

มูลเหตุ ที่ต้องเขียนเรื่องนี้ขึ้นมานั้น ก็เนื่องมาจากการที่ต้องลงไปทำงานใน single user mode บ่อยครั้งเป็นพิเศษ ในระยะนี้ ทั้งนี้เพราะต้องการลดการทำงานของ process อื่นๆลง เพื่อไม่ให้อุณหภูมิของ cpu สูงเกินไป

อุณหภูมิของ cpu สูงนั้นเกิดจากการที่ไป compile บางโปรแกรมเข้า ซึ่งก็ให้งุนงงงไปหมดทั้งตัวเหมือนกันว่า มันเขียนโปรแกรมของมันยังไง ถึงกับให้ cpu ทำงานหนักมาก จนความร้อนขึ้นสูงขนาดนั้น 102.5 c เลยครับ

โปรแกรมที่ว่านี้ก็ได้แก่ gcc, firefox, chromium, boost-*, openjdk, openoffice, libreoffice พวกนี้ โดยเฉพาะอย่างยิ่ง ตัวหลังสุดเนี่ย ยอดเยี่ยมกระเทียมดองเอาเลยทีเดียวเชียว

พอสั่ง make ทีไร พวกเป็นต้องไปไล่ตั้งแต่ต้นใหม่ไปเสียทุกครั้ง

เครื่องที่ใช้ เป็น notebook ตัวเล็กๆ พอใช้ไปสักพักพวกก็ร้อน แล้วพาลดับตัวเองก่อนที่จะพัง ไปทุกครั้ง   เริ่มตั้งแต่ May 16 จนเอาเนี่ย วันนี้ May 22 เพิ่งจะเสร็จ เพราะความที่คอยเริ่มใหม่ทุกครั้ง ที่เครื่องตัด .... อย่างน้อยๆ ก็ สาม-สี่ชั่วโมงล่ะ ถึงเริ่มใหม่ได้อีกหน ขืนไม่หยุดรอ ก็พอดี เครื่องไหม้เอาได้

สิบนาฑีครับ ใช่ครับ เครื่อง compile ไม่เกินไปกว่า 10 นาฑี ก็ดับ ซึ่งพอดับ บางทีต้องมาเสียเวลาทำ ฟิ้สกี้ ก่อนอีกถึงจะทำงานต่อไปได้

เลยตัดใจลงมาทำงานที่ single user mode เสียเลยดีกว่า ซึ่งทำให้บาง partition นั้นไม่ต้อง mount ด้วยซ้ำไป

ประเด็นปัญหา กลับอยู่ที่ว่า ความคล่องตัวในการทำงานใน mode นี้กลับไม่มี แถมยังอันตรายมากอีกด้วย เพราะเวลาสั่ง ลบ หรือ สำเนา หรือ ย้ายแฟ้มเอกสาร พวกก็ทำไปดุ่ยๆ ไม่มีมารอถามเราว่า จะเขียนทับไหม แน่ใจน่ะว่าจะลบทิ้ง ...ฯลฯ  เหล่านี้ ไม่มีมาถาม นับว่าร้ายแรงมาก หากไปเผลอลบ / เข้า

ดังนั้น เมื่อลงสู่ single user mode แล้ว สิ่งที่ต้องทำเป็นลำดับแรกหลังจากได้รับ shell มาแล้ว (ซึ่งก็คือ sh) ก็ได้แก่ลำดับคำสั่งพวกนี้

# swapon  -a
# adjkerntz  -i
# mount  -a
# umount  /home

# alias  rm='rm -i'
# set  -o  vi
# set  autolist

ทั้งนี้ หมายความว่า file system ทุกตัวต้องสะอาด ไม่ต้องมาเสียเวลาทำ fsck กันอีกน่ะครับ
ขออธิบายไปทีล่ะคำสั่ง ดังนี้ครับ
  1. swapon -a อันนี้ เป็นการ mount swap file system ให้กับระบบครับ ต้องทำ แล option a  นั้นก็หมายถึงว่า หากเรากำหนดว่าเครื่องนี้มี swap file system กี่ file systems ก็เอามาให้หมดแหละ
  2. adjkerntz -i อันนี้เป็นการกำหนด CMOS clock ให้กับ kernel ครับ เรื่องเวลา สำคัญมาก
  3. mount -a อันนี้ เป็นการ mount ทุก file system ที่เครื่องมีอยู่ option a หมายถึงว่า all ครับ  แต่ในตอนที่เราอยู่ใน mode นี้ ไม่มีการ login ดังนั้น partition home จึงไม่ต้องใช้ ซึ่งเราจะ un-mount เอาทีหลัง ง่ายกว่ากัน
  4. umount /home อธิบายแล้ว ในข้อบนนั้นครับ
  5. alias rm='rm -i' คำสั่งนี้ บังคับว่า หากจะลบ ต้องถามเพื่อยืนยันไปก่อนลบ ทุกครั้งไป ป้องกันไว้ ดีกว่าเสียใจในภายหลังครับ  โดยเนื้อแท้ ต้องทำสำหรับคำสั่ง cp, mv ด้วย แต่เขียนมาเพียง ๑ คำสั่ง ก็พอ
  6. set -o vi เป็นการทำให้ทำงานด้วย keyboard ได้สะดวกขึ้น ปุ่มต่างๆ จะมีหน้าที่แบบเดียวกับที่ใช้งานบน vi เลยครับ
  7. set autolist อันนี้ก็เป็นตัวอำนวยความสะดวกอีกอย่างหนึ่งให้กับการทำงานใน mode นี้ กล่าวคือ เป็น file name completion mechanism นั่นเอง  ก็ลองนึกๆดูว่า ถ้าจะพิมพ์แค่ cd /usr/ports/editors/libreoffice แค่นี้ หากต้องกดแป้นพิมพ์ไปทุกตัว ก็ เหนื่อย ท้อ แล้วครับ  ใช้ปุ้ม tab บนแป้นพิมพ์ครับ สำหรับ เติมเต็มชื่อแฟ้มที่ยังขาดหายไป ซึ่งตามตัวอย่างที่ยกมา เราพิมพ์แค่ cd /u<tab>po<tab>edit<tab>libreoff  ในเมื่อ <tab> คือการกดปุ่ม tab ครับ

ตัวแปรสภาวะแวดล้อมทำงานพวกนี้ สามคำสั่งหลังนั้น เราสามารถกำหนดไว้ในแฟ้มได้เลยครับ ไม่ต้องมาลำบากกรอกคำสั่ง ไปเสียทุกครั้งที่ลงมาทำงานใน mode นี้  ให้นำ ๓ คำสั่งหลังที่ยกมานี้ ไปไว้ในแฟ้ม /root/.profile ครับ เขียนต่อท้ายไปจากของเดิมเลยน่ะครับ

ตัวแปรสภาพแวดล้อมการทำงานอื่นๆ ที่เห็นว่าจะอำนวยความสะดวกให้ ก็ลงไว้ในแฟ้มนี้ได้ด้วยเช่นกันครับ ส่วนใหญ่จะเป็น alias เช่น ll ซึ่งก็เท่ากับเรียกใช้ ls -FlA ครับ

อ้อ สำหรับข้อที่ 6 set -o vi นั้น มันช่วยให้ท่านเรียกคำสั่งเก่าๆขึ้นมาทำงานได้ ด้วยการกด ปุ่มลูกศรขึ้น  ครับ

No comments:


View My Stats