ติดตั้ง openldap บน ubuntu

  • ทดสอบกับ Ubuntu 8.04, openldap 2.4.9

  1. ติดตั้งด้วยคำสั่ง sudo apt-get install slapd

    slapd คือชื่อ Service ของ OpenLDAP Server

    จากนั้นระบบจะให้กำหนดรหัสผ่านของ Admin ให้ใส่ลงไป และทำการยืนยันอีกครั้ง
    ระบบจะทำการติดตั้งจนเสร็จ

    หากต้องการทราบรุ่นของ OpenLDAP ใช้คำสั่ง sudo dpkg-query -l | grep slapd
  2. สั่งให้ slapd ทำงานด้วยคำสั่ง sudo /etc/init.d/slapd start
  3. การปรับแต่ง OpenLDAP ให้แก้ไขไฟล์ /etc/ldap/slapd.conf
    ฐานข้อมูลของระบบเก็บอยู่ที่ /var/lib/ldap
  4. การวางโครงสร้างของ Directory Service
    ในการติดตั้งครั้งแรก ระบบจะตั้งโครงสร้างตาม Domain ที่กำหนดไว้ของเครื่อง Server
    ตัวอย่างเช่น psu.ac.th

    ในไฟล์ /etc/ldap/slapd.conf จะกำหนดไว้ใน Directive : suffix ว่า
    suffix      "dc=example,dc=org"

    ตัวอย่างการแก้ไข โครงสร้างจาก example.org ให้เป็น my.domain
    suffix     "dc=my,dc=domain"
    rootdn   "cn=admin,dc=my,dc=domain"
    rootpw  xxxxxxxxxx
    access to attrs=userPassword,shadowLastChange
              by dn="cn=admin,dc=my,dc=domain" write
              by anonymous auth
              by self write
              by * none
    access to *
               by dn="cn=admin,dc=my,dc=domain" write
               by * read
    จากนั้นให้ Save

    หากมีโครงสร้างเดิมอยู่แล้วต้องการลบทิ้ง ให้ใช้คำสั่ง
    sudo rm /var/lib/ldap/*

     แล้ว Restart ด้วยคำสั่ง sudo /etc/init.d/slapd restart
  5. หากต้องการกู้ระบบเดิมที่ทำการ Backup เป็นไฟล์ .ldif ไว้แล้ว สมมุติชื่อ backup.ldif
    โดยต้องการให้โครงสร้างเหมือนเดิมทุกประการ
    ให้ทำดังนี้

    หยุดการทำงานของ OpenLDAP ด้วยคำสั่ง sudo /etc/init.d/slapd stop

    หากมีโครงสร้างเดิมอยู่แล้วต้องการลบทิ้ง ให้ใช้คำสั่ง
    sudo rm /var/lib/ldap/*

    แล้วใช้คำสั่ง sudo slapadd -l backup.ldif

    กำหนด owner ให้ Database Directory ให้เป็น openldap:openldap ด้วยคำสั่ง sudo chown -R openldap.openldap /var/lib/ldap

    แล้วเริ่มการทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/slapd start
  6. การทำ Replication ด้วย Syncrepl
    แก้ไขไฟล์ /etc/ldap/slapd.conf
    ใส่ค่าต่อไปนี้ลงไป
    syncrepl rid=001
         provider=ldap://provider.my.domain:389
         type=refreshOnly
         interval=01:00:00:00
         searchbase="dc=my,dc=domain"
         filter="(objectClass=*)"
         scope=sub
         attrs="cn,sn,ou,telephoneNumber,title,l"
         schemachecking=off
         bindmethod=simple
         binddn="cn=admin,dc=my,dc=domain"
         credentials=xxxxxxxxxx
    จากนั้น Save ก็เรียบร้อย

    ค่าข้างต้น จะทำการ Replication จาก Provider ชื่อ ldap://provider.my.domain:389 โดยทำการ RefreshOnly

ติดตั้ง nut แบบ client ติดต่อกับ nut server

  • เพื่อให้เซิร์ฟเวอร์ที่ติดตั้ง nut แบบ client ได้รับสถานะไฟฟ้าจาก UPS จาก nut server แล้วสั่ง shutdown ตัวเอง
  • ทดสอบกับ ubuntu 10.04, 12.04
  • สมมติหมายเลขไอพีของ nut server คือ 10.0.0.201
    และมีชื่อที่กำหนดไว้ใน nut server ดังนี้
    แฟ้ม /etc/nut/ups.conf มีข้อมูล
    [myapc]
    desc = "my apc"
    แฟ้ม /etc/nut/upsd.users มีข้อมูล
    [monuser]
    password = changeme

  1. ติดตั้งโปรแกรม snmp ด้วยคำสั่ง
    sudo apt-get install snmp
  2. ติดตั้งโปรแกรม nut ด้วยคำสั่ง
    sudo apt-get install nut nut-cgi nut-snmp
  3. สำหรับ server ที่ติดตั้ง nut แบบ client ให้แก้ไขดังนี้
    แก้ไขแฟ้ม /etc/nut/nut.conf แก้ไขข้อมูลจากเดิม
    MODE=none
    ให้เป็นว่า
    MODE=netclient

    แก้ไขแฟ้ม /etc/nut/upsmon.conf เพิ่มเข้าไปว่า
    MONITOR myapc@10.0.0.201 1 monuser changeme slave

    แล้วสั่ง nut ทำงาน ด้วยคำสั่ง sudo /etc/init.d/nut start

    ตรวจสอบดู nut ว่ายังทำงานด้วยคำสั่ง
    sudo /etc/init.d/nut status จะได้ข้อความตอบว่า
    upsmon is running

    ลองตรวจสอบด้วยคำสั่ง upsc myapc@10.0.0.201 จะได้ข้อมูลตอบประมาณว่า
    ambient.humidity.high: 60.00
    ambient.humidity.low: 30.00
    ambient.temperature.high: 40.00
    ambient.temperature.low: 10.00
    battery.charge: 100.00
    battery.charge.restart: 0
    battery.current: 0.00
    battery.date: 11/14/07
    battery.packs: 0.00
    battery.packs.bad: 0.00
    battery.runtime: 2700.00
    battery.runtime.low: 120
    battery.voltage: 54.00
    battery.voltage.nominal: 0.00
    device.mfr: APC
    device.model: Smart-UPS 2200 RM XL
    device.serial: JS0746004426
    device.type: ups
    driver.name: snmp-ups
    driver.parameter.mibs: apcc
    driver.parameter.pollinterval: 2
    driver.parameter.port: 172.17.112.15
    driver.parameter.snmp_version: v1
    driver.version: 2.4.3
    driver.version.internal: 0.47 (mib: apcc 1.1)
    input.frequency: 50.00
    input.sensitivity: high
    input.transfer.high: 253
    input.transfer.low: 208
    input.voltage: 231.00
    output.current: 1.00
    output.frequency: 50.00
    output.voltage: 231.00
    output.voltage.nominal: 230
    ups.delay.shutdown: 270
    ups.delay.start: 0
    ups.firmware: 690.16.I
    ups.id: UPS_IDEN
    ups.load: 18.00
    ups.mfr: APC
    ups.mfr.date: 11/14/07
    ups.model: Smart-UPS 2200 RM XL
    ups.serial: JS0746004426
    ups.status: OL
    ups.temperature: 21.00
    ups.test.result: Ok
    แสดงว่าตั้ง ups บน nut ถูกต้องแล้ว
  4. หากต้องการเลือกใช้ upsshed เพื่อเลี่ยง Notify Storm เมื่อ UPS อาจมีการปิดเปิดในช่วงเวลาสั้นๆ
    แก้ไขแฟ้ม /etc/nut/upsmon.conf ด้วยคำสั่ง
    sudo vi /etc/nut/upsmon.conf
    แก้ไขให้เป็นตามนี้ หรือเพิ่มต่อท้ายแฟ้มก็ง่ายดี
    MONITOR myapc@10.0.0.201 1 monuser changeme slave
    NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
    NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
    NOTIFYFLAG FSD SYSLOG+WALL+EXEC
    NOTIFYMSG ONLINE "UPS %s on line power"
    NOTIFYMSG ONBATT "UPS %s on battery"
    NOTIFYMSG LOWBATT "UPS %s battery is low"
    NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
    NOTIFYCMD /sbin/upssched

    แก้ไขแฟ้ม /etc/nut/upssched.conf ด้วยคำสั่ง
    sudo vi /etc/nut/upssched.conf
    เพิ่มบรรทัดตามนี้
    PIPEFN /var/run/nut/upssched.pipe
    LOCKFN /var/run/nut/upssched.lock
    CMDSCRIPT /etc/nut/scripts/upssched-cmd
    AT ONBATT * START-TIMER onbattwarn 600
    AT ONLINE * CANCEL-TIMER onbattwarn

    สร้างไดเรกทอรี
    sudo mkdir /etc/nut/scripts

    สร้างแฟ้ม /etc/nut/scripts/upssched-cmd ด้วยคำสั่ง
    sudo vi /etc/nut/scripts/upssched-cmd
    เพิ่มตามนี้
    #!/bin/sh
    case $1 in
    onbattwarn)
    /sbin/upsmon -c fsd
     ;;
    ups-back-on-power)
    logger -t upssched-cmd "UPS Back on Power"
     ;;
    *)
    logger -t upssched-cmd "Unrecognized command: $1"
     ;;
    esac

    กำหนดสิทธิไฟล์
    sudo chmod 755 /etc/nut/scripts/upssched-cmd
    sudo chown root:nut /etc/nut/scripts

ติดตั้ง nut แบบ server ติดต่อกับ snmp management card

  • เพื่อให้เซิร์ฟเวอร์ที่ติดตั้ง nut แบบ server ได้รับข้อมูลเรื่องสถานะไฟฟ้าจาก UPS แล้วสั่ง Shutdown ตัวเองได้
  • เพื่อให้เซิร์ฟเวอร์ที่ติดตั้ง nut แบบ server นี้เป็นตัวแม่ให้แก่เซิร์ฟเวอร์ที่ติดตั้ง nut แบบ client
  • ทดสอบกับ ubuntu 10.04

  1. สมมติให้เซิร์ฟเวอร์ที่ติดตั้ง มี หมายเลขไอพี 10.0.0.201
  2. สภาพแวดล้อมของ APC Web/SNMP Management Card คือ
    สมมติว่ามี IP address = 10.0.1.15
    community string = xxxxxxxx
    snmp version = 1
  3. ติดตั้ง snmp client ก่อนด้วยคำสั่ง
    sudo apt-get install snmp
  4. แล้วลองคุยกับ UPS ด้วยคำสั่ง
    snmpwalk -v 1 -c xxxxxxxx 10.0.1.15
    ได้รับคำตอบประมาณว่า
    SNMPv2-MIB::sysDescr.0 = STRING: APC Web/SNMP Management Card (MB:v3.9.2 PF:v3.6.1 PN:apc_hw02_aos_361.bin AF1:v3.5.8 AN1:apc_hw02_sumx_358.bin MN:AP9617 HR:A10 SN: NA0738003068 MD:09/17/2007) (Embedded PowerNet SNMP Agent SW v2.2 compatible)
    SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.318.1.3.2.7
    DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (7866115) 21:51:01.15
    ...
    แสดงว่า snmp คุยกันรู้เรื่องแล้ว
  5. ต่อไปติดตั้งโปรแกรม nut ด้วยคำสั่ง sudo apt-get install nut nut-cgi nut-snmp
    แก้ไขแฟ้ม /etc/nut/ups.conf เพิ่ม ups เข้าไปว่า
    [myapc]
    driver = snmp-ups
    port = 10.0.1.15
    community = xxxxxxxx
    snmp_version = v1
    mibs = apcc
    desc = "my apc"

    หมายเหตุ กรณีที่ไม่ใช้ APC ให้เปลี่ยน mibs = ietf แทน mibs = apcc ตัวอย่างเช่น
    [myliebert]
    driver = snmp-ups
    port = 10.0.1.15
    community = xxxxxxxx
    snmp_version = v1
    mibs = ietf
    desc = "my Liebert NX 100 KVA"
    จบหมายเหตุ

    แก้ไขแฟ้ม /etc/nut/upsd.conf เพิ่มเข้าไปว่า
    LISTEN 127.0.0.1 3493
    LISTEN 10.0.0.201 3493

    แก้ไขแฟ้ม /etc/nut/upsd.users เพิ่มเข้าไปว่า
    [monuser]
    password = changeme
    upsmon master

    แก้ไขแฟ้ม /etc/nut/upsmon.conf เพิ่มเข้าไปว่า
    MONITOR myapc@localhost 1 monuser changeme master

    แก้ไขแฟ้ม /etc/nut/nut.conf แก้ไขข้อมูลจากเดิม
    MODE=none
    ให้เป็นว่า
    MODE=standalone
    หรือกรณีให้บริการเครื่องอื่นๆ
    MODE=netserver
  6. เสร็จแล้วสั่งให้ nut ทำงานด้วยคำสั่ง sudo /etc/init.d/nut start
  7. ตรวจสอบดู nut ว่ายังทำงานด้วยคำสั่ง
    sudo /etc/init.d/nut status จะได้ข้อความตอบว่า
    * upsd is ruuning
    * upsmon is running
  8. ลองตรวจสอบด้วยคำสั่ง upsc myapc@localhost จะได้ข้อมูลตอบประมาณว่า
    ambient.humidity.high: 60.00
    ambient.humidity.low: 30.00
    ambient.temperature.high: 40.00
    ambient.temperature.low: 10.00
    battery.charge: 100.00
    battery.charge.restart: 0
    battery.current: 0.00
    battery.date: 11/14/07
    battery.packs: 0.00
    battery.packs.bad: 0.00
    battery.runtime: 2700.00
    battery.runtime.low: 120
    battery.voltage: 54.00
    battery.voltage.nominal: 0.00
    device.mfr: APC
    device.model: Smart-UPS 2200 RM XL
    device.serial: JS0746004426
    device.type: ups
    driver.name: snmp-ups
    driver.parameter.mibs: apcc
    driver.parameter.pollinterval: 2
    driver.parameter.port: 172.17.112.15
    driver.parameter.snmp_version: v1
    driver.version: 2.4.3
    driver.version.internal: 0.47 (mib: apcc 1.1)
    input.frequency: 50.00
    input.sensitivity: high
    input.transfer.high: 253
    input.transfer.low: 208
    input.voltage: 231.00
    output.current: 1.00
    output.frequency: 50.00
    output.voltage: 231.00
    output.voltage.nominal: 230
    ups.delay.shutdown: 270
    ups.delay.start: 0
    ups.firmware: 690.16.I
    ups.id: UPS_IDEN
    ups.load: 18.00
    ups.mfr: APC
    ups.mfr.date: 11/14/07
    ups.model: Smart-UPS 2200 RM XL
    ups.serial: JS0746004426
    ups.status: OL
    ups.temperature: 21.00
    ups.test.result: Ok
    แสดงว่าตั้ง ups บน nut ถูกต้องแล้ว
  9. แก้ไขแฟ้ม /etc/nut/hosts.conf เพิ่มข้อมูลว่า
    MONITOR myapc@localhost "MYAPC"

    แล้วดูผ่านทางเวบ http://localhost/cgi-bin/nut/upsstats.cgi
    หรือที่ http://10.0.0.201/cgi-bin/nut/upsstats.cgi

ติดตั้ง nut บน ubuntu

ใช้ได้กับ ups เกือบทุกยี่ห้อ รวมทั้งยี่ห้อ apc ด้วย
หากใช้ยี่ห้อ apc ขอแนะนำให้ใช้โปแกรม apcuspd แทน ตามคำแนะนำที่บันทึก ติดตั้ง apcupsd บน ubuntu
ตอนไฟดับ ระบบสั่งปิดเครื่องได้อย่างเดียว ตอนไฟมา ups เปิดตัวเองไม่เป็น เราต้องมาเปิด ups ด้วยตนเอง
ทดสอบกับ ubuntu 10.04
ต้นฉบับจาก http://www.networkupstools.org/

ติดตั้งโปรแกรม nut ด้วยคำสั่ง  sudo apt-get install nut nut-cgi

แก้ไขแฟ้ม   /etc/nut/ups.conf  ให้ถูกต้องตามรุ่นของ ups ดูข้อมูลเพิ่มเติมจากเวบ http://www.networkupstools.org/compat/stable.html

ตัวอย่างสำหรับ ups ยี่ห้อ apc รุ่น Back-UPS RS แบบ usb  ข้อมูลแฟ้ม /etc/nut/ups.conf เป็นตามตัวอย่างประมาณว่า
[myups]
        driver = usbhid-ups
        port = auto
        desc = "My Test UPS"

ตัวอย่างสำหรับ ups ยี่ห้อ ablerex รุ่น 625L แบบ usb  ข้อมูลแฟ้ม /etc/nut/ups.conf เป็นตามตัวอย่างประมาณว่า
[myups]
        driver = megatec_usb
        port = auto
        desc = "My Test UPS"

แก้ไขแฟ้ม /etc/nut/uspd.users เพิ่มข้อมูลให้เป็นประมาณว่า
[monuser]
password = changeme
upsmon master

แก้ไขแฟ้ม /etc/nut/upsmon.conf   เพิ่มข้อมูลให้เป็นประมาณว่า
MONITOR myups@localhost 1 monuser changeme master
...

แก้ไขแฟ้ม /etc/nut/nut.conf  แก้ไขข้อมูลจากเดิม
MODE=none
ให้เป็นว่า
MODE=standalone

ถึงขั้นตอนนี้ให้รีบูท server ใหม่  แล้วสั่งให้ nut ทำงานด้วยคำสั่ง  sudo /etc/init.d/nut restart
แล้วทดสอบดูผลงานด้วยตัวอย่างคำสั่ง upsc myups@localhost  ได้ผลประมาณว่า
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2005/06/20
battery.runtime: 1950
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 26.9
battery.voltage.nominal: 24.0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.2.1-
driver.version.data: APC HID 0.92
driver.version.internal: 0.32
input.transfer.high: 264
input.transfer.low: 194
input.voltage: 224.0
input.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: -1
ups.firmware: 7.g8 .I
ups.firmware.aux: g8
ups.load: 29
ups.mfr: American Power Conversion
ups.mfr.date: 2005/06/20
ups.model: Back-UPS RS 1000
ups.productid: 0002
ups.serial: QB0525144498
ups.status: OL
ups.test.result: No test initiated
ups.vendorid: 051d

เป็นอันว่าใช้งานได้

หากต้องการแสดงผลแบบ graphic ผ่าน cgi ให้ทำดังนี้

แก้ไขแฟ้ม /etc/nut/hosts.conf  เพิ่มข้อมูลให้เป็นประมาณว่า
MONITOR myups@localhost "Back-UPS RS 1000"

ดูผลงานได้ที่  http://localhost/cgi-bin/nut/upsstats.cgi

ติดตั้ง nfsd บน ubuntu

ทดสอบกับ ubuntu 10.04
กำหนด nfs server ให้ใช้ port ที่เกี่ยวข้องเป็น 2049,4000-4002

ติดตั้งด้วยคำสั่ง  sudo apt-get install portmap nfs-kernel-server

แก้ไขแฟ้ม  /etc/default/nfs-kernel-server ปรับค่าตัวแปรให้เป็นว่า
RPCMOUNTDOPTS="--port 4002"

แก้ไขแฟ้ม /etc/default/nfs-common ปรับค่าตัวแปรให้เป็นว่า
STATDOPTS="--port 4000"

เสร็จแล้วให้ nfs ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/nfs-kernel-server restart

แก้ไขแฟ้ม /etc/exports ใส่ค่า เพื่อให้บริการ nfs server ได้  ดังตัวอย่าง
/tftpboot/ubuntu   *(async,no_root_squash,no_subtree_check,ro)

เสร็จแล้วสั่งให้ nfs server อ่านค่าใหม่ด้วยคำสั่ง
sudo /etc/init.d/nfs-kernel-server force-reload

ติดตั้ง nbd บน ubuntu

ทดสอบกับ ubuntu 8.04
ตัวอย่างนี้กำหนดใช้ port หมายเลข  32000
ต้นฉบับจาก http://nbd.sourceforge.net

ติดตั้งด้วยคำสั่ง sudo apt-get install nbd-server

หากได้ error ประมาณว่า
....
** (process:7178): WARNING **: Could not parse config file: Could not open config file.
** Message: Nothing to do! Bye!
....

ไม่ได้ผิดปรกติ เพราะระบบยังไม่สร้างแฟ้ม /etc/nbd-server/config

สร้างแฟ้ม /etc/nbd-server/config ให้มีข้อมูลประมาณดังตัวอย่างว่า
[generic]
user = nbd
group = nbd

[export]
exportname = /export/blkdev
port = 32000

ให้เปลี่ยนค่าตัวแปร exportname ให้เป็นไปตามที่ต้องการบริการผ่าน nbd server ออกไป

สั่งให้ nbd server เริ่มทำงานด้วยคำสั่ง sudo /etc/init.d/nbd-server start

บน PC client ที่ติดตั้ง linux ubuntu  ที่ต้องการติดต่อ nbd server ต้องมีโปรแกรม nbd client ก่อน
สามารถติดตั้งด้วยคำสั่ง sudo apt-get install nbd-client

ตัวอย่างคำสั่งที่ใช้ในการเชื่อมต่อกับ nbd server ที่มี ip เป็น 10.0.5.6  port 32000ประมาณว่า
sudo nbd-client  10.0.5.6  32000  /dev/nbd0

ติดตั้ง nagstamon บน ubuntu

nagstamon เป็นโปรแกรมเฝ้าระวังระบบ Nagios
ปัญหาของการใช้งาน Nagios Website บนระบบปฏิบัติการอื่นๆที่ไม่ใช่ Windows คือ เมื่อมี alert จะไม่แสดงเสียงออกมา
nagstamon ทำงานบน X Window ซึ่งจะแสดงเสียง alert เมื่อมีเหตุการณ์เกิดขึ้น
ต้นฉบับ ที่ http://nagstamon.ifw-dresden.de
Version ล่าสุด 0.9.4

Download nagstamon จาก http://packages.debian.org/squeeze/all/nagstamon/download
โดยใช้คำสั่ง
wget http://ftp.us.debian.org/debian/pool/main/n/nagstamon/nagstamon_0.9.4-1_all.deb
ติดตั้งด้วยคำสั่ง
sudo dpkg --install nagstamon_0.9.4-1_all.deb
ติดตั้ง dependency ด้วยคำสั่ง
sudo apt-get -f install
เรียกใช้ที่เมนู Application > System Tools > Nagstamon
ปรับแต่งค่า โดยการเลื่อน mouse ไป ลอยไว้เหนือ Icon ที่ปรากฏ แล้วคลิกปุ่ม Setting
เปลี่ยนจากคำว่า nagios-server เป็นชื่อ Nagios Server ที่ใช้งานอยู่
ให้ระวังเรื่อง http/https ให้เหมาะสมกับเครื่องด้วย

ติดตั้ง nagios บน ubuntu

ทดสอบกับ ubuntu 10.04  และ nagios 3.x
ต้นฉบับ nagios จาก http://www.nagios.org
คำแนะนำเกี่ยวกับการพัฒนา plugin อยู่ที่ http://nagios.sourceforge.net/docs/3_0/pluginapi.html

ติดตั้งด้วยคำสั่ง sudo apt-get install nagios3
ระหว่างติดตั้งที่หน้าต่างถาม Nagios web administration password:  ไม่ต้องป้อนอะไร ให้เคาะแป้น Enter
ได้หน้าต่างใหม่ถาม Password confirmation: ไม่ต้องป้อนอะไร ให้กดแป้น Enter
ระบบจะติดตั้งต่อจนเสร็จ

ตั้งค่ารหัสผ่านของ Nagios web cgi ให้เป็น 123456 ด้วยคำสั่ง
sudo htpasswd -c /etc/nagios3/htpasswd.users nagiosadmin
ได้ข้อความว่า New password:  ให้ป้อนว่า 123456 แล้วกดแป้น Enter
ได้ข้อความว่า Re-type new password: ให้ป้อนว่า 123456 เหมือนเดม แล้วกดแป้น Enter
ได้ข้อความตอบกลับมาว่า Adding password for user nagiosadmin  เป็นอันเสร็จ

ทดสอบดูผลงานได้ที่เวบ http://localhost/nagios3
ได้หน้าต่าง Authentication Required
ที่ช่อง User Name: ให้ป้อนว่า nagiosadmin
ที่ช่อง Password: ให้ป้อนว่า 123456
แล้วคลิกปุ่ม OK  ก็จะเข้าหน้าเวบของ Nagios ได้

ตัวอย่างการสร้าง user ชื่อ guest รหัส 123456 ที่อนุญาติให้ read ได้อย่างเดียว ใช้คำสั่ง
sudo htpasswd -c /etc/nagios3/htpasswd.users guest
ได้ข้อความว่า New password:  ให้ป้อนว่า 123456 แล้วกดแป้น Enter
ได้ข้อความว่า Re-type new password: ให้ป้อนว่า 123456 เหมือนเดม แล้วกดแป้น Enter
ได้ข้อความตอบกลับมาว่า Adding password for user guese

แก้ไขแฟ้ม /etc/nagios3/cgi.cfg  ปรับปรุงบรรทัดตัวแปรให้เป็นดังนี้
authorized_for_all_services=nagiosadmin,guest
authorized_for_all_hosts=nagiosadmin,guest

ตัวอย่างการสร้าง plugin เพื่อตรวจสอบ ntp server ด้วย shell script
สร้างแฟ้มชื่อ /usr/lib/nagios/plugins/check_ntpdate มีข้อความประมาณว่า
#! /bin/bash
STATE_OK=0
STATE_CRITICAL=2
NTPDATE="sudo /usr/sbin/ntpdate"
MYOUT=$(${NTPDATE} $1 2>/dev/null)
VALID=$(echo ${MYOUT}|grep "offset")
if [ -n "${VALID}" ] ; then
  STATUS=${STATE_OK}
  echo ${MYOUT}
else
  STATUS=${STATE_CRITICAL}
fi
exit ${STATUS}

ตั้งแฟ้มให้เป็นแบบ execute ได้ด้วยคำสั่ง
sudo chmod +x /usr/lib/nagios/plugins/check_ntpdate

เพิ่มสิทธิ์ของ nagios ให้สามารถใช้คำสั่ง ntpdate ด้วยสิทธิ์เท่า root
โดยแก้ไขแฟ้ม /etc/sudoers  เพิ่มต่อท้ายด้วยบรรทัดข้อความว่า
nagios ALL=NOPASSWD: /usr/sbin/ntpdate

ทดสอบการทำงานของ script ด้วยคำสั่งประมาณว่า
sudo -u nagios /usr/lib/nagios/plugins/check_ntpdate pool.ntp.org ; echo $?
หาก ntpserver พร้อมทำงาน ก็จะได้ข้อความตัวอย่างตอบกลับมาประมาณว่า
... ntpdate[...]: adjust time server 158.108.212.149 offset -0.006495 sec
0
หาก ntpserver ไม่พร้อมทำงาน ก็จะได้ข้อความตัวอย่างตอบกลับมาว่า
2

ตัวอย่างการเพิ่มวิธีการตรวจสอบ NTP server ด้วยแฟ้ม shell script  /usr/lib/nagios/plugins/check_ntpdate ที่พัฒนาเอง
สมมติ NTP server ชื่อ pool.ntp.org เข้าไปในระบบ nagios ทำดังนี้

สร้างแฟ้ม /etc/nagios3/conf.d/ntp-server.cfg มีข้อมูลประมาณว่า
define host {
        host_name   NTP-server
        address     pool.ntp.org
        use         generic-host
        }

แก้ไขแฟ้ม /etc/nagios3/conf.d/hostgroups_nagios2.cfg เพิ่มข้อมูลต่อท้ายประมาณว่า
define hostgroup {
        hostgroup_name  ntp-servers
        members         NTP-server
        }

แก้ไขแฟ้ม /etc/nagios3/conf.d/services_nagios2.cfg เพิ่มข้อมูลต่อท้ายประมาณว่า
define service {
        hostgroup_name                  ntp-servers
        service_description             NTP
        check_command                   check_ntpdate
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

แก้ไขแฟ้ม /etc/nagios-plugins/config/ntp.cfg  เพิ่มข้อมูลต่อท้ายประมาณว่า
define command{
        command_name    check_ntpdate
        command_line    /usr/lib/nagios/plugins/check_ntpdate $HOSTADDRESS$
}

เสร็จแล้วทำการ reload nagios ด้วยคำสั่ง
sudo /etc/init.d/nagios3 reload

ทำแค่นี้ ทดสอบผลงานได้เลย
หากถูกต้อง จะต้องมี Host ชื่อ NTP-server และ Servie ชื่อ NTP แสดงออกมา

ติดตั้ง mrtg บน ubuntu

คำสั่ง free ใน ubuntu 16.04 ให้ output ต่างจาก 14.04 และก่อนหน้านั้น&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แก้ไขบรรทัด FREE= เป็นด้งนี้&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
codename=$(lsb_release -c | awk '{print $2}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
if [ "${codename}" = "trusty" ] || [ "${codename}" = "precise" ]; then&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; FREE=$(echo "$(free|grep "/cache:"|awk '{print $4}') * 1000"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
else&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; FREE=$(echo "$(free|grep "Mem:"|awk '{print $6}') * 1000"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
fi&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบกับ ubuntu 10.04, 12.04, 14.04, 16.04&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างต้นแบบนี้เหมาะสำหรับเก็บข้อมูลของ server โดยไม่จำเป็นต้องใช้ snmp&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
หากต้องการใช้ snmp ต้องมีการติดตั้งโปรแกรม snmpd มาก่อน มีคำแนะนำตามบันทึก ติดตั้ง snmpd บน ubuntu&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
หากยังไม่ติดตั้ง apache &amp;amp;nbsp;ให้ติดตั้งด้วยคำสั่ง sudo apt-get install apache2&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ติดตั้งโปรแกรม mrtg ด้วยคำสั่ง &amp;amp;nbsp;sudo apt-get install mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
หากได้หน้าต่างว่า Configuring mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
... Make /etc/mrtg.cfg owned by and readable only by root?&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ให้ตอบ &amp;amp;lt;yes&amp;amp;gt; ระบบจะติดตั้งต่อจนเสร็จ&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างพื้นที่เก็บข้อมูลของ mrtg ไว้ที่ /var/www/mrtg &amp;amp;nbsp;ด้วยคำสั่ง &amp;amp;nbsp; sudo mkdir -p /var/www/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้าง directory สำหรับเก็บข้อมูลแสดงผล ด้วยคำสั่ง sudo mkdir -p /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้าง directory สำหรับเก็บการตั้งค่า sudo mkdir -p /etc/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/apache2/conf.d/mrtg &amp;amp;nbsp;มีข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Alias /mrtg /var/www/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;lt;location mrtg=""&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; &amp;amp;nbsp; Order deny,allow&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; &amp;amp;nbsp; Deny from all&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; &amp;amp;nbsp; Allow from all&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;lt;/location&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แล้วสั่งให้ apache ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/apache2 force-reload&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
บางทีมี bug พื้นที่ /var/lock/mrtg ถูกลบหายไปหลังการรีบูทเครื่อง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ต้องสร้างพื้นที่ /var/lock/mrtg &amp;amp;nbsp;ด้วยคำสั่ง sudo mkdir -p /var/lock/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
และต้องสร้างทุกครั้งที่บูทเครื่องด้วย โดยการเพิ่มคำสั่งไว้ในแฟ้ม /etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ด้วยการเพิ่มบรรทัดคำสั่งว่า mkdir -p /var/lock/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ลองสร้างกราฟ CPU Load และ Idle &amp;amp;nbsp;โดยไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-cpu.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-cpu.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
IDLE=$(vmstat 1 2|tail -1|awk '{print $15}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TEMP=$(uptime|grep -o "load average.*"|awk '{print $3}'|cut -d',' -f 1)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LOAD=$(echo "${TEMP:-0} * 100"|bc|cut -d'.' -f 1)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${IDLE}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${LOAD}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$TIME"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-cpu.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-cpu.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-cpu]:`/etc/mrtg/get-cpu.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-cpu]: 10000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-cpu]: Idle CPU and Load average&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-cpu]: &amp;amp;lt;/yes&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Idle CPU and Load average&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-cpu]: %&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-cpu]: CPU and Load Utilization&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-cpu]: Idle CPU&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-cpu]: Load average&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-cpu]: &amp;amp;nbsp;Idle&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-cpu]: &amp;amp;nbsp;Load&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-cpu]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้าง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้มสั่งการ mrtg ด้วยการสร้างแฟ้ม /etc/mrtg/mymrtg.sh ให้มีข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบดูผลงานได้ที่เวบ http://localhost/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/cron.d/mrtg-myhost ให้เป็นดังนี้&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
*/5 * * * * root &amp;amp;nbsp;sh /etc/mrtg/mymrtg.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/cron restart&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
หากต้องการเพิ่มกราฟ mrtg เส้นอื่นเข้าไปอีก ก็เพิ่มคำสั่งต่อท้ายบรรทัดในแฟ้ม /etc/mrtg/mymrtg.sh ได้เลย&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
โดยการสร้างแฟ้มชื่อ /etc/mrtg/mymrtg.sh มีข้อมูลดังตัวอย่างคือ&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
if [ ! -d /var/lock/mrtg ] ; then&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; mkdir -p /var/lock/mrtg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
fi&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างหากต้องการตั้งค่าให้ cron สั่งให้ mrtg บันทึกค่าทุกๆ 5 นาที&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ให้สร้างแฟ้ม /etc/cron.d/mrtg-myhost ให้มีข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
*/5 * * * * root &amp;amp;nbsp;env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/cron restart&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เพิ่มกราฟ Memory Free และ Swap &amp;amp;nbsp;โดยได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-memory.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-memory.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
FREE=$(echo "$(free|grep "/cache:"|awk '{print $4}') * 1000"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SWAP=$(free|grep "Swap:"|awk '{print $3}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${FREE}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${SWAP}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$TIME"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-memory.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-memory.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-mem]:`/etc/mrtg/get-memory.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-mem]: 20000000000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-mem]: Free Memory and Swap Used&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-mem]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Free Memory and Swap Used&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-mem]: &amp;amp;nbsp;Free Memory:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-mem]: Swap Used:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-mem]: Free memory, in bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-mem]: Swap Used, in bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-mem]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-memory.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg &amp;amp;nbsp;/etc/mrtg/myhost-memory.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-memory.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เพิ่มกราฟ CPU wait for IO เพียงเส้นเดียว ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-cpu-io.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-cpu-io.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
CPU_WAIT_IO=$(vmstat 1 2|tail -1|awk '{print $16}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$CPU_WAIT_IO"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "0"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$TIME"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-cpu-io.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-cpu-io.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-cpu-io]:`/etc/mrtg/get-cpu-io.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-cpu-io]: 100&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-cpu-io]: CPU Time spent waiting for IO&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-cpu-io]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
CPU Time spent waiting for IO&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-cpu-io]: %&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-cpu-io]: wait IO&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-cpu-io]: current:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-cpu-io]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-cpu-io]: current, %&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-cpu-io]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-cpu-io]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu-io.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg &amp;amp;nbsp;/etc/mrtg/myhost-memory.cfg /etc/mrtg/myhost-cpu-io.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu-io.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เพิ่มกราฟ network traffic &amp;amp;nbsp;ของ eth0 โดยได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-speed-eth0.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-speed-eth0.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MYFILE="/tmp/get-speed-eth0.txt"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
DEVFILE="/proc/net/dev"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
NETDEV="eth0"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
if [ ! -f "${MYFILE}" ] ; then&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; NOW=$(date "+%s")&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; DATA=$(grep -i "${NETDEV}" ${DEVFILE}|cut -d':' -f 2)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; IN=$(echo ${DATA}|awk '{print $1}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; OUT=$(echo ${DATA}|awk '{print $9}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; START="${NOW}:${IN}:${OUT}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; echo "${START}" &amp;amp;amp;gt; ${MYFILE}&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;amp;nbsp; sleep 5&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
fi&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TEMP=$(head -1 ${MYFILE})&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
NOW=$(echo ${TEMP}|cut -d':' -f 1)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
IN=$(echo ${TEMP}|cut -d':' -f 2)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
OUT=$(echo ${TEMP}|cut -d':' -f 3)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
START="${NOW}:${IN}:${OUT}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
NOW2=$(date "+%s")&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
DATA2=$(grep -i "${NETDEV}" ${DEVFILE}|cut -d':' -f 2)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
IN2=$(echo ${DATA2}|awk '{print $1}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
OUT2=$(echo ${DATA2}|awk '{print $9}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
STOP="${NOW2}:${IN2}:${OUT2}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${STOP}" &amp;amp;amp;gt; ${MYFILE}&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PERIOD=$(echo "${NOW2:-0} - ${NOW:-0}"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
RIN=$(echo "${IN2:-0} - ${IN:-0}"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TOUT=$(echo "${OUT2:-0} - ${OUT:-0}"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SPEEDIN=$(echo "(${RIN:-0} * 8 ) / ${PERIOD:-0}"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SPEEDOUT=$(echo "(${TOUT:-0} * 8 ) / ${PERIOD:-0}"|bc)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${SPEEDIN}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${SPEEDOUT}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "${TIME}"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-speed-eth0.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-speed-eth0.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-speed]:`/etc/mrtg/get-speed-eth0.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-speed]: 1000000000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-speed]: Traffic Analysis for eth0&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-speed]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Traffic Analysis for eth0&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-speed]: b/s&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-speed]: Bits per Second&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-speed]: In&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-speed]: Out&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-speed]: &amp;amp;nbsp;In&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-speed]: &amp;amp;nbsp;Out&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
options[myhost-speed]: &amp;amp;nbsp;gauge, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบ สร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-speed-eth0.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ปรับปรุง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-cpu.cfg &amp;amp;nbsp;/etc/mrtg/myhost-memory.cfg /etc/mrtg/myhost-cpu-io.cfg /etc/mrtg/myhost-speed-eth0.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
แก้ไขแฟ้ม /etc/mrtg/mymrtg.sh ต่อท้ายแฟ้มเพิ่มบรรทัดข้อความว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-speed-eth0.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ควรจัดทำกราฟ mrtg ทั้ง 4 รูปแบบคือ CPU idle/load, Memory free/swap, CPU io wait และ network traffic&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เพราะเป็นข้อมูลเบื้องต้นในการวิเคราะห์การสิ้นเปลืองทรัพยากร &amp;amp;nbsp;หากจำเป็นก็เพิ่มกราฟอื่นๆต่อไป&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
วิธีการจัดทำกราฟ mrtg แบบง่ายๆจากแฟ้ม script ที่ทำไว้สำเร็จรูป&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ให้ทำตามคำแนะนำบนเวบ ติดตั้ง psu-mrtg บน ubuntu&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างการทำกราฟ Idle CPU and Load&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ใช้ข้อมูล ssCpuIdle.0 และ laLoadInt.1 จาก snmp แสดงผลภาพเป็นกราฟสองเส้น&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-cpu.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-cpu]:ssCpuIdle.0&amp;amp;amp;amp;laLoadInt.1:public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
RouterUptime[myhost-cpu]: public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-cpu]: 10000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-cpu]: Idle CPU and Load average&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-cpu]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Idle CPU and Load average&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-cpu]: %&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-cpu]: CPU and Load Utilization&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-cpu]: Idle CPU&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-cpu]: Load average&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-cpu]: &amp;amp;nbsp;Idle&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-cpu]: &amp;amp;nbsp;Load&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-cpu]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-cpu.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างการทำกราฟ memory และ swap&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ใช้ข้อมูล memAvailReal.0 และ memTotalSwap.0 จาก snmp แสดงผลภาพเป็นกราฟสองเส้น&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-mem.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-mem]: memAvailReal.0&amp;amp;amp;amp;memTotalSwap.0:public@localhost - memIndex.0&amp;amp;amp;amp;memAvailSwap.0:public@localhost + memBuffer.0&amp;amp;amp;amp;memIndex.0:public@localhost + memCached.0&amp;amp;amp;amp;memIndex.0:public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
RouterUptime[myhost-mem]: public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-mem]: 2000000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-mem]: Free Memory and Swap Used&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-mem]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Free Memory and Swap Used&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
kMG[myhost-mem]: k,M,G,T,P,X&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-mem]: &amp;amp;nbsp;Free Memory:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-mem]: Swap Used:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-mem]: Free memory, in bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-mem]: Swap Used, in bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-mem]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mem.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างทำกราฟ Mysql connection เพียงเส้นเดียว&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-mysql-session.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-mysql-session.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SESSION=$(mysqladmin -uroot -pmysqlpassword extended|grep "Threads_connected"|cut -d'|' -f3)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$SESSION"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "0"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$TIME"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-mysql-session.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-mysql-session.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-mysql-session]:`/etc/mrtg/get-mysql-session.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-mysql-session]: 1000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-mysql-session]: Mysql connection&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-mysql-session]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Mysql connection&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-mysql-session]: conns&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-mysql-session]: conns&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-mysql-session]: current:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-mysql-session]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-mysql-session]: current, number of connections&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-mysql-session]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-mysql-session]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mysql-session.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างทำกราฟ Mysql memory เพียงเส้นเดียว&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ไม่ได้ใช้ข้อมูลจาก snmp แต่ดึงมาจาก shell script ชื่อ /etc/mrtg/get-mysql-mem.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/get-mysql-mem.sh มีข้อมูลว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
#!/bin/bash&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MYSQL_PID=$(ps ax|grep "mysqld.pid"|grep -v "grep"|awk '{print $1}')&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MEMORY=$(pmap -d $MYSQL_PID|tail -1|awk '{print $4}'|cut -d'K' -f1)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TIME=$(uptime)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo $MEMORY&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "0"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "$TIME"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
echo "MYHOST"&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
เสร็จแล้วแก้ไขให้ execute ได้ด้วยคำสั่ง sudo chmod +x /etc/mrtg/get-mysql-mem.sh&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-mysql-mem.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-mysql-mem]: `/etc/mrtg/get-mysql-mem.sh`&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-mysql-mem]: 10000000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-mysql-mem]: Mysql memory usage&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-mysql-mem]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Mysql memory usage&amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
kMG[myhost-mysql-mem]: k,M,G,T,P,X&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-mysql-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-mysql-mem]: bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-mysql-mem]: private memory:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-mysql-mem]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-mysql-mem]: private memory, in bytes&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-mysql-mem]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-mysql-mem]: gauge, nopercent, growright&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-mysql-mem.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างการทำกราฟ TCP Establish connection&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ใช้ข้อมูล tcpCurrEstab.0 จาก snmp แสดงผลภาพเป็นกราฟเพียงเส้นเดียว&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้างแฟ้ม /etc/mrtg/myhost-tcpestab.cfg มีข้อมูลตัวอย่างประมาณว่า&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
WorkDir: /var/www/mrtg/myhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LoadMIBs: /usr/share/snmp/mibs/TCP-MIB.txt&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Target[myhost-tcpestab]: tcpCurrEstab.0&amp;amp;amp;amp;tcpCurrEstab.0:public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
RouterUptime[myhost-tcpestab]: public@localhost&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
MaxBytes[myhost-tcpestab]: 1000000&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Title[myhost-tcpestab]: TCP Current Establish&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
PageTop[myhost-tcpestab]: &amp;amp;lt;h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
TCP Current Establish &amp;amp;lt;/h1&amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ShortLegend[myhost-tcpestab]: conns&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
YLegend[myhost-tcpestab]: conns&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendI[myhost-tcpestab]: Current:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
LegendO[myhost-tcpestab]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend1[myhost-tcpestab]: Current, numbers of connections&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Legend2[myhost-tcpestab]:&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
Options[myhost-tcpestab]: nopercent, growright, gauge&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพต้นแบบด้วยคำสั่ง sudo env LANG=C /usr/bin/mrtg /etc/mrtg/myhost-tcpestab.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ตัวอย่างคำสั่งในการแสดง index สำหรับกราฟหลายรูปในหน้าเดียว&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/myhost-tcpestab.cfg &amp;amp;nbsp;/etc/mrtg/myhost-cpu.cfg &amp;amp;nbsp;/etc/mrtg/mrtg-myhost.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้าง config file สำหรับ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo cfgmaker &amp;amp;nbsp;-global "options[_]:bits,growright" --global "workdir: /var/www/mrtg/myhost" public@localhost &amp;amp;amp;gt; /tmp/mrtg-myhost.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo cp &amp;amp;nbsp;/tmp/mrtg-myhost.cfg /etc/mrtg/mrtg-myhost.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
ทดสอบสร้างภาพ ต้นแบบด้วยคำสั่ง &amp;amp;nbsp;sudo env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg-myhost.cfg&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
สร้าง index.html สำหรับ homepage mrtg ของ myhost ด้วยคำสั่ง&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
sudo indexmaker --column=1 --output=/var/www/mrtg/myhost/index.html /etc/mrtg/mrtg-myhost.cfg

ติดตั้ง mysql บน ubuntu

ทดสอบกับ ubuntu 8.04<br />
<br />
ติดตั้งด้วยคำสั่ง sudo apt-get install mysql-server<br />
<br />
หากได้หน้าต่าง Configuring mysql-server-5.0 &nbsp;มีข้อความแจ้งให้ใส่รหัสผ่าน<br />
ในตอนนี้ยังไม่ต้องใส่อะไร ให้เลื่อนไปเลือก &lt;ok&gt;<br />
ระบบจะทำการติดตั้งต่อไปจนเสร็จ<br />
<br />
สั่งให้ mysql server ทำงานด้วยคำสั่ง &nbsp;sudo /etc/init.d/mysql start<br />
<br />
เพื่อความปลอดภัยให้รีบแก้ไขรหัสผ่านของ root ของ mysql<br />
สมมติว่าต้องการให้รหัสของผู้ใช้ root มีรหัสผ่านว่า mysqldroot<br />
ตัวอย่างนี้ใช้คำสั่งว่า mysqladmin -uroot password mysqldroot<br />
<br />
ตัวอย่างคำสั่งในการสร้าง database ชื่อว่า testdatabase คือ<br />
mysql -uroot -pmysqldroot -e "CREATE DATABASE testdatabase CHARACTER SET 'UTF8';"<br />
<br />
ตัวอย่างคำสั่งในการลบ database ที่เคยสร้างไว้ชื่อ testdatabase ทิ้งไปคือ<br />
mysql -uroot -pmysqldroot -e "DROP DATABASE testdatabase;"<br />
<br />
ตัวอย่างกำหนดสิทธิ์การใช้ database ชื่อ testdatabase ให้แก่ user ชื่อ mamamysql โดยมีรหัสผ่านว่า mamapass ใช้คำสั่งคือ<br />
mysql -uroot -pmysqldroot -e "grant all privileges on testdatabase.* to 'mamamysql'@'localhost' identified by 'mamapass';"<br />
<br />
การ reset root password ของ mysql server ทำดังนี้<br />
ปิดการทำงานของ mysql ด้วยคำสั่ง sudo /etc/init.d/mysql stop<br />
สั่งให้ mysql ทำงานใหม่ด้วยคำสั่ง sudo mysqld --skip-grant-tables &amp;amp;<br />
ตั้งค่ารหัสผ่านของ root ใหม่ ตัวอย่างนี้ตั้งว่า mysqldroot ให้ใช้คำสั่งว่า mysql -u root mysql -e "UPDATE user SET Password=PASSWORD('mysqldroot') WHERE User='root';"<br />
แล้วตามด้วยคำสั่ง mysql -u root mysql -e "flush privileges;"<br />
เสร็จแล้วให้ปิด mysql sever ด้วยคำสั่ง kill -9 $(cat /var/run/mysqld/mysqld.pid)<br />
<br />
การถ่ายโอน database ภาษาไทย 8 bit ไปเป็น ภาษาไทย UTF-8 ทำดังนี้<br />
สมมติว่ามี database ภาษาไทย 8 bit ชื่อว่า my-8bit-database<br />
ให้ backup database ของเดิมที่เป็นภาษาไทย 8 bit มาเก็บไว้ในแฟ้ม /tmp/mybackup.sql ก่อนด้วยตัวอย่างคำสั่ง<br />
mysqldump -u root -pmysqldroot --default-character-set=latin1 --skip-set-charset my-8bit-database | sed "s/DEFAULT CHARSET=latin1//" &amp;gt; /tmp/mybackup.sql<br />
<br />
สร้างแฟ้ม database ภาษาไทย UTF-8 ชื่อ my-utf8-database ด้วยตัวอย่างคำสั่ง<br />
mysql -uroot -pmysqldroot -e "CREATE DATABASE my-utf8-database CHARACTER SET 'UTF8';"<br />
<br />
แล้วนำข้อมูลที่สำรองใน /tmp/mybackup.sql ไปใส่ restore คืนพร้อม upgrade เป็นภาษาไทย UTF-8 ในแฟ้ม my-utf8-database ด้วยคำสั่งประมาณว่า<br />
mysql -u root -pmysqldroot --default-character-set=tis620 my-utf8-database &amp;lt; /tmp/mybackup.sql<br />
<br />
ทำแค่นี้ก็จะได้ข้อมูล database ที่เป็นภาษาไทยแบบ UTF-8 ใช้งานแล้ว<br />
<br />
หากต้องการเครื่องมือจัดการ mysql แบบ graphic ให้ติดตั้งโปรแกรม &nbsp;mysql-query-browser<br />
ด้วยคำสั่ง &nbsp;sudo apt-get install mysql-query-browser<br />
เสร็จแล้วเรียกใช้งานด้วยคำสั่ง &nbsp;mysql-query-browser ได้เลย<br />
<br />
หากต้องการใช้เครื่องมือจัดการ mysql แบบ graphic จากภายนอกเครื่อง Server เช่น MySQLYog-Community Edition<br />
หรือจะติดตั้ง phpmyadmin บน Web Server คนละเครื่องกับ MySQL Server ต้องแก้ไขไฟล์<br />
/etc/mysql/my.cnf<br />
แล้ว comment จากบรรทัดที่เขียนว่า<br />
bind-address = 127.0.0.1<br />
ให้เป็น<br />
#bind-address = 127.0.0.1<br />
<br />
แล้ว restart mysql<br />
sudo /etc/init.d/mysql restart&lt;/ok&gt;

ติดตั้ง MailScanner และ MailWatch


วิธีการนี้ ทดสอบการใช้งานกับ Ubuntu 8.04 (วิธีการเลือกแผ่น Ubuntu, การปรับแต่งหลังติดตั้ง Ubuntu และ การใช้งาน apt-get ภายใน ม.สงขลานครินทร์)
และเพื่อความสะดวก ขอให้ sudo su (เพื่อใช้สิทธิ์ Super User) ในการแก้ไขระบบ
MailScanner
ติดตั้ง Postfix (อ่านข้อมูลเพิ่มเติมที่นี่)
     sudo apt-get install postfix
ติดตั้ง package mailscanner เพื่อตรวจคัดกรองจดหมาย และ clamav  เพื่อหาหนอนและไวรัสคอมพิวเตอร์ใน e-mail
     sudo apt-get install mailscanner clamav

     !!! สำหรับ Ubuntu 10.04, mailscanner ที่มากับ Ubuntu ไม่สามารถใช้การได้ ให้ทำดังนี้แทน !!!
     sudo apt-get install libconvert-tnef-perl libdbd-sqlite3-perl libfilesys-df-perl libmailtools-perl libmime-tools-perl libmime-perl libnet-cidr-perl libsys-syslog-perl libio-stringy-perl libfile-temp-perl libsys-hostname-long-perl
     wget http://debian.intergenia.de/debian/pool/main/m/mailscanner/mailscanner_4.79.11-2.2_all.deb
     sudo dpkg --force-all -i mailscanner_4.79.11-2.2_all.deb
แก้ไขไฟล์ /etc/MailScanner/MailScanner.conf
      Run As User = postfix
      Run As Group = postfix
      Incoming Queue Dir = /var/spool/postfix/hold
     Outgoing Queue Dir = /var/spool/postfix/incoming
      MTA=postfix
      Virus Scanners = clamav
แก้ไขไฟล์ /etc/MailScanner/spam.assassin.prefs.conf
      razor_config /var/lib/MailScanner
ติดตั้ง package เครื่องมือช่วยวิเคราะห์ Spam
     sudo apt-get install pyzor razor
     sudo apt-get -f install
แก้ไข /etc/default/mailscanner
      run_mailscanner=1
แก้ไขสิทธิ์ ให้เป็นของ postfix ในไฟล์ต่อไปนี้
     sudo chown -R postfix.postfix /var/spool/MailScanner/ 
     sudo chown -R postfix.postfix /var/lib/MailScanner/ 
     sudo chown -R postfix.postfix /var/run/MailScanner/ 
     sudo chown -R postfix.postfix /var/lock/subsys/MailScanner/
หลังการเปลี่ยนแปลง ก็ restart mailscanner
     sudo /etc/init.d/mailscanner restart 

MailWatch
ติดตั้ง package เกี่ยวกับ mysql และ php ต่างๆ
     sudo apt-get install mysql-server php5-mysql php5-gd php5-cli
ระบบจะให้ตั้ง password ของ mysql ให้กำหนดลงไป (ตั้งรหัสไว้อย่างไรจำให้ได้ด้วย)
restart apache
    sudo /etc/init.d/apache2 restart
restart mysql
     sudo /etc/init.d/mysql start
download mailwatch มา (ในกรณีนี้ ดึงจาก ftp ของมหาวิทยาลัยสงขลานครินทร์)
     sudo wget ftp://ftp.psu.ac.th/pub/mailwatch/mailwatch-1.0.4.tar.gz
แตกไฟล์ออกมาเป็น directory
     sudo tar -zxvf mailwatch-1.0.4.tar.gz
     sudo ln -s mailwatch-1.0.4 mailwatch
เข้าไปใน directory mailwatch เพื่อดำเนินการติดตั้ง mailwatch
     cd mailwatch
เรียกใช้ sql script เพื่อสร้าง Database สำหรับ MailWatch
     mysql -uroot -p &lt; create.sql
Login เข้าไปใน mysql เพื่อสร้างผู้ใช้สำหรับ MailWatch
     mysql -u root -p
     mysql&gt; GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'mailwatchpassword'; 
     mysql&gt; quit
แก้ไขไฟล์ MailWatch.pm
     my($db_user) = 'mailwatch';
     my($db_pass) = 'mailwatchpassword';
นำไฟล์ MailWatch.pm ไปผูกกับ MailScanner
     sudo cp MailWatch.pm /usr/share/MailScanner/MailScanner/CustomFunctions
Login เข้า mysql ด้วยสิทธิ์ user ของ MailWatch และสร้าง user สำหรับเข้าใช้งานทาง Web
     mysql mailscanner -u mailwatch -p
     mysql&gt; INSERT INTO users VALUES ('mailwatchweb',md5('mailwatchwebpassword'),'MailWatch Web User','A','0','0','0','0','0');
ย้าย directory mailwatch ไปไว้ใน Document Root ของ apache เพื่อให้สามารถเรียกใช้ทาง web ได้
     sudo mv mailscanner /var/www
เข้าไปใน directory /var/www/mailscanner เพื่อกำหนดสิทธิ์การเข้าถึง directory ส่วนต่างๆ
     cd /var/www/mailscanner
     sudo  chown root.www-data images
     sudo  chown root.www-data images/cache
     sudo  chmod ug+rwx images
     sudo  chmod ug+rwx images/cache
copy ต้นแบบ configuration ของเดิม มาใช้งาน
     sudo cp conf.php.example conf.php
แก้ไขไฟล์ conf.php เพื่อทำให้ MailWatch เข้าใช้ mysql ได้
     define(DB_USER, 'mailwatch');
     define(DB_PASS, 'mailwatchpassword');
     define(QUARANTINE_USE_FLAG, true);
     //define(MAILWATCH_HOME, '/var/www/html/mailscanner');
     define(MAILWATCH_HOME, '/var/www/mailscanner'); 
แก้ไขไฟล์ /path/to/mailwatch/tools/quarantine_maint.php (/path/to/mailwatch/ คือ path ที่เราแตกไฟล์ mailwatch-1.0.4.tar.gz ออกมาในข้างต้น ต้องแก้ไขให้ตรงกับความเป็นจริงด้วย)
     //require('/var/www/html/mailscanner/functions.php');
     require('/var/www/mailscanner/functions.php');
สร้างไฟล์ cron สำหรับลบ Quarantine ของ MailWatch ทุกวัน และเปลี่ยนสิทธ์ให้สามารถ execute ได้
     sudo echo "/path/to/mailwatch/tools/quarantine_maint.php --clean" &gt; /etc/cron.daily/mailwatch_quarantine_maint.sh
     sudo chmod +x /etc/cron.daily/mailwatch_quarantine_maint.sh
แก้ไขไฟล์ /var/www/mailscanner/do_message_ops.php (ในกรณีที่ต้องการอ่าน queue file ใน quarantine)
     //if (preg_match('/^OPT-([-[a-zA-Z0-9]+)$/', $k, $Regs)) {
     //$id = $Regs[1];
     if (preg_match('/^OPT-([a-zA-Z0-9]+)_([a-zA-Z0-9]+)/', $k, $Regs)) {
     $id = "$Regs[1].$Regs[2]";
หยุดการทำงานของ mailscanner ชั่วคราวเพื่อแก้ไขระบบ
     sudo /etc/init.d/mailscanner stop
แก้ไขไฟล์ /etc/MailScanner/MailScanner.conf
     Run As Group = www-data
     Quarantine User = postfix
     Quarantine Group = www-data
     Quarantine Permissions = 0660
     Quarantine Whole Message = yes
     Quarantine Whole Messages As Queue Files = no
     Spam Actions = deliver header "X-Spam-Status: Yes" store
     High Scoring Spam Actions = deliver header "X-Spam-Status: Yes" store
     Non Spam Actions = deliver header "X-Spam-Status: No" store
     Always Looked Up Last = &amp;MailWatchLogging
แก้ไข /etc/MailScanner/spam.assassin.prefs.conf ค่าต่อไปนี้
    bayes_path /etc/MailScanner/bayes/bayes
    bayes_file_mode 0660

    แล้วสร้าง bayes directory และให้สิทธิ group เดียวกับ Web User (www-data)

    sudo mkdir /etc/MailScanner/bayes
    sudo chown root:www-data /etc/MailScanner/bayes
    sudo chmod g+rws /etc/MailScanner/bayes
    
    จากนั้น ย้ายของเดิม (ถ้ามี) ไปเก็บ และเปลี่ยน Permission ให้ถูกต้อง

    sudo cp /home/mama/.spamassassin/bayes_* /etc/MailScanner/bayes
    sudo chown root:www-data /etc/MailScanner/bayes/bayes_*
    sudo chmod g+rw /etc/MailScanner/bayes/bayes_*

แก้ไขไฟล์ /etc/postfix/main.cf (เพื่อเปิดให้ postfix ไปตรวจสอบ Header ของแต่ละ e-mail โดยดูแบบตัวอย่างจากไฟล์ header_checks)
     header_checks = regexp:/etc/postfix/header_checks
แก้ไขไฟล์ /etc/postfix/header_checks (บังคับให้ e-mail ไหลเข้า HOLD queue ของ Postfix เพื่อให้ MailScanner ตรวจสอบก่อนจะส่งเข้า incoming queue เพื่อส่งต่อไป)
      /^Received:/ HOLD
ทำการ Restart postfix
sudo /etc/init.d/postfix restart
จากนั้น ให้ restart mailscanner  อีกครั้งจึงเสร็จสมบูรณ์
     sudo /etc/init.d/mailscanner start
วิธีการเข้าใช้งาน MailWatch
เปิด Web Browser ไปที่
     http://your.web.site/mailscanner
     ระบบจะถาม username/password สำหรับเข้า web interface ของ MailWatch ที่กำหนดไว้<span style="text-decoration: underline;"></span>

ติดตั้ง mediawiki บน ubuntu

ทดสอบกับ ubuntu 10.04 และ mediawiki 1.17.4
ต้นฉบับ mediawiki อยู่ที่ http://www.mediawiki.org/

ติดตั้ง apache web server ด้วยคำสั่ง
sudo apt-get install apache2
ติดตั้ง mysql database server ด้วยคำสั่ง
sudo apt-get install mysql-server

ระหว่างติดตั้งหากมีคำถามที่เกี่ยวกับการตั้งรหัสผ่าน ก็ให้เคาะแป้น enter ผ่านไปก่อนทั้งหมด
หลังติดตั้งเสร็จแล้วให้รีบตั้งรหัสผ่าน root ของ mysql-server ใหม่

ตัวอย่างนี้ตั้งรหัสผ่านว่า mysqldroot ใช้คำสั่งคือ
mysqladmin -uroot password mysqldroot
ติดตั้ง php ด้วยคำสั่ง
sudo apt-get install php5 php5-mysql php5-cli php5-gd php5-ldap php5-radius unzip
sudo a2enmod rewrite

แล้วสั่งให้ apache ทำงานใหม่ด้วยคำสั่ง
sudo /etc/init.d/apache2 force-reload
สร้าง database สำหรับ mediawiki ที่ต้องการติดตั้ง
ตัวอย่างสร้าง database ชื่อ wikidb ใช้คำสั่ง
mysql -uroot -pmysqldroot -e "CREATE DATABASE wikidb CHARACTER SET 'UTF8';"

***หากต้องการลบ database เดิมที่เคยสร้างไว้แล้ว ใช้คำสั่งว่า
mysql -uroot -pmysqldroot -e "DROP DATABASE wikidb;"

แล้วกำหนดสิทธิ์การใช้ database wikidb ให้แก่ user
ตัวอย่างสร้าง user ชื่อ wikiuser โดยมีรหัสผ่านว่า wikipass ใช้คำสั่งคือ
mysql -uroot -pmysqldroot -e "grant all privileges on wikidb.* to 'wikiuser'@'localhost' identified by 'wikipass' ;"
ติดตั้ง mediawiki ดาวน์โหลดจาก http://ftp.psu.ac.th/pub/mediawiki/mediawiki-1.17.4.tar.gz ด้วยคำสั่ง
wget -P /tmp http://ftp.psu.ac.th/pub/mediawiki/mediawiki-1.17.4.tar.gz

แตกแฟ้มออกมาติดตั้งด้วยคำสั่ง
sudo tar -zxvf /tmp/mediawiki-1.17.4.tar.gz -C /var/www

แล้วทำงานต่อด้วยคำสั่ง
sudo mv /var/www/mediawiki-1.17.4 /var/www/mediawiki
sudo chown -R www-data /var/www/mediawiki
เริ่มต้นระบบไปที่เวบ http://localhost/mediawiki
ได้หน้าเวบข้อความว่า
* MediaWiki 1.17.4
LocalSettings.php not found.
Please set up the wiki first.
ให้คลิกเลือก setup the wiki

* ได้หน้าเวบหัวข้อว่า MediaWiki 1.17.4 Installation
Language
ช่อง Your language: ให้เปลี่ยนไปเลือกเป็น th - ไทย
ช่อง Wiki language: ให้เปลี่ยนไปเลือกเป็น th - ไทย
แล้วคลิกเลือกปุ่ม Continue

ได้หน้าเวบหัวข้อว่า Welcome to MediaWiki! ...
ให้ตรวจสอบว่าข้อมูลของหน้าเวบมีข้อความสีเขียวว่า
The environment has been checked. You can install MediaWiki
...
ให้คลิกเลือกปุ่ม Continue

ได้หน้าเวบหัวข้อว่า Connect to database
ช่อง Database host: ยังคงเป็น localhost เหมือนเดิม
ช่อง Database name: ให้เปลี่ยนเป็น wikidb
ช่อง Database table prefix: ให้ปล่อยว่างไว้เหมือนเดิม
ช่อง Database username: ให้เปลี่ยนเป็น wikiuser
ช่อง Database password: ให้เปลี่ยนเป็น wikipass
แล้วคลิกเลือกปุ่ม Continue

ได้หน้าเวบหัวข้อว่า Database settings
ช่อง Storage engine: ยังคงเป็น InnoDB เหมือนเดิม
ช่อง Database character set: เปลี่ยนให้เป็น UTF-8
แล้วคลิกเลือกปุ่ม Continue

ได้หน้าเวบหัวข้อว่า Name
ช่อง Name of wiki: ใส่ค่าตามใจชอบเช่น mw1174
ช่อง Project namespace: ยังคงเป็น Same as the wiki name: เหมือนเดิม
ช่อง Your name: ให้ป้อนว่า admin
ช่อง Password: ให้ป้อนว่า 123456
ช่อง Password again: ให้ป้อนว่า 123456
ช่อง E-mail address: ให้ใส่อีเมล์ตามใจชอบ
ไปที่ด้านล่างสุด เดิมเลือกเป็น Ask me more questions
ให้เปลี่ยนไปเลือกเป็น I'm bored already, just install the wiki. แทน
แล้วคลิกเลือกปุ่ม Continue

ได้หน้าเวบหัวข้อว่า Install
ให้คลิกเลือกปุ่ม Continue
ระบบจะเริ่มติดตั้งได้หน้าเวบใหม่
ให้คลิกเลือกปุ่ม Continue อีกที

ได้หน้าเวบหัวข้อว่า Complete!
และได้หน้าต่างใหม่ขึ้นมาแจ้งให้บันทึกแฟ้ม LocalSettings.php
ให้ save แฟ้มนี้เก็บเอาไว้ใน local disk ก่อน

ต่อไปให้นำแฟ้ม LocalSettings.php ที่เก็บไว้นี้ไปไว้บน mediawiki server ตัวนี้
โดยเก็บใส่ไว้ให้เป็น /var/www/mediawiki/LocalSettings.php
แค่นี้ก็เสร็จแล้ว ใช้งานเวบนี้ได้เลย
ทดสอบเริ่มต้นใช้งานได้ที่เวบ http://localhost/mediawiki
การปรับแต่งเมนูด้านซ้ายมือ ให้ไปที่เวบ http://localhost/mediawiki/index.php/MediaWiki:Sidebar
ปรับแต่งภาพที่แสดงด้านซ้ายบน ให้เอารูปมาเก็บไว้ที่ /var/www/mediawiki
แล้วให้แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
ตัวอย่างจัดการบรรทัดตัวแปร $wgLogo = "mediawiki/psulug.jpg";
ปรับแต่งให้หน้าเวบเป็นภาษาไทย แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
จัดการตัวแปรให้เป็น $wgLanguageCode = "th";
อนุญาติให้ upload แฟ้ม ให้แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
ตั้งค่าตัวแปร $wgEnableUploads = true;
เพิ่มชนิดของแฟ้มที่ upload ได้คือ $wgFileExtensions[] = "pdf";
ปรับแต่งเวลาให้แสดงเป็นประเทศไทย แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
จัดการบรรทัดตัวแปรดังนี้
$wgLocaltimezone = "Asia/Bangkok";
$oldtz = getenv("TZ");
putenv("TZ=$wgLocaltimezone");
$wgLocalTZoffset = date("Z") / 60;
putenv("TZ=$oldtz");
ปรับแต่งห้ามไม่ให้บุคคลทั่วไปขอสร้าง user เพิ่ม
แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
แล้วเพิ่มบรรทัดข้อความเข้าไปที่ตอนท้ายของแฟ้มว่า
$wgGroupPermissions['*' ]['createaccount'] = false;
หากต้องการสร้าง user เพิ่ม ต้อง login เข้าด้วยผู้คุมระบบ admin จึงจะสร้างได้
ปรับแต่งห้ามไม่ให้บุคคลทั่วไปแก้ไขเนื้อหา ต้อง login เข้าก่อนจึงแก้ไขได้
แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
แล้วเพิ่มบรรทัดข้อความเข้าไปที่ตอนท้ายของแฟ้มว่า
$wgGroupPermissions['*']['edit'] = false;
ติดตั้ง WYSIWYG editor เพื่อให้มีเครื่องมือเขียนง่ายขึ้น ทำดังนี้
ต้องติดตั้งโปรแกรม unzip ก่อน ด้วยคำสั่ง
sudo apt-get install unzip

ดาวน์โหลดแฟ้มมาเก็บไว้ด้วยคำสั่ง
wget -P /tmp http://ftp.psu.ac.th/pub/mediawiki/wysiwyg-1.6.0_22.zip
แล้วแตกแฟ้มไปเก็บไว้ด้วยคำสั่ง
sudo unzip -d /var/www/mediawiki /tmp/wysiwyg-1.6.0_22.zip

ต่อไปแก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
แล้วเพิ่มบรรทัดข้อความเข้าไปที่ตอนท้ายของแฟ้มว่า
require_once("$IP/extensions/WYSIWYG/WYSIWYG.php");
$wgGroupPermissions['*']['wysiwyg']=true;

ทำแค่นี้ทดสอบผลงานได้เลย ทดสอบดูพบว่าใช้ได้ดีกับ Firefox ส่วน browser ตัวอื่นพบว่าเพี้ยนๆ
ลองติดตั้งกะ RADIUS server ต้องติดตั้งโปรแกรมเพิ่มเติมคือ
sudo apt-get install php5-radius

ดาวน์โหลดแฟ้มจาก http://ftp.psu.ac.th/pub/mediawiki/AuthenRadius.php ด้วยคำสั่ง
wget -P /tmp http://ftp.psu.ac.th/pub/mediawiki/AuthenRadius.php

แล้วนำไปติดตั้งด้วยคำสั่ง
sudo mv /tmp/AuthenRadius.php /var/www/mediawiki/extensions

แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php เติมไปที่บรรทัดสุดท้ายว่า
require_once("./extensions/AuthenRadius.php");
$wgAuth = new AuthenRadius();
$wgRADIUShost = '10.0.6.2';
$wgRADIUSkey = 'mykey';
ปรับค่า $wgRADIUShost และ $wgRADIUSkey ตามต้องการ

แล้วลองดูผลงานการ authen กับ radius server ได้เลย

ข้อควรระวัง username ต้องเป็นภาษาอังกฤษตัวเล็กเท่านั้น
ตัวอย่างการทำให้ url บน virtual host ดูสวย เช่น http://my.domain
ให้แแก้ไขแฟ้ม /etc/apache2/sites-available/default ให้มีเนื้อหาประมาณว่า
NameVirtualHost *:80
<virtualhost>
DocumentRoot /var/www
ServerName my.domain
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteCond %{REQUEST_URI} !^/mediawiki/
RewriteRule ^/(.*)$ /mediawiki/index.php/$1 [L,QSA]
</virtualhost>

และแก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php
ให้มีบรรทัดตัวแปรว่า $wgArticlePath = "/$1";
ลองติดตั้งกะ ldap PSU ต้องติดตั้งเพิ่มเติมคือ
sudo apt-get install php5-ldap
ดาวน์โหลดแฟ้มจาก http://ftp.psu.ac.th/pub/mediawiki/LdapAuthentication-MW1.17-r86547.tar.gz ด้วยคำสั่ง
wget -P /tmp http://ftp.psu.ac.th/pub/mediawiki/LdapAuthentication-MW1.17-r86547.tar.gz
แล้วติดตั้งด้วยคำสั่ง
sudo tar -zxvf LdapAuthentication-MW1.17-r86547.tar.gz -C /var/www/mediawiki/extensions

แก้ไขแฟ้ม /var/www/mediawiki/LocalSettings.php เติมไปที่บรรทัดสุดท้ายว่า
require_once("./extensions/LdapAuthentication/LdapAuthentication.php");
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array( "PSU" );
$wgLDAPServerNames = array( "PSU"=&gt;"front.psu.ac.th" );
$wgLDAPEncryptionType = array( "PSU"=&gt;"clear" );
$wgLDAPBaseDNs = array( "PSU"=&gt;"dc=cc,dc=psu");
$wgLDAPSearchAttributes = array( "PSU"=&gt;"uid");
แล้วลองดูผลงานของ ldap PSU เลย

ทดลองแก้ไขให้เฉพาะ user บางคนเท่านั้นที่จะเข้าไปบันทึกได้
แก้ไขแฟ้ม /var/www/mediawiki/extensions/LdapAuthentication/LdapAuthentication.php
แทรกเพิ่มที่ประมาณบรรทัด 329 ที่บรรทัดชุดคำสั่งว่า
if ( == $password &amp;&amp; !$this-&gt;useAutoAuth() ) {
$this-&gt;printDebug( "User used a blank password", NONSENSITIVE );
return false;
}
$this-&gt;connect();
ให้แทรกเพิ่มเข้าไปกลายเป็นตามตัวอย่างว่า
if ( == $password &amp;&amp; !$this-&gt;useAutoAuth() ) {
$this-&gt;printDebug( "User used a blank password", NONSENSITIVE );
return false;
}
switch ($username) {
case "Songkrant.m" :
case "Wipat.s" :
case "Wisit.c" :
case "admin" : break;
default : return false;
}
$this-&gt;connect();

ติดตั้ง lm-sensors บน ubuntu

ทดสอบกับ ubuntu 10.04, 8.0.4
ต้นฉบับจาก http://www.lm-sensors.org/
ใช้ประโยชน์เพื่ออ่านค่าอุณหภูมิของ CPU และ Mainboard
ทดสอบพบว่าบาง hardware และบาง kernel ใช้ไม่ได้

ติดตั้ง lm-sensors ด้วยคำสั่ง  sudo apt-get install lm-sensors

เริ่มต้นโปรแกรมตรวจสอบ hardware ของระบบด้วยคำสั่ง sudo sensors-detect
ระบบจะมีข้อความให้โต้ตอบกลับ ให้ป้อนแค่คำว่า yes ตลอดทุกคำถามได้เลย

ตัวอย่างข้อความที่โต้ตอบประมาณว่า
# sensors-detect revision 5016 (2007-11-11 22:20:16 +0100)
This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.
We can start with probing for (PCI) I2C or SMBus adapters.
Do you want to probe now? (YES/no):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Probing for PCI bus adapters...
Use driver `i2c-i801' for device 0000:00:1f.3: Intel 82801G ICH7
We will now try to load each adapter module in turn.
Load `i2c-i801' (say NO if built into your kernel)? (YES/no):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Probing for PCI bus adapters...
Use driver `i2c-i801' for device 0000:00:1f.3: Intel 82801G ICH7
We will now try to load each adapter module in turn.
Load `i2c-i801' (say NO if built into your kernel)? (YES/no): yes
Module loaded successfully.
If you have undetectable or unsupported adapters, you can have them
scanned by manually loading the modules before running this script.
To continue, we need module `i2c-dev' to be loaded.
Do you want to load `i2c-dev' now? (YES/no):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Probing for PCI bus adapters...
Use driver `i2c-i801' for device 0000:00:1f.3: Intel 82801G ICH7
We will now try to load each adapter module in turn.
Load `i2c-i801' (say NO if built into your kernel)? (YES/no): yes
Module loaded successfully.
If you have undetectable or unsupported adapters, you can have them
scanned by manually loading the modules before running this script.
To continue, we need module `i2c-dev' to be loaded.
Do you want to load `i2c-dev' now? (YES/no): yes
Module loaded successfully.
We are now going to do the I2C/SMBus adapter probings. Some chips may
be double detected; we choose the one with the highest confidence
value in that case.
If you found that the adapter hung after probing a certain address,
you can specify that address to remain unprobed.
Next adapter: SMBus I801 adapter at 0500 (i2c-0)
Do you want to scan it? (YES/no/selectively):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Client found at address 0x44
Probing for `Maxim MAX6633/MAX6634/MAX6635'...              No
Client found at address 0x50
Probing for `Analog Devices ADM1033'...                     No
Probing for `Analog Devices ADM1034'...                     No
Probing for `SPD EEPROM'...                                 Yes
    (confidence 8, not a hardware monitoring chip)
Probing for `EDID EEPROM'...                                No
Some chips are also accessible through the ISA I/O ports. We have to
write to arbitrary I/O ports to probe them. This is usually safe though.
Yes, you do have ISA I/O ports even if you do not have any ISA slots!
Do you want to scan the ISA I/O ports? (YES/no):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Probing for `National Semiconductor LM78' at 0x290...       No
Probing for `National Semiconductor LM78-J' at 0x290...     No
Probing for `National Semiconductor LM79' at 0x290...       No
Probing for `Winbond W83781D' at 0x290...                   No
Probing for `Winbond W83782D' at 0x290...                   No
Probing for `Silicon Integrated Systems SIS5595'...         No
Probing for `VIA VT82C686 Integrated Sensors'...            No
Probing for `VIA VT8231 Integrated Sensors'...              No
Probing for `IPMI BMC KCS' at 0xca0...                      No
Probing for `IPMI BMC SMIC' at 0xca8...                     No
Some Super I/O chips may also contain sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no):

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor'...                   No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Fintek'...                       No
Trying family `ITE'...                                      Yes
Found `ITE IT8712F Super IO Sensors'                        Success!
    (address 0x290, driver `it87')
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor'...                   No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Fintek'...                       No
Trying family `ITE'...                                      No
Some CPUs or memory controllers may also contain embedded sensors.
Do you want to scan for them? (YES/no): yes

ให้ป้อนคำว่า yes  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
AMD K8 thermal sensors...                                   No
AMD K10 thermal sensors...                                  No
Intel Core family thermal sensor...                         No
Intel AMB FB-DIMM thermal sensor...                         No
Now follows a summary of the probes I have just done.
Just press ENTER to continue:

ให้เคาะแป้น Enter  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
Driver `it87' (should be inserted):
  Detects correctly:
  * ISA bus, address 0x290
    Chip `ITE IT8712F Super IO Sensors' (confidence: 9)
I will now generate the commands needed to load the required modules.
Just press ENTER to continue:

ให้เคาะแป้น Enter  จะได้ข้อความต่อมาตัวอย่างประมาณว่า
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
it87
#----cut here----
Do you want to add these lines automatically? (yes/NO)

ให้ป้อนคำว่า yes  แฟ้ม /etc/modules จะถูกเขียนเพิ่มเติมโดยอัตโนมัติ
เป็นอันเสร็จสิ้นการตรวจสอบ hardware ของระบบ  เสร็จแล้วก็ให้รีบูท PC ใหม่

ตรวจสอบข้อมูลของระบบด้วยคำสั่ง env LANG=C sensors  ได้ผลประมาณดังตัวอย่างว่า
it8712-isa-0290
Adapter: ISA adapter
VCore 1:     +1.50 V  (min =  +0.00 V, max =  +4.08 V)
VCore 2:     +2.61 V  (min =  +0.00 V, max =  +4.08 V)
+3.3V:       +3.41 V  (min =  +0.00 V, max =  +4.08 V)
+5V:         +4.22 V  (min =  +0.00 V, max =  +6.85 V)
+12V:       +12.16 V  (min =  +0.00 V, max = +16.32 V)
-12V:       -16.07 V  (min = -27.36 V, max =  +3.93 V)
-5V:         -8.10 V  (min = -13.64 V, max =  +4.03 V)
Stdby:       +1.42 V  (min =  +0.00 V, max =  +6.85 V)
VBat:        +3.26 V
fan1:       2860 RPM  (min =    0 RPM, div = 8)
fan2:       1268 RPM  (min =    0 RPM, div = 8)
fan3:          0 RPM  (min =    0 RPM, div = 8)
M/B Temp:    +25.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = transistor
CPU Temp:    +25.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = transistor
Temp3:       +43.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = thermal diode
cpu0_vid:   +1.525 V

หมายความว่า CPU มีอุณหภูมิ 25 องศาเซลเซียส และ Mainboard มีอุณหภูมิ 25 องศาเซลเซียส

ติดตั้ง libpam-radius-auth บน ubuntu

เป็นการตั้งค่าให้ linux ubuntu ทำการ authen กับ user ผ่าน radius
ทดสอบกับ ubuntu 10.04

ติดตั้งด้วยคำสั่ง sudo apt-get install libpam-radius-auth
แก้ไขแฟ้ม /etc/pam_radius_auth.conf  ไปบรรทัดประมาณที่ 25
# server[:port] shared_secret      timeout (s)
127.0.0.1       testing123             10
other-server    other-secret       3
ให้แก้ไขชื่อ server, shared_secret ให้ถูกต้องกับ radius ตามต้องการ
ค่า timeout ตั้งให้นานหรือเร็วขึ้นตามความเหมาะสมกับระบบที่ใช้งาน
ต้องสร้าง user บนลินุกซ์ให้มี home ใช้งานก่อน จึงจะสามารถใช้งานได้
สมมติว่า user ชื่อ superman ใช้คำสั่งว่า
sudo useradd -m -s /bin/bash superman
แก้ไขแฟ้ม /etc/pam.d/common-auth ไปบรรทัดประมาณที่ 17
บรรทัดข้อความเดิมว่า
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
ให้แทรกบรรทัดข้อความเพิ่มว่า
auth    sufficient      pam_radius_auth.so
กลายเป็นบรรทัดข้อความเดิมว่า
auth    sufficient      pam_radius_auth.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
ทดสอบ login เข้าใช้งานด้วย user ผ่าน radius ได้เลย
ในกรณีที่ใช้กับ pam_radius_auth.so โดยไม่มีการสร้าง home ของ user มาก่อน
เราสามารถสร้าง home ให้ใช้งานชั่วคราวได้
ให้สร้างแฟ้ม /etc/pam.d/pam-useradd.sh มีข้อมูลดังนี้
#!/bin/bash
if [ -z "$(grep "^${PAM_USER}:" /etc/passwd)" ] ; then
  useradd -m -b /tmp -s /bin/bash ${PAM_USER}
fi

แล้วแก้ไขแฟ้ม /etc/pam.d/common-auth ไปบรรทัดประมาณที่ 17
บรรทัดข้อความเดิมว่า
auth    sufficient      pam_radius_auth.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
ให้แทรกบรรทัดข้อความเพิ่มว่า
auth    optional        pam_exec.so /bin/sh /etc/pam.d/pam-useradd.sh
กลายเป็นบรรทัดข้อความเดิมว่า
auth    optional        pam_exec.so /bin/sh /etc/pam.d/pam-useradd.sh
auth    sufficient      pam_radius_auth.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure

ต่อไปแก้ไขแฟ้ม /etc/pam.d/common-session ไปบรรทัดประมาณที่ 17
บรรทัดข้อความเดิมว่า
session [default=1]                     pam_permit.so
ให้แทรกบรรทัดข้อความเพิ่มว่า
session    required    pam_mkhomedir.so
กลายเป็นบรรทัดข้อความเดิมว่า
session [default=1]                     pam_permit.so
session    required    pam_mkhomedir.so

ทดสอบ login เข้าใช้งานด้วย user ผ่าน radius ได้เลย
หากเป็น user เคยมี home บน server นี้แล้ว ก็จะเข้าใช้งานได้ทันที
แต่ถ้ายังไม่เคยมี home บน server นี้ การ login ครั้งแรกจะไม่สำเร็จ ให้ login ซ้ำอีกครั้ง จึงจะเข้าใช้งานได้
มีปัญหากับ screensaver เมื่อ screensaver ทำงานแล้ว  unlock ไม่ได้ ระบบแจ้งว่ารหัสผ่านผิด
ต้องเลิกใช้ screensaver ด้วยการถอดโปรแกรม gnome-screensaver ออกด้วยคำสั่ง
sudo apt-get remove gnome-screensaver