Showing posts with label env. Show all posts
Showing posts with label env. Show all posts

Wednesday, May 23, 2012

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

จากทั้งสองตอนที่ผ่านมา ไม่ว่าจะเป็น single user mode หรือ การเพิ่ม hard disk ก็พอเพียงที่จะนำไปสู่สาระในเรื่องการทำงานภายใต้สภาพแวดล้อมโดดเดี่ยว เป็นอิสระจากการรบกวนของ process อื่นๆที่ไม่จำเป็นกันได้แล้ว

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

ปกติ มะไฟ กำหนดให้ compile โปรแกรมพวก ports ทั้งหลายไว้ที่ partition อื่น ที่ไม่ใช่ /usr/ports โดยกำหนดเป็น ตัวแปรสภาพแวดล้อม ดังนี้

${WRKDIRPREFIX}

และที่สำหรับเก็บพวก source files ในรูปของ .tar.gz ก็เก็บไว้ที่ตามแต่ตัวแปรสภาพแวดล้อมจะชี้ไป ซึ่งตัวแปรสภาพแวดล้อมนี้คือ

${DISTDIR}

แล้วก็ส่วนที่เป็นสันดาน หรือนิสัยแปลกๆอีกอย่างคือ เมื่อ compile โปรแกรมได้แล้ว มักจะเก็บไว้เป็น packages ไปเสียด้วยเลย และก็เช่นกัน เก็บไว้ที่ไหน ก็ตามแต่ตัวแปรสภาพแวดล้อมจะชี้ไป ซึ่งทาง FreeBSD เขาก็กำหนดมาให้แล้วว่า เป็นตัวแปรชื่อ

${PACKAGES}

เหล่านี้ ดังนี้ เป็นต้น และก็ไม่ต้องแปลกใจว่า จะไปกำหนดให้ชี้ไปที่ไหน ตามนี้เลยครับ อย่างที่นึก อย่างที่คาดเดากันไว้แหละ

WRKDIRPREFIX=/kaitag/MNI
DISTDIR=/kaitag/distfiles
PACKAGES=/kaitag/packages

สามบรรทัดข้างบนนี้ ให้ท่านเขียนไว้ในแฟ้ม /etc/make.conf เลยครับ

อ้อๆ ทั้งสามสาระบบแฟ้มนั้น เป็นเจ้าของโดย root:wheel น่ะครับ ไม่งั้น เขียนลงไม่ได้

ลักษณะนิสัยอีกประการ (ที่อาจจะสร้างเสริมมาโดยหลักสูตรใหม่มั้ง) คือเมื่อเวลาสร้างโลกนั้น ระบบจะเขียนลงไปในสาระบบแฟ้ม /usr/obj ที่ดูทีไร ก็ไม่ชอบใจเลย เลยขอยักไปไว้ใน /kaitag/obj ด้วยเสียเลย โดยกำหนดให้เป็น ตัวแปรสภาพแวดล้อม ชื่อ MAKEOBJDIRPREFIX และให้เขียนไว้ที่แฟ้ม /root/.profile ดังนี้ครับ

MAKEOBJDIRPREFIX=/kaitag/obj
export MAKEOBJDIRPREFIX

ทั้งนี้ก็เพื่อว่า เมื่อท่านลงสู่ single user mode แล้ว จะได้ไม่ต้องมาเสียเวลาเขียนอีก

สรุป

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

MAKEOBJDIRPREFIX=/kaitag/obj
export  MAKEOBJDIRPREFIX

alias  rm='rm  -i'
alias  mv='mv  -i'
alias  cp='cp  -i'
alias  ll='ls  -lA'

set  -o  vi
set  autolist

และสำหรับแฟ้ม /etc/make.conf ขอให้เพิ่มบรรทัดดังต่อไปนี้น่ะครับ

WRKDIRPREFIX=/kaitag/MNI
DISTDIR=/kaitag/distfiles
PACKAGES=/kaitag/packages

ก็คงพอให้ท่านทำงานได้ และหวังว่า คงไม่ลืม ๔ คำสั่งแรก หลังจากได้รับ shell เมื่อก้าวลงสู่ single user mode แล้ว

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

ก็คงจบสาระที่วางไว้เพียงเท่านี้ และขอได้รับการขอบคุณจาก มะไฟ  สำหรับเวลาที่ท่านสละมาอ่าน
ลป. หวังว่าคงจำวิธีการ และ ข้อกำหนดในการเก็บ packages ได้น่ะครับ ว่า ท่านต้องสร้างสาระบบแฟ้ม ${PACKAGES}/All ไว้ก่อนด้วย โดยสั่งเพียงหนเดียว
#  mkdir  -p  ${PACKAGES}/All

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 นั้น มันช่วยให้ท่านเรียกคำสั่งเก่าๆขึ้นมาทำงานได้ ด้วยการกด ปุ่มลูกศรขึ้น  ครับ

View My Stats