วันพฤหัสบดี, ธันวาคม 22, 2548

จะทำยังไงหาก swap partition เราไม่พอใช้งาน

อันนี้เป็น ของเก่าทำเก็บไว้กันลืม

โดยปกติแล้ว เวลาเราลง OS มักจะได้รับคำแนะนำอยู่เสมอๆ ว่าควรจะ create swap partition ให้เป็นสองเท่าของเนื้อที่ Ram ของตัวเครื่อง ซึ่งบางครั้งมันก็ไม่ได้จำเป็นเสมอไป ยกตัวอย่างง่ายๆ หากเรามีเครื่องที่มี ram ซัก 2 GB ขึ้นไป หากทำตามคำแนะนำมันจะต้องเสียพื้นที่ 4GB ให้เป็น swap partition ซึ่งดูๆ ไปแล้วมันต้องบ้าแน่ๆ หากทำแบบนั้นกับ server ที่ไม่ได้ใช้ ram ขนาดนั้น โดยปกติ ผมเองจะทำอย่างมากก็ create swap partition แค่ 1GB นี่ก็โครตเยอะแล้ว

แต่หลังจากนั้น ผมก็พบประสบการณ์อันน่ากลัว ที่ไม่เคยคาดคิดเกิดขึ้น คือ ram ไม่พอ แล้วมันไป swap จน swap จะหมด จนคิดว่าจะทำอย่างไรดี

สุดท้ายก็นึกว่าได้ มันทำ swap file ได้นี่หว่า (วิธีนี้อาจจะมีข้อเสีย ซึ่งจากที่ไปอ่านๆ ตามต่างประเทศเค้าบอกกันว่า มันจะทำให้ช้ากว่าแยกเป็น parition แต่ผมคิดว่าถ้ามันไม่บ่อยก็คงไม่มีปัญหาอะไร)

วิธีทำ
  1. ท ำการสร้าง file จากความว่างเปล่า โดยในที่นี้ผมจะสร้างให้มันมีขนาดซัก 512MB เอามันไว้ที่ไหนก็ได้ที่มีที่เหลือให้มันอยู่ นั้นล่ะ ในกรณีนี้สมมุติว่า root มันว่างแล้วกัน ง่ายดี
    # dd if=/dev/zero of=/swapfile1 bs=1024 count=524288000


  2. ขั้นต่อมาสั่งให้มันกลายเป็น swap file ซะ
    # mkswap /swapfile1

  3. จากนั้น สั่งให้มันสามารถนำมาใช้งานได้โดยสั่ง
    # swapon /swapfile1

    สามารถลองตรวจสอบได้จาก คำสั่ง cat /proc/swap

  4. ในกรณีที่เราต้องการให้มันกลายเป็น default ไปเลยนั้นให้แก้ไขที่ /etc/fstab แล้วก็เติมข้อความดังข้างล่างนี้ลงไปท้ายสุด
    /swapfile1 swap swap defaults 0 0

วันพุธ, ธันวาคม 14, 2548

log rotation บน solaris

เดี๋ยวนี้มีอะไรเกี่ยวกับ solaris มากเหลือเกิน วุ่นวายดี อันนี้จะเป้นเรื่องย้อนหลังหน่อย เกี่ยวกับ log rotation บน solaris นั้นล่ะ คือที่ผ่านมาได้จับงานอยู่งานหนึ่งเขียน application จากนั้นจะต้องทำ log rotation บน solaris ซึงมันเป็นเครื่องของคนอื่น แถมไ่ม่ได้ลง logrotate บนนั้นอีก (ทำไม ที่นั้นไม่ใช้ logrotate หว่า ไม่เข้าใจ) เลยต้องมาเขียนเอง

ขอเอา script มาแปะไว้กันหาย

#!/usr/bin/bash
archiveName=blabla
archiveBack=7
archivePath=/some/archive/log/path

logPath1=/where/path/log/for/archive/1
logPath2=/where/path/log/for/archive/2

#archiveDate=`date '+%Y-%m-%d'`
archiveDate=`getbefortoday`


# ---- begin make archive ----
archiveNo=0
n=$archiveBack

echo "starting archiving log file of $archiveDate ..."

cd $archivePath

for ((i = 0; i <= $archiveBack; i++)); do
   if [ -w $archiveName.$n.tar.bz2 ] ; then
     m=$(($n + 1))
     mv -f $archiveName.$n.tar.bz2      $archiveName.$m.tar.bz2
   fi
   n=$(($n - 1))
done

# tar and compress log files
cd $archivePath
tar -cf $archiveName.0.tar         $logPath1/$archiveDate.*         $logPath2/$archiveDate.*
bzip2 -9f $archiveName.0.tar
echo "finish archive." ; echo " "


echo "starting delete old log files..."
rm -rf $logPath1/$archiveDate.* $logPath2/$archiveDate.*
echo "finish delete old log files" ; echo " "


# delete old archive log file
echo "starting delete old archive log files."
rm -f $archivePath/$archiveName.$((archiveBack + 1)).tar.bz2


จาก scirpt ดังกล่าวจะมีบรรทัดหนึ่ง คือ archiveDate=`getbefortoday` ตรงนี้จะไปเรียก java app เล็กๆ ที่หาวันย้อนหลังของเครื่องไป 1 วัน โดยมี format yyyy-mm-dd ซึ่งโดยปกติบน linux ผมจะใช้คำสั่ง date แล้วใส่ format เอา แต่บน solaris มันสั่งไม่เหมือนกัน แถมรีบๆ เขียน java app มันซะเลย

ใครมีวิธีดีกว่านี้บอกให้หายโง่หน่อยเถอะครับ

.

mysql กับภาษาไทย อีกรอบ

เนื่องจากครั้งก่อนได้มีการแก้ mysql ให้ใช้ไทยได้ พบว่ามันไม่ค่อยสะดวก เลยหาวิธีใหม่ซึ่งง่ายกว่านั้น สั่ง server ให้ default charset เป็น tis620 ซะเลยง่ายดี

วิธีการแก้ไขก็ง่ายๆ คือ แก้ file /etc/my.cnf ซะ โดยเพิ่มเติมดังนี้

[mysqld]
port=3307
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=tis620
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib
default-character-set=tis620

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=tis620

[mysql]
default-character-set=tis620



ใ นส่วนของสีแดงคือที่เพิ่มเข้าไป จากนั้น restart service ก็ใช้ได้ตามปกติ ในที่นี้ทดลองกับ mysql version 4.1.x และ 5.0.x พบว่าใช้งานได้ดี และเหตุผลที่เพิ่ม [mysql] เข้าไปเนื่องจากเวลาใช้งาน mysql shell จะได้มี default charset เป็น tis620 ด้วย เผื่อทำการ import sql


และในส ่วนของ phpMyAdmin ที่เคยใช้แล้วมีปัญหา ได้ทดลองเอา version phpMyAdmin-2.7.0-pl1 มาใช้งาน และเลือก connection collation เป็น tis620_thai_ci พบว่าใช้งานได้ดีเหมือนกัน

.

วันอังคาร, ธันวาคม 13, 2548

startup scritp vsftpd บน solaris9

จากที่ผ่านมาได้มีการลง vsftpd server บน solaris9 พบว่ามีปัญหาเกิดขึ้นเมื่อ user ทำการ reboot เครื่องแล้ว service vsftpd ไม่ได้ start (ที่มันไม่ start เพราะไม่ได้ใส่ไว้อ่ะดิ)

เลยมาทำการแ ก้ปัญหาให้ user โดยจัดการให้ ตอนแรกว่าจะใส่ใน rc.local ง่ายดี พบว่ามันไม่มีนี่หว่า สุดท้ายพบว่าต้องมาเขียนเองซะแล้ว ใครมีหนทางที่ดีกว่านี้เสนอมาหน่อยเถอะ เกิดมี service ที่ต้องใสใ่เข้าไปอีก มาเขียนตลอดคงไม่ไหว


ขั้นแรกเขียน rc script ขึ้นมาซะ โดยมีรายละเอียดดังนี้ (เอา mysql script บางส่วนมาเป็นแนวทาง)

#!/bin/bash
# Copyright Sudkhet C. 2005
# This file is public domain and comes with NO WARRANTY of any kind

# vsftpd daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S51vsftpd and /etc/rc0.d/K07vsftpsd.
# When this is done the vsftpd server will be started when the machine is
# started and shut down when the systems goes down.
exec_daemon=/usr/sbin/vsftpd
conf_daemon=/etc/vsftpd/vsftpd.conf
pid_file=/var/run/vsftpd.pid

case "$1" in

start)
# Start daemon.
$exec_daemon $conf_daemon &
pid=$!
echo $pid > $pid_file
echo "Start vsftpd Done!."
;;

stop)
# Stop daemon. We use a signal here to avoid having to know the
if test -s "$pid_file"
then
vsftpd_pid=`cat $pid_file`
echo "Killing vsftpd with pid $vsftpd_pid"
kill $vsftpd_pid
# vsftpd should remove the pid_file when it exits, so wait for it.

sleep 1
while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaa ]
do
[ -z "$flags" ] && echo $echo_n "Wait for vsftpd to exit$echo_c" || echo $echo_n ".$echo_c"
flags=a$flags
sleep 1
done

if [ -s $pid_file ]
then echo " gave up waiting!"
elif [ -n "$flags" ]
then echo " done"
fi
# delete lock for RedHat / SuSE
if test -f $pid_file
then
rm -f $pid_file
fi
else
echo "No vsftpd pid file found. Looked for $pid_file."
fi
;;

*)
# usage
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac

  1. จากนั้นก็ save ในชื่อ vsftpd แล้วเอาไปไว้ที่ /etc/init.d/vsftpd
  2. ทำการ change mode และ permission โดยสั่งดังนี้
    # chmod 744 vsftpd
    # chown root:sys vsftpd
  3. จากนั้นให้เพิ่มในส่วนของ startup และ shutdown ที่อยู่ใน rc โดยทำดังนี้
    # cp vsftpd /etc/rc3.d/S51vsftpd
    # cp vsftpd /etc/rc0.d/K17vsftpd
    # chown root:sys /etc/rc3.d/S51vsftpd
    # chown root:sys /etc/rc0.d/K17vsftpd
  4. จากนั้นลอง reboot เครื่องทดสอบพบว่าใช้การได้ดี


มีข้อผิดพลาดตรงไหน กรุณาบอกกล่าวด้วย

วันพฤหัสบดี, พฤศจิกายน 03, 2548

vsftpd บน Solaris9

พอดีได้ไปแก้ระบบของกระทรวงแห่งหนึ่ง ซึ่งได้รับ request จากลูกค้ามาว่าต้องการให้ user ที่ login ใน service ftp ให้เห้นแต่เฉพาะ home ของตัวเองเท่านั้น ซึ่งจากที่เคยทำมา ftp service ของ solaris มันทำไม่ได้มั๊ง เพราะยังไม่เคยเห็น doc เลย เลยหันมาเลือกใช้ของที่คุ้นมือดีกว่า ซึ่งก็คือ vsftpd

ในตอนแรกด้วย ความขี้เกียจลงเลยจะหา binary แต่ดันไม่มีนี่ซิ เลยต้องมานั่ง compile ลงเอง แต่ไม่เป็นไรมาลองกันซักตั้ง เริ่มแรกไป download vsftpd จาก web มาก่อนเลย download ได้ที่นี่ http://vsftpd.beasts.org/

  1. จากนั้นนำ file ที่เรา download มาได้เอาไปไว้ที่ /usr/local/src ซะ ในที่นี่ใช้ version 2.0.3 แตกมันซะ
    $ gzip -dc vsftpd-2.0.3.tar.gz | tar xvf -


  2. ห ลังจากนั้นเข้าไปแก้ "builddefs.h" เพื่อกำหนดว่าเราจะเอา feature อะไรบ้างจากของเดิม #undef VSF_BUILD_SSL ผมแก้เป็น #define VSF_BUILD_SSL โดยจุดประสงค์เผื่อจะใช้ ssl ในการ authen
  3. จ ากนั้นก็สั่ง make ซะ พบ error บางอย่างเกี่ยวกับ ssl lib เลยแก้ปัญหาแบบทื่อๆ เมื่อลงแล้วหาไม่เจอ ทำ link ให้ซะเลย เนื่องจากมันหา lib ssl ไม่เจอ ซึ่งผมลง openssl ไว้ที่ /usr/local/ssl โดยสั่งแบบนี้
    # cd /lib
    # ln -s /usr/local/ssl/lib/libcrypto.so /lib/libcrypto.so
    # ln -s /usr/local/ssl/lib/libssl.so /lib/libssl.so
    # ln -s /usr/local/openssl /usr/include/ssl

  4. จากนั้นลอง make ใหม่ ก็เสร็จเรียบร้อย จากนั้นก็ make install โลด แล้วลอง run โดยสั่ง
    # vsftpd /etc/vsftpd/vsftpd.conf &
    # ftp localhost
    Connected to localhost.
    220 .
    Name (localhost:xxxxx):
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> bye
    221 Goodbye.
    เอาละเรียบร้อยดี ใช้งานได้ล่ะ ทีเหลือก็ config ตามใจชอบ

วันพุธ, ตุลาคม 26, 2548

ปัญหาของภาษาไทยกับ MySQL 5

จากปกติ MySQL version เก่าใช้งานกับภาษาไทยมันจะไม่มีปัญหาอะไรเพราะมีการเก็บ data ที่เป็น ANSI code แต่มา version ใหม่ๆ ได้มีการปรับเปลี่ยนการเก็บ data ที่เปลี่ยนแปลงจากเดิมโดยมีการเก้บเป็น unicode ซึ่งโดยส่วนใหญ่ developer ของเมืองไทย ยังไม่ทราบและมีปัญหาบ่อยๆ กับตรงนี้


จริงๆ มีวิธีแก้ค่อนข้างหลายวิธีเหมือนกันหากไม่สามารถกระทำการใดๆ ต่อตัว server เนื่องจากเราไปเช่าเค้าหรืออะไรก็ตามที่ เราต้องมาแก้ที่ application ของเราเองโดยทำการเพิ่มขั้นตอนในการทำงานเข้าไปซักหน่อย โดยทำดังนี้

ทุกครั้งก่อนที่จะทำการ create connection ให้สั่งดังนี้ (ตัวอย่างเป็น PHP นะ)

$sql = 'SET CHARACTER SET tis620';

mysq_query($sql);

$sql ="SET collation_connection = 'tis620_thai_ci' ";

mysq_query($sql);



ก็ประมาณคร่าวๆ นี่ล่ะ



ปล. ไม่ได้ Update blog ซะนานปัญหาส่วนตัวเยอะเหมือนเดิม เฮ้อ จะพยายาม update บ่อยเท่าที่ทำได้แล้วกัน

วันอังคาร, ตุลาคม 04, 2548

Hackers Port List

เอามาให้ดูเผื่อสงสัยว่าอะไร port ไหน run แล้วแปลกๆ อาจจะเป็นหนึ่งในพวกนี้ก็ได้

ตามไปดูได้ที่นี่ Hackers Port List

วันศุกร์, กันยายน 23, 2548

Wireless Security tips

Wireless Security tips
  • พยายาม update firmware router อยู่เสมอ
  • เปลี่ยนชื่อ defaulf ของ SSID ซะ
  • ให้ใช้ WPA2/802.11i ถ้าสามารถใช้ได้ หรืออย่างน้อยๆ ก็ให้ใช้ WPA จะดีกว่า WEP เพราะมัน overhead น้อยกว่า
  • ทำการสร้างขั้นตอนการอนุญาติสิทธิเข้าถึงตัว wireless LAN โดยใช้ protocol ดังนี้ EAP-TLS, EAP-TTLS, PEAP, และ EAP-SIM
  • Disable SSID Broadcast ซะ
  • ให้ใช้ FreeRADIUS ที่อยู่บน *nix เพื่อให้มีการ authentication ที่มากขึ้น
  • ปิดการทำงานชอง DHCP บน router หรือ access point และทำการ fix range ของ IP ที่ใช้งานซะ
  • ทำการเก็บ log ทุก traffic ทั้งขาเข้าและออกบน network
  • ทำ pen tests against กับ wireless router โดยใช้ hacker tool (อันนี้หาเอง ไม่น่ายากเยอะมาก ที่หาง่ายๆ ก็ AirSnort)
  • ทำการติดตั้งตัวเสาสัญญาณและ routers ให้ห่างจากภายนอกมากเท่าที่เป็นไปได้ หากไม่สามารถทำได้ให้เลือกเสาสัญญาณที่เป็นแบบ bi-directional
  • ใช้ sniffer tools ทำการดักจับ package จากข้างนอกห้องหรือจุดที่ติดตั้ง เพื่อทำการ check สัญญาณว่ามีกระจายออกมาภายนอกมาน้อยแค่ไหน
  • ห้ามทำการ reply เมื่อมีการ MAC authentication
ทำได้ตามนี้ก็ปลอดภัยได้ระดับหนึ่งแล้ว ถ้ามันจะเจาะจากภายในก็ช่วยอะไรไม่ได้ :P

วันอังคาร, สิงหาคม 30, 2548

Reset root password ของ MySQL

บางครั้งเครื่องที่ตัวเองดูแลมีเยอะมาก จนนานๆ ทีถึงจะเข้ามา manage ซักที และบางครั้งถึงกับให้ลืม password ตัวนั้นตัวนี้จนได้ และลืมมาก จนบางทีลืม password root ของ mysql ไปเลย :(

เรามาดูวิธี reset root password ของ mysql กัน ทำดังนี้

  1. เ พิ่ม "skip-grant-tables" ลงใน file my.cnf โดยปกติทั่วไปจะเก็บอยู่ที่ /etc/my.cnf โดยเพิ่มในส่วนของ [mysqld] สำคัญมากห้ามลืม อย่าใส่ผิดที่ ไม่ัอย่างนั้นจะไม่สามารถ reset password ได้

  2. สั่ง restart mysql service ซะ ในที่นี้ ผมใช้ RH base เป็นหลัก ใครใช้อย่างไหน ก็ restart อย่างนั้นล่ะ
    ถ้าเป็น RH สั่งแบบนี้
    # /etc/init.d/mysqld restart
    หรือแบบนี้
    # service mysql restart

  3. ตั้งค่า mysql root password ใหม่ซะ จะสั่งแบบไหนก็ได้ จะเข้า console หรือสั่งผ่าน command line ก็ตามสะดวก

  4. นำ skip-grant-tables ออกจาก file my.cnf ซะ

  5. restart mysql service เป็นอันเสร็จ
จากนั้นให้ลองเข้า mysql ดู ลองสั่งดังนี้

mysql -uroot -p
Enter password: ใส่ pass ที่เพิ่ง reset ซะ
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 151906 to server version: 4.1.10a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


ถ้าเข้าได้แบบด้านบน แสดงว่าเรียบร้อย

.

วันพุธ, สิงหาคม 24, 2548

web จะ design ให้ง่ายต้อง css ซิ

แปลกใจ web ในเมืองไทยไม่ค่อยเห็นใช้ css กันมากมายเท่าไรเหมือนเมืองนอกเล่นประเดประดัง graphic ลงไปอย่างเดียว เวลามีการแก้ไขข้อมูลคราวนี้ก็จุกเลยรื้อทำใหม่

หากจะให้ง่ายมาใช้ css ซิ ผมว่าง่ายต่อการจัด style ของ website ด้วย เพียงแค่เปลี่ยน css อารมณ์และ theme ของ web ก็เปลี่ยนแล้วไม่เชื่อลองดู web นี้ซิ css Zen Garden

ง่ายๆ ลองใส่ตามนี้ แล้วลองสังเกต content ที่อยู่ดู content เดียวกันเปลี่ยนแต่เพียง css

http://www.csszengarden.com/?cssfile=/xxx/xxx.css&page=0

เปลี่ยนตรง xxx เป็นเลขที่ต้องการ เช่น 123, 023 หรืออื่นๆ ทำเป็น Link ให้กดง่ายๆ แล้วกัน เอาที่สวยๆ หน่อย

Sample1
Sample2
Sample3

วันอังคาร, สิงหาคม 23, 2548

Linux Live CD

พอดีมีรุ่นน้องคนหนึ่งมาถามมี linux ตัวไหนที่มี live cd อีก นอกจาก ubuntu เนื่องจากไม่ใจเลยไปค้นๆ ใน google เลยเจอ web ที่รวบรวม List ของ linux ที่มี live cd ไว้ มีรายละเอียดพอสมควร เข้าไปดูๆ ก็แปลกใจเหมือนกัน ว่ามันมี distro ที่เป็น live cd เยอะขนาดนี้เลยหรือ

FrozenTech's LiveCD List

ทำไมคนไทยชอบทำอะไรซ้ำซ้อน

อันนี้โดนมากับตัวเองก็รู้สึกว่าทำไม คนเราต้องทำอะไรที่มันซ้ำซ้อนยุ่งยาก หรืออาจจะติด policy หรือเปล่าหว่า !! ??

เนื่องจากช่วงนี้มีการ implement project หนึ่งให้กับบริษัทที่เป็น mobile operator เจ้าหนึ่ง ซึ่งมันต้องมีการทำ house keeping (งานจัดการด้านหลังบ้าน) โดยจะมีส่วนที่ผมต้องจัดการตัว log file ที่เกิดจาก application ของผมเอง โดยจะต้องมาทำการ log rotate โดยผมต้องมาเขียน application มาจัดการตรงนี้ แล้วมาตั้งผ่าน cron อีกที

ด้วยความที่จับงานด้านนี้มาพอควร แปลกใจกับทำไม ต้องมาเขียน app แยกเพื่อที่จะมาจัดการ log ด้วยหว่า ทำไมถึงไม่ใช้ logrotate กัน ทั้งๆ ที่วิธีการใช้ก็ง่ายแสนจะง่าย

ไว้ว่างๆ จะมาเขียนวิธีใช้ให้แล้วกัน ขอตัวไปทำ app ที่จัดการ log ก่อนล่ะ :-(

วันจันทร์, สิงหาคม 22, 2548

add user โดยใช้ skeleton dir

ไม่รู้จะเอาอะไรมาเขียนดี ขุดของเก่าๆ มาเล่าสู่กันฟังดีกว่าทราบกันหรือไม่ว่า parameter ของคำสั่ง useradd ที่เป็น -k นั้นไว้ทำอะไรบางคนอาจจะไม่เคยสังเกต หรือไม่ได้สนใจ ในบางทีที่เรามีการ add user เพื่องานหนึ่งๆ ซึ่งใน home ของ user ที่สร้างขึ้นมาใหม่นั้น จำเป็นต้องมี default file หรือ directory เพื่อทำงานที่เราต้องการ ยกตัวอย่างง่ายๆ เช่น การ add user เพื่อใช้สำหรับ website เป็นต้น (ขึ้นอยู่กับว่าแต่คนจะวางยังไง)

ยกตัวอย่างเช่นใน skel dir ที่สร้างมีการ define ไว้แบบนี้เป็นต้น

HOME
|
+-- cgi-bin
|
+-- http
|
+-- https
|
+-- logs
|
+-- .bash_profile

หากว่าตัวเครื่องของเราที่มีการทำ website มี web หลายๆ web ที่ต้องแยก user ออกมาแบบนี้ล่ะก็มันคงลำบากที่จะต้องไปสร้าง dir แต่ละอันเพื่อจะให้แต่ล่ะ user ใช่ไหม วิธีที่จะพูดต่อไปนี้มันจะทำให้เราสะดวกขึ้น

  1. ให้สร้างทำการสร้าง skeleton dir ขึ้นมาก่อนโดยให้ structure ของ dir เป็นดังข้างต้นจะไว้ที่ไหนก็ได้ตามสะดวก สมมุติว่า ผมไว้ที่ /usr/local/skel/webskel

  2. ทำการ add user ตามปกติโดยเพิ่ม parameter ลงไปโดยสั่งดังนี้
    [root@xxx root]# useradd -g www -s /bin/bash -k /usr/local/skel/webskel -m -d /somepath/homename username
แค่นี้เองจะได้ dir แบบที่เราทำไว้เป็น skeleton แล้วง่ายๆ ไม่ยุ่งยากอาจจะต้องมาแก้ permission นิดหน่อยเท่านั้นเอง

วันศุกร์, สิงหาคม 19, 2548

เบื่อ default shell ของ sol

เนื่องจากตัวเองถนัด bash มากกว่า ksh ทุกครั้งที่ไปทำเครื่องไหน ต้องไปนั่งแก้มาเป็น bash ทุกครั้ง หลายๆ ครั้งที่ต้อง set เพิ่มเติม และหลายครั้งที่จำไม่ได้ จดไว้กันลืมดีกว่า

file: /etc/profile
PS1='\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]'
PS2='> '
PS4='+ '
IFS=$' \t\n'
MANPATH=/usr/local/share/man:/usr/local/man:$MANPATH

alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
alias ls='ls --color -a'
alias ll='ls -l'



หมายเหตุ
config ใน profile บาง command และ parameter บางอันไม่สามารถใช้ได้หาก coreutil ไม่ใช่ของ gnu ซึ่งสามารถหาได้จาก Sun Freeware ใช้แล้วความสะดวกในการทำงานที่เหมือนบน linux จะกลับมาหา

ปล. อย่าลืมบางครั้ง คำสั่ง su อาจจะก่อเกิดปัญหาได้ให้ทำการ mv เป็นชื่ออื่นซะก่อน

cert นั้นสำคัญไฉน

เมื่อวานกับวันก่อนได้เข้าไปลง server ให้กับราชการหน่วยงานหนึ่ง พอดีไปเจอกับเด็กบริษัทหนึ่งเข้ามาทำเหมือนกันแต่รายนี้เค้าทำ Project กับราชการนี้อยู่

ไอ้เราก็ทำงานของเราตามปกติ (ไปลงเครื่อง sun 2 ตัว) เด็กมันก็เดินไปเดินมา ตอนแรกเราก็นึกว่าอยู่หน่วยงานนั้น อยู่ก็เดินมาถาม ไม่ทราบว่าสอบ cert ของ sun ได้ตัวไหนบ้างแล้ว เราก็งงๆ หันไปมองหน้า พร้อมคิดในใจจะถามตูทำไมวะเนี้ย เลยบอก อ่อไม่ได้สอบซักใบขี้เกียจ เท่านั้นล่ะ บอกทันทีผมสอบ cert มาสองใบแล้ว เนี้ยเดี๋ยวจะไปสอบอีกใบ ทางเด็กก็บอก cert ตัวนั้นดีนะ ไม่ได้ยากสอบง่ายๆ เราก็อืมๆ พยักหน้าตามระเบียบ (คิดในใจว่า เมื่อไรมันจะหยุดพูดซักทีวะ)

คุยไปคุยมาซักพัก ทางนั้นก็เดินไป แล้วก็ไม่มาคุยอีกเลย อืม Ok ไม่ได้คิดไร แต่รู้สึกแปลกๆ กรูไม่สอบ cert แล้วหนักหัวใครฟ่ะ


มาอีกวัน คราวนี้เพื่อนมันเข้ามาด้วย เราก็ทำงานของเราตามปกติเหมือนเมื่อวาน เพราะเหลือเครื่องต้องจัดการอีกหนึ่งเครื่อง เนื่องจากในห้อง server เสียงมันดัง เราก็เลยเอา ipod เสียบหูเปิดเพลงดังๆ แก้รำคาญ ด้วยความไม่รู้ตัวก็เหยียบสายไฟ ของไอ้น้องที่เพิ่งมามันอยู่ แทนที่มันจะสะกิดดีๆ ดันมาตีขา ไม่มีมารยาทเลยเด็กสมัยนี้


มีความรู้สึกว่า ทำไมไอ้คนที่มันสอบ cert มาแล้วจะเป็นงี้ทุกคนเปล่าวะ ถ้าเป็นนี่แย่ๆ แน่ ego เยอะฉิบเป๋ง อีกอย่างผมต้องไปจัดการ server ตัวหนึ่งที่เจ้าเด็กคนนี้ลงไว้ อืมมมดีมากกก config ได้เยี่ยมจริงๆ service เปิดไว้เพียบ ลง webmin อีก แถมลง solaris ยังไงให้ vga ไม่ติด ผมต้องไปจัดการผ่าน console แม่มเหนื่อยตูจริงๆ ถ้าไม่ติดเรื่องเวลาจะลง os ใหม่ล่ะ เซ็งจริงๆ

วันพุธ, กรกฎาคม 27, 2548

laptop 64Bit กำลังจะมา

พอดีได้งบจากบริษัท เอามาซื้อ laptop แทนตัวเดิมที่ใช้อยู่ (เอาตัวเดิมโอนไปให้ลูกน้องใช้แทน) ซึ่งตอนนี้ในไทยมันมีแค่ acer เท่านั้นเอง แต่กำลังลังเลอยู่ว่าเอามาใช้งาน พวก driver ที่มันใช้งานตอนนี้จะมีปัญหาไหมหว่า แต่ราคามันยั่วใจเหลือเกิน

โดยเฉพาะเจ้า Acer Aspire 5020 เนี้ย ดูราคามันดิ ก่ะ spec

Aspire 5021NWLCi 39,900 baht (excluded VAT 7%)
  • AMD Turion™ 64 ML-28 (1.6GHz, 512KB L2 cache)
  • ATI RADEON® XPRESS 200M Chipset
  • Integrated Acer Invilink™
  • 256MB DDR-RAM (Max 2GB)
  • 60GB HDD, Weight 3.07kg.
  • CD-RW/DVD Combo, 6-in-1 card reader
  • 56K Fax/Modem, 10/100/1000Mbps LAN
  • 15.4” WXGA Acer CrystalBrite TFT LCD(1280x800 pixel)/ S-Video Out
  • ATI Mobility Radeon X600 64MB
  • Li-Ion Battery (Avg 3.0 hrs. battery life)
  • IEEE 1394 port, Infrared port
  • Acer SignalUp wireless technology support
  • Linpus Linux BE
  • 1 year warranty (International) / 1 year Insurance


ส่วนไอ้ตัวนี้ชอบสุด
Aspire 5021WLCi 45,900 baht (excluded VAT 7%)
  • Microsoft® Windows® XP Professional
  • AMD Turion™ 64 ML-28 (1.6GHz, 512KB L2 cache)
  • ATI RADEON® XPRESS 200M Chipset
  • Integrated Acer Invilink™
  • 256MB DDR-RAM (Max 2GB)
  • 60GB HDD, Weight 3.07kg.
  • CD-RW/DVD Combo, 6-in-1 card reader
  • 56K Fax/Modem, 10/100/1000Mbps LAN
  • 15.4” WXGA Acer CrystalBrite TFT LCD(1280x800 pixel)/ S-Video Out
  • ATI Mobility Radeon X600 64MB
  • Li-Ion Battery (Avg 3.0 hrs. battery life)
  • IEEE 1394 port, Infrared port
  • Acer SignalUp wireless technology support
  • 1 year warranty (International) / 1 year Insurance


โอยยย อีกอันที่อยากได้ก็ของ samsung X50 เลือกไม่ถูกเลยนะเนี้ย

Reference:

Acer Aspire 5020 Series
Samsung NP-X50

วันอาทิตย์, กรกฎาคม 17, 2548

วันอังคาร, กรกฎาคม 05, 2548

HOWTO CVS server

จากที่ผ่านๆ มาเคยมีคนถามๆ ว่า cvs มันคืออะไร ใช้ยังไงเคยบอกผ่านๆ หลายคนอยู่ แต่วันนี้ เรามาลอง setup cvs server กันดูซักทีดีกว่าไหม ขั้นตอนง่ายๆ ไม่ยุ่งยากมากมาย
  1. download cvsd มาจากที่นี่ http://tiefighter.et.tudelft.nl/~arthur/cvsd/
  2. ทำการ install ทำตามนี้ (ในที่นี่ผมทำการ download และแตก file ใน /usr/local/src)

    $ tar -zxvf cvsd-x.x.x.tar.gz
    $ cd cvsd-x-x-x
    $ ./configure --prefix=/usr --with-cvs=/usr/bin/cvs --with-perl=/usr/bin/perl --with-libwrap --sysconfdir=/etc
    $ make
    $ su -
    # make -C /usr/local/src/cvsd-x.x.x install

  3. หลังจากนี้เราจะได้ cvs server มาใช้งานเรียบร้อย แต่ยังไม่เสร็จ เราต้องทำการ build cvsroot ขึ้นมาใช้งานก่อน รวมถึง confgiuration ตัว server ให้เรียบร้อย

    ในที่นี้ ผมแนะนำว่าควรใช้งาน cvs server ผ่าน jailroot ซึ่งแล้วแต่ว่าเราจะ config ว่าให้ไปอยู่ที่ไหน ขึ้นกับความต้องการ และความเหมาะสมของตัวคุณเอง สมมุติว่าผมเอาไปไว้ที่ /export/home/cvs และ repository เป็น /export/home/cvs/Repos สั่งตามต่อไปนี้

    # addgroup cvsd
    # mkdir /export/home/cvs
    # adduser -c "cvs pserver daemon" -s /bin/false -g cvsd -r -d /export/home/cvs cvsd
    # cvs -d /export/home/cvs/Repos init
    # cvsd-buildroot /export/home/cvs
    # cd /export/home/cvs
    # mkdir -p var/lock

  4. คราวนี้เราจะได้ cvsd พร้อมจะใช้งานแล้ว แต่ว่าในบางครั้งการ ทำ buildroot ของ cvs อาจจะไม่เรียบร้อยหรือมีการลงที่ไม่เรียบร้อยควรสั่งเพิ่มดังนี้

    cp /lib/ld-* /export/home/cvs/lib/
    cp /lib/libdl.so.2 /export/home/cvs/lib/

  5. ต่อไปมาจัดการแก้ไขเกี่ยวกับ config ของ cvsd กัน ซึ่ง config ของ cvsd นั้นจะอยู่ที่ /etc/cvsd/cvsd.conf ตามที่เรา compile ไว้แต่แรก
    RootJail /export/home/cvs
    Uid cvsd
    Gid cvsd
    CvsCommand /bin/cvs
    Nice 1
    Umask 027
    PidFile /var/run/cvsd.pid
    MaxConnections 10 << ส่วนนี้อยากตั้งเท่าไรก็ตามใจ แต่ถ้าตั้งเป็น 0 คือ unlimit
    Log /var/log/cvsd.log info << แนะนำควรนำไปใส่เพิ่มใน logrotate service ด้วย
    Repos /Repos
  6. ขั้นต่อมาทำการสร้าง user เพื่อใช้งาน cvs server โดยจะมี file ที่เกี่ยวข้องกับ permission อยู่ 2 ตัวคือ writes และ readers โดยจะความแตกต่างกันคือ หากนำชื่อของ user ไปใส่ใน readers จะทำให้สามารถอ่านได้เพียงอย่างเดียว แต่หากนำไปใส่ใน writers จะสามารถอ่านและเขียนได้

    # cvsd-passwd /export/home/cvs/Respo YOUR_USER_HERE
    # cd /export/home/cvs/Respo/CVSROOT
    # touch readers writers
    # chown cvsd:cvsd readers writers
    # echo "YOUR_USER" > writers

  7. อันดับต่อไปให้ทำการแก้ไข file: /export/home/cvs/Respo/CVSROOT/config ตามนี้
    SystemAuth=no
    LockDir=/var/lock/cvs

    # mkdir -p /export/home/cvs/Repos/var/lock/cvs


  8. แก้ file: /export/home/cvs/Repos/CVSROOT/cvswrappers ดังนี้
    *.jpeg -k 'b'
    *.midi -k 'b'
    *.jpg -k 'b'
    *.bpgr -k 'b'
    *.zip -k 'b'
    *.exe -k 'b'
    *.o -k 'b'
    *.jnp -k 'b'
    *.ram -k 'b'
    *.aiff -k 'b'
    *.xpi -k 'b'
    *.asf -k 'b'
    *.obj -k 'b'
    *.snp -k 'b'
    *.png -k 'b'
    *.mid -k 'b'
    *.eargrp -k 'b'
    *.class -k 'b'
    *.rar -k 'b'
    *.sar -k 'b'
    *.au -k 'b'
    *.rpt -k 'b'
    *.jds -k 'b'
    *.wav -k 'b'
    *.jpe -k 'b'
    *.gif -k 'b'
    *.cab -k 'b'
    *.dcu -k 'b'
    *.war -k 'b'
    *.ejbgrp -k 'b'
    *.ejbgrpx -k 'b'
    *.library -k 'b'
    *.jar -k 'b'
    *.jpgr -k 'b'
    *.rmf -k 'b'
    *.asx -k 'b'
    *.ear -k 'b'
    *.bin -k 'b'

  9. ต่อมาให้ทำการ change permission/ownership ให้เป็น cvsd ซะ และทำการ start service อาจจะรวมถึงต้องการ add ลงใน runlevel ก็แล้วแต่

    # cd /export/home
    # chown -R cvsd:cvsd cvs
    # chmod -R 775 cvs/var
    # /etc/init.d/cvsd start

    Add to runlevel
    # redhat distro base
    chkconfig cvsd on

    # gentoo distro base
    rc-update add cvsd default

    ส่วนที่เหลือ เช่น freeBSD ทำยังไงผมไม่แน่ใจ ต้องลองหาดูแล้วกัน


Reference:
http://gentoo-wiki.com/HOWTO_CVS_Server
http://blogs.application-servers.com/roller/page/undx
http://powell.chem.ox.ac.uk:1974/wiki/index.php/CVS_setup

วันจันทร์, กรกฎาคม 04, 2548

WebMail extension of Mozilla ThunderBird

จากที่เคยมีเพื่อนๆ ถามไถ่ ว่าจะทำอย่างไรได้บ้างหากถ้าใช้งาน ThunderBird แล้วอยากให้มันสามารถ check webmail ได้ด้วย จะทำอย่างไรได้บ้าง พอดีไปเจอ project ที่สามารถให้ตัว ThunderBird สามารถ check webmail ได้ ซึ่งเท่าที่ดูมา (ยังไม่ได้ลองลง) มี feature ดังนี้



ExtensionDomains Supported
  Hotmail-0-4-2hotmail.com
hotmail.co.uk
hotmail.it
hotmail.fr
msn.com
  Yahoo-0-2-14yahoo.com
yahoo.com.cn
yahoo.co.uk
yahoo.it
yahoo.es
yahoo.fr
yahoo.ca
  Lycos-0-1-3Lycos.co.uk
Lycos.it
Lycos.es
  MailDotCom-0-1-0mail.com
email.com


ในส่วนของหน้าตาก็เป็นอย่างในรูป (click to enlarge)

click to enlarge

click to enlarge



ใครสนใจก็ลองไปแวะชมเอามาลองได้ แถมยังเอามาพัฒนาต่อได้เลยมี SDK ด้วยอีกต่างหาก

วันเสาร์, กรกฎาคม 02, 2548

ท่านที่ดูแล mail server มา implement ตัวนี้กันเถอะ

มันคือ SPF ย่อมาจากคำว่า Sender Policy Framework มันจะช่วยเหลือในการป้องกัน mail จำพวก phishing จาก mail server หรือ domain ที่เราทำการดูแลอยู่รายละเอียดสามารถหาอ่านได้จาก http://spf.pobox.com/

ตอนนี้ก็มีหลายองค์กร Implement เจ้าตัวนี้กันแล้วซึ่ง mail client บางตัวก็มีการ support แล้ว เช่น thunderbird ที่ผมใช้อยู่ เพียงแต่ต้องลง extension เพิ่มเติม คือ http://taubz.for.net/code/spf/

ส่วนบน M$ Platform ผมไม่ทราบอ่ะ สงสัยต้องรอต่อไป ลูกเมียน้อยก็งี้ละ อิอิ

เอาคร่าวๆ เกี่ยวกับ phishing แล้วกัน มันก็คือการปลอมแปลงตัว e-mail เพื่อทำการล่อลวงว่ามาจากที่ๆ น่าเชื่อถือ เพื่อจุดประสงค์บางอย่าง เช่น ข้อมูลทางด้านการเงิน หรืออื่นๆ โดยจริงๆ แล้ว e-mail ที่มานั้นไม่ได้ มาจากที่ นั้นๆ จริงๆ

ยกตัวอย่างที่เกิดขึ้น เช่น การปลอมแปลง e-mail ส่งจาก citibank แล้วมห้ลูกค้ากรอกข้อมูลส่วนตัวเกี่ยวกับบัตรเครดิตของตน

ซึ่งไอ้เจ้า SPF จะช่วย protect ในส่วนของตรงนี้ เมื่อเรานำไป implement กับ mail server ของเรา ผมยกตัวอย่างง่ายๆ เช่น dell.com และ citibank.com สองที่นี้มีการ implement SPF เพื่อใช้งานแล้ว


การ implement SPF ทำได้ทั้งสอง ฝั่งคือ server และ client เราสามารถตรวจสอบอย่างง่ายๆ หากทาง server มีการ implemet SPF สามารถทำได้โดย check TXT record ของ domain นั้นๆ

วิธีการดูคร่าวๆ ว่า domain ไหนมีการ implement SPF บ้างทำได้โดยใช้ Tool ที่ใช้ตรวจสอบ DNS นั้นละ ถ้าเป็นบน windows ก็จะเป็น nslookup ส่วนบน *nix จะเป็น dig สั่งง่ายๆ ดังนี้ (ยกตัวอย่าง domain citibank.com และ dell.com)

[zendz@mobile zendz]$ dig dell.com txt

-- CUT --

;; ANSWER SECTION:
dell.com. 600 IN TXT "v=spf1 ip4:143.166.85.193/26 ip4:143.166.148.193/26 ip4:211.130.110.88 ip4:211.130.110.21 ip4:211.130.110.22 ip4:203.127.132.6 ~all"

-- CUT --

[zendz@mobile zendz]$ dig citibank.com txt

-- CUT --

citibank.com. 3600 IN TXT "v=spf1 a:mail.citigroup.com ip4:192.193.195.0/24 ip4:192.193.210.0/24 ~all"

-- CUT --


โปรดสังเกตข้อมูลในส่วนของ TXT Record ว่ามีการเพิ่มเติม v=spf1 bla bla bla ลงไป ส่วนของบน windows ลองสั่งดูเอาไม่น่าจะยากเกินความสามารถ ส่วนวิธีการ implement ว่าทำอย่างไร จะเขียนเพิ่มเติมคราวหน้าหากมีเวลา


Reference:
http://taubz.for.net/code/spf/
http://spf.pobox.com/
http://antispam.yahoo.com/domainkeys
http://en.wikipedia.org/wiki/Phishing
http://www.thaicert.nectec.or.th/paper/basic/phishing.php

วันพฤหัสบดี, มิถุนายน 30, 2548

Calendar and SunBird project of Mozilla

เหมือนเดิม เปิดไป เปิดมาเจอ Project ค่อนข้างน่าสนใจของ mozilla.org มันคือ Calendar project ส่วน Calendar และ SunBird แตกต่างกันตรงที่ Calendar เป็น extension ของ mozilla, firefox และ ThunderBird ส่วน SunBird นั้น สามารถ run ได้ด้วยตัวเอง

ส่วนใครชอบแบบไหนลองไปเลือกเ อา เท่าที่ผมลองภาษาไทยใช้งานได้ดี ปกติแต่ยังไม่ได้ทำสอบ ส่วนของการตัดคำว่าเรียบร้อยหรือไม่ แต่คิดว่าถ้าเป็น extension ที่นำไปลงกับ Thai Firefox Community Edition น่าจะใช้งานได้เลยไม่น่าจะมีปัญหาอะไร ส่วน url ของ project นี้ ไปตาม link นี้ได้เลย

Nvu complete แล้ว โว๊วว

บังเอิญไปอ่านๆ เปิดๆ ดู news ของ mozilla.org พบว่า Nvu นั้น development ออกมาเป็น released 1.0 แล้ว ใครยังไม่รู้จัก จะบอกคร่าวๆ ให้ฟังไอ้เจ้า Nvu นี่คือ Web Authoring System สำหรับ Linux Desktop โดยเฉพาะ

เอาง่ายๆ มันคือ software ที่เหมือนๆ FrontPage หรือ Dreamweaver นั้นล่ะ เพียงแต่ว่า ที่ผ่านมายังไม่มี Web Authoring tool ที่ดีพอเทียบเคียงได้ แต่ผมลุ้นมันอยู่มานานแล้วไอ้เจ้า Nvu project นี่ล่ะ ใครยังไม่ทราบหรือ อยากแวะชมล่ะก็ นี่เลย Click เบาๆ ตรงนี้

ส่วนตัว screenshot ตอนนี้ยังไม่มีออกมาให้เห็นมาก ตอนนี้มีแค่ 2 อัน ชมได้ที่นี่

กว่าจะว่าง คงอีกซักพัก

ช่วงนี้ งานเยอะมากมายทำให้ ไม่ได้มีการ update blog ซักเท่าไร ยังไงเร็วๆ นี้จะเขียนบทความเกี่ยวกับ sendmail server ซักหน่อยดีกว่า เอาคร่าวๆ ก็คงเป็นทำยังไง ให้ smtp server ของเราที่ใช้ sendmail ให้ปลอดภัยต่อการถูกส่งเข้า RBL โดยผู้ที่มาแอบใช้ server เราเพื่อการส่ง spam mail ไว้ค่อยเจอกันคราวหน้าล่ะ

วันอาทิตย์, มิถุนายน 19, 2548

โอยยร้านแม่งอยู่ไหนวะ, เงินไม่พอทำไงดี -__-"

กรำ เมื่อกี้ net ตัดพิมพ์ใหม่เลยตู กด save draft ไม่ทันอีก

เนื่องจากวันที่ทางบ. นัดประชุมเรื่องความคืบหน้าของงานว่าไปถึงไหนอะไรยังไงกัน ก็ตกลงกันว่าเจอกันที่ ร้านกาแฟของเพื่อนคนหนึ่งที่เปิดใหม่ แถวๆ ซ.อารีย์ ด้วยความที่เรากลัวการไปสายเป็นอย่างยิ่ง ประกอบกับอยากนั่งเล่นสบายๆ ไปเรื่อยๆ เพราะจริงๆ นัดประชุมบ่ายโมงครึ่ง ตูไปถึง ซ.อารีย์ประมาณ 10 โมง (รีบไปจังเน๊อะ)

ด้วยความที่ไม่รู้จักว่าอยู่แถวไหน ก็เลยโทรหาเพื่อนๆ เห้ยๆ ร้านอยู่แถวไหนอ่ะ เห็นไอ้... มันบอกว่าร้านอยู่ ฝั่งซ.อารีย์นะ ตรงข้ามตลาดมารวย แกร๊กวางหู อืมม... ตลาดมารวยตรงไหนวะ ไม่ได้มาซะนาน มองไปมองมา อ้าวตึกตรงข้าม ซ.อารีย์ฯ นี่หว่า มารวย มาเก็ต อืมมม ดีมากเพื่อนกรู ตลาดมารวย ไอ้เราก็นึกว่าตลาด ก็เคยเทียวไปเทียวมาบ่อยๆ ยังนึกไม่ออกว่าอยู่ตรงไหน เพิ่งจะเข้าใจนี่ละ ไอ้ตึกนี้นี่เอง

จากนั้นก็เดินๆ หาตามคำบอกเล่า (อยู่งั่นตรงข้ามตลาดมารวยนะ ร้านมันชื่อฝรั่งหน่อย) ไอ้เราก็เดินเข้าไปดิ notebook หนึ่งตัวบวกก่ะ เป้สะพายข้างแม้มันจะไม่หนักมาก แต่มันแกะกะพอควร เดินหาเข้าไป เอ... ร้านไนท์ตี้ โฟว์ ก็ไม่น่าจะใช่ เอกชัยเบเกรี่ ก็ไม่น่าใช่ ชื่อมันไทยมาก -_-" เดินมองๆ อีก cake & berkery นี่ก็ฝรั่งนะ แต่ร้านเก่าๆ ไม่น่าจะใช่อีก

เอ๊ะหรือร้านมันอยู่ใน ซ.อารีย์ฯ วะ พยายามโทรหาไอ้เจ้าของร้านตัวดีแล้ว เจือกไม่รับสาย โทรไปเป็นสิบรอบ (ตอนเจอถามได้ความว่า เอาโทรศัพท์วางไว้ข้าวล่างตัวเองอยู่ข้างบนชั้นสอง เจริญล่ะ) ด้วยความขี้เกียจเดินประกอบกับอยากหาไรทานรองท้อง เอาวะกูเห็นร้านกาแฟ ตรงตึกมารวยนั้นล่ะ น่านั่งสุดล่ะ ข้ามเลยครับทั่น นั่งรอต่อ net สบายใจ เจอพี่ GaMeLa คุยเรื่องงานนิดหน่อยประกอบกับ นัดกันไปแม้ง CSLox เรื่องแม่ง CAP Bandwidth ไร้เหตุผล และไม่ได้แจ้งห่าไรเลย ก่ะว่านัดไปจวกมันทีเดียว 4-5 บ. พร้อมกัน ถ้ามันยึกยักย้ายแม่งออกหมดเลยดีกว่า รวมๆ กันแล้ว 4 ตู้ เอาวะมันไม่อยากได้เงินก็ตามใจ อุตส่าห์เสียแพงกว่าเจ้าอื่นอีกนะเนี้ย คิดดูแล้วกัน มี server อีกตัวอยู่อีก ISP ทางนั้น local วิ่ง 100Mbps เต็มๆ ไม่ได้ cap ไอ้เรา download software ที่ทำไว้มาลงที่เครื่องลูกค้าที่อยู่ lox มันวิ่ง 40KB แม่เจ้าอยากจะบ้า รอไปดิกว่าจะ setup & configuation เสร็จ อีกตอนก็ตั้ง update pkg software ไว้ สรุปว่าแม่ง update ไม่สำเร็จเพราะมันวิ่งๆ แล้วค้างแล้ว timeout ไปซะงั้น ต้องมาทำ manual งี้ก้ไม่ไหวอ่ะ เด๊ววันจันทร์ตูจะไปแฉ่ง ไปเรื่องอื่นดีก่า เครียดว่ะ

หลังจากประชุมบ. เสร็จไปเดิน CU book เนื่องจากน้องไปเดินหาหนังสืออ่านก่อนอยู่แล้ว อืมม ได้โอกาศเห็นว่ากันว่ามีหนังสือเล่มที่เรากำลังอยากได้อยู่ที่ Cu Book พอดีไปเดิน เจอจริงด้วยเฟ้ย โอ๊วแม่เจ้าขายเป็น pack ประหยัดโครต ถ้าซื้อแยกเล่ม ตกเกือบ 3000 กว่า แต่มันขาย pack ละ 1500 เดินๆ ไปดูอีกแถว เอาแล้วเฟ้ย เสือกเจอหนังสือที่ต้องใช้งานด้วยอ่ะดิ เอาไงดีวะเนี้ย เงินไม่พอ ถามทางนั้นว่า เอ่อพี่เอาบัตรไอ้เนี้ย ใช้ได้ป่ะ เจือกใช้ไม่ได้อีกเวรเลย T-T

เลยตัดใจ ไอ้ pack นั้นฝากไว้ก่อนเถอะ เด๊วจะไปเอา สาธุ อย่าเพิ่งมีคนซื้อไปเล้ยยย เหลือสอง pack เองอ่ะ สรุปวันนี้ได้หนังสือ


Kowledge > Solutions > Mastery Tomcat 5 Unleashed
Lajos Moczar เป็นคนแต่ง อ่านๆ ก็ ok อ่ะ เพราะใน jakarta.apache.org ไปอ่านแล้ว doc บางอันไม่ละเอียด อ่านแล้วงง ต้องไปนั่งแกะ source มาดูประกอบอีก เสียเวลาทำมาหากินซื้อไปเลยดีกว่า

จะว่าไปแล้วไปร้านหนังสือทีไร เงินมันหมดทุกทีซิน่า เฮ้อ.. กิเลสบังเกิด จะมีใครเหมือนผมบ้างเนี้ย จริงๆ บางคนก็ว่าหาอ่านใน Net ก็ได้ มันก็ได้จริงอยู่ แต่บางอันมันหาไม่ได้เฟ้ย..

วันพฤหัสบดี, มิถุนายน 16, 2548

Build tomcat on solaris8

เนื่องจากมีงานตัวหนึ่งจำเป็นต้องทำ clone system กับ project นั้นจึงจำเป็นต้องมานั่งทำให้เหมือนที่สุดเท่าที่ทำได้ ซึ่งโดยปกติแล้วตัวเอง จะไม่ค่อยอยากจะ compile source เท่าไรนัก คราวนี้ถึงคราวจริงๆ เพราะลองไปดูจาก binary ของ jakarta project ของตัว solaris เอง มันค่อยข้างจะเก่าๆ เลยไม่ค่อยมั่นใจเท่าไร เลยทำเองเลยดีกว่า

อันดับแรกลอง check จาก system ที่ตัวเองดูแลอยู่ ก็ Ok ในระดับหนึ่งเพราะมีการ update พวก lib ไปบ้างส่วนแล้ว

ข้อมูลคร่าวๆ ของ system ที่ทำการ build

  • OS: SunOS xxxxx 5.8 Generic_117350-19 sun4u sparc SUNW,UltraAX-i2 Solaris

  • J2SE version 1.5.0_03-b07 64 Bit

เริ่มทำกันเลยดีกว่า
  1. อันดับแรก install ant เพื่อไว้ build ตัว jakarta-tomcat สามารถหา download ได้ที่ Apache Ant download binary มาใช้งานเพื่อความสะดวก

    $ wget http://apache.secsup.org/dist/ant/binaries/apache-ant-1.6.5-bin.tar.bz2
    $ tar -jxvf apache-ant-1.6.5-bin.tar.bz2
    $ su -
    # mv apache-ant-1.6.5 /usr/share/java/
    # ln -s apache-ant-1.6.5 ant

  2. ทำการแก้ไข file /etc/profile ตามนี้

    ANT_HOME="/export/home/ant"
    PATH="$PATH:$ANT_HOME/bin"
    export PATH ANT_HOME

    จากนั้น load profile ที่แก้ไขเมื่อกี้ เพื่อให้ effective โดยสั่ง
    $ source /etc/profile

  3. download tomcat source มา compile เนื่องจาก version ที่เป็น binary นั้นค่อนข้างจะเก่าเลยเอามา build ใหม่ซะเลย

    $ wget http://www.axint.net/apache/jakarta/tomcat-5/v5.5.9/src/jakarta-tomcat-5.5.9-src.tar.gz
    $ tar -jxvf jakarta-tomcat-5.5.9-src.tar.gz
    $ cd jakarta-tomcat-5.5.9-src
    $ vi build.properties

    -- build.properties --
    # ----- Sourceforge files base location -----
    base-sf.loc=http://jaist.dl.sourceforge.net/sourceforge

    # อาจจะเป็น mirror ตัวอื่นก็ได้ตามสะดวก

    $ su -
    # ant build

    หลังจากนี้ ant จำทำงานตาม build script ที่ตั้งไว้โดยจะไป download libraly ที่มันต้องการมาไว้ที่ /usr/share/java และหลังจากที่ ant ทำการ build เสร็จเรียบร้อยแล้ว มาขั้นตอนต่อไปเลย
  4. ขั้นตอนต่อไปเราจะทำการ build tomcat ให้เรียบร้อยกันซะที โดยสั่งตามนี้
    # cd jakarta-tomcat-5
    # cp build.properties.default build.properties

    จากนั้น แก้ไขตามสะดวก แต่จะแก้หรือไม่แก้ก็ได้ หากไม่แก้ ไม่จำเป็นต้อง copy build.properties.default เป็น build.properties แต่ผมแก้ตรงส่วนของ compile.optimize=on ซะ

    จากนั้น เราจะทำการ build tomcat กันอีกครั้ง เนื่องจากครั้งแรกที่เราสั่ง ant ที่ Root ของ jakarta.source นั้นเป็นการเตรียม libraly ที่จำเป็นสำหรับการ build ไม่พูดพล่ามทำเพลง มาทำต่อเลยดีกว่า สั่งตามนี้

    # ant build

    จะมีข้อความขึ้นมามากมาย หลังจาก build เสร็จเรียบร้อยเราจะได้ directory ขึ้นมา 1 อันชื่อว่า build จริงๆ เราสามารถ run tomcat จาก directory build ได้เลยก็ได้ เรามาลองกัน

    # cd build/bin
    # ./startup.sh

    จากนั้น ลอง check จากคำสั่งต่างๆ ไม่ว่าจะเป็น netstat, lsof, ps หรืออะไรก็ได้ตามสะดวก แล้วลอง telnet หรือเข้าด้วย browser ดูว่าได้หรือไม่ ผมสรุปเอาว่าได้แล้วกัน
  5. ต่อมา เราจะทำการ build distribution ซะ ให้มันเรียบร้อยหน่อย เหมือน binary ที่เค้าทำๆ กันทั่วไปนั้นล่ะ สั่งแบบนี้เลย (ปล. กรุณา cd กลับมาที่ $jakarta.source/jakarta-tomcat-5)

    ant dist

    พอเสร็จ เราก็จะได้ directory มาเพิ่มอีกหนึ่งคือ dist จากนั้นให้เราทำการแก้ /etc/profile เพิ่มเติมคือ ให้เพิ่มค่า CATALINA_HOME="/usr/local/tomcat" และให้ สั่ง export ด้วย ดังตัวอย่าง (ไม่จำเป็นต้องเลียนแบบเหมือนทุกอย่าง ให้เอาไปประยุกต์เอาเอง)

    JAVA_HOME="/usr/java"
    ANT_HOME="/export/home/ant"
    CATALINA_HOME="/usr/local/tomcat"

    PATH="$PATH:$JAVA_HOME/bin:$ANT_HOME/bin"

    export PATH JAVA_HOME ANT_HOME CATALINA_HOME


    ให้ทำการ copy directory นี้ไปที่ /usr/local/tomcat

    # cp dist /usr/local/tomcat
    # cd /usr/local/tomcat/bin
    # rm -f *.bat
    # ./version.sh
    Using CATALINA_BASE: /usr/local/tomcat
    Using CATALINA_HOME: /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME: /usr/java
    Server version: Apache Tomcat/5.5
    Server built: Jun 17 2005 09:43:23
    Server number: 5.5.9.0
    OS Name: SunOS
    OS Version: 5.8
    Architecture: sparc
    JVM Version: 1.5.0_03-b07
    JVM Vendor: Sun Microsystems Inc.

    ควรจะได้ ดังรูป จากนั้นเราก็สามารถใช้งาน tomcat ที่เรา build เองได้แล้ว


หมายเหตุ
หากไม่ได้มีการแก้ไขในส่วนของ build.properties มากนัก เราจะได้ tomcat มาค่อยข้างจะครบในเรื่องของ webapps และอื่นๆ ซึงไม่ได้มีการแยกส่วนของ package ออกมาให้เห็นได้อย่างชัดเจน


หากมีข้อเสนอแนะประการใดโปรดติเตียน

วันอังคาร, มิถุนายน 14, 2548

และแล้วก็ได้เวลา post ครั้งแรก

จากที่เคยขอ blog จาก blogspot ไว้นานมากกกก... แต่เนื่องจากความขี้เกียจประกอบด้วย ไม่รู้ว่าจะเขียนอะไร แต่ขอไว้ไม่ทำอะไรเลยมันก็จะกระไรอยู่ เห็นของคนอื่นๆ มาก็มาก ทำซักหน่อยบ้างก็ดี

วันจันทร์, มีนาคม 14, 2548

update pkg software บน RH AS, ในแบบฉบับของผม

เนื่องจากเมื่อก่อน ตัว server ของผมมีกลุ่มหนึ่งซึ่งใช้ RedHat AS 3 เวลามี security patch or fix ต่างๆ ตัวผมเองต้องทำการเอา src rpm มา compile เอง ซึ่งในบางครั้งก็ยุ่งมากจนไม่มีเวลาทำ และอีกอย่างในบางครั้งทำให้ server ที่เป็นตัว compile src pkg เต็มไปด้วย devel pkg ทำให้รกและเกะกะ เครื่องเป็นอย่างมากทั้งๆ ที่ไม่ได้ใช้ประโยชน์อย่างอื่นเลย


จนกระทั่งวันหนึ่งในบอร์ดของเรานี่ล่ะมีคนมาแนะนำ Linux Distro อีกตัวมา ทำให้ผมพบทางสว่างในแบบขี้เกียจๆ ของผม -"- ซึ่ง Linux Distro ที่เป็นประเด็นที่พูดถึงเมื่อกี้ มันก็คือ CentOS นั้นเอง


ซึ่งบางคนอาจจะทราบหรือบางคนไม่ทราบเลย เจ้า CentOS มันคือไรวะ ไม่เห็นจะรู้จัก มันก็คือ Linux Distro ที่นำเจ้า src rpm ของทาง RedHat AS มาทำการ compile และ build pkg รวมถึง reconfiguration บางส่วนเป็น distro ตัวใหม่ ถามว่าผิดไหม ไม่ผิดครับ เนื่องจากตัว licensed GPL กำหนดไว้ว่าหากมีการแก้ไขหรือเปลี่ยนแปลง sourcecode สู่เจ้าต้องนำ code ตัวนั้นๆ ออก released ออกสู่สาธารณะด้วย ดังนั้นเราจึงสามารถใช้ RedHat AS ในอีก version ได้ ^-^


แต่เนื่องด้วย เหตุผลบางประการตัวผมต้องใช้ RedHat AS เป็น base อยู่เนื่องจาก software หลายๆ ตัวที่ใช้งานอยู่บางครั้งมันอ้างอิง RedHat distro จึงไม่อาจจะเสี่ยงเปลี่ยนไปใช้ CentOS ได้ แล้วมันจะมีคำถามว่า แล้วจะทำอย่างไรดีล่ะ ที่จะสบายเหมือนแต่ก่อน โดยที่ไม่ต้องมานั่ง compile src pkg อ่ะ ง่ายๆ อุอุ เอา CentOS rpm pkg มาใช้ซะเลย กร๊ากกกกก... (บางตัวอาจจะไม่ compattible กรุณาแน่ใจในการกระทำของตนเอง หากเกิดความผิดพลาดต่อ server คุณเอง ผมไม่รับผิดชอบด้วยนะเออ :P )


เรามาเริ่มวิธีการทำกันเถอะ หลังจากพล่ามมานาน คอเริ่มแห้งแหละ การทำครั้งนี้ทำบน RedHat AS 4 เด้อ:

ครั้งแรกให้เราทำการ import GPG key ของ CentOS เข้ามาในระบบก่อนเพื่อ verify pkg ว่าถูกต้องไม่มีอะไรแอบแฝง ทำดังนี้

[root@wap ~]# rpm --import hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/RPM-GPG-KEY-centos4



เท่านี้การ Import GPG ก็เสร็จเรียบร้อยแล้ว

หลังจากนั้นให้นำระบบ Management pkg ของ CentOS มาใช้ซะ มันก็คือ yum นั้นเอง จัดการ download มันมาแล้วลงซะ จะใช้ pkg เกี่ยวข้อง 2 ตัว ทำตามนี้ (ในที่นี้ผมใช้ mirror site ของไต้หวัน)

[root@wap ~]# wget hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/yum-2.2.0-1.centos4.2.noarch.rpm
--11:57:53-- hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/yum-2.2.0-1.centos4.2.noarch.rpm
=> `yum-2.2.0-1.centos4.2.noarch.rpm'
Resolving ftp2.tnc.edu.tw... 163.26.200.6
Connecting to ftp2.tnc.edu.tw[163.26.200.6]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 388,365 [audio/x-pn-realaudio-plugin]

100%[================================================>] 388,365 31.62K/s ETA 00:00

11:58:12 (20.12 KB/s) - `yum-2.2.0-1.centos4.2.noarch.rpm' saved [388,365/388,365]
[root@wap ~]# wget hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/centos-yumconf-4-4.1.noarch.rpm
--12:13:38-- hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/centos-yumconf-4-4.1.noarch.rpm
=> `centos-yumconf-4-4.1.noarch.rpm'
Resolving ftp2.tnc.edu.tw... 163.26.200.6
Connecting to ftp2.tnc.edu.tw[163.26.200.6]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3,008 [audio/x-pn-realaudio-plugin]

100%[================================================>] 3,008 --.--K/s

12:13:41 (558.89 KB/s) - `centos-yumconf-4-4.1.noarch.rpm' saved [3,008/3,008]



คราวนี้เราก็ได้มันมาแล้วล่ะ จัดการลงต่อเลย ไม่รอช้า


[root@wap ~]# rpm -ivh centos-yumconf-4-4.1.noarch.rpm yum-2.2.0-1.centos4.2.noarch.rpm
Preparing... ########################################### [100%]
1:centos-yumconf ########################################### [ 50%]
2:yum ########################################### [100%]


ลอง run ดูซักนิดว่าคำสั่งทำงานได้สมบูรณ์หรือไม่

[root@wap ~]# yum

Usage: yum [options] <>

Options:
-c [config file] - specify the config file to use
-e [error level] - set the error logging level
-d [debug level] - set the debugging level
-y - answer yes to all questions
-R [time in minutes] - set the max amount of time to randomly run in
-C run from cache only - do not update the cache
--installroot=[path] - set the install root (default '/')
--version - output the version of yum
--rss-filename=[path/filename] - set the filename to generate rss to
--exclude=package to exclude
--disablerepo=repository id to disable (overrides config file)
--enablerepo=repository id to enable (overrides config file)

-h, --help - this screen


ok เรียบร้อยแล้ว มาม่ะ มาต่อกันต่อไปเลย หากเราสั่ง run yum แบบที่ทำการ upgrade pkg เหมือนใน fedora หรืออะไรก็ตามที่ใช้ิคำสั่ง yum เหมือนกัน มันจะ error นะ มันต้องแก้อีก เราไปแก้ config กันเถอะ

# จัดการเก็บ config เก่าซะก่อน เผื่อมีปัญหาจะได้เอากลับมาแก้ทีหลังได้

[root@wap ~]# cd /etc/yum.repos.d/
[root@wap yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.new; bzip2 -9v CentOS-Base.repo; mv CentOS-Base.repo.new CentOS-Base.repo
CentOS-Base.repo: 2.827:1, 2.830 bits/byte, 64.63% saved, 1145 in, 405 out.


จัดการแก้ file CentOS-Base.repo โดยใช้ vim ทำตามดังนี้

  1. [root@wap yum.repos.d]# vim CentOS-Base.repo
  2. พิมพ์ เครื่องหมาย :
  3. ใส่ข้อความตามนี้ %s/\$releasever/4.0/gi มันจะทำการ search และ replace ข้อความที่เป็น $releasever ทั้งหมด โดยแทนที่ด้วย 4.0
  4. จากนั้น save มันซะ โดยสั่ง :wq!

เราจะได้ file ที่ทำการแก้ไข repo มาเรียบร้อย สั่ง update ซะเลย

[root@wap ~]# yum check-update
Setting up Update Process
Setting up Repos
update 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Reading repository metadata in from local files
primary.xml.gz 100% |=========================| 9.0 kB 00:02
MD Read : ################################################## 21/21
update : ################################################## 21/21
primary.xml.gz 100% |=========================| 532 kB 00:23
MD Read : ################################################## 1405/1405
base : ################################################## 1404/1404
primary.xml.gz 100% |=========================| 991 B 00:00
MD Read : ################################################## 2/2
addons : ################################################## 2/2
primary.xml.gz 100% |=========================| 6.4 kB 00:00
MD Read : ################################################## 24/24
extras : ################################################## 24/24
Resolving Dependencies
...
...


จากนั้นจะทำอะไร ก็ทำเหมือน yum ทั่วๆ ไปนั้นล่ะ ระวังอย่างหนึ่งครับ package ที่มีชื่อ centos อยู่ด้วย อย่าทำการ update เพราะอาจจะมีการแก้ไขตำแหน่งที่อยู่ของ file บางตัวแล้วอาจจะทำให้ RedHat AS ของคุณมีปัญหาได้


จบ ปล. ใครมีวิธีดีๆ มา post ให้ทราบบ้างก็ดีครับ :-)

.