Showing posts with label make. Show all posts
Showing posts with label make. Show all posts
Monday, June 18, 2012
UNIX Programming
อันธรรมดาเครื่องคอมพิวเตอร์ หรือที่สมัยนี้เรียกกันเป็น Desktop มั่ง Notebook มั่ง Netbook มั่ง Tablet มั่ง หากปราศจากเสียซึ่ง softwares ซะแล้ว ก็ไม่ต่างอะไรกับเศษวัสดุธรรมดาๆนี่เอง ประโยชน์ แม้แต่จะใช้ขับไล่หมา แมว ปัดกวาดบ้าน ก็ยังแทบหาไม่ได้ อย่าว่าแต่การใช้งานตามวัตถุประสงค์เลย อันว่า วัตถุประสงค์นี้ ก็ใช่แต่หมายถึงสิ่งที่ชายที่มีชื่อว่า ประสงค์ มีอยู่แต่เท่านั้นก็หามิได้ หากแต่ยังหมายความ ตามที่เขียนเอาไว้ใน พจนานุกรมภาษาไทย ฉบับราชบัณฑิตยสถาน พ.ศ. ๒๕๔๒ ซึ่งให้ความหมายเอาไว้ว่า
วัตถุประสงค์ น. ผลที่ประสงค์ให้บรรลุ เช่น วัตถุประสงค์ของ
มัธยมศึกษาก็เพื่อให้เยาวชนมีความรู้ คิดเป็น ทำเป็น และมีคุณธรรม,
จุดประสงค์ ก็ว่า.
ที่แม้จะพยายามอ่านอย่างไรๆ ก็ยากที่จะทำความเข้าใจได้ ภายในระยะเวลาทีกำหนด
เออก็ ปล่อยให้เป็นเรื่องของ ผู้เชี่ยวชาญในแต่ละเรื่องๆ เขาทำกันเข้าไปดีกว่า แล้วที่สุด ผู้เชี่ยวชาญทั้งหลายเหล่านั้น จะมาปรองดองกันอย่างไร ก็ให้เป็นหน้าที่ของอีกฝ่ายหนึ่ง นอกเหนือไปจากผู้เชี่ยวชาญ ว่า จะให้ปรองดองกันในแบบไหน หากว่าท่านทั้งหลายเหล่านั้น หาความปรองดองให้ลงรอยกันเข้ามิได้ ... ปล่อยไป
แต่แม้อย่างนั้น พึงทราบว่า วัตถุประสงค์นั้น ย่อมแตกต่างกันไป มีบ้าง นำมาใช้แทนเครื่องพิมพ์ดีด มีบ้าง นำมาใช้แทนโทรทัศน์ มีอยู่มาก ที่นำมาแทน โรงภาพยนต์ที่ฉายเรื่องสั้นลามก คันหู ไม่เสบย ก็พึงทราบไว้ด้วยเช่นกัน
ความที่กล่าวมาแล้วนี้ ก็พอจะเป็นสิ่งยืนยันได้เป็นอย่างดีว่า อันว่าตัวเครื่องคอมพิวเตอร์นั้น หากปราศจากเสียซึ่ง softwares เข้าดำเนินการโดยผู้ใช้แล้ว ก็ไม่ต่างอันใดเลยกับเศษวัสดุ ฤๅหากจะเทียบในทางธรรมก็คงกล่าวได้ว่า สักแต่ว่ารูปที่ไม่มีวิญญาณ(นาม)ครอง รังแต่จะผุพังไปตามกาล
กล่าวสั้นๆ เครื่องคอมพิวเตอร์นั้น เอามาใช้เขียน softwares หรือ programmes เท่านั้น จึงจะเกิดประโยชน์มหาศาล
ย้อนกลับเข้าสู่เรื่องเดิม UNIX Programming ที่ตั้งใจจะเขียนขึ้นมานี้ ก็เพียง ให้ท่านทั้งหลาย ได้ใช้ประโยชน์ เครื่องคอมพิวเตอร์ ที่ท่านหาซื้อมา ด้วยเงินของท่านนั้น ให้เกิดประโยชน์เต็มที่ โดยตั้งกรอบเรื่องราวเอาไว้ว่า
๑) เป็นการเขียนโปรแกรมภายใต้ระบบปฏิบัติการ FreeBSD อันเป็นการมุ่งหมายถึง สภาพแวดล้อมการทำงาน ในแบบฉบับของ UNIX เท่านั้น
๒) ผู้ใช้งานต้องมีความรู้เรื่องภาษา C เป็นอย่างดี
๓) เป็นการแนะนำแต่เรื่องพื้นๆ เป็นเบื้องต้นเท่านั้น
อนึ่ง เรื่องนี้ตั้งใจเขียนขึ้นมาด้วยความมุ่งมั่นดังกล่าว (ส่วนจะสำเร็จตามวัตถุประสงค์หรือไม่นั้น คงต้องไปนครนายกที่พี่สงค์เขาอาศัยอยู่ แล้วถามพี่เขาดู) ด้วยเอกสารอ้างอิงเท่าที่มีอยู่ในมือดังนี้
๑) 4.4 Programmer's Supplementary Documents; CSRG University of California at Berkeley
๒) The C Programming Language; Brian W. Kernighan, Dennis M. Ritchie
๓) Advanced Programming in the UNIX Environment; W. Richard Stevens
๔) เล่มอื่นๆ อันจะยกมากล่าวเป็นครั้งคราวๆไป โดยเฉพาะอย่างยิ่ง FreeBSD documentations ที่ระบบปฏิบัติการให้มาทั้งหมด
(๑) พื้นฐาน
(๑.๑) โปรแกรม อาร์กิวเม้นต์
เมื่อโปรแกรมถูกเรียกใช้งานนั้น (บทที่ ๗) arguments ที่ระบุในคำสั่ง -- ที่ปรากฏในรูปแบบของ ชื่อแฟ้มเอกสาร ที่มักเรียกกันว่า โปรแกรม -- จะปรากฏในรูปแบบของ จำนวน arguments และ array ของตัวชี้ไปยัง arguments นั้นๆ ในฟังก์ชั่นที่ชื่อ main แลโดยธรรมเนียมนิยม ค่าของ argv[0] จะเป็นชื่อของคำสั่งนั้นๆ ดังนี้แล้ว ค่าของ argc จึงมากกว่า 0 เสมอ
โปรแกรมต่อไปนี้ ซึ่งเป็นการยกตัวอย่างของโปรกม echo ในระบบมาอย่างหยาบๆ แสดงให้เห็นถึงกลไกดังกล่าวนั้น
/*
*
* myecho.c
*
*/
#include <stdio.h>
int main(argc, argv)
int argc;
char *argv[];
{
int i;
for(i = 1; i < argc; i++)
printf("%s%c", argv[i], (i < argc-1 ? ' ' : '\n'));
return(0);
}
argv เป็นตัวชี้ไปยัง array ซึ่งมีตัวชี้แต่ละตัวชี้ไปยัง แถวของอักขระที่จบลงด้วย \0 อันทำให้ทึกทักเอาว่าเป็น strings ได้โดยง่าย โปรแกรมนี้เริ่มด้วยการพิมพ์ argv[1] แล้วก็วนไปเรื่อยจนกว่าจะหมด
จำนวนนับของ arguments และตัว arguments เองจะเป็นพารามิเตอร์ให้กับฟังก์ชั่น main ที่ซึ่ง ถ้าเราต้องการใช้งานในภายหลัง เราต้อง copy เอาไว้ต่างหากในตัวแปรภายนอก อีกทีหนึ่ง
ในการคอมไพล์โปรแกรมนั้น เป็นกระบวนการที่ยุ่งยากเอาการอยู่ เพราะต้องกำหนดค่าของ search path ไปให้ครบ รวมทั้งการต้องระบุ libraries ต่างๆไปด้วย ในการนี้ FreeBSD เขาเอื้อให้ผู้เขียนโปรแกรม สามารถคอมไพล์ง่ายๆ ผ่านคำสั่ง make โดยคำสั่งนี้จะมุ่งมองหาแฟ้มที่ชื่อ Makefile ในสาระบบแฟ้มปัจจุบันก่อนเป็นเบื้องต้น ก็แลสาระของแฟ้ม Makefile นั้นเป็นดังนี้, สมมุติว่า โปรแกรมที่เขียนขึ้นมานี้ เก็บไว้ในแฟ้มชื่อ myecho.c และ ท่านต้องการให้ได้ผลลัพธ์ ของคำสั่ง จากการคอมไพล์แฟ้มนี้ ในชื่อ echo
CC=clang
CFLAGS= -g
PROG= echo
SRCS= myecho.c
NO_MAN=
.include <bsd.prog.mk>
ตรงบรรทัดที่ ๓ และ บรรทัดที่ ๔ จะเป็นการกำหนดชื่อโปรแกรม และ ชื่อแฟ้ม ตามลำดับ บรรทัดอื่นๆ ขอให้ผ่านไปก่อน ยังไม่ต้องให้ความสนใจในตอนนี้ ท่านลำบากเพียงสั่ง
% make
ก็ได้ executable file ชื่อ echo ในสาระบบแฟ้มปัจจุบันมาทันที ทดลองเรียกดู ตามนี้
% ./echo This is my first C programmes in FreeBSD
แล้วสังเกตุดูผลลัพธ์ที่ได้ และ เมื่อท่านเรียกโปรแกรมของระบบ ด้วย argument เดียวกัน ให้สังเกตุผลลัพธ์ด้วยว่า ต่าง หรือ เหมือนกันอย่างไร
% echo This is my first C programmes in FreeBSD
ขอให้สังเกตุความแตกต่างของทั้ง ๒ คำสั่งที่ยกมาให้ดูนั้นด้วย อนึ่งระบบปฏิบัติการที่ใช้ขณะนี้คือ
FreeBSD mni.jes.in.th 9.0-STABLE FreeBSD 9.0-STABLE #16: Wed Jun 13 06:36:32 ICT 2012 root@mni.jes.in.th:/kaitag/obj/usr/src/sys/JOTAWSKI amd64
ขอยุติตอนแรก ไว้ก่อนเท่านี้ ไม่นานเกินรอ ตอนถัดไปจะมาให้ท่านได้อ่านกัน
คำสำคัญ:
Brian W. Kernighan,
DMR,
FreeBSD,
make,
Makefile,
the C programming language,
unix programming
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
ต้นเหตุของเรื่อง เกิดจากการ 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 แล้ว จะได้ไม่ต้องมาเสียเวลาเขียนอีก
สรุป
![]() |
| มีใครสงสัยอะไรมั้ย |
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
คำสำคัญ:
/etc/make.conf,
${DISTDIR},
${PACKAGES},
${WRKDIRPREFIX},
base system,
binary objects,
env,
make,
ports,
process,
single user mode
Wednesday, November 2, 2011
คำขอ จากผู้เดือดร้อน
หลายตอนแล้วซิน่ะ แต่ เมื่อตั้งใจทำเพื่อให้ใช้งานได้เต็มที่ ก็ต้องทนครับ ยังขาดหลายอย่าง งวดนี้ เอาสั้นๆ จำเพาะเรื่องของการติดตั้ง เพื่อว่า พี่ๆ จะได้ลองจัด ลองปรับ ขอบเขต ของเรื่องราวเอาเองบ้าง
อ้อ ขอบอกกันก่อนน่ะครับว่า ขออภัยที่ต้องแนะนำในส่วนของ FreeBSD ไว้ก่อน แม้ว่า elog จะสามารถใช้กับ windows ได้ แต่ มะไฟ ไม่ใช้ windows เลยขอไม่ให้คำแนะนำ จะดีกว่า แต่ถึงอย่างนั้น ก็ได้ให้ link ไว้แล้วครับ ขอให้พี่ท่าน ไปปรึกษาผู้เชี่ยวชาญจำเพาะด้าน จะดีกว่า
ที่ยกเรื่องนี้มาบอก นอกจากเหตุผลดังกล่าวมาแล้ว ยังเกี่ยวข้องกับ การกำหนดแฟ้มข้อมูล ของงานทั้งหมดด้วยครับ
เอาล่ะ เรามาเริ่มกันได้เลย ขอให้ท่าน login เป็น root น่ะครับ
# cd /usr/ports/www/elog
# make LOGBOOKDIR=www/eLOG/FLOODING
# make LOGBOOKDIR=www/eLOG/FLOODING install clean
คำสั่งดังกล่าวนี้ จะทำให้แฟ้มบันทึกข้อมูล ถูกสร้างขึ้นในสาระบบแฟ้ม /usr/local/www/eLOG/FLOODING ซึ่งในสาระบบแฟ้มนี้ ก็จะมี Demo ให้ท่านได้ศึกษาเพิ่มเติมเอาอีกโสดหนึ่งด้วย หากท่านไม่กำหนดตัวแปร LOGBOOKDIR ไว้ เขาก็จะสร้าง สาระบบแฟ้ม /usr/local/www/elog เพื่อเก็บข้อมูลทั้งหม ไว้ให้ท่าน
นอกไปจากนี้แล้ว แฟ้มที่จัด configurations ต่างๆ ที่ได้บรรยายมานั้น เขาจะเก็บไว้ในสาระบบแฟ้ม /usr/local/etc ในชื่อที่กำหนดไว้แล้วด้วยเช่นกันคือ elogd.cfg
ที่จำเป็นต้องบอกไว้จำเพาะ ก็ด้วยเหตุที่ว่า แม้ว่าในคู่มือจะบอกว่า เราสามารถกำหนด LOGBOOK Dir ได้จากแฟ้ม elogd.cfg ก็ตาม แต่ลำดับความสำคัญ จะไม่สูงเท่ากับที่กำหนดไว้ใน startup script ตอนเปิดเครื่อง, อยู่ในแฟ้ม /usr/local/etc/rc.d/elogd , ซึ่งจะนำค่าตัวแปร LOGBOOKDIR ที่กำหนดไว้ในตอนลงโปรแกรม นั้น มาเขียนเอาไว้เลย
ดูว่าเป็น บั้ค ก็ไม่อาจจะมิใช่ว่าไม่ผิดนัก
เมื่อลงเสร็จแล้ว ขอให้ท่านสั่งตามนี้ หนเดียวพอน่ะครับ หนเดียวเท่านั้น
# echo elogd_enable=\"YES\" >> /etc/rc.conf
เพื่อว่า startup script มันจะได้ทำงานเองโดยอัตโนมัติ ตอนเปิดเครื่อง โดยที่ท่านมิต้องลำบากมาสั่งให้มันวิ่งเอง แต่หากท่านลงแล้ว ใจร้อนอยากวิ่งทันทีในบัดเดี๋ยวนั้น ก็เพียงแต่สั่ง
# /usr/local/etc/rc.d/elogd start
เมื่อผ่านตอนนี้ไปแล้ว ก็ขอให้ท่าน กำหนด ขอบเขต ของงานของท่านเอาเอง และปรับแต่งแฟ้ม /usr/local/etc/elogd.cfg ให้เข้ากับความต้องการของท่านเอาได้ ตามใจ
แล้ว เวลาใช้งาน จะทำอย่างไรกัน
มาทางนี้ครับ ให้เรียก web browser มาแล้วไปที่ url นี้เลย http://localhost:8000/
อ้อ ขอบอกกันก่อนน่ะครับว่า ขออภัยที่ต้องแนะนำในส่วนของ FreeBSD ไว้ก่อน แม้ว่า elog จะสามารถใช้กับ windows ได้ แต่ มะไฟ ไม่ใช้ windows เลยขอไม่ให้คำแนะนำ จะดีกว่า แต่ถึงอย่างนั้น ก็ได้ให้ link ไว้แล้วครับ ขอให้พี่ท่าน ไปปรึกษาผู้เชี่ยวชาญจำเพาะด้าน จะดีกว่า
ที่ยกเรื่องนี้มาบอก นอกจากเหตุผลดังกล่าวมาแล้ว ยังเกี่ยวข้องกับ การกำหนดแฟ้มข้อมูล ของงานทั้งหมดด้วยครับ
เอาล่ะ เรามาเริ่มกันได้เลย ขอให้ท่าน login เป็น root น่ะครับ
# cd /usr/ports/www/elog
# make LOGBOOKDIR=www/eLOG/FLOODING
# make LOGBOOKDIR=www/eLOG/FLOODING install clean
คำสั่งดังกล่าวนี้ จะทำให้แฟ้มบันทึกข้อมูล ถูกสร้างขึ้นในสาระบบแฟ้ม /usr/local/www/eLOG/FLOODING ซึ่งในสาระบบแฟ้มนี้ ก็จะมี Demo ให้ท่านได้ศึกษาเพิ่มเติมเอาอีกโสดหนึ่งด้วย หากท่านไม่กำหนดตัวแปร LOGBOOKDIR ไว้ เขาก็จะสร้าง สาระบบแฟ้ม /usr/local/www/elog เพื่อเก็บข้อมูลทั้งหม ไว้ให้ท่าน
นอกไปจากนี้แล้ว แฟ้มที่จัด configurations ต่างๆ ที่ได้บรรยายมานั้น เขาจะเก็บไว้ในสาระบบแฟ้ม /usr/local/etc ในชื่อที่กำหนดไว้แล้วด้วยเช่นกันคือ elogd.cfg
ที่จำเป็นต้องบอกไว้จำเพาะ ก็ด้วยเหตุที่ว่า แม้ว่าในคู่มือจะบอกว่า เราสามารถกำหนด LOGBOOK Dir ได้จากแฟ้ม elogd.cfg ก็ตาม แต่ลำดับความสำคัญ จะไม่สูงเท่ากับที่กำหนดไว้ใน startup script ตอนเปิดเครื่อง, อยู่ในแฟ้ม /usr/local/etc/rc.d/elogd , ซึ่งจะนำค่าตัวแปร LOGBOOKDIR ที่กำหนดไว้ในตอนลงโปรแกรม นั้น มาเขียนเอาไว้เลย
ดูว่าเป็น บั้ค ก็ไม่อาจจะมิใช่ว่าไม่ผิดนัก
เมื่อลงเสร็จแล้ว ขอให้ท่านสั่งตามนี้ หนเดียวพอน่ะครับ หนเดียวเท่านั้น
# echo elogd_enable=\"YES\" >> /etc/rc.conf
เพื่อว่า startup script มันจะได้ทำงานเองโดยอัตโนมัติ ตอนเปิดเครื่อง โดยที่ท่านมิต้องลำบากมาสั่งให้มันวิ่งเอง แต่หากท่านลงแล้ว ใจร้อนอยากวิ่งทันทีในบัดเดี๋ยวนั้น ก็เพียงแต่สั่ง
# /usr/local/etc/rc.d/elogd start
เมื่อผ่านตอนนี้ไปแล้ว ก็ขอให้ท่าน กำหนด ขอบเขต ของงานของท่านเอาเอง และปรับแต่งแฟ้ม /usr/local/etc/elogd.cfg ให้เข้ากับความต้องการของท่านเอาได้ ตามใจ
แล้ว เวลาใช้งาน จะทำอย่างไรกัน
มาทางนี้ครับ ให้เรียก web browser มาแล้วไปที่ url นี้เลย http://localhost:8000/
คำสำคัญ:
elog,
elogd.cfg,
FreeBSD,
LOGBOOKDIR,
make,
ports,
web application,
องค์ความรู้ สำหรับอุทกภัย,
อุทกภัย
Tuesday, June 2, 2009
FreeBSD ---> sendmail(4)
ตัวอย่างของการจัด sendmail configuration แต่พอเข้าใจ
จะเขียนยังไง ก็นึกไม่ออกเหมือนกัน ดูซินี่ นั่งจ้องจอตั้งนานสองนาน เรียกว่า ถ้าเป็น ปลากัด ก็ ท้องป่องไปแล้ว
เอาล่ะจะเอาแนว code fragment ก็แล้วกันน่ะ ส่วนรายละเอียดนั้น ก็อ่านเอาจากแฟ้ม /usr/share/sendmail/cf/README น่ะครับ ในนั้นแหละ คู่มือเลย เสียแต่เป็นภาษาอังกฤษ
เบื้องต้น ขอให้ท่าน สำเนาแฟ้มสำคัญๆไว้ก่อนดังนี้น่ะ
ขอให้ท่านดูแฟ้ม freebsd.mc น่ะครับ ดูให้ดีดี พิจารณา โครงสร้างของแฟ้มไปด้วย เพื่อว่าเวลาทำงาน ท่านจะได้ เพิ่มเติมได้ถูกที่ ถูกตำแหน่ง
ตัวอย่างที่ ๑ น่ะ ขอให้ท่าน สร้างแฟ้ม /etc/mail/sendmail.cf ของท่านขึ้นมาก่อน ตามนี้น่ะ
จากนั้น สั่งต่อไปนี้น่ะ
สุดท้ายของตัวอย่างนี้ ขอให้สั่ง
ต้องขออภัย พี่ เพื่อน น้องๆ ทุกท่านที่เอกสารไม่อยู่ในรูปแบบที่น่าอ่านตลอดเวลา ขออภัยจริงๆครับ ตอนนี้ คงได้เพียง ๑ ตัวอย่างน่ะ เนื้อที่ มันทำให้ล้าสายตารึเปล่าล่ะ
จะเขียนยังไง ก็นึกไม่ออกเหมือนกัน ดูซินี่ นั่งจ้องจอตั้งนานสองนาน เรียกว่า ถ้าเป็น ปลากัด ก็ ท้องป่องไปแล้ว
เอาล่ะจะเอาแนว code fragment ก็แล้วกันน่ะ ส่วนรายละเอียดนั้น ก็อ่านเอาจากแฟ้ม /usr/share/sendmail/cf/README น่ะครับ ในนั้นแหละ คู่มือเลย เสียแต่เป็นภาษาอังกฤษ
เบื้องต้น ขอให้ท่าน สำเนาแฟ้มสำคัญๆไว้ก่อนดังนี้น่ะ
# cp -R /etc/mail/ /etc/mail.orig/
จากนั้น สั่งหยุด sendmail ก่อนชั่วขณะหนึ่ง ระหว่างที่ทดลองอยู่เนี่ย ซึ่งก็หมายความว่า ท่านต้องเป็น root ตลอดเวลาที่ทดลองขอให้ท่านดูแฟ้ม freebsd.mc น่ะครับ ดูให้ดีดี พิจารณา โครงสร้างของแฟ้มไปด้วย เพื่อว่าเวลาทำงาน ท่านจะได้ เพิ่มเติมได้ถูกที่ ถูกตำแหน่ง
ตัวอย่างที่ ๑ น่ะ ขอให้ท่าน สร้างแฟ้ม /etc/mail/sendmail.cf ของท่านขึ้นมาก่อน ตามนี้น่ะ
# cd /etc/mail
# rm -f /etc/mail/`hostname`.mc
# make
# make install
ในตัวอย่างนี้ ขอให้ท่านแก้ไขแฟ้ม `hostname`.mc ตรงบรรทัด # rm -f /etc/mail/`hostname`.mc
# make
# make install
dnl define(`SMART_HOST', `your.isp.mail.server')
โดยให้เอา dnl ก่อนคำว่า define นั้นออกไปทิ้งเสียที่ไหนก็ได้ และอีกที่ที่ต้องแก้ไขคือ your.isp.mail.server นั้นหนะ ให้แก้เป็น mail server ของท่าน แก้ซะน่ะจากนั้น สั่งต่อไปนี้น่ะ
# grep -n Smart /etc/mail/sendmail.cf
# grep -n ^DS /etc/mail/sendmail.cf
ท่านจะพบว่า สองบรรทัดนี้ เลขที่ติดกันเลย และจะว่างจริงๆ คือบรรทัดหลังนั้นจะมีแค่ DS เท่านั้น ดังนี้เลย# grep -n ^DS /etc/mail/sendmail.cf
# "Smart" relay host (may be null)
DS
และ นั่นคือแฟ้มของ sendmail.cf ก่อนการแก้ไข DS
สุดท้ายของตัวอย่างนี้ ขอให้สั่ง
# make
# make install
แล้วใช้คำสั่ง grep คู่เดิมนั้นอีกที ก็คงเห็นความแตกต่างได้ชัดเจนน่ะ และก็ หวังว่าพี่ เพื่อน น้อง คงเข้าใจความหมายของคำ SMART_HOST ในตอนแรก ในแฟ้ม `hostname`.mc นั้นด้วยน่ะ# make install
ต้องขออภัย พี่ เพื่อน น้องๆ ทุกท่านที่เอกสารไม่อยู่ในรูปแบบที่น่าอ่านตลอดเวลา ขออภัยจริงๆครับ ตอนนี้ คงได้เพียง ๑ ตัวอย่างน่ะ เนื้อที่ มันทำให้ล้าสายตารึเปล่าล่ะ
คำสำคัญ:
.mc,
`hostname`,
cp -R,
FreeBSD,
make,
make install,
sendmail
Saturday, May 16, 2009
FreeBSD --> sendmail(1)
ต่อจาก ตอนแรก นั่นแหละ ที่ว่ามาและลองลุยเองที่บ้าน ก็เจอเข้าจังๆกับตัวเองว่า ก็ส่งไม่ออกเหมือนกัน แต่เหตุที่ส่งไม่ออกนั้น เป็นเพราะ โดเมน ไม่มีใช้งาน เลยเปลี่ยนเอาว่า ไม่ต้องใช้โดมงโดเมนมันหละ ก็ทำตาม FAQ ที่เขาบอกไว้ ซึ่งก็ขอขอบคุณ อาจารย์ ว. ณ. สุราษฎร์ธานี ไว้ ตรงนี้ด้วยเลย ที่กรุณาชี้แนะแหล่งเอกสาร ชิ้นนี้ให้
ยังงั้นก็เถอะ ยังส่งไม่ออกครับ มึนมาก เพราะเที่ยวคุยไว้แล้วว่า sendmail ที่มีมากับ FreeBSD เนี่ย มันมาแบบ oob คือ out of the box แบบว่าแกะกล่องก็ใช้ได้เลย
คราวนี้เอาใหม่ ดื้อใช้ โดเมน ที่เป็นของสถาบันฯแหละ ส่งไปหาตัวเอง ก็ไม่ได้อีก มาหยุดคิดว่า เอ เราก็มี account กับ no ip นี่นา เลยลองใช้ noip ก็ไม่ได้อีก
งวดนี้ ออกอาการเลยครับ เดินรอบบ้านเลย แต่ไม่ถึงรอบดี ฉุกใจคิดได้ ย้อนมาดู error ที่ได้มา ทุกตัวเหมือนกัน ไปติดที่ spamhaus
ก็ลองแวะเข้าไปดู ถึงได้รู้ว่า เขา block เรา พวกที่ใช้โมเด็มแบบ xDSL เขาจะปิดไว้ก่อน ถ้าเรามั่นใจว่า เราไม่อยู่ในข่ายที่จะโดน block ก็แจ้งเขาไป ก็ทำไปตามนั้น
รอ ๓๐ นาฑี อย่างที่เขาบอก พอครบเวลา ก็ส่งซ้ำอีกที
แล้วก็ตรวจดูด้วย
# mailq -v
อาคีมีดีส ก็ อาคีมีดีส เถอะ ได้อายก็แล้วกัน
ครับผมไม่มีอีเมล์หลงเหลือในคิวเลย ก็ขอได้โปรดดูจาก รูปจากตอนก่อนนั้นแหละ ตรงล่างสุดนั่นแหละ
อีกวันสองวันถัดมา
ถึงได้มีเวลามาตรวจดูว่าใน Inbox มีจดหมายมารึเปล่า ก็มีมาจริงๆแหละ ๒ ฉบับ ที่ส่งมาด้วย โดเมนของสถาบัน และ โดเมนของ no-ip นี่ไงครับ
เอาล่ะครับ ขอแสดงรูป
รายละเอียดของที่ส่งมาจากบ้านที่ปากเกร็ดมายัง Inbox ของตัวเองเพื่อยืนยันว่าได้รับจริง ขอให้สังเกตุดู headers ด้วย ก็ตรงคำว่า Recieved และ bullet สี่อันด้านขวามือนั่นแหละ ลองไล่ดู จากล่างขึ้นมาน่ะครับ เพราะจะเป็นประโยชน์มาก
ก็คงยังจบไม่ได้อีกเช่นเคย เดี๋ยวจะให้ดูบางส่วนของแฟ้ม .mc เพื่อ ดึงดูดความสนใจ เพื่อนๆไว้ก่อน สำหรับตอนหน้า ส่วนนี้ สำหรับ การไม่ใช้โดเมน กับ การไม่ต้องกำหนดว่า
FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`accept_unqualified_senders')dnl
หมายเลข ip ของเราจะจริงจะปลอมอย่างไรน่ะ อ้อ ดูไวยากรณ์ด้วยน่ะ ตลก แต่ไม่ดีเลย ยังไงก็ ไปหาดู รายละเอียดเอาเองจาก FAQ ของ sednmail น่ะครับ
และขอยกความดีอันนี้ให้กับ แม่ พ่อ ผู้บังเกิดเกล้า สำหรับ พฤษภาคม เดือนเกิด ปีนี้
ยังงั้นก็เถอะ ยังส่งไม่ออกครับ มึนมาก เพราะเที่ยวคุยไว้แล้วว่า sendmail ที่มีมากับ FreeBSD เนี่ย มันมาแบบ oob คือ out of the box แบบว่าแกะกล่องก็ใช้ได้เลย
คราวนี้เอาใหม่ ดื้อใช้ โดเมน ที่เป็นของสถาบันฯแหละ ส่งไปหาตัวเอง ก็ไม่ได้อีก มาหยุดคิดว่า เอ เราก็มี account กับ no ip นี่นา เลยลองใช้ noip ก็ไม่ได้อีก
งวดนี้ ออกอาการเลยครับ เดินรอบบ้านเลย แต่ไม่ถึงรอบดี ฉุกใจคิดได้ ย้อนมาดู error ที่ได้มา ทุกตัวเหมือนกัน ไปติดที่ spamhaus
ก็ลองแวะเข้าไปดู ถึงได้รู้ว่า เขา block เรา พวกที่ใช้โมเด็มแบบ xDSL เขาจะปิดไว้ก่อน ถ้าเรามั่นใจว่า เราไม่อยู่ในข่ายที่จะโดน block ก็แจ้งเขาไป ก็ทำไปตามนั้น
รอ ๓๐ นาฑี อย่างที่เขาบอก พอครบเวลา ก็ส่งซ้ำอีกที
# mailq -v
อาคีมีดีส ก็ อาคีมีดีส เถอะ ได้อายก็แล้วกัน
ครับผมไม่มีอีเมล์หลงเหลือในคิวเลย ก็ขอได้โปรดดูจาก รูปจากตอนก่อนนั้นแหละ ตรงล่างสุดนั่นแหละ
อีกวันสองวันถัดมา
เอาล่ะครับ ขอแสดงรูป
รายละเอียดของที่ส่งมาจากบ้านที่ปากเกร็ดมายัง Inbox ของตัวเองเพื่อยืนยันว่าได้รับจริง ขอให้สังเกตุดู headers ด้วย ก็ตรงคำว่า Recieved และ bullet สี่อันด้านขวามือนั่นแหละ ลองไล่ดู จากล่างขึ้นมาน่ะครับ เพราะจะเป็นประโยชน์มากก็คงยังจบไม่ได้อีกเช่นเคย เดี๋ยวจะให้ดูบางส่วนของแฟ้ม .mc เพื่อ ดึงดูดความสนใจ เพื่อนๆไว้ก่อน สำหรับตอนหน้า ส่วนนี้ สำหรับ การไม่ใช้โดเมน กับ การไม่ต้องกำหนดว่า
FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`accept_unqualified_senders')dnl
หมายเลข ip ของเราจะจริงจะปลอมอย่างไรน่ะ อ้อ ดูไวยากรณ์ด้วยน่ะ ตลก แต่ไม่ดีเลย ยังไงก็ ไปหาดู รายละเอียดเอาเองจาก FAQ ของ sednmail น่ะครับ
และขอยกความดีอันนี้ให้กับ แม่ พ่อ ผู้บังเกิดเกล้า สำหรับ พฤษภาคม เดือนเกิด ปีนี้
Sunday, May 3, 2009
FreeBSD ---> Sendmail
เอกสารอ้างอิง ก็ The Networking CD Bookshelf ของ O'Reilly แหละ ในบทของ sendmail โดยเฉพาะ เก่ามากแล้ว ตั้งใจทำด้วย เพราะช่างเผอิญ ให้ได้ตรง วันฉัตรมงคล พอดี นี่ก็ผ่านวันวิสาขะปูชาไปแล้ว วันพืชมงคล จรดพระนังคัญแรกนาขวัญ ก็ผ่านไปอีก และ วันเกิด ก็ผ่านไปแล้วด้วย ซีงิต ก็อย่างนี้
sendmail เป็น MTA ที่มีมา เรียกว่า มัดมา กับ FreeBSD สำหรับใช้งานด้าน e-mail
เราจะไม่พาดพิงถึงเรื่องอื่น นอกจาก ประเด็นร้อนขณะนี้ คือ มันส่งออกไม่ได้ อันนี้ อาจจะเกี่ยวข้อง กับ ความวุ่นวายภายในระบบ LAN ของท่าน ซึ่งก็ไม่ขอแตะต้อง อีกเช่นกัน
สถานการณ์ เป็นอย่างนี้น่ะ มีเพื่อนท่านหนึ่ง อืมม พี่ซิ ต้องเรียกเขาว่า พี่ พี่ซัน เขาบอกว่า sendmail ไม่ยอมส่งจดหมายให้ ก็ให้แปลกใจว่า พี่เค้าไปทำอะไรพิสดารไว้รึเปล่า เพราะปกติ sendmail กับ FreeBSD เนี่ย เขาทำมาไว้ชนิดที่เรียกว่า แกะกล่องได้ ก็นำออกมาใช้เลย
ก็แค่นั้นแหละ ที่สงสัย
แต่หลังจากนั้นก็เป็นเรื่องเป็นราวยาว เพราะการ อินเว้สติเกตุเม้นต์ เนี่ย มันต้องการ ข้อเท็จจริง มากมาย หลายด้านด้วยกัน มาประกอบการพิจารณา ... ฯลฯ กอรป ด้วยต้องการให้พี่เขาค่อยๆรู้ไปด้วย , ความจริง เราเอง ก็ใช่ว่า จะรู้ดี ไปกว่าพี่เค้าหรอกน่อ, เลยแนะไป ทำไป แต่ไปไปมามา ชักสงสัยว่า ที่บอกให้ทำๆน่ะ ทำรึเปล่า เพราะดูท่าว่า ไม่ได้แก้อะไรเลย พี่เขา คงเอือมเต็มที แต่ก็เกรงใจด้วย เลยให้เข้าไปแก้ไขเอาตามใจ
เอาล่ะ เรามาเริ่มกัน sednmail นั้นทำงานด้วยแฟ้ม หรือ เอกสาร สำคัญ ๓ แฟ้มเท่านั้นเอง คือ
ที่เป็นปัญหา ให้ต้องคิดเลย ทันทีคือ แฟ้มแรก นั่นแหละ พี่เขา ไปก่อกวนอะไร รึ ถึงส่งออกไม่ได้
ที่ คุระบุรี
(๑) เมื่อเข้าไปดูถึงได้รู้ว่า บางส่วนของแฟ้ม freebsd.mc ยังคงไม่ได้แก้ จึงจัดการแก้ไขซะ โดยเฉพาะตรงบรรทัด
dnl define(`SMART_HOST', `your.isp.mail.server')
ที่บอกให้พี่เขาแก้นั้น พี่เขาก็แก้แหละ แต่ไม่เอา dnl ออก เลยจำเป็นต้อง ลงมือเอง แล้วลบแฟ้ม ที่ขึ้นต้นด้วยชื่อเครื่อง และ ลงท้ายด้วย .mc ออกให้หมด จากนั้นจึงสั่ง
(๒) เมื่อทราบว่า ที่นี่ ไม่เปิด port 25 ไว้, จาก (๑) ที่ปากเกร็ด, และอยากรู้ว่า พี่เขาใช้ MTA ตัวไหน จึงสั่ง
# pkg_info -Ia
กลับตกใจมากกว่าเดิม เพราะพี่เขาลง sendmail จาก port !!! ซึ่งเมื่อเป็นเช่นนี้ แล้วอะไรล่ะ ที่ไปปิด smtp service ลำดับที่ 25 ไว้ ทำให้ส่งออกไม่ได้ เพราะเท่าที่รู้มา การที่ sendmail ไม่ได้วิ่งนั้น เป็นเพราะ มี MTA ตัวอื่น มาใช้บริการที่ smtp port 25 แต่ตัวอื่นที่ว่านั้น ก็คือ sendmail จาก port นั่นเอง รึว่า .....
ดูท่าทางแล้ว เกินกำลัง เลยหันมาทดลองกับเครื่องที่ปากเกร็ดดีกว่า และก็ไม่ได้เข้ามาอีกเลย
ที่ ปากเกร็ด
(๑) ระหว่างที่ทำอะไรที่ คุระบุรี นั้น ก็ลองตรวจดู ว่าที่โน่นเขามีอะไรอยู่บ้าง ทีแรกก็จะทำตอนที่ ssh เข้าไปนั่นแหละ แต่ ดูว่าคงไม่เร็วเท่าทำจากบ้าน ที่ ปากเกร็ด อีกอย่าง tools ต่างๆ ก็ยังไม่มี เลยตัดใจ ทำที่ ปากเกร็ด ดีกว่า
ความจริงที่ได้, zenmap, กลับทำให้ตกใจมากกว่า คือ เครื่อง ไม่เปิด port 25 ไว้เลย แต่ มีอะไรบางอย่าง วิ่งที่ port 587 แทน ซึ่งเมื่อ
# grep 587 /etc/services
ดู ก็รู้ว่า อ้อ นั่นคือ submission subsystem นั่นเอง ซึ่ง เมื่อถึงตรงนี้ ก็พอมองออกว่า คงมี การจัดการ อะไรบางอย่างไว้ ที่เราไม่สามารถ และ ไม่สมควร ไปก้าวก่ายให้มากนัก
ที่ได้เลยคือ แล้ว พี่เขาใช้ MTA ตัวไหนแทน sendmail กัน เลยต้องเข้าไปดูอีก
(๒) ที่นี่ รออยู่
เมื่อโซซัดโซเซ สะเง้าะสะแงะกลับมาจาก คุระบุรี เพราะเจอปัญหาที่ไม่สามารถแก้ได้ ก็เดินงึกๆงักๆวนไปเวียนมารอบๆ ThinkPad R51 ซะสี่ ห้า รอบ แล้วก็ลงมือ
ครับ ง่ายๆเลย ส่ง e-mail ออกนอกจากเครื่องของตัวเอง ผลที่ได้น่ะ เล่นเอาตกใจ เพราะมันก็ ส่งไม่ออกเหมือนกัน ไม่ต้องลำบากหาหลักฐานที่ไหนหรอก ก็ที่รูป นั่นแหละ ช่วงบนๆ ที่เห็นอยู่ไม่มาก นั่นแหละ
เอาล่ะ รู้สึกว่า จะต่อเรื่องกันตรงนี้ก็ไม่มันซะแล้ว ยกยอดเรื่องไปตอนใหม่เลยดีกว่า เน้าะ
ที่สุดแล้ว มันทำงาน ส่งออกได้ อยากรู้ให้ คลิก ที่รูป
สังเกตุด้วยว่า ไม่มีหลงในคิวอีกแล้ว ส่งออกได้หมด แต่ ก่อนหน้านั้น ยังคงค้างในคิว ๒ ฉบับ แต่ข้อจำกัด ยังมีอยู่ ใช่ว่าจะใช้ได้ทุกกรณีไป เพียงแต่ ขอให้เพื่อนๆ ที่อ่าน ได้สาระ ได้แนวทาง ในการแก้ปัญหาไปด้วย ก็เกินคุ้ม กับหลายสิ่งหลายอย่างที่ ทุ่มเทลงไป ลงไปเพื่อ ... พึ่งพาตนเอง
sendmail เป็น MTA ที่มีมา เรียกว่า มัดมา กับ FreeBSD สำหรับใช้งานด้าน e-mail
สถานการณ์ เป็นอย่างนี้น่ะ มีเพื่อนท่านหนึ่ง อืมม พี่ซิ ต้องเรียกเขาว่า พี่ พี่ซัน เขาบอกว่า sendmail ไม่ยอมส่งจดหมายให้ ก็ให้แปลกใจว่า พี่เค้าไปทำอะไรพิสดารไว้รึเปล่า เพราะปกติ sendmail กับ FreeBSD เนี่ย เขาทำมาไว้ชนิดที่เรียกว่า แกะกล่องได้ ก็นำออกมาใช้เลย
ก็แค่นั้นแหละ ที่สงสัย
แต่หลังจากนั้นก็เป็นเรื่องเป็นราวยาว เพราะการ อินเว้สติเกตุเม้นต์ เนี่ย มันต้องการ ข้อเท็จจริง มากมาย หลายด้านด้วยกัน มาประกอบการพิจารณา ... ฯลฯ กอรป ด้วยต้องการให้พี่เขาค่อยๆรู้ไปด้วย , ความจริง เราเอง ก็ใช่ว่า จะรู้ดี ไปกว่าพี่เค้าหรอกน่อ, เลยแนะไป ทำไป แต่ไปไปมามา ชักสงสัยว่า ที่บอกให้ทำๆน่ะ ทำรึเปล่า เพราะดูท่าว่า ไม่ได้แก้อะไรเลย พี่เขา คงเอือมเต็มที แต่ก็เกรงใจด้วย เลยให้เข้าไปแก้ไขเอาตามใจ
เอาล่ะ เรามาเริ่มกัน sednmail นั้นทำงานด้วยแฟ้ม หรือ เอกสาร สำคัญ ๓ แฟ้มเท่านั้นเอง คือ
- configuration files
- queued files
- alias files
ที่เป็นปัญหา ให้ต้องคิดเลย ทันทีคือ แฟ้มแรก นั่นแหละ พี่เขา ไปก่อกวนอะไร รึ ถึงส่งออกไม่ได้
ที่ คุระบุรี
(๑) เมื่อเข้าไปดูถึงได้รู้ว่า บางส่วนของแฟ้ม freebsd.mc ยังคงไม่ได้แก้ จึงจัดการแก้ไขซะ โดยเฉพาะตรงบรรทัด
dnl define(`SMART_HOST', `your.isp.mail.server')
ที่บอกให้พี่เขาแก้นั้น พี่เขาก็แก้แหละ แต่ไม่เอา dnl ออก เลยจำเป็นต้อง ลงมือเอง แล้วลบแฟ้ม ที่ขึ้นต้นด้วยชื่อเครื่อง และ ลงท้ายด้วย .mc ออกให้หมด จากนั้นจึงสั่ง
# make all
# make install
# make restart
และเมื่อตรวจดู จดหมายที่เหลืออยู่ในคิว ด้วย mailq -vv ก็พบว่ามีเพียบ ล้วนแต่เกิดจาก deferred/time out ทั้งสิ้น ให้แปลกใจมากมาก# make install
# make restart
(๒) เมื่อทราบว่า ที่นี่ ไม่เปิด port 25 ไว้, จาก (๑) ที่ปากเกร็ด, และอยากรู้ว่า พี่เขาใช้ MTA ตัวไหน จึงสั่ง
# pkg_info -Ia
กลับตกใจมากกว่าเดิม เพราะพี่เขาลง sendmail จาก port !!! ซึ่งเมื่อเป็นเช่นนี้ แล้วอะไรล่ะ ที่ไปปิด smtp service ลำดับที่ 25 ไว้ ทำให้ส่งออกไม่ได้ เพราะเท่าที่รู้มา การที่ sendmail ไม่ได้วิ่งนั้น เป็นเพราะ มี MTA ตัวอื่น มาใช้บริการที่ smtp port 25 แต่ตัวอื่นที่ว่านั้น ก็คือ sendmail จาก port นั่นเอง รึว่า .....
ดูท่าทางแล้ว เกินกำลัง เลยหันมาทดลองกับเครื่องที่ปากเกร็ดดีกว่า และก็ไม่ได้เข้ามาอีกเลย
ที่ ปากเกร็ด
(๑) ระหว่างที่ทำอะไรที่ คุระบุรี นั้น ก็ลองตรวจดู ว่าที่โน่นเขามีอะไรอยู่บ้าง ทีแรกก็จะทำตอนที่ ssh เข้าไปนั่นแหละ แต่ ดูว่าคงไม่เร็วเท่าทำจากบ้าน ที่ ปากเกร็ด อีกอย่าง tools ต่างๆ ก็ยังไม่มี เลยตัดใจ ทำที่ ปากเกร็ด ดีกว่า
ความจริงที่ได้, zenmap, กลับทำให้ตกใจมากกว่า คือ เครื่อง ไม่เปิด port 25 ไว้เลย แต่ มีอะไรบางอย่าง วิ่งที่ port 587 แทน ซึ่งเมื่อ
# grep 587 /etc/services
ดู ก็รู้ว่า อ้อ นั่นคือ submission subsystem นั่นเอง ซึ่ง เมื่อถึงตรงนี้ ก็พอมองออกว่า คงมี การจัดการ อะไรบางอย่างไว้ ที่เราไม่สามารถ และ ไม่สมควร ไปก้าวก่ายให้มากนัก
ที่ได้เลยคือ แล้ว พี่เขาใช้ MTA ตัวไหนแทน sendmail กัน เลยต้องเข้าไปดูอีก
(๒) ที่นี่ รออยู่
เมื่อโซซัดโซเซ สะเง้าะสะแงะกลับมาจาก คุระบุรี เพราะเจอปัญหาที่ไม่สามารถแก้ได้ ก็เดินงึกๆงักๆวนไปเวียนมารอบๆ ThinkPad R51 ซะสี่ ห้า รอบ แล้วก็ลงมือ
ครับ ง่ายๆเลย ส่ง e-mail ออกนอกจากเครื่องของตัวเอง ผลที่ได้น่ะ เล่นเอาตกใจ เพราะมันก็ ส่งไม่ออกเหมือนกัน ไม่ต้องลำบากหาหลักฐานที่ไหนหรอก ก็ที่รูป นั่นแหละ ช่วงบนๆ ที่เห็นอยู่ไม่มาก นั่นแหละ
เอาล่ะ รู้สึกว่า จะต่อเรื่องกันตรงนี้ก็ไม่มันซะแล้ว ยกยอดเรื่องไปตอนใหม่เลยดีกว่า เน้าะ
ที่สุดแล้ว มันทำงาน ส่งออกได้ อยากรู้ให้ คลิก ที่รูป
Subscribe to:
Posts (Atom)



